コード例 #1
0
ファイル: transition.py プロジェクト: h3/django-river
    def approve_transition(workflow_object, field, user, next_state=None, god_mod=False):

        approvement, track = TransitionService.process(workflow_object, field, user, APPROVED, next_state, god_mod)
        workflow_object.approvement_track = track

        current_state = getattr(workflow_object, field)
        # Any other approvement is left?
        required_approvements = ApprovementService.get_approvements_object_waiting_for_approval(workflow_object, field, [current_state], destination_state=next_state, god_mod=god_mod)

        transition_status = False
        if required_approvements.count() == 0:
            setattr(workflow_object, field, approvement.meta.transition.destination_state)
            transition_status = True

            # Next states should be PENDING back again if there is circle.
            ApprovementService.get_next_approvements(workflow_object, field).update(status=PENDING)

        with ApprovementSignal(workflow_object, field, approvement, track), TransitionSignal(transition_status, workflow_object, field, approvement), FinalSignal(workflow_object, field):
            workflow_object.save()

        LOGGER.debug("Workflow object %s for field %s is approved for next transition. Transition: %s -> %s" % (workflow_object, field, current_state.label, getattr(workflow_object, field).label))
コード例 #2
0
    def approve_transition(workflow_object,
                           field,
                           user,
                           next_state=None,
                           god_mod=False):

        approvement, track = TransitionService.process(workflow_object, field,
                                                       user, APPROVED,
                                                       next_state, god_mod)
        workflow_object.approvement_track = track

        current_state = getattr(workflow_object, field)
        # Any other approvement is left?
        required_approvements = ApprovementService.get_approvements_object_waiting_for_approval(
            workflow_object,
            field, [current_state],
            destination_state=next_state,
            god_mod=god_mod)

        transition_status = False
        if required_approvements.count() == 0:
            setattr(workflow_object, field,
                    approvement.meta.transition.destination_state)
            transition_status = True

            # Next states should be PENDING back again if there is circle.
            ApprovementService.get_next_approvements(
                workflow_object, field).update(status=PENDING)

        with ApprovementSignal(workflow_object, field, approvement,
                               track), TransitionSignal(
                                   transition_status, workflow_object, field,
                                   approvement), FinalSignal(
                                       workflow_object, field):
            workflow_object.save()

        LOGGER.debug(
            "Workflow object %s for field %s is approved for next transition. Transition: %s -> %s"
            % (workflow_object, field, current_state.label,
               getattr(workflow_object, field).label))
コード例 #3
0
    def test_get_next_approvements(self):
        ObjectService.register_object(self.objects[0], self.field)
        ObjectService.register_object(self.objects[1], self.field)

        approvements = ApprovementService.get_next_approvements(self.objects[0], self.field)
        self.assertEqual(9, approvements.count())

        self.objects[0].approve(self.user1)

        approvements = ApprovementService.get_next_approvements(self.objects[0], self.field)
        self.assertEqual(8, approvements.count())

        self.objects[0].approve(self.user2)


        # Two approvements exist on same level
        approvements = ApprovementService.get_next_approvements(self.objects[0], self.field)
        self.assertEqual(8, approvements.count())

        self.objects[0].approve(self.user3)

        approvements = ApprovementService.get_next_approvements(self.objects[0], self.field)
        self.assertEqual(6, approvements.count())

        self.objects[0].approve(self.user4, next_state=State.objects.get(label='s4'))
        approvements = ApprovementService.get_next_approvements(self.objects[0], self.field)
        self.assertEqual(2, approvements.count())

        self.objects[0].approve(self.user4, next_state=State.objects.get(label='s4.1'))
        approvements = ApprovementService.get_next_approvements(self.objects[0], self.field)
        self.assertEqual(0, approvements.count())
コード例 #4
0
ファイル: state.py プロジェクト: janusnic/django-river
        def next_approvements(self):
            from river.services.approvement import ApprovementService

            return getattr(self, name) in ApprovementService.get_next_approvements(ContentType.objects.get_for_model(self), name)