示例#1
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
示例#2
0
    def test_get_available_states(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))
        available_states = StateService.get_available_states(ct.pk, 5001, field.pk, 2, 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(ct.pk, 5001, field.pk, 2, include_user=True)
        self.assertEqual(0, available_states.count())
        available_states = StateService.get_available_states(ct.pk, 5001, field.pk, 2)
        self.assertEqual(0, available_states.count())

        obj = TestModel.objects.get(pk=5001)
        available_states = StateService.get_available_states(ct.pk, 5001, field.pk, 3, 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(ct.pk, 5001, field.pk, 3, include_user=True)
        self.assertEqual(0, available_states.count())
        available_states = StateService.get_available_states(ct.pk, 5001, field.pk, 3)
        self.assertEqual(0, available_states.count())

        obj = TestModel.objects.get(pk=5001)
        available_states = StateService.get_available_states(ct.pk, 5001, field.pk, 4, 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(ct.pk, 5001, field.pk, 4, include_user=True)
        self.assertEqual(0, available_states.count())
        available_states = StateService.get_available_states(ct.pk, 5001, field.pk, 4)
        self.assertEqual(0, available_states.count())

        obj = TestModel.objects.get(pk=5001)
        available_states = StateService.get_available_states(ct.pk, 5001, field.pk, 1, 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(ct.pk, 5001, field.pk, 1, 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(ct.pk, 5001, field.pk, 1)
        self.assertEqual(1, available_states.count())
        self.assertEqual(State.objects.get(label='s2'), available_states[0])