def process(obj, field, action, state=None):
     current_state = getattr(obj, field)
     approvements = ApprovementService.get_approvements_object_waiting_for_approval(
         obj, [current_state])
     c = approvements.count()
     if c == 0:
         raise Exception(
             "There is no available state for destination for the user.")
     if c > 1:
         if state:
             approvements = approvements.filter(
                 approve_definition__transition__destination_state=state)
             if approvements.count() == 0:
                 available_states = StateService.get_available_states(
                     obj, field)
                 raise Exception(
                     "Invalid state is given(%s). Valid states is(are) %s" %
                     (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 = middleware.get_user()
     approvement.transaction_date = datetime.now()
     approvement.save()
     return approvement
 def _approve_transition(obj, field, state=None):
     approvement = TransitionService.process(obj, field, APPROVED, state)
     current_state = getattr(obj, field)
     required_approvements = ApprovementService.get_approvements_object_waiting_for_approval(obj, [current_state], include_user=False, destination_state=state)
     if required_approvements.count() == 0:
         setattr(obj, field, approvement.approve_definition.transition.destination_state)
         obj.save()
 def get_objects_waiting_for_approval(content_type, field):
     model = content_type.model_class()
     object_pks = []
     for obj in model.objects.all():
         current_state = getattr(obj, field)
         approvements = ApprovementService.get_approvements_object_waiting_for_approval(obj, [current_state])
         if approvements.count():
             object_pks.append(obj.pk)
     return model.objects.filter(pk__in=object_pks)
 def _approve_transition(obj, field, state=None):
     approvement = TransitionService.process(obj, field, APPROVED, state)
     current_state = getattr(obj, field)
     required_approvements = ApprovementService.get_approvements_object_waiting_for_approval(
         obj, [current_state], include_user=False, destination_state=state)
     if required_approvements.count() == 0:
         setattr(
             obj, field,
             approvement.approve_definition.transition.destination_state)
         obj.save()
 def get_objects_waiting_for_approval(content_type, field):
     model = content_type.model_class()
     object_pks = []
     for obj in model.objects.all():
         current_state = getattr(obj, field)
         approvements = ApprovementService.get_approvements_object_waiting_for_approval(
             obj, [current_state])
         if approvements.count():
             object_pks.append(obj.pk)
     return model.objects.filter(pk__in=object_pks)
def daw_process_buttons(context, obj_pk, cls, state_field, approve_button_text=None, reject_button_text=None):
    cls = ContentType.objects.get_for_model(cls).model_class()
    obj = cls.objects.get(pk=obj_pk)
    waiting_approvements = ApprovementService.get_approvements_object_waiting_for_approval(obj, [getattr(obj, state_field)])

    ctx = context
    ctx['approvements'] = waiting_approvements
    ctx['obj_pk'] = obj_pk
    ctx['approve_button_text'] = approve_button_text
    ctx['reject_button_text'] = reject_button_text
    return ctx
    def test_get_approvements_object_waiting_for_approval_without_skip(self):
        middleware.get_user = MagicMock(return_value=User.objects.get(pk=2001))
        approvements = ApprovementService.get_approvements_object_waiting_for_approval(
            TestModel.objects.get(pk=5001),
            [TestModel.objects.get(pk=5001).test_field],
            include_user=False)
        self.assertEqual(1, approvements.count())
        approvements = ApprovementService.get_approvements_object_waiting_for_approval(
            TestModel.objects.get(pk=5001),
            [TestModel.objects.get(pk=5001).test_field],
            include_user=True)
        self.assertEqual(1, approvements.count())

        middleware.get_user = MagicMock(return_value=User.objects.get(pk=2002))
        approvements = ApprovementService.get_approvements_object_waiting_for_approval(
            TestModel.objects.get(pk=5001),
            [TestModel.objects.get(pk=5001).test_field],
            include_user=False)
        self.assertEqual(1, approvements.count())
        approvements = ApprovementService.get_approvements_object_waiting_for_approval(
            TestModel.objects.get(pk=5001),
            [TestModel.objects.get(pk=5001).test_field],
            include_user=True)
        self.assertEqual(0, approvements.count())

        middleware.get_user = MagicMock(return_value=User.objects.get(pk=2003))
        approvements = ApprovementService.get_approvements_object_waiting_for_approval(
            TestModel.objects.get(pk=5001),
            [TestModel.objects.get(pk=5001).test_field],
            include_user=False)
        self.assertEqual(1, approvements.count())
        approvements = ApprovementService.get_approvements_object_waiting_for_approval(
            TestModel.objects.get(pk=5001),
            [TestModel.objects.get(pk=5001).test_field],
            include_user=True)
        self.assertEqual(0, approvements.count())

        middleware.get_user = MagicMock(return_value=User.objects.get(pk=2004))
        approvements = ApprovementService.get_approvements_object_waiting_for_approval(
            TestModel.objects.get(pk=5001),
            [TestModel.objects.get(pk=5001).test_field],
            include_user=False)
        self.assertEqual(1, approvements.count())
        approvements = ApprovementService.get_approvements_object_waiting_for_approval(
            TestModel.objects.get(pk=5001),
            [TestModel.objects.get(pk=5001).test_field],
            include_user=True)
        self.assertEqual(0, approvements.count())
Exemple #8
0
def daw_process_buttons(context,
                        obj_pk,
                        cls,
                        state_field,
                        approve_button_text=None,
                        reject_button_text=None):
    cls = ContentType.objects.get_for_model(cls).model_class()
    obj = cls.objects.get(pk=obj_pk)
    waiting_approvements = ApprovementService.get_approvements_object_waiting_for_approval(
        obj, [getattr(obj, state_field)])

    ctx = context
    ctx['approvements'] = waiting_approvements
    ctx['obj_pk'] = obj_pk
    ctx['approve_button_text'] = approve_button_text
    ctx['reject_button_text'] = reject_button_text
    return ctx
 def process(obj, field, action, state=None):
     current_state = getattr(obj, field)
     approvements = ApprovementService.get_approvements_object_waiting_for_approval(obj, [current_state])
     c = approvements.count()
     if c == 0:
         raise Exception("There is no available state for destination for the user.")
     if c > 1:
         if state:
             approvements = approvements.filter(approve_definition__transition__destination_state=state)
             if approvements.count() == 0:
                 available_states = StateService.get_available_states(obj, field)
                 raise Exception("Invalid state is given(%s). Valid states is(are) %s" % (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 = middleware.get_user()
     approvement.transaction_date = datetime.now()
     approvement.save()
     return approvement
    def test_get_approvements_object_waiting_for_approval_with_skip(self):
        middleware.get_user = MagicMock(return_value=User.objects.get(pk=2001))

        approvements = ApprovementService.get_approvements_object_waiting_for_approval(
            TestModel.objects.get(pk=5002),
            [TestModel.objects.get(pk=5002).test_field],
            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(
            TestModel.objects.get(pk=5002),
            [TestModel.objects.get(pk=5002).test_field],
            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=ContentType.objects.get_for_model(TestModel),
            object_pk=5002,
            approve_definition__transition__destination_state=State.objects.
            get(label='s2')).update(skip=True)

        approvements = ApprovementService.get_approvements_object_waiting_for_approval(
            TestModel.objects.get(pk=5002),
            [TestModel.objects.get(pk=5002).test_field],
            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(
            TestModel.objects.get(pk=5002),
            [TestModel.objects.get(pk=5002).test_field],
            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=ContentType.objects.get_for_model(TestModel),
            object_pk=5002,
            approve_definition__transition__destination_state=State.objects.
            get(label='s3')).update(skip=True)

        approvements = ApprovementService.get_approvements_object_waiting_for_approval(
            TestModel.objects.get(pk=5002),
            [TestModel.objects.get(pk=5002).test_field],
            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(
            TestModel.objects.get(pk=5002),
            [TestModel.objects.get(pk=5002).test_field],
            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=ContentType.objects.get_for_model(TestModel),
            object_pk=5002,
            approve_definition__transition__destination_state=State.objects.
            get(label='s4')).update(skip=True)

        approvements = ApprovementService.get_approvements_object_waiting_for_approval(
            TestModel.objects.get(pk=5002),
            [TestModel.objects.get(pk=5002).test_field],
            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(
            TestModel.objects.get(pk=5002),
            [TestModel.objects.get(pk=5002).test_field],
            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=ContentType.objects.get_for_model(TestModel),
            object_pk=5002,
            approve_definition__transition__destination_state=State.objects.
            get(label='s4')).update(skip=False)
        TransitionApprovement.objects.filter(
            content_type=ContentType.objects.get_for_model(TestModel),
            object_pk=5002,
            approve_definition__transition__destination_state=State.objects.
            get(label='s5')).update(skip=True)

        approvements = ApprovementService.get_approvements_object_waiting_for_approval(
            TestModel.objects.get(pk=5002),
            [TestModel.objects.get(pk=5002).test_field],
            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(
            TestModel.objects.get(pk=5002),
            [TestModel.objects.get(pk=5002).test_field],
            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=ContentType.objects.get_for_model(TestModel),
            object_pk=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(
            TestModel.objects.get(pk=5002),
            [TestModel.objects.get(pk=5002).test_field],
            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(
            TestModel.objects.get(pk=5002),
            [TestModel.objects.get(pk=5002).test_field],
            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=ContentType.objects.get_for_model(TestModel),
            object_pk=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(
            TestModel.objects.get(pk=5002),
            [TestModel.objects.get(pk=5002).test_field],
            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(
            TestModel.objects.get(pk=5002),
            [TestModel.objects.get(pk=5002).test_field],
            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)