Add buttons to toggle batch 'complete' flag when viewing batch
This commit is contained in:
		
							parent
							
								
									a4095b30f7
								
							
						
					
					
						commit
						218ac221e5
					
				
					 2 changed files with 50 additions and 0 deletions
				
			
		| 
						 | 
					@ -36,6 +36,10 @@
 | 
				
			||||||
        margin-top: 10px;
 | 
					        margin-top: 10px;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .complete form {
 | 
				
			||||||
 | 
					        display: inline;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
  </style>
 | 
					  </style>
 | 
				
			||||||
</%def>
 | 
					</%def>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,6 +51,7 @@ from tailbone import forms, grids
 | 
				
			||||||
from tailbone.db import Session
 | 
					from tailbone.db import Session
 | 
				
			||||||
from tailbone.views import MasterView
 | 
					from tailbone.views import MasterView
 | 
				
			||||||
from tailbone.progress import SessionProgress
 | 
					from tailbone.progress import SessionProgress
 | 
				
			||||||
 | 
					from tailbone.util import csrf_token
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
log = logging.getLogger(__name__)
 | 
					log = logging.getLogger(__name__)
 | 
				
			||||||
| 
						 | 
					@ -240,6 +241,9 @@ class BatchMasterView(MasterView):
 | 
				
			||||||
        f.set_renderer('status_code', self.make_status_renderer(self.model_class.STATUS))
 | 
					        f.set_renderer('status_code', self.make_status_renderer(self.model_class.STATUS))
 | 
				
			||||||
        f.set_label('status_code', "Status")
 | 
					        f.set_label('status_code', "Status")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # complete
 | 
				
			||||||
 | 
					        f.set_renderer('complete', self.render_complete)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # executed
 | 
					        # executed
 | 
				
			||||||
        f.set_readonly('executed')
 | 
					        f.set_readonly('executed')
 | 
				
			||||||
        f.set_readonly('executed_by')
 | 
					        f.set_readonly('executed_by')
 | 
				
			||||||
| 
						 | 
					@ -281,6 +285,30 @@ class BatchMasterView(MasterView):
 | 
				
			||||||
            return status_code_text
 | 
					            return status_code_text
 | 
				
			||||||
        return render_status
 | 
					        return render_status
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def render_complete(self, batch, field):
 | 
				
			||||||
 | 
					        content = [HTML.literal("Yes" if batch.complete else "No")]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if not batch.executed:
 | 
				
			||||||
 | 
					            if self.request.has_perm('{}.edit'.format(self.get_permission_prefix())):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if batch.complete:
 | 
				
			||||||
 | 
					                    label = "Mark as NOT Complete"
 | 
				
			||||||
 | 
					                    value = 'false'
 | 
				
			||||||
 | 
					                else:
 | 
				
			||||||
 | 
					                    label = "Mark as Complete"
 | 
				
			||||||
 | 
					                    value = 'true'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                content.extend([
 | 
				
			||||||
 | 
					                    HTML.literal('   '),
 | 
				
			||||||
 | 
					                    tags.form(self.get_action_url('toggle_complete', batch), class_='autodisable'),
 | 
				
			||||||
 | 
					                    csrf_token(self.request),
 | 
				
			||||||
 | 
					                    tags.hidden('complete', value=value),
 | 
				
			||||||
 | 
					                    tags.submit('submit', label),
 | 
				
			||||||
 | 
					                    tags.end_form(),
 | 
				
			||||||
 | 
					                ])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return HTML.tag('div', c=content)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def render_user(self, batch, field):
 | 
					    def render_user(self, batch, field):
 | 
				
			||||||
        user = getattr(batch, field)
 | 
					        user = getattr(batch, field)
 | 
				
			||||||
        if not user:
 | 
					        if not user:
 | 
				
			||||||
| 
						 | 
					@ -413,6 +441,14 @@ class BatchMasterView(MasterView):
 | 
				
			||||||
        kwargs['batch'] = batch
 | 
					        kwargs['batch'] = batch
 | 
				
			||||||
        return kwargs
 | 
					        return kwargs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def toggle_complete(self):
 | 
				
			||||||
 | 
					        batch = self.get_instance()
 | 
				
			||||||
 | 
					        if not batch.executed:
 | 
				
			||||||
 | 
					            form = forms.Form(schema=ToggleComplete(), request=self.request)
 | 
				
			||||||
 | 
					            if form.validate(newstyle=True):
 | 
				
			||||||
 | 
					                batch.complete = form.validated['complete']
 | 
				
			||||||
 | 
					        return self.redirect(self.get_action_url('view', batch))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def mobile_mark_complete(self):
 | 
					    def mobile_mark_complete(self):
 | 
				
			||||||
        batch = self.get_instance()
 | 
					        batch = self.get_instance()
 | 
				
			||||||
        batch.complete = True
 | 
					        batch.complete = True
 | 
				
			||||||
| 
						 | 
					@ -1151,6 +1187,11 @@ class BatchMasterView(MasterView):
 | 
				
			||||||
            config.add_tailbone_permission(permission_prefix, '{}.delete_rows'.format(permission_prefix),
 | 
					            config.add_tailbone_permission(permission_prefix, '{}.delete_rows'.format(permission_prefix),
 | 
				
			||||||
                                           "Bulk-delete data rows from {}".format(model_title))
 | 
					                                           "Bulk-delete data rows from {}".format(model_title))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # toggle complete
 | 
				
			||||||
 | 
					        config.add_route('{}.toggle_complete'.format(route_prefix), '{}/{{{}}}/toggle-complete'.format(url_prefix, model_key))
 | 
				
			||||||
 | 
					        config.add_view(cls, attr='toggle_complete', route_name='{}.toggle_complete'.format(route_prefix),
 | 
				
			||||||
 | 
					                        permission='{}.edit'.format(permission_prefix))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # mobile mark complete
 | 
					        # mobile mark complete
 | 
				
			||||||
        config.add_route('mobile.{}.mark_complete'.format(route_prefix), '/mobile{}/{{{}}}/mark-complete'.format(url_prefix, model_key))
 | 
					        config.add_route('mobile.{}.mark_complete'.format(route_prefix), '/mobile{}/{{{}}}/mark-complete'.format(url_prefix, model_key))
 | 
				
			||||||
        config.add_view(cls, attr='mobile_mark_complete', route_name='mobile.{}.mark_complete'.format(route_prefix),
 | 
					        config.add_view(cls, attr='mobile_mark_complete', route_name='mobile.{}.mark_complete'.format(route_prefix),
 | 
				
			||||||
| 
						 | 
					@ -1214,6 +1255,11 @@ class FileBatchMasterView(BatchMasterView):
 | 
				
			||||||
        return self.render_file_field(path, url)
 | 
					        return self.render_file_field(path, url)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ToggleComplete(colander.MappingSchema):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    complete = colander.SchemaNode(colander.Boolean())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class MobileBatchStatusFilter(grids.filters.MobileFilter):
 | 
					class MobileBatchStatusFilter(grids.filters.MobileFilter):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    value_choices = ['pending', 'complete', 'executed', 'all']
 | 
					    value_choices = ['pending', 'complete', 'executed', 'all']
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue