示例#1
0
    def process(workflow_object, field, user, action, next_state=None, god_mod=False):
        current_state = getattr(workflow_object, field)
        approvements = ApprovementService.get_approvements_object_waiting_for_approval(workflow_object, field, [current_state], user=user, god_mod=god_mod)
        c = approvements.count()
        if c == 0:
            raise RiverException(ErrorCode.NO_AVAILABLE_NEXT_STATE_FOR_USER, "There is no available state for destination for the user.")
        if c > 1:
            if next_state:
                approvements = approvements.filter(meta__transition__destination_state=next_state)
                if approvements.count() == 0:
                    available_states = StateService.get_available_states(workflow_object, field, user)
                    raise RiverException(ErrorCode.INVALID_NEXT_STATE_FOR_USER,
                                         "Invalid state is given(%s). Valid states is(are) %s" % (next_state.__unicode__(), ','.join([ast.__unicode__() for ast in available_states])))
            else:
                raise RiverException(ErrorCode.NEXT_STATE_IS_REQUIRED, "State must be given when there are multiple states for destination")
        approvement = approvements[0]
        approvement.status = action
        approvement.transactioner = user
        approvement.transaction_date = datetime.now()
        approvement.save()

        c = False
        track = workflow_object.approvement_track
        while not c:
            track, c = approvement.tracks.get_or_create(previous_track=track)
        return approvement, track
示例#2
0
        def process(workflow_object, field, user, action, next_state=None, god_mod=False):
            current_state = getattr(workflow_object, field)
            proceedings = ProceedingService.get_available_proceedings(workflow_object, field, [current_state],
                                                                      user=user, god_mod=god_mod)
            c = proceedings.count()
            if c == 0:
                raise RiverException(ErrorCode.NO_AVAILABLE_NEXT_STATE_FOR_USER,
                                     "There is no available state for destination for the user.")
            if c > 1:
                if next_state:
                    proceedings = proceedings.filter(meta__transition__destination_state=next_state)
                    if proceedings.count() == 0:
                        available_states = StateService.get_available_states(workflow_object, field, user)
                        raise RiverException(ErrorCode.INVALID_NEXT_STATE_FOR_USER,
                                             "Invalid state is given(%s). Valid states is(are) %s" % (
                                                 next_state.__unicode__(),
                                                 ','.join([ast.__unicode__() for ast in available_states])))
                else:
                    raise RiverException(ErrorCode.NEXT_STATE_IS_REQUIRED,
                                         "State must be given when there are multiple states for destination")
            proceeding = proceedings[0]
            proceeding.status = action
            proceeding.transactioner = user
            proceeding.transaction_date = datetime.now()
            if workflow_object.proceeding:
                proceeding.previous = workflow_object.proceeding
            proceeding.save()


            return proceeding
示例#3
0
        def process(workflow_object, user, action, next_state=None, god_mod=False):
            proceedings = ProceedingService.get_available_proceedings(
                workflow_object, [workflow_object.get_state()], user=user, god_mod=god_mod)
            c = proceedings.count()
            if c == 0:
                raise RiverException(ErrorCode.NO_AVAILABLE_NEXT_STATE_FOR_USER,
                                     "There is no available state for destination for the user.")
            if c > 1:
                if next_state:
                    proceedings = proceedings.filter(meta__transition__destination_state=next_state)
                    if proceedings.count() == 0:
                        available_states = StateService.get_available_states(workflow_object, user)
                        raise RiverException(ErrorCode.INVALID_NEXT_STATE_FOR_USER, "Invalid state is given(%s). Valid states is(are) %s" % (
                            next_state.__str__(), ','.join([ast.__str__() for ast in available_states])))
                else:
                    raise RiverException(ErrorCode.NEXT_STATE_IS_REQUIRED,
                                         "State must be given when there are multiple states for destination")
            proceeding = proceedings[0]
            proceeding.status = action
            proceeding.transactioner = user
            proceeding.transaction_date = timezone.now()
            if workflow_object.proceeding:
                proceeding.previous = workflow_object.proceeding
            proceeding.save()

            return proceeding
