Exemplo n.º 1
0
    def register_object(content_type_id, object_id, field_id):
        transition_approvements = TransitionApprovement.objects.filter(content_type__pk=content_type_id, object_id=object_id, field__pk=field_id)
        if transition_approvements.count() == 0:
            ApprovementService.init_approvements(content_type_id, object_id, field_id)

        initial_state = StateService.get_init_state(content_type_id, field_id)
        obj = Object.objects.get(object_id=object_id)
        obj.state = initial_state
        obj.save()

        return {'state': initial_state.details()}
Exemplo n.º 2
0
 def get_objects_waiting_for_approval(content_type_id, field_id, user_id):
     object_pks = []
     for obj in Object.objects.filter(content_type__pk=content_type_id, field__pk=field_id):
         current_state = obj.state
         approvements = ApprovementService.get_approvements_object_waiting_for_approval(content_type_id, obj.object_id, field_id, user_id, [current_state])
         if approvements.count():
             object_pks.append(obj.pk)
     return Object.objects.filter(pk__in=object_pks)
Exemplo n.º 3
0
    def test_get_approvements_object_waiting_for_approval_without_skip(self):
        ct = ExternalContentType.objects.get(pk=1501)

        field = Field.objects.get(pk=3501)

        middleware.get_user = MagicMock(return_value=User.objects.get(pk=2101))

        ObjectService.register_object(ct.pk, 5001, field.pk)
        ObjectService.register_object(ct.pk, 5002, field.pk)

        approvements = ApprovementService.get_approvements_object_waiting_for_approval(ct.pk, 5001, field.pk, 1, [Object.objects.get(object_id=5001).state], include_user=True)
        self.assertEqual(1, approvements.count())

        approvements = ApprovementService.get_approvements_object_waiting_for_approval(ct.pk, 5001, field.pk, 2, [Object.objects.get(object_id=5001).state], include_user=False)
        self.assertEqual(1, approvements.count())
        approvements = ApprovementService.get_approvements_object_waiting_for_approval(ct.pk, 5001, field.pk, 2, [Object.objects.get(object_id=5001).state], include_user=True)
        self.assertEqual(0, approvements.count())

        approvements = ApprovementService.get_approvements_object_waiting_for_approval(ct.pk, 5001, field.pk, 3, [Object.objects.get(object_id=5001).state], include_user=False)
        self.assertEqual(1, approvements.count())
        approvements = ApprovementService.get_approvements_object_waiting_for_approval(ct.pk, 5001, field.pk, 3, [Object.objects.get(object_id=5001).state], include_user=True)
        self.assertEqual(0, approvements.count())

        approvements = ApprovementService.get_approvements_object_waiting_for_approval(ct.pk, 5001, field.pk, 4, [Object.objects.get(object_id=5001).state], include_user=False)
        self.assertEqual(1, approvements.count())
        approvements = ApprovementService.get_approvements_object_waiting_for_approval(ct.pk, 5001, field.pk, 4, [Object.objects.get(object_id=5001).state], include_user=True)
        self.assertEqual(0, approvements.count())
Exemplo n.º 4
0
 def approve_transition(content_type_id, object_id, field_id, user_id, next_state_id=None):
     content_type = ExternalContentType.objects.get(pk=content_type_id)
     field = Field.objects.get(pk=field_id)
     object = Object.objects.get(content_type=content_type, object_id=object_id, field=field)
     approvement = TransitionService.process(content_type_id, object_id, field_id, user_id, APPROVED, next_state_id)
     current_state = object.state
     required_approvements = ApprovementService.get_approvements_object_waiting_for_approval(content_type_id, object_id, field_id, user_id, [current_state], include_user=False,
                                                                                             destination_state_id=next_state_id)
     if required_approvements.count() == 0:
         object.state = approvement.approve_definition.transition.destination_state
         object.save()
