from django.apps import apps from django.utils.translation import ugettext_noop from .models import State, Workflow def create_builtin_workflows(sender, **kwargs): """ Receiver function to create a simple and a complex workflow. It is connected to the signal django.db.models.signals.post_migrate during app loading. """ if Workflow.objects.exists(): # If there is at least one workflow, then do nothing. return workflow_1 = Workflow(name="Simple Workflow") workflow_1.save(skip_autoupdate=True) state_1_1 = State( name=ugettext_noop("submitted"), workflow=workflow_1, allow_create_poll=True, allow_support=True, allow_submitter_edit=True, ) state_1_1.save(skip_autoupdate=True) state_1_2 = State( name=ugettext_noop("accepted"), workflow=workflow_1, recommendation_label="Acceptance", css_class="success", merge_amendment_into_final=1, ) state_1_2.save(skip_autoupdate=True) state_1_3 = State( name=ugettext_noop("rejected"), workflow=workflow_1, recommendation_label="Rejection", css_class="danger", merge_amendment_into_final=-1, ) state_1_3.save(skip_autoupdate=True) state_1_4 = State( name=ugettext_noop("not decided"), workflow=workflow_1, recommendation_label="No decision", css_class="default", merge_amendment_into_final=-1, ) state_1_4.save(skip_autoupdate=True) state_1_1.next_states.add(state_1_2, state_1_3, state_1_4) workflow_1.first_state = state_1_1 workflow_1.save(skip_autoupdate=True) workflow_2 = Workflow(name="Complex Workflow") workflow_2.save(skip_autoupdate=True) state_2_1 = State( name=ugettext_noop("published"), workflow=workflow_2, allow_support=True, allow_submitter_edit=True, dont_set_identifier=True, ) state_2_1.save(skip_autoupdate=True) state_2_2 = State( name=ugettext_noop("permitted"), workflow=workflow_2, recommendation_label="Permission", allow_create_poll=True, allow_submitter_edit=True, ) state_2_2.save(skip_autoupdate=True) state_2_3 = State( name=ugettext_noop("accepted"), workflow=workflow_2, recommendation_label="Acceptance", css_class="success", merge_amendment_into_final=1, ) state_2_3.save(skip_autoupdate=True) state_2_4 = State( name=ugettext_noop("rejected"), workflow=workflow_2, recommendation_label="Rejection", css_class="danger", merge_amendment_into_final=-1, ) state_2_4.save(skip_autoupdate=True) state_2_5 = State( name=ugettext_noop("withdrawed"), workflow=workflow_2, css_class="default", merge_amendment_into_final=-1, ) state_2_5.save(skip_autoupdate=True) state_2_6 = State( name=ugettext_noop("adjourned"), workflow=workflow_2, recommendation_label="Adjournment", css_class="default", merge_amendment_into_final=-1, ) state_2_6.save(skip_autoupdate=True) state_2_7 = State( name=ugettext_noop("not concerned"), workflow=workflow_2, recommendation_label="No concernment", css_class="default", merge_amendment_into_final=-1, ) state_2_7.save(skip_autoupdate=True) state_2_8 = State( name=ugettext_noop("refered to committee"), workflow=workflow_2, recommendation_label="Referral to committee", css_class="default", merge_amendment_into_final=-1, ) state_2_8.save(skip_autoupdate=True) state_2_9 = State( name=ugettext_noop("needs review"), workflow=workflow_2, css_class="default", merge_amendment_into_final=-1, ) state_2_9.save(skip_autoupdate=True) state_2_10 = State( name=ugettext_noop("rejected (not authorized)"), workflow=workflow_2, recommendation_label="Rejection (not authorized)", css_class="default", merge_amendment_into_final=-1, ) state_2_10.save(skip_autoupdate=True) state_2_1.next_states.add(state_2_2, state_2_5, state_2_10) state_2_2.next_states.add( state_2_3, state_2_4, state_2_5, state_2_6, state_2_7, state_2_8, state_2_9 ) workflow_2.first_state = state_2_1 workflow_2.save(skip_autoupdate=True) def get_permission_change_data(sender, permissions, **kwargs): """ Yields all necessary collections if 'motions.can_see' permission changes. """ motions_app = apps.get_app_config(app_label="motions") for permission in permissions: # There could be only one 'motions.can_see' and then we want to return data. if ( permission.content_type.app_label == motions_app.label and permission.codename == "can_see" ): yield from motions_app.get_startup_elements()