示例#4
0
    def test_get_final_states(self):
        self.initialize_normal_scenario()

        self.assertListEqual(
            list(
                State.objects.filter(
                    label__in=['s4.1', 's4.2', 's5.1', 's5.2'])),
            list(StateService.get_final_states(self.content_type)))
示例#5
0
    def test_init(self):
        ObjectService.register_object(self.objects[0], self.field)
        ObjectService.register_object(self.objects[1], self.field)

        initial_state = StateService.get_initial_state(self.content_type, self.field)

        self.assertEqual(initial_state, getattr(self.objects[0], self.field))
        self.assertEqual(18, Approvement.objects.count())
示例#6
0
    def test_init(self):
        ObjectService.register_object(self.objects[0], self.field)
        ObjectService.register_object(self.objects[1], self.field)

        initial_state = StateService.get_initial_state(self.content_type,
                                                       self.field)

        self.assertEqual(initial_state, getattr(self.objects[0], self.field))
        self.assertEqual(18, Approvement.objects.count())
    def test_init(self):
        self.initialize_normal_scenario()

        ObjectService.register_object(self.objects[0], self.field)
        ObjectService.register_object(self.objects[1], self.field)

        initial_state = StateService.get_initial_state(self.content_type, self.field)

        self.assertEqual(initial_state, getattr(self.objects[0], self.field))
        self.assertEqual(18, Proceeding.objects.count())
    def test_init(self):
        self.initialize_normal_scenario()

        ObjectService.register_object(self.objects[0])
        ObjectService.register_object(self.objects[1])

        initial_state = StateService.get_initial_state(self.content_type)

        self.assertEqual(initial_state, self.objects[0].get_state())
        self.assertEqual(18, Proceeding.objects.count())
示例#9
0
def _post_save(sender, instance, created, *args, **kwargs):  # signal, sender, instance):
    """
    Desc:  Generate TransitionProceedings according to ProceedingMeta of the content type at the beginning.
    :param kwargs:
    :return:
    """
    from river.services.state import StateService

    if created:
        ObjectService.register_object(instance)
    if not instance.get_state():
        init_state = StateService.get_initial_state(ContentType.objects.get_for_model(instance))
        instance.set_state(init_state)
        instance.save()
示例#10
0
def _post_save(sender, instance, created, *args, **kwargs):  # signal, sender, instance):
    """
    Desc:  Generate TransitionProceedings according to ProceedingMeta of the content type at the beginning.
    :param kwargs:
    :return:
    """
    from river.services.state import StateService

    if created:
        ObjectService.register_object(instance)
    if not instance.get_state():
        init_state = StateService.get_initial_state(ContentType.objects.get_for_model(instance))
        instance.set_state(init_state)
        instance.save()
示例#11
0
    def process(workflow_object,
                field,
                user,
                action,
                next_state=None,
                god_mod=False):
        current_state = getattr(workflow_object, field)
        approvements = ApprovementService.get_approvements_object_waiting_for_approval(
            workflow_object,
            field, [current_state],
            user=user,
            god_mod=god_mod)
        c = approvements.count()
        if c == 0:
            raise RiverException(
                ErrorCode.NO_AVAILABLE_NEXT_STATE_FOR_USER,
                "There is no available state for destination for the user.")
        if c > 1:
            if next_state:
                approvements = approvements.filter(
                    meta__transition__destination_state=next_state)
                if approvements.count() == 0:
                    available_states = StateService.get_available_states(
                        workflow_object, field, user)
                    raise RiverException(
                        ErrorCode.INVALID_NEXT_STATE_FOR_USER,
                        "Invalid state is given(%s). Valid states is(are) %s" %
                        (next_state.__unicode__(), ','.join(
                            [ast.__unicode__() for ast in available_states])))
            else:
                raise RiverException(
                    ErrorCode.NEXT_STATE_IS_REQUIRED,
                    "State must be given when there are multiple states for destination"
                )
        approvement = approvements[0]
        approvement.status = action
        approvement.transactioner = user
        approvement.transaction_date = datetime.now()
        approvement.save()

        c = False
        track = workflow_object.approvement_track
        while not c:
            track, c = approvement.tracks.get_or_create(previous_track=track)
        return approvement, track
