def _add_smail(request, inforequest_pk, form_class): assert form_class.action_type in Action.OBLIGEE_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) button = clean_button(request.POST, [u'add', 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 == u'add': form = form_class(request.POST, inforequest=inforequest, attached_to=attached_to) if not form.is_valid(): return json_form(request, form, inforequest=inforequest) action = Action(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) return json_success(request, inforequest, action) return HttpResponseBadRequest()
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()