def index_admin(request, extra_context=None): """ Display the main admin index page, which lists all of the installed apps that have been registered in this site. """ APPS_EXIBIR = { 'Account': ['User'], 'Egresso': ['Egresso', 'Formacao'], 'Empresa': ['Empresa'], 'Oportunidade': ['Oportunidade'], 'Curso': ['Curso', 'NivelCurso'], 'Questionario': ['Questao', 'Questionario'] } app_list = admin_site.get_app_list(request) app_list = [app for app in app_list if app['name'] in APPS_EXIBIR] for app in app_list: app_name = app['name'] app['models'] = [m for m in app['models'] if m['object_name'] in APPS_EXIBIR[app_name]] context = { **admin_site.each_context(request), 'title': admin_site.index_title, 'app_list': app_list, **(extra_context or {}), } request.current_app = admin_site.name return TemplateResponse(request, 'admin/index.html', context)
def action_import(request, object_id): """ 数据导入操作 :param request: :param object_id: :return: """ title = _("Are you sure?") obj = DataImport.objects.get(id=int(object_id)) opts = obj._meta objects_name = force_text(opts.verbose_name) if request.POST.get("post"): obj.action_import(request) try: messages.success(request, _('data import successfully')) except Exception as e: messages.error(request, e) return HttpResponseRedirect("/admin/basedata/dataimport/%s" % (object_id)) context = dict( site.each_context(request), title=title, opts=opts, objects_name=objects_name, object=obj, ) request.current_app = site.name return TemplateResponse(request, 'admin/invent/stockin/in_confirmation.html', context)
def action_import(request,object_id): """ 数据导入操作 :param request: :param object_id: :return: """ title = _("Are you sure?") obj = DataImport.objects.get(id=int(object_id)) opts = obj._meta objects_name = force_text(opts.verbose_name) if request.POST.get("post"): obj.action_import(request) try: messages.success(request,_('data import successfully')) except Exception as e: messages.error(request,e) return HttpResponseRedirect("/admin/basedata/dataimport/%s"%(object_id)) context = dict( site.each_context(request), title=title, opts=opts, objects_name=objects_name, object=obj, ) request.current_app = site.name return TemplateResponse(request,'admin/invent/stockin/in_confirmation.html', context)
def action_init(request,object_id): """ 期初入库操作 :param request: :param object_id: :return: """ title = _("Are you sure?") obj = InitialInventory.objects.get(id=int(object_id)) opts = obj._meta objects_name = force_text(opts.verbose_name) if request.POST.get("post"): try: obj.init_entry(request) messages.success(request,_('check in successfully')) except Exception as e: messages.error(request,e) return HttpResponseRedirect("/admin/invent/initialinventory/%s"%(object_id)) context = dict( site.each_context(request), title=title, opts=opts, objects_name=objects_name, object=obj, ) request.current_app = site.name return TemplateResponse(request,'admin/invent/stockin/in_confirmation.html', context)
def alesco_import(self, request): """Displays a form prompting user to upload an Excel spreadsheet of employee data from Alesco. Temporary measure until database link is worked out. """ context = dict( site.each_context(request), title='Alesco data import' ) if request.method == 'POST': form = self.AlescoImportForm(request.POST, request.FILES) if form.is_valid(): upload = request.FILES['spreadsheet'] # Write the uploaded file to a temp file. f = open('/tmp/alesco-data.xlsx', 'w') f.write(upload.read()) f.close() alesco_data_import(f.name) messages.info(request, 'Spreadsheet uploaded successfully!') return redirect('admin:tracking_departmentuser_changelist') else: form = self.AlescoImportForm() context['form'] = form return TemplateResponse(request, 'tracking/alesco_import.html', context)
def pay_action(request,model,object_id): title = _("Are you sure?") ct = ContentType.objects.get(app_label='selfhelp',model=model) obj = ct.get_object_for_this_type(id=int(object_id)) opts = obj._meta objects_name = force_text(opts.verbose_name) if model == 'reimbursement': loan = obj.loan amount = obj.logout_amount if loan and (amount is None or amount< 0): messages.error(request,u'您选择了借款单据,但是未正确填写核销金额,请在\'财务信息\'栏目中更正') return HttpResponseRedirect("/admin/selfhelp/%s/%s"%(model,object_id)) if request.POST.get("post"): try: obj.action_pay(request) messages.success(request,_('action successfully')) except Exception as e: messages.error(request,e) return HttpResponseRedirect("/admin/selfhelp/%s/%s"%(model,object_id)) context = dict( site.each_context(request), title=title, opts=opts, objects_name=objects_name, object=obj, action_name=_('pay') ) request.current_app = site.name return TemplateResponse(request,'admin/invent/stockin/in_confirmation.html', context)
def action_init(request, object_id): """ 期初入库操作 :param request: :param object_id: :return: """ title = _("Are you sure?") obj = InitialInventory.objects.get(id=int(object_id)) opts = obj._meta objects_name = force_text(opts.verbose_name) if request.POST.get("post"): try: obj.init_entry(request) messages.success(request, _('check in successfully')) except Exception as e: messages.error(request, e) return HttpResponseRedirect("/admin/invent/initialinventory/%s" % (object_id)) context = dict( site.each_context(request), title=title, opts=opts, objects_name=objects_name, object=obj, ) request.current_app = site.name return TemplateResponse(request, 'admin/invent/stockin/in_confirmation.html', context)
def get_context_data(self, **kwargs): data = super().get_context_data(**kwargs) data.update(site.each_context(self.request)) UserModel = get_user_model() data.setdefault("opts", UserModel._meta) return data
def _context_data(data, request=None): """ Add admin global context, for compatibility with Django 1.7 """ try: return dict(site.each_context(request).items() + data.items()) except AttributeError: return data
def get(self, request): context = { "title": "Scan QR Code", "serializer": QRCodeSerializer(), **site.each_context(request) } return TemplateResponse( request, 'scan_qr_code.html', context, )
def get(self, request): try: return TemplateResponse( request, self.template, { **site.each_context(request), **self.get_extra_context(Context.from_request(request)), 'title': self.title, }) except Error as e: messages.error(request, e.message) return redirect('hub')
def get_context_data(self, **kwargs): # Call the base implementation first to get a context context = super(MainView, self).get_context_data(**kwargs) # Add in a QuerySet of all the books context['site_title'] = 'DPA' context['site_header'] = 'DPA Your Django Personal Accountant' site_context = site.each_context() context['main_menu'] = site_context['main_menu'] #context['main_menu'] = { # 'DPA': reverse('main'), # 'Commodity': reverse('admin:index'), # 'Amin': reverse('admin:index'), # } return context
def list_reports(request): """View that displays a list of available reports for the current admin user.""" reports_by_model = { model._meta.verbose_name_plural: report for model, report in get_reports_by_model(request.user).items() } context = { **site.each_context(request), 'title': 'Reports', 'reports_by_model': reports_by_model, } request.current_app = site.name return TemplateResponse(request, REPORT_INDEX_TEMPLATE, context)
def render_modal_window(self, request, form): """ Render a modal popup window with a select box to edit the form """ opts = self.model._meta fieldsets = [(None, {'fields': list(form.fields)})] adminForm = AdminForm(form, fieldsets, {}, []) context = { **default_admin_site.each_context(request), 'title': form.title, 'adminform': adminForm, 'add': False, 'change': True, 'save_as': False, 'has_add_permission': False, 'has_change_permission': True, 'opts': opts, 'root_path': reverse('admin:index'), 'is_popup': True, 'app_label': opts.app_label, 'media': self.media + form.media, } return TemplateResponse(request, self.change_form_template, context)
def alesco_import(self, request): """Displays a form prompting user to upload an Excel spreadsheet of employee data from Alesco. Temporary measure until database link is worked out. """ context = dict( site.each_context(request), title='Alesco data import' ) if request.method == 'POST': form = self.AlescoImportForm(request.POST, request.FILES) if form.is_valid(): upload = request.FILES['spreadsheet'] # Run the task asynchronously. async_task(alesco_data_import, upload) messages.info(request, 'Alesco data spreadsheet uploaded successfully; data is now being processed.') return redirect('admin:organisation_departmentuser_changelist') else: form = self.AlescoImportForm() context['form'] = form return TemplateResponse(request, 'organisation/alesco_import.html', context)
def alesco_import(self, request): """Displays a form prompting user to upload an Excel spreadsheet of employee data from Alesco. Temporary measure until database link is worked out. """ context = dict(site.each_context(request), title='Alesco data import') if request.method == 'POST': form = self.AlescoImportForm(request.POST, request.FILES) if form.is_valid(): upload = request.FILES['spreadsheet'] # Write the uploaded file to a temp file. f = open('/tmp/alesco-data.xlsx', 'w') f.write(upload.read()) f.close() alesco_data_import(f.name) messages.info(request, 'Spreadsheet uploaded successfully!') return redirect('admin:organisation_departmentuser_changelist') else: form = self.AlescoImportForm() context['form'] = form return TemplateResponse(request, 'organisation/alesco_import.html', context)
def alesco_import(self, request): """Displays a form prompting user to upload an Excel spreadsheet of employee data from Alesco. Temporary measure until database link is worked out. """ context = dict(site.each_context(request), title='Alesco data import') if request.method == 'POST': form = self.AlescoImportForm(request.POST, request.FILES) if form.is_valid(): upload = request.FILES['spreadsheet'] # Run the task asynchronously. async_task(alesco_data_import, upload) messages.info( request, 'Alesco data spreadsheet uploaded successfully; data is now being processed.' ) return redirect('admin:organisation_departmentuser_changelist') else: form = self.AlescoImportForm() context['form'] = form return TemplateResponse(request, 'organisation/alesco_import.html', context)
def get_context_data(self, **kwargs): context = site.each_context(self.request) if hasattr(self, 'title'): context['title'] = self.title context.update(kwargs) return super().get_context_data(**context)
def start(request, app, model, object_id): """ :param request: :return: """ import datetime content_type = ContentType.objects.get(app_label=app, model=model) obj = content_type.get_object_for_this_type(id=int(object_id)) title = _("Are you sure?") opts = obj._meta objects_name = force_text(opts.verbose_name) has_workflow = False queryset = Modal.objects.filter( content_type=content_type, end__gt=datetime.date.today()).order_by('-end') cnt = queryset.count() workflow_modal = None next_node = None next_users = [] has_next_user = False if cnt > 0: has_workflow = True workflow_modal = queryset[0] query_start_node = workflow_modal.node_set.filter(start=1) query_first_node = workflow_modal.node_set.order_by('id') if query_start_node.count() > 0: next_node = query_start_node[0] elif query_first_node.count() > 0: next_node = query_first_node[0] if next_node: next_users = compile_node_handler(request, obj, next_node) if len(next_users) > 0: has_next_user = True else: title = _("No workflow model was found") try: tmp = Instance.objects.get(modal=workflow_modal, object_id=object_id) messages.warning(request, _("the object is already in workflow")) return HttpResponseRedirect("/admin/%s/%s/%s" % (app, model, object_id)) except Exception: pass if request.POST.get("post"): val = request.POST.getlist(SELECTED_CHECKBOX_NAME) workflow_inst = Instance.objects.create(modal=workflow_modal, object_id=object_id, starter=request.user) workflow_inst.current_nodes.add(next_node) workflow_inst.save() workflow_history = History.objects.create(inst=workflow_inst, user=request.user) for user in User.objects.filter(id__in=val): todo = TodoList.objects.create(inst=workflow_inst, node=next_node, user=user, app_name=app, model_name=model) TodoList.objects.create(inst=workflow_inst, user=request.user, app_name=app, model_name=model, is_read=True, read_time=datetime.datetime.now(), status=True) if next_node.status_field and next_node.status_value: try: setattr(obj, next_node.status_field, next_node.status_value) obj.save() except Exception: pass messages.success(request, _('workflow started successfully')) return HttpResponseRedirect("/admin/%s/%s/%s" % (app, model, object_id)) context = dict( site.each_context(request), title=title, opts=opts, objects_name=objects_name, object=obj, has_workflow=has_workflow, workflow_modal=workflow_modal, next_node=next_node, has_next_user=has_next_user, next_users=next_users, checkbox_name=SELECTED_CHECKBOX_NAME, ) request.current_app = site.name return TemplateResponse( request, 'default/workflow/workflow_start_confirmation.html', context)
def approve(request, app, model, object_id, operation): """ :param request: :param operation: :return: """ if operation not in ('1', '3', '4'): messages.warning(request, _("unkown workflow operation")) return HttpResponseRedirect("/admin/%s/%s/%s" % (app, model, object_id)) import datetime import copy content_type = ContentType.objects.get(app_label=app, model=model) obj = content_type.get_object_for_this_type(id=int(object_id)) title = _("Are you sure?") opts = obj._meta objects_name = force_text(opts.verbose_name) has_workflow = False queryset = Modal.objects.filter( content_type=content_type, end__gt=datetime.date.today()).order_by('-end') cnt = queryset.count() workflow_modal = None if cnt > 0: workflow_modal = queryset[0] else: messages.warning(request, _("No workflow model was found")) return HttpResponseRedirect("/admin/%s/%s/%s" % (app, model, object_id)) workflow_instance = None try: workflow_instance = Instance.objects.get(modal=workflow_modal, object_id=object_id) except Exception: messages.warning(request, _("please start the workflow first")) return HttpResponseRedirect("/admin/%s/%s/%s" % (app, model, object_id)) next_nodes = [] node_users = [] is_stop_node = False node_has_users = False delete_instance = False deny_to_first = False next_node_description = None all_nodes = [ x for x in Node.objects.filter(modal=workflow_modal).order_by('-id') ] current = workflow_instance.current_nodes.all() current_tmp = copy.deepcopy(current[0]) if operation == '4' or operation == '3': next_nodes = ['stop'] is_stop_node = True else: if current.count() > 1: pass else: tmp_node = current[0] if tmp_node.stop or tmp_node == all_nodes[0]: next_nodes = ['stop'] is_stop_node = True else: if tmp_node.next_node_handler and len( tmp_node.next_node_handler) > 0: hd = tmp_node.next_node_handler klass = NextNodeManager().handlers.get(hd) if klass and isinstance(klass, NextNodeHandler): next_nodes = klass.handle(request, obj, tmp_node) next_node_description = klass.description if next_nodes and len(next_nodes) > 0: pass elif tmp_node.next and tmp_node.next.count() > 0: next_nodes = [nd for nd in tmp_node.next.all()] else: position = all_nodes.index(tmp_node) next_nodes = [all_nodes[position - 1]] if request.POST.get("post"): from django.db import transaction val = request.POST.getlist(SELECTED_CHECKBOX_NAME) memo = request.POST['memo'] with transaction.atomic(): try: if delete_instance: workflow_instance.delete() else: if is_stop_node: workflow_instance.status = 99 if operation in ('3', '4'): workflow_instance.status = int(operation) if not workflow_instance.approved_time and operation == '1': workflow_instance.approved_time = datetime.datetime.now( ) workflow_instance.current_nodes.clear() workflow_instance.save() else: workflow_instance.current_nodes.clear() workflow_instance.current_nodes.add(next_nodes[0]) for user in User.objects.filter(id__in=val): todo = TodoList.objects.create( inst=workflow_instance, node=next_nodes[0], user=user, app_name=app, model_name=model) if current_tmp.status_field and current_tmp.status_value: try: setattr(obj, current_tmp.status_field, current_tmp.status_value) obj.save() except Exception: pass History.objects.create(inst=workflow_instance, user=request.user, pro_type=int(operation), memo=memo, node=current_tmp) TodoList.objects.filter(inst=workflow_instance, node=current_tmp, status=0).update(status=1) messages.success(request, _('workflow approved successfully')) except Exception as e: messages.error(request, e) pass if current_tmp.action and len(current_tmp.action) > 0: action = WorkflowActionManager().actions.get( current_tmp.action) if action and isinstance(action, WorkflowAction): action.action(request, obj, current_tmp, operation) return HttpResponseRedirect("/admin/%s/%s/%s" % (app, model, object_id)) if len(next_nodes) > 0 and not is_stop_node and operation == '1': for node in next_nodes: users = compile_node_handler(request, obj, node) if len(users) > 0: node_has_users = True node_users.append({'node': node, 'users': users}) context = dict( site.each_context(request), title=title, opts=opts, objects_name=objects_name, object=obj, operation=operation, is_stop_node=is_stop_node, delete_instance=delete_instance, node_users=node_users, node_has_users=node_has_users, checkbox_name=SELECTED_CHECKBOX_NAME, ) if next_node_description: context.update(dict(next_node_description=next_node_description)) return TemplateResponse( request, "default/workflow/workflow_approve_confirmation.html", context)
title = _("Are you sure?") obj = StockIn.objects.get(id=int(object_id)) opts = obj._meta objects_name = force_text(opts.verbose_name) if request.POST.get("post"): try: obj.action_entry(request) messages.success(request,_('check in successfully')) except Exception,e: messages.error(request,e) return HttpResponseRedirect("/admin/invent/stockin/%s"%(object_id)) context = dict( site.each_context(request), title=title, opts=opts, objects_name=objects_name, object=obj, ) request.current_app = site.name return TemplateResponse(request,'admin/invent/stockin/in_confirmation.html', context) def action_out(request,object_id): """ 出库操作 :param request: :param object_id:
model_name=model, is_read=True, read_time=datetime.datetime.now(), status=True) if next_node.status_field and next_node.status_value: try: setattr(obj, next_node.status_field, next_node.status_value) obj.save() except Exception, e: pass messages.success(request, _('workflow started successfully')) return HttpResponseRedirect("/admin/%s/%s/%s" % (app, model, object_id)) context = dict( site.each_context(request), title=title, opts=opts, objects_name=objects_name, object=obj, has_workflow=has_workflow, workflow_modal=workflow_modal, next_node=next_node, has_next_user=has_next_user, next_users=next_users, checkbox_name=SELECTED_CHECKBOX_NAME, ) request.current_app = site.name return TemplateResponse( request, 'default/workflow/workflow_start_confirmation.html', context)
def index(peticion): sitio=site.each_context(peticion) contexto={ "url_admin":sitio } return render (peticion, "index/base.html", contexto)
from basedata.models import DataImport from django.utils.translation import ugettext_lazy as _ def action_import(request, object_id): """ 数据导入操作 :param request: :param object_id: :return: """ title = _("Are you sure?") obj = DataImport.objects.get(id=int(object_id)) opts = obj._meta objects_name = force_text(opts.verbose_name) if request.POST.get("post"): obj.action_import(request) try: messages.success(request, _("data import successfully")) except Exception, e: messages.error(request, e) return HttpResponseRedirect("/admin/basedata/dataimport/%s" % (object_id)) context = dict(site.each_context(request), title=title, opts=opts, objects_name=objects_name, object=obj) request.current_app = site.name return TemplateResponse(request, "admin/invent/stockin/in_confirmation.html", context)
def send_member_activation_emails(request): # include the django admin context for the member links context = site.each_context(request) # populate the form with the email settings in case this is a GET email_settings = EmailSettings.get_solo() form = SendMemberActivationEmailsForm(instance=email_settings) # if a valid post... if request.method == 'POST': form = SendMemberActivationEmailsForm(request.POST) if form.is_valid(): try: # update the email settings if not ('cancel' in request.POST): email_settings.test_email_address = form.cleaned_data[ 'test_email_address'] email_settings.send_count = form.cleaned_data['send_count'] email_settings.is_active = form.cleaned_data['is_active'] email_settings.activation_email = form.cleaned_data[ 'activation_email'] email_settings.save() # if there is an activation email set... if email_settings.activation_email: # send the activation email to the test address if 'send_test' in request.POST: sent = email_settings.activation_email.send_test( request) messages.info( request, "%d member%s emailed" % (sent, 's' if sent != 1 else '')) # send the activation email to uninvited members if 'send_to_count_uninvited' in request.POST: sent = email_settings.activation_email.send_to_count_uninvited( request) messages.info( request, "%d member%s emailed" % (sent, 's' if sent != 1 else '')) # send the activation email to targeted members if 'send_to_count_targeted' in request.POST: sent = email_settings.activation_email.send_to_count_targeted( request) messages.info( request, "%d member%s emailed" % (sent, 's' if sent != 1 else '')) # send the activation email to inactive members if 'send' in request.POST: sent = email_settings.activation_email.send_to_inactive_members( request) messages.info( request, "%d member%s emailed" % (sent, 's' if sent != 1 else '')) except Exception as e: messages.error(request, repr(e)) # redirect return HttpResponseRedirect( reverse('membersadmin:send_member_activation_emails')) # add the form to the context context['form'] = form # render the page return render(request, 'admin/send_member_activation_emails.html', context)
def start(request,app,model,object_id): """ :param request: :return: """ import datetime content_type = ContentType.objects.get(app_label=app,model=model) obj = content_type.get_object_for_this_type(id=int(object_id)) title = _("Are you sure?") opts = obj._meta objects_name = force_text(opts.verbose_name) has_workflow = False queryset = Modal.objects.filter(content_type=content_type,end__gt=datetime.date.today()).order_by('-end') cnt = queryset.count() workflow_modal = None next_node = None next_users = [] has_next_user = False if cnt > 0: has_workflow = True workflow_modal = queryset[0] query_start_node = workflow_modal.node_set.filter(start=1) query_first_node = workflow_modal.node_set.order_by('id') if query_start_node.count() > 0: next_node = query_start_node[0] elif query_first_node.count()>0: next_node = query_first_node[0] if next_node: next_users = compile_node_handler(request,obj,next_node) if len(next_users) > 0: has_next_user = True else: title = _("No workflow model was found") try: tmp = Instance.objects.get(modal = workflow_modal,object_id=object_id) messages.warning(request,_("the object is already in workflow")) return HttpResponseRedirect("/admin/%s/%s/%s"%(app,model,object_id)) except Exception: pass if request.POST.get("post"): val = request.POST.getlist(SELECTED_CHECKBOX_NAME) workflow_inst = Instance.objects.create(modal=workflow_modal,object_id=object_id,starter=request.user) workflow_inst.current_nodes.add(next_node) workflow_inst.save() workflow_history = History.objects.create(inst=workflow_inst,user=request.user) for user in User.objects.filter(id__in=val): todo = TodoList.objects.create(inst=workflow_inst,node=next_node,user=user,app_name=app,model_name=model) TodoList.objects.create(inst=workflow_inst,user=request.user,app_name=app,model_name=model,is_read=True, read_time=datetime.datetime.now(),status=True) if next_node.status_field and next_node.status_value: try: setattr(obj,next_node.status_field,next_node.status_value) obj.save() except Exception as e: pass messages.success(request,_('workflow started successfully')) return HttpResponseRedirect("/admin/%s/%s/%s"%(app,model,object_id)) context = dict( site.each_context(request), title=title, opts=opts, objects_name=objects_name, object=obj, has_workflow = has_workflow, workflow_modal = workflow_modal, next_node = next_node, has_next_user = has_next_user, next_users = next_users, checkbox_name = SELECTED_CHECKBOX_NAME, ) request.current_app = site.name return TemplateResponse(request,'default/workflow/workflow_start_confirmation.html', context)
def approve(request,app,model,object_id,operation): """ :param request: :param operation: :return: """ if operation not in ('1','3','4'): messages.warning(request,_("unkown workflow operation")) return HttpResponseRedirect("/admin/%s/%s/%s"%(app,model,object_id)) import datetime import copy content_type = ContentType.objects.get(app_label=app,model=model) obj = content_type.get_object_for_this_type(id=int(object_id)) title = _("Are you sure?") opts = obj._meta objects_name = force_text(opts.verbose_name) has_workflow = False queryset = Modal.objects.filter(content_type=content_type,end__gt=datetime.date.today()).order_by('-end') cnt = queryset.count() workflow_modal = None if cnt > 0: workflow_modal = queryset[0] else: messages.warning(request,_("No workflow model was found")) return HttpResponseRedirect("/admin/%s/%s/%s"%(app,model,object_id)) workflow_instance = None try: workflow_instance = Instance.objects.get(modal = workflow_modal,object_id=object_id) except Exception: messages.warning(request,_("please start the workflow first")) return HttpResponseRedirect("/admin/%s/%s/%s"%(app,model,object_id)) next_nodes = [] node_users = [] is_stop_node = False node_has_users = False delete_instance = False deny_to_first = False next_node_description = None all_nodes =[x for x in Node.objects.filter(modal=workflow_modal).order_by('-id')] current = workflow_instance.current_nodes.all() current_tmp = copy.deepcopy(current[0]) if operation == '4' or operation == '3': next_nodes = ['stop'] is_stop_node = True else: if current.count() > 1: pass else: tmp_node = current[0] if tmp_node.stop or tmp_node == all_nodes[0]: next_nodes = ['stop'] is_stop_node = True else: if tmp_node.next_node_handler and len(tmp_node.next_node_handler) > 0: hd = tmp_node.next_node_handler klass = NextNodeManager().handlers.get(hd) if klass and isinstance(klass,NextNodeHandler): next_nodes = klass.handle(request,obj,tmp_node) next_node_description = klass.description if next_nodes and len(next_nodes) > 0: pass elif tmp_node.next and tmp_node.next.count()>0: next_nodes = [nd for nd in tmp_node.next.all()] else: position = all_nodes.index(tmp_node) next_nodes = [all_nodes[position-1]] if request.POST.get("post"): from django.db import transaction val = request.POST.getlist(SELECTED_CHECKBOX_NAME) memo = request.POST['memo'] with transaction.atomic(): try: if delete_instance: workflow_instance.delete() else: if is_stop_node: workflow_instance.status = 99 if operation in ('3', '4'): workflow_instance.status = int(operation) if not workflow_instance.approved_time and operation == '1': workflow_instance.approved_time = datetime.datetime.now() workflow_instance.current_nodes.clear() workflow_instance.save() else: workflow_instance.current_nodes.clear() workflow_instance.current_nodes.add(next_nodes[0]) for user in User.objects.filter(id__in=val): todo = TodoList.objects.create(inst=workflow_instance,node=next_nodes[0],user=user,app_name=app,model_name=model) if current_tmp.status_field and current_tmp.status_value: try: setattr(obj,current_tmp.status_field,current_tmp.status_value) obj.save() except Exception as e: pass History.objects.create(inst=workflow_instance,user=request.user,pro_type=int(operation),memo=memo,node=current_tmp) TodoList.objects.filter(inst=workflow_instance,node=current_tmp,status=0).update(status=1) messages.success(request,_('workflow approved successfully')) except Exception as e: messages.error(request,e) pass if current_tmp.action and len(current_tmp.action) > 0: action = WorkflowActionManager().actions.get(current_tmp.action) if action and isinstance(action,WorkflowAction): action.action(request,obj,current_tmp,operation) return HttpResponseRedirect("/admin/%s/%s/%s"%(app,model,object_id)) if len(next_nodes) > 0 and not is_stop_node and operation == '1': for node in next_nodes: users = compile_node_handler(request,obj,node) if len(users) > 0: node_has_users = True node_users.append({'node':node,'users':users}) context = dict( site.each_context(request), title=title, opts=opts, objects_name=objects_name, object=obj, operation = operation, is_stop_node = is_stop_node, delete_instance = delete_instance, node_users = node_users, node_has_users = node_has_users, checkbox_name = SELECTED_CHECKBOX_NAME, ) if next_node_description: context.update(dict(next_node_description=next_node_description)) return TemplateResponse(request,"default/workflow/workflow_approve_confirmation.html",context)
if model == 'reimbursement': loan = obj.loan amount = obj.logout_amount if loan and (amount is None or amount < 0): messages.error(request, u'您选择了借款单据,但是未正确填写核销金额,请在\'财务信息\'栏目中更正') return HttpResponseRedirect("/admin/selfhelp/%s/%s" % (model, object_id)) if request.POST.get("post"): try: obj.action_pay(request) messages.success(request, _('action successfully')) except Exception, e: messages.error(request, e) return HttpResponseRedirect("/admin/selfhelp/%s/%s" % (model, object_id)) context = dict(site.each_context(request), title=title, opts=opts, objects_name=objects_name, object=obj, action_name=_('pay')) request.current_app = site.name return TemplateResponse(request, 'admin/invent/stockin/in_confirmation.html', context)