示例#12
0
    def init_approvements(workflow_object, field):
        content_type = RiverConfig.CONTENT_TYPE_CLASS.objects.get_for_model(workflow_object)
        for approvement_meta in ApprovementMeta.objects.filter(transition__content_type=content_type, transition__field=field):
            approvement, created = Approvement.objects.update_or_create(
                meta=approvement_meta,
                workflow_object=workflow_object,
                field=field,
                defaults={
                    'order': approvement_meta.order,
                    'status': PENDING,
                }
            )
            approvement.permissions.add(*approvement_meta.permissions.all())
            approvement.groups.add(*approvement_meta.groups.all())

        init_state = StateService.get_initial_state(content_type, field)
        setattr(workflow_object, field, init_state)
        workflow_object.save()
        LOGGER.debug("Approvements are initialized for workflow object %s and field %s" % (workflow_object, field))
 def test_get_final_states(self):
     self.assertListEqual(
         list(
             State.objects.filter(
                 label__in=['s4.1', 's4.2', 's5.1', 's5.2'])),
         list(StateService.get_final_states(self.content_type, self.field)))
 def test_get_initial_state(self):
     self.assertEqual(
         State.objects.get(label='s1'),
         StateService.get_initial_state(self.content_type, self.field))
    def test_get_available_states(self):
        ObjectService.register_object(self.objects[0], self.field)
        ObjectService.register_object(self.objects[1], self.field)

        available_states = StateService.get_available_states(
            self.objects[0], self.field, self.user2, include_user=False)
        self.assertEqual(1, available_states.count())
        self.assertEqual(State.objects.get(label='s2'), available_states[0])
        available_states = StateService.get_available_states(self.objects[0],
                                                             self.field,
                                                             self.user2,
                                                             include_user=True)
        self.assertEqual(0, available_states.count())
        available_states = StateService.get_available_states(
            self.objects[0], self.field, self.user2)
        self.assertEqual(0, available_states.count())

        available_states = StateService.get_available_states(
            self.objects[0], self.field, self.user3, include_user=False)
        self.assertEqual(1, available_states.count())
        self.assertEqual(State.objects.get(label='s2'), available_states[0])
        available_states = StateService.get_available_states(self.objects[0],
                                                             self.field,
                                                             self.user3,
                                                             include_user=True)
        self.assertEqual(0, available_states.count())
        available_states = StateService.get_available_states(
            self.objects[0], self.field, self.user3)
        self.assertEqual(0, available_states.count())

        available_states = StateService.get_available_states(
            self.objects[0], self.field, self.user4, include_user=False)
        self.assertEqual(1, available_states.count())
        self.assertEqual(State.objects.get(label='s2'), available_states[0])
        available_states = StateService.get_available_states(self.objects[0],
                                                             self.field,
                                                             self.user4,
                                                             include_user=True)
        self.assertEqual(0, available_states.count())
        available_states = StateService.get_available_states(
            self.objects[0], self.field, self.user4)
        self.assertEqual(0, available_states.count())

        available_states = StateService.get_available_states(
            self.objects[0], self.field, self.user1, include_user=False)
        self.assertEqual(1, available_states.count())
        self.assertEqual(State.objects.get(label='s2'), available_states[0])
        available_states = StateService.get_available_states(self.objects[0],
                                                             self.field,
                                                             self.user1,
                                                             include_user=True)
        self.assertEqual(1, available_states.count())
        self.assertEqual(State.objects.get(label='s2'), available_states[0])

        available_states = StateService.get_available_states(
            self.objects[0], self.field, self.user1)
        self.assertEqual(1, available_states.count())
        self.assertEqual(State.objects.get(label='s2'), available_states[0])
示例#16
0
        def get_initial_state(self):
            from river.services.state import StateService

            return StateService.get_initial_state(ContentType.objects.get_for_model(self), name)
示例#17
0
        def on_final_state(self):
            from river.services.state import StateService

            return getattr(self, name) in StateService.get_final_states(ContentType.objects.get_for_model(self), name)
示例#18
0
 def get_initial_approvements(content_type, field):
     initial_state = StateService.get_initial_state(content_type, field)
     return Approvement.objects.filter(meta__transition__source_state=initial_state, meta__transition__direction=FORWARD)
