Ejemplo n.º 1
0
def init_object_approvements_view(request, content_type_id, obj_pk, state_field):
    try:
        ApprovementService.init_approvements(content_type_id, obj_pk, state_field)
        return HttpResponse(json.dumps({}), content_type='application/json')

    except Exception, e:
        return HttpResponseBadRequest(json.dumps({'error_message': e.message}), content_type='application/json')
 def handle(self, *args, **options):
     for model in models.get_models(include_auto_created=True):
         for field in model._meta.fields:
             if isinstance(field, StateField):
                 content_type = ContentType.objects.get_for_model(model)
                 for obj in model.objects.all():
                     ApprovementService.apply_approvements(content_type.pk, obj.pk, field.name)
Ejemplo n.º 3
0
 def handle(self, *args, **options):
     for model in models.get_models(include_auto_created=True):
         for field in model._meta.fields:
             if isinstance(field, StateField):
                 content_type = ContentType.objects.get_for_model(model)
                 for obj in model.objects.all():
                     ApprovementService.apply_approvements(
                         content_type.pk, obj.pk, field.name)
Ejemplo n.º 4
0
def init_object_approvements_view(request, content_type_id, obj_pk,
                                  state_field):
    try:
        ApprovementService.init_approvements(content_type_id, obj_pk,
                                             state_field)
        return HttpResponse(json.dumps({}), content_type='application/json')

    except Exception, e:
        return HttpResponseBadRequest(json.dumps({'error_message': e.message}),
                                      content_type='application/json')
Ejemplo n.º 5
0
 def _post_save(self, **kwargs):  # signal, sender, instance):
     """
     Desc:  Generate TransitionApprovements according to TransitionApproverDefinition of the content type at the beginning.
     :param kwargs:
     :return:
     """
     instance = kwargs['instance']
     transition_approvements = TransitionApprovement.objects.filter(content_type=ContentType.objects.get_for_model(instance), object_pk=instance.pk)
     if transition_approvements.count() == 0:
         ApprovementService._init_approvements(instance, self.name)
Ejemplo n.º 6
0
 def _post_save(self, **kwargs):  # signal, sender, instance):
     """
     Desc:  Generate TransitionApprovements according to TransitionApproverDefinition of the content type at the beginning.
     :param kwargs:
     :return:
     """
     instance = kwargs['instance']
     transition_approvements = TransitionApprovement.objects.filter(
         content_type=ContentType.objects.get_for_model(instance),
         object_pk=instance.pk)
     if transition_approvements.count() == 0:
         ApprovementService._init_approvements(instance, self.name)
 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)
Ejemplo n.º 12
0
def daw_on_approval_count(context, cls, state_field, button_href, button_text=ugettext('On Approvals')):
    content_type = ContentType.objects.get_for_model(cls)

    objects = ObjectService.get_objects_waiting_for_approval(content_type, state_field)
    ctx = context
    ctx['is_user_authorized'] = ApprovementService.has_user_any_action(content_type, state_field)
    ctx['on_approval_count_button_href'] = button_href
    ctx['on_approval_count_button_text'] = button_text
    ctx['on_approval_count'] = objects.count()
    return ctx
def _post_save(*args, **kwargs):  # signal, sender, instance):
    """
    Desc:  Generate TransitionApprovements according to TransitionApproverDefinition of the content type at the beginning.
    :param kwargs:
    :return:
    """
    from daw.utils.fields import StateField
    from daw.models import TransitionApprovement

    instance = kwargs['instance']
    model = instance.__class__
    fields = []
    for f in model._meta.fields:
        if isinstance(f, StateField):
            fields.append(f)
    transition_approvements = TransitionApprovement.objects.filter(content_type=ContentType.objects.get_for_model(instance), object_pk=instance.pk)
    if transition_approvements.count() == 0:
        for f in fields:
            ApprovementService._init_approvements(instance, f.name)
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 _post_save(*args, **kwargs):  # signal, sender, instance):
    """
    Desc:  Generate TransitionApprovements according to TransitionApproverDefinition of the content type at the beginning.
    :param kwargs:
    :return:
    """
    from daw.utils.fields import StateField
    from daw.models import TransitionApprovement

    instance = kwargs['instance']
    model = instance.__class__
    fields = []
    for f in model._meta.fields:
        if isinstance(f, StateField):
            fields.append(f)
    transition_approvements = TransitionApprovement.objects.filter(
        content_type=ContentType.objects.get_for_model(instance),
        object_pk=instance.pk)
    if transition_approvements.count() == 0:
        for f in fields:
            ApprovementService._init_approvements(instance, f.name)
    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())
Ejemplo n.º 17
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)