Example #1
0
        def deferred(inforequest):
            branch = Branch(
                inforequest=inforequest,
                obligee=self.cleaned_data[u'obligee'],
            )
            branch.save()

            action = Action(
                branch=branch,
                type=Action.TYPES.REQUEST,
                subject=self.cleaned_data[u'subject'],
                content=self.cleaned_data[u'content'],
                effective_date=inforequest.submission_date,
            )
            action.save()
            action.attachment_set = self.cleaned_data[u'attachments']

            if self.cleaned_data[u'send_email']:
                action.send_by_email()
Example #2
0
        def deferred(inforequest):
            branch = Branch(
                    inforequest=inforequest,
                    obligee=self.cleaned_data[u'obligee'],
                    )
            branch.save()

            action = Action(
                    branch=branch,
                    type=Action.TYPES.REQUEST,
                    subject=self.cleaned_data[u'subject'],
                    content=self.cleaned_data[u'content'],
                    effective_date=inforequest.submission_date,
                    )
            action.save()
            action.attachment_set = self.cleaned_data[u'attachments']

            if self.cleaned_data[u'send_email']:
                action.send_by_email()
Example #3
0
def _new_action(request, inforequest_pk, form_class):
    assert form_class.action_type in Action.APPLICANT_ACTION_TYPES

    inforequest = (
        Inforequest.objects.not_closed()
        .owned_by(request.user)
        .prefetch_related(Inforequest.prefetch_branches(None, Branch.objects.select_related(u"historicalobligee")))
        .prefetch_related(Branch.prefetch_last_action(u"branches"))
        .get_or_404(pk=inforequest_pk)
    )

    if request.method != u"POST":  # The user can save a draft even if he may not submit.
        if inforequest.has_undecided_emails:
            return HttpResponseNotFound()
        if not inforequest.can_add_action(form_class.action_type):
            return HttpResponseNotFound()

    draft = inforequest.actiondraft_set.filter(type=form_class.action_type).order_by_pk().first()
    session = Session.objects.get(session_key=request.session.session_key)
    attached_to = (session, draft) if draft else (session,)

    if request.method != u"POST":
        form = form_class(inforequest=inforequest, attached_to=attached_to)
        if draft:
            form.load_from_draft(draft)
        return render_form(request, form, inforequest=inforequest)

    if form_class.action_type in Action.APPLICANT_EMAIL_ACTION_TYPES:
        button = clean_button(request.POST, [u"email", u"print", u"draft"])
    else:
        button = clean_button(request.POST, [u"print", u"draft"])

    if button == u"draft":
        form = form_class(request.POST, inforequest=inforequest, attached_to=attached_to, draft=True)
        if not form.is_valid():
            return json_form(request, form, inforequest=inforequest)
        if not draft:
            draft = ActionDraft(inforequest=inforequest, type=form_class.action_type)
        form.save_to_draft(draft)
        draft.save()
        return json_draft()

    if button in [u"email", u"print"]:
        form = form_class(request.POST, inforequest=inforequest, attached_to=attached_to)
        if not form.is_valid():
            return json_form(request, form, inforequest=inforequest)
        if form_class.action_type == Action.TYPES.APPEAL:
            form.cleaned_data[u"branch"].add_expiration_if_expired()
        action = Action(effective_date=local_today(), type=form_class.action_type)
        form.save(action)
        action.save()
        if draft:
            draft.delete()
        # The inforequest was changed, we need to refetch it.
        inforequest = Inforequest.objects.prefetch_detail().get(pk=inforequest.pk)
        action.branch = inforequest.branch_by_pk(action.branch_id)
        if button == u"email":
            action.send_by_email()
        return json_success(request, inforequest, action, button == u"print")

    return HttpResponseBadRequest()