示例#19
0
        def on_final_state(self):
            from river.services.state import StateService

            return getattr(self, name) in StateService.get_final_states(
                ContentType.objects.get_for_model(self), name)
示例#20
0
 def get_final_approvements(content_type, field):
     final_states = StateService.get_final_states(content_type, field)
     return Approvement.objects.filter(meta__transition__destination_state__in=final_states, meta__transition__direction=FORWARD)
示例#21
0
 def test_get_final_states(self):
     self.assertListEqual(list(State.objects.filter(label__in=['s4.1', 's4.2', 's5.1', 's5.2'])), list(StateService.get_final_states(self.content_type, self.field)))
示例#22
0
 def test_get_initial_state(self):
     self.assertEqual(State.objects.get(label='s1'), StateService.get_initial_state(self.content_type, self.field))
示例#23
0
    def test_get_available_states(self):
        ObjectService.register_object(self.objects[0], self.field)
        ObjectService.register_object(self.objects[1], self.field)

        available_states = StateService.get_available_states(self.objects[0], self.field, self.user2, include_user=False)
        self.assertEqual(1, available_states.count())
        self.assertEqual(State.objects.get(label='s2'), available_states[0])
        available_states = StateService.get_available_states(self.objects[0], self.field, self.user2, include_user=True)
        self.assertEqual(0, available_states.count())
        available_states = StateService.get_available_states(self.objects[0], self.field, self.user2)
        self.assertEqual(0, available_states.count())

        available_states = StateService.get_available_states(self.objects[0], self.field, self.user3, include_user=False)
        self.assertEqual(1, available_states.count())
        self.assertEqual(State.objects.get(label='s2'), available_states[0])
        available_states = StateService.get_available_states(self.objects[0], self.field, self.user3, include_user=True)
        self.assertEqual(0, available_states.count())
        available_states = StateService.get_available_states(self.objects[0], self.field, self.user3)
        self.assertEqual(0, available_states.count())

        available_states = StateService.get_available_states(self.objects[0], self.field, self.user4, include_user=False)
        self.assertEqual(1, available_states.count())
        self.assertEqual(State.objects.get(label='s2'), available_states[0])
        available_states = StateService.get_available_states(self.objects[0], self.field, self.user4, include_user=True)
        self.assertEqual(0, available_states.count())
        available_states = StateService.get_available_states(self.objects[0], self.field, self.user4)
        self.assertEqual(0, available_states.count())

        available_states = StateService.get_available_states(self.objects[0], self.field, self.user1, include_user=False)
        self.assertEqual(1, available_states.count())
        self.assertEqual(State.objects.get(label='s2'), available_states[0])
        available_states = StateService.get_available_states(self.objects[0], self.field, self.user1, include_user=True)
        self.assertEqual(1, available_states.count())
        self.assertEqual(State.objects.get(label='s2'), available_states[0])

        available_states = StateService.get_available_states(self.objects[0], self.field, self.user1)
        self.assertEqual(1, available_states.count())
        self.assertEqual(State.objects.get(label='s2'), available_states[0])
示例#24
0
    def test_get_initial_state(self):
        self.initialize_normal_scenario()

        self.assertEqual(State.objects.get(label='s1'),
                         StateService.get_initial_state(self.content_type))
    def test_get_final_states(self):
        self.initialize_normal_scenario()

        self.assertListEqual(list(State.objects.filter(label__in=['s4.1', 's4.2', 's5.1', 's5.2'])), list(StateService.get_final_states(self.content_type)))