Exemplo n.º 5
0
 def process(content_type_id, object_id, field_id, user_id, action, next_state_id=None):
     obj = Object.objects.get(content_type_id=content_type_id, object_id=object_id, field_id=field_id)
     current_state = obj.state
     next_state = None
     if next_state_id:
         next_state = State.objects.get(pk=next_state_id)
     approvements = ApprovementService.get_approvements_object_waiting_for_approval(content_type_id, object_id, field_id, user_id, [current_state])
     c = approvements.count()
     if c == 0:
         raise Exception("There is no available state for destination for the user.")
     if c > 1:
         if next_state:
             approvements = approvements.filter(approve_definition__transition__destination_state=next_state)
             if approvements.count() == 0:
                 available_states = StateService.get_available_states(content_type_id, object_id, field_id, user_id)
                 raise Exception("Invalid state is given(%s). Valid states is(are) %s" % (next_state.__unicode__(), ','.join([ast.__unicode__() for ast in available_states])))
         else:
             raise Exception("State must be given when there are multiple states for destination")
     approvement = approvements[0]
     approvement.status = action
     approvement.transactioner = ExternalUser.objects.get(user_id=user_id)
     approvement.transaction_date = datetime.now()
     approvement.save()
     return approvement
Exemplo n.º 6
0
    def test_get_approvements_object_waiting_for_approval_with_skip(self):
        ct = ExternalContentType.objects.get(pk=1501)

        field = Field.objects.get(pk=3501)

        ObjectService.register_object(ct.pk, 5001, field.pk)
        ObjectService.register_object(ct.pk, 5002, field.pk)

        middleware.get_user = MagicMock(return_value=User.objects.get(pk=2101))

        approvements = ApprovementService.get_approvements_object_waiting_for_approval(ct.pk, 5002, field.pk, 1, [Object.objects.get(object_id=5002).state], include_user=False)
        self.assertEqual(1, approvements.count())
        self.assertEqual(State.objects.get(label='s2'), approvements[0].approve_definition.transition.destination_state)
        approvements = ApprovementService.get_approvements_object_waiting_for_approval(ct.pk, 5002, field.pk, 1, [Object.objects.get(object_id=5002).state], include_user=True)
        self.assertEqual(1, approvements.count())
        self.assertEqual(State.objects.get(label='s2'), approvements[0].approve_definition.transition.destination_state)

        TransitionApprovement.objects.filter(
            content_type=ct,
            field=field,
            object_id=5002,
            approve_definition__transition__destination_state=State.objects.get(label='s2')
        ).update(skip=True)

        approvements = ApprovementService.get_approvements_object_waiting_for_approval(ct.pk, 5002, field.pk, 1, [Object.objects.get(object_id=5002).state], include_user=False)
        self.assertEqual(1, approvements.count())
        self.assertEqual(State.objects.get(label='s3'), approvements[0].approve_definition.transition.destination_state)
        approvements = ApprovementService.get_approvements_object_waiting_for_approval(ct.pk, 5002, field.pk, 1, [Object.objects.get(object_id=5002).state], include_user=True)
        self.assertEqual(1, approvements.count())
        self.assertEqual(State.objects.get(label='s3'), approvements[0].approve_definition.transition.destination_state)

        TransitionApprovement.objects.filter(
            content_type=ct,
            field=field,
            object_id=5002,
            approve_definition__transition__destination_state=State.objects.get(label='s3')
        ).update(skip=True)

        approvements = ApprovementService.get_approvements_object_waiting_for_approval(ct.pk, 5002, field.pk, 1, [Object.objects.get(object_id=5002).state], include_user=False)
        self.assertEqual(2, approvements.count())
        self.assertEqual(State.objects.get(label='s4'), approvements[0].approve_definition.transition.destination_state)
        self.assertEqual(State.objects.get(label='s5'), approvements[1].approve_definition.transition.destination_state)
        approvements = ApprovementService.get_approvements_object_waiting_for_approval(ct.pk, 5002, field.pk, 1, [Object.objects.get(object_id=5002).state], include_user=True)
        self.assertEqual(2, approvements.count())
        self.assertEqual(State.objects.get(label='s4'), approvements[0].approve_definition.transition.destination_state)
        self.assertEqual(State.objects.get(label='s5'), approvements[1].approve_definition.transition.destination_state)

        TransitionApprovement.objects.filter(
            content_type=ct,
            field=field,
            object_id=5002,
            approve_definition__transition__destination_state=State.objects.get(label='s4')
        ).update(skip=True)

        approvements = ApprovementService.get_approvements_object_waiting_for_approval(ct.pk, 5002, field.pk, 1, [Object.objects.get(object_id=5002).state], include_user=False)
        self.assertEqual(1, approvements.count())
        self.assertEqual(State.objects.get(label='s5'), approvements[0].approve_definition.transition.destination_state)
        approvements = ApprovementService.get_approvements_object_waiting_for_approval(ct.pk, 5002, field.pk, 1, [Object.objects.get(object_id=5002).state], include_user=True)
        self.assertEqual(1, approvements.count())
        self.assertEqual(State.objects.get(label='s5'), approvements[0].approve_definition.transition.destination_state)

        TransitionApprovement.objects.filter(
            content_type=ct,
            field=field,
            object_id=5002,
            approve_definition__transition__destination_state=State.objects.get(label='s4')
        ).update(skip=False)
        TransitionApprovement.objects.filter(
            content_type=ct,
            field=field,
            object_id=5002,
            approve_definition__transition__destination_state=State.objects.get(label='s5')
        ).update(skip=True)

        approvements = ApprovementService.get_approvements_object_waiting_for_approval(ct.pk, 5002, field.pk, 1, [Object.objects.get(object_id=5002).state], include_user=False)
        self.assertEqual(1, approvements.count())
        self.assertEqual(State.objects.get(label='s4'), approvements[0].approve_definition.transition.destination_state)
        approvements = ApprovementService.get_approvements_object_waiting_for_approval(ct.pk, 5002, field.pk, 1, [Object.objects.get(object_id=5002).state], include_user=True)
        self.assertEqual(1, approvements.count())
        self.assertEqual(State.objects.get(label='s4'), approvements[0].approve_definition.transition.destination_state)

        TransitionApprovement.objects.filter(
            content_type=ct,
            field=field,
            object_id=5002,
            approve_definition__transition__destination_state__in=State.objects.filter(label__in=['s4', 's5'])
        ).update(skip=True)

        approvements = ApprovementService.get_approvements_object_waiting_for_approval(ct.pk, 5002, field.pk, 1, [Object.objects.get(object_id=5002).state], include_user=False)
        self.assertEqual(4, approvements.count())
        self.assertEqual(State.objects.get(label='s4.1'), approvements[0].approve_definition.transition.destination_state)
        self.assertEqual(State.objects.get(label='s4.2'), approvements[1].approve_definition.transition.destination_state)
        self.assertEqual(State.objects.get(label='s5.1'), approvements[2].approve_definition.transition.destination_state)
        self.assertEqual(State.objects.get(label='s5.2'), approvements[3].approve_definition.transition.destination_state)
        approvements = ApprovementService.get_approvements_object_waiting_for_approval(ct.pk, 5002, field.pk, 1, [Object.objects.get(object_id=5002).state], include_user=True)
        self.assertEqual(4, approvements.count())
        self.assertEqual(State.objects.get(label='s4.1'), approvements[0].approve_definition.transition.destination_state)
        self.assertEqual(State.objects.get(label='s4.2'), approvements[1].approve_definition.transition.destination_state)
        self.assertEqual(State.objects.get(label='s5.1'), approvements[2].approve_definition.transition.destination_state)
        self.assertEqual(State.objects.get(label='s5.2'), approvements[3].approve_definition.transition.destination_state)

        TransitionApprovement.objects.filter(
            content_type=ct,
            field=field,
            object_id=5002,
            approve_definition__transition__destination_state__in=State.objects.filter(label__in=['s4.1', 's5.1'])
        ).update(skip=True)

        approvements = ApprovementService.get_approvements_object_waiting_for_approval(ct.pk, 5002, field.pk, 1, [Object.objects.get(object_id=5002).state], include_user=False)
        self.assertEqual(2, approvements.count())
        self.assertEqual(State.objects.get(label='s4.2'), approvements[0].approve_definition.transition.destination_state)
        self.assertEqual(State.objects.get(label='s5.2'), approvements[1].approve_definition.transition.destination_state)
        approvements = ApprovementService.get_approvements_object_waiting_for_approval(ct.pk, 5002, field.pk, 1, [Object.objects.get(object_id=5002).state], include_user=True)
        self.assertEqual(2, approvements.count())
        self.assertEqual(State.objects.get(label='s4.2'), approvements[0].approve_definition.transition.destination_state)
        self.assertEqual(State.objects.get(label='s5.2'), approvements[1].approve_definition.transition.destination_state)
Exemplo n.º 7
0
def init_approvements(request, content_type_id, object_id, field_id):
    return ApprovementService.init_approvements(content_type_id, object_id, field_id)