示例#26
0
    def test_get_available_states(self):
        self.initialize_normal_scenario()

        ObjectService.register_object(self.objects[0])
        ObjectService.register_object(self.objects[1])

        available_states = StateService.get_available_states(
            self.objects[0], self.user2, include_user=False)
        self.assertEqual(1, available_states.count())
        self.assertEqual(State.objects.get(label='s2'), available_states[0])
        available_states = StateService.get_available_states(self.objects[0],
                                                             self.user2,
                                                             include_user=True)
        self.assertEqual(0, available_states.count())
        available_states = StateService.get_available_states(
            self.objects[0], self.user2)
        self.assertEqual(0, available_states.count())

        available_states = StateService.get_available_states(
            self.objects[0], self.user3, include_user=False)
        self.assertEqual(1, available_states.count())
        self.assertEqual(State.objects.get(label='s2'), available_states[0])
        available_states = StateService.get_available_states(self.objects[0],
                                                             self.user3,
                                                             include_user=True)
        self.assertEqual(0, available_states.count())
        available_states = StateService.get_available_states(
            self.objects[0], self.user3)
        self.assertEqual(0, available_states.count())

        available_states = StateService.get_available_states(
            self.objects[0], self.user4, include_user=False)
        self.assertEqual(1, available_states.count())
        self.assertEqual(State.objects.get(label='s2'), available_states[0])
        available_states = StateService.get_available_states(self.objects[0],
                                                             self.user4,
                                                             include_user=True)
        self.assertEqual(0, available_states.count())
        available_states = StateService.get_available_states(
            self.objects[0], self.user4)
        self.assertEqual(0, available_states.count())

        available_states = StateService.get_available_states(
            self.objects[0], self.user1, include_user=False)
        self.assertEqual(1, available_states.count())
        self.assertEqual(State.objects.get(label='s2'), available_states[0])
        available_states = StateService.get_available_states(self.objects[0],
                                                             self.user1,
                                                             include_user=True)
        self.assertEqual(1, available_states.count())
        self.assertEqual(State.objects.get(label='s2'), available_states[0])

        available_states = StateService.get_available_states(
            self.objects[0], self.user1)
        self.assertEqual(1, available_states.count())
        self.assertEqual(State.objects.get(label='s2'), available_states[0])
    def test_get_initial_state(self):
        self.initialize_normal_scenario()

        self.assertEqual(State.objects.get(label='s1'), StateService.get_initial_state(self.content_type))
示例#28
0
        def get_initial_state(self):
            from river.services.state import StateService

            return StateService.get_initial_state(
                ContentType.objects.get_for_model(self), name)
    def test_get_available_states(self):
        self.initialize_normal_scenario()

        ObjectService.register_object(self.objects[0])
        ObjectService.register_object(self.objects[1])

        available_states = StateService.get_available_states(self.objects[0], self.user2, include_user=False)
        self.assertEqual(1, available_states.count())
        self.assertEqual(State.objects.get(label='s2'), available_states[0])
        available_states = StateService.get_available_states(self.objects[0], self.user2, include_user=True)
        self.assertEqual(0, available_states.count())
        available_states = StateService.get_available_states(self.objects[0], self.user2)
        self.assertEqual(0, available_states.count())

        available_states = StateService.get_available_states(self.objects[0], self.user3, include_user=False)
        self.assertEqual(1, available_states.count())
        self.assertEqual(State.objects.get(label='s2'), available_states[0])
        available_states = StateService.get_available_states(self.objects[0], self.user3, include_user=True)
        self.assertEqual(0, available_states.count())
        available_states = StateService.get_available_states(self.objects[0], self.user3)
        self.assertEqual(0, available_states.count())

        available_states = StateService.get_available_states(self.objects[0], self.user4, include_user=False)
        self.assertEqual(1, available_states.count())
        self.assertEqual(State.objects.get(label='s2'), available_states[0])
        available_states = StateService.get_available_states(self.objects[0], self.user4, include_user=True)
        self.assertEqual(0, available_states.count())
        available_states = StateService.get_available_states(self.objects[0], self.user4)
        self.assertEqual(0, available_states.count())

        available_states = StateService.get_available_states(self.objects[0], self.user1, include_user=False)
        self.assertEqual(1, available_states.count())
        self.assertEqual(State.objects.get(label='s2'), available_states[0])
        available_states = StateService.get_available_states(self.objects[0], self.user1, include_user=True)
        self.assertEqual(1, available_states.count())
        self.assertEqual(State.objects.get(label='s2'), available_states[0])

        available_states = StateService.get_available_states(self.objects[0], self.user1)
        self.assertEqual(1, available_states.count())
        self.assertEqual(State.objects.get(label='s2'), available_states[0])