Ejemplo n.º 1
0
    def pre_transition(self):
        res = super(IsByEmail, self).pre_transition()

        if self.wizard.email:
            res.globals[u'delivered_date'] = local_date(self.wizard.email.processed)
            res.globals[u'attachments'] = None
            res.next = CanAddClarificationRequest
        else:
            res.next = InputBasics

        return res
Ejemplo n.º 2
0
 def __init__(self, *args, **kwargs):
     self.instance = kwargs.pop(u'instance')
     attached_to = kwargs.pop(u'attached_to')
     super(InforequestEmailAdminDecideForm, self).__init__(*args, **kwargs)
     self.fields[u'branch'].queryset = Branch.objects.filter(inforequest=self.instance.inforequest).order_by_pk()
     self.fields[u'branch'].widget.url_params = dict(inforequest=self.instance.inforequest)
     self.fields[u'subject'].initial = self.instance.email.subject
     self.fields[u'content'].initial = self.instance.email.text
     self.fields[u'attachments'].initial = self.instance.email.attachment_set.order_by_pk()
     self.fields[u'attachments'].attached_to = [self.instance.email, attached_to]
     self.fields[u'effective_date'].initial = local_date(self.instance.email.processed)
Ejemplo n.º 3
0
    def pre_transition(self):
        res = super(IsByEmail, self).pre_transition()

        if self.wizard.email:
            res.globals[u'delivered_date'] = local_date(
                self.wizard.email.processed)
            res.globals[u'attachments'] = None
            res.next = CanAddClarificationRequest
        else:
            res.next = InputBasics

        return res
Ejemplo n.º 4
0
def _decide_email(request, inforequest_pk, email_pk, form_class):
    assert form_class.action_type in Action.OBLIGEE_EMAIL_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)
            )
    inforequestemail = (inforequest.inforequestemail_set
            .undecided()
            .oldest()
            .select_related(u'email')
            .get_or_404()
            )
    email = inforequestemail.email

    if email.pk != Message._meta.pk.to_python(email_pk):
        return HttpResponseNotFound()
    if not inforequest.can_add_action(form_class.action_type):
        return HttpResponseNotFound()

    if request.method != u'POST':
        form = form_class(inforequest=inforequest)
        return render_form(request, form, inforequest=inforequest, email=email)

    form = form_class(request.POST, inforequest=inforequest)
    if not form.is_valid():
        return json_form(request, form, inforequest=inforequest, email=email)

    action = Action(
            subject=email.subject,
            content=email.text,
            effective_date=local_date(email.processed),
            email=email,
            type=form_class.action_type,
            )
    form.save(action)
    action.save()

    for attch in email.attachments:
        attachment = attch.clone(action)
        attachment.save()

    inforequestemail.type = InforequestEmail.TYPES.OBLIGEE_ACTION
    inforequestemail.save(update_fields=[u'type'])

    # The inforequest was changed, we need to refetch it
    inforequest = Inforequest.objects.prefetch_detail().get(pk=inforequest.pk)
    return json_success(request, inforequest, action)
Ejemplo n.º 5
0
def obligee_deadline_reminder():
    with translation(settings.LANGUAGE_CODE):
        inforequests = (Inforequest.objects.not_closed().
                        without_undecided_email().prefetch_related(
                            Inforequest.prefetch_branches()).prefetch_related(
                                Branch.prefetch_last_action(u'branches')))

        filtered = []
        for inforequest in inforequests:
            for branch in inforequest.branches:
                try:
                    if not branch.last_action.has_obligee_deadline:
                        continue
                    if not branch.last_action.deadline_missed:
                        continue
                    # The last reminder was sent after the deadline was extended for the last time iff
                    # the extended deadline was missed before the reminder was sent. We don't want to
                    # send any more reminders if the last reminder was sent after the deadline was
                    # extended for the last time.
                    last = branch.last_action.last_deadline_reminder
                    last_date = local_date(last) if last else None
                    if last and branch.last_action.deadline_missed_at(
                            last_date):
                        continue
                    nop()  # To let tests raise testing exception here.
                    filtered.append(branch)
                except Exception:
                    cron_logger.error(
                        u'Checking if obligee deadline reminder should be sent failed: %s\n%s'
                        % (repr(branch.last_action), traceback.format_exc()))

        if not filtered:
            return

        filtered = (Branch.objects.select_related(u'inforequest__applicant').
                    select_related(u'historicalobligee').prefetch_related(
                        Branch.prefetch_last_action()).filter(
                            pk__in=(o.pk for o in filtered)))
        for branch in filtered:
            try:
                with transaction.atomic():
                    branch.inforequest.send_obligee_deadline_reminder(
                        branch.last_action)
                    nop()  # To let tests raise testing exception here.
                    cron_logger.info(
                        u'Sent obligee deadline reminder: %s' %
                        repr(branch.last_action))  # pragma: no branch
            except Exception:
                cron_logger.error(
                    u'Sending obligee deadline reminder failed: %s\n%s' %
                    (repr(branch.last_action), traceback.format_exc()))
Ejemplo n.º 6
0
    def save_action(self):
        assert self.values[u'result'] == u'action'
        assert self.values[u'result_action'] in Action.OBLIGEE_ACTION_TYPES
        assert not self.email or self.values[
            u'result_action'] in Action.OBLIGEE_EMAIL_ACTION_TYPES
        assert self.values[u'result_branch'].can_add_action(
            self.values[u'result_action'])

        action = Action(type=self.values[u'result_action'])
        action.branch = self.values[u'result_branch']
        action.email = self.email if self.email else None
        action.subject = self.email.subject if self.email else u''
        action.content = self.email.text if self.email else u''
        action.effective_date = (local_date(self.email.processed) if self.email
                                 else self.values[u'result_effective_date'])
        action.file_number = self.values.get(u'result_file_number', u'')
        action.deadline = self.values.get(u'result_deadline', None)
        action.disclosure_level = self.values.get(u'result_disclosure_level',
                                                  None)
        action.refusal_reason = self.values.get(u'result_refusal_reason', None)
        action.save()

        if self.email:
            for attch in self.email.attachments:
                attachment = attch.clone(action)
                attachment.save()
        else:
            action.attachment_set = self.values[u'result_attachments']

        for obligee in self.values.get(u'result_advanced_to', []):
            if obligee:
                sub_branch = Branch(
                    obligee=obligee,
                    inforequest=action.branch.inforequest,
                    advanced_by=action,
                )
                sub_branch.save()

                sub_action = Action(
                    branch=sub_branch,
                    effective_date=action.effective_date,
                    type=Action.TYPES.ADVANCED_REQUEST,
                )
                sub_action.save()

        if self.email:
            self.inforequestemail.type = InforequestEmail.TYPES.OBLIGEE_ACTION
            self.inforequestemail.save(update_fields=[u'type'])

        return action
Ejemplo n.º 7
0
def obligee_deadline_reminder():
    with translation(settings.LANGUAGE_CODE):
        inforequests = (Inforequest.objects
                .not_closed()
                .without_undecided_email()
                .prefetch_related(Inforequest.prefetch_branches())
                .prefetch_related(Branch.prefetch_last_action(u'branches'))
                )

        filtered = []
        for inforequest in inforequests:
            for branch in inforequest.branches:
                action = branch.last_action
                try:
                    if not action.has_obligee_deadline_snooze_missed:
                        continue
                    # The last reminder was sent after the applicant snoozed for the last time iff
                    # the snooze was missed before the reminder was sent. We don't want to send any
                    # more reminders if the last reminder was sent after the last snooze.
                    last = action.last_deadline_reminder
                    last_date = local_date(last) if last else None
                    if last and action.deadline.is_snooze_missed_at(last_date):
                        continue
                    filtered.append(branch)
                except Exception:
                    msg = u'Checking if obligee deadline reminder should be sent failed: {}\n{}'
                    trace = unicode(traceback.format_exc(), u'utf-8')
                    cron_logger.error(msg.format(action, trace))

        if not filtered:
            return

        filtered = (Branch.objects
                .select_related(u'inforequest__applicant')
                .select_related(u'historicalobligee')
                .prefetch_related(Branch.prefetch_last_action())
                .filter(pk__in=(o.pk for o in filtered))
                )
        for branch in filtered:
            try:
                with transaction.atomic():
                    branch.inforequest.send_obligee_deadline_reminder(branch.last_action)
                    msg = u'Sent obligee deadline reminder: {}'
                    cron_logger.info(msg.format(branch.last_action))
            except Exception:
                msg = u'Sending obligee deadline reminder failed: {}\n{}'
                trace = unicode(traceback.format_exc(), u'utf-8')
                cron_logger.error(msg.format(branch.last_action, trace))
Ejemplo n.º 8
0
def obligee_deadline_reminder():
    with translation(settings.LANGUAGE_CODE):
        inforequests = (Inforequest.objects
                .not_closed()
                .without_undecided_email()
                .prefetch_related(Inforequest.prefetch_branches())
                .prefetch_related(Branch.prefetch_last_action(u'branches'))
                )

        filtered = []
        for inforequest in inforequests:
            for branch in inforequest.branches:
                try:
                    if not branch.last_action.has_obligee_deadline:
                        continue
                    if not branch.last_action.deadline_missed:
                        continue
                    # The last reminder was sent after the deadline was extended for the last time iff
                    # the extended deadline was missed before the reminder was sent. We don't want to
                    # send any more reminders if the last reminder was sent after the deadline was
                    # extended for the last time.
                    last = branch.last_action.last_deadline_reminder
                    last_date = local_date(last) if last else None
                    if last and branch.last_action.deadline_missed_at(last_date):
                        continue
                    nop() # To let tests raise testing exception here.
                    filtered.append(branch)
                except Exception:
                    cron_logger.error(u'Checking if obligee deadline reminder should be sent failed: %s\n%s' % (repr(branch.last_action), traceback.format_exc()))

        if not filtered:
            return

        filtered = (Branch.objects
                .select_related(u'inforequest__applicant')
                .select_related(u'historicalobligee')
                .prefetch_related(Branch.prefetch_last_action())
                .filter(pk__in=(o.pk for o in filtered))
                )
        for branch in filtered:
            try:
                with transaction.atomic():
                    branch.inforequest.send_obligee_deadline_reminder(branch.last_action)
                    nop() # To let tests raise testing exception here.
                    cron_logger.info(u'Sent obligee deadline reminder: %s' % repr(branch.last_action)) # pragma: no branch
            except Exception:
                cron_logger.error(u'Sending obligee deadline reminder failed: %s\n%s' % (repr(branch.last_action), traceback.format_exc()))
Ejemplo n.º 9
0
def obligee_deadline_reminder():
    with translation(settings.LANGUAGE_CODE):
        inforequests = (Inforequest.objects.not_closed().
                        without_undecided_email().prefetch_related(
                            Inforequest.prefetch_branches()).prefetch_related(
                                Branch.prefetch_last_action(u'branches')))

        filtered = []
        for inforequest in inforequests:
            for branch in inforequest.branches:
                action = branch.last_action
                try:
                    if not action.has_obligee_deadline_snooze_missed:
                        continue
                    # The last reminder was sent after the applicant snoozed for the last time iff
                    # the snooze was missed before the reminder was sent. We don't want to send any
                    # more reminders if the last reminder was sent after the last snooze.
                    last = action.last_deadline_reminder
                    last_date = local_date(last) if last else None
                    if last and action.deadline.is_snooze_missed_at(last_date):
                        continue
                    filtered.append(branch)
                except Exception:
                    msg = u'Checking if obligee deadline reminder should be sent failed: {}\n{}'
                    trace = unicode(traceback.format_exc(), u'utf-8')
                    cron_logger.error(msg.format(action, trace))

        if not filtered:
            return

        filtered = (Branch.objects.select_related(u'inforequest__applicant').
                    select_related(u'historicalobligee').prefetch_related(
                        Branch.prefetch_last_action()).filter(
                            pk__in=(o.pk for o in filtered)))
        for branch in filtered:
            try:
                with transaction.atomic():
                    branch.inforequest.send_obligee_deadline_reminder(
                        branch.last_action)
                    msg = u'Sent obligee deadline reminder: {}'
                    cron_logger.info(msg.format(branch.last_action))
            except Exception:
                msg = u'Sending obligee deadline reminder failed: {}\n{}'
                trace = unicode(traceback.format_exc(), u'utf-8')
                cron_logger.error(msg.format(branch.last_action, trace))
Ejemplo n.º 10
0
 def __init__(self, *args, **kwargs):
     self.instance = kwargs.pop(u'instance')
     attached_to = kwargs.pop(u'attached_to')
     super(InforequestEmailAdminDecideForm, self).__init__(*args, **kwargs)
     self.fields[u'branch'].queryset = Branch.objects.filter(
         inforequest=self.instance.inforequest).order_by_pk()
     self.fields[u'branch'].widget.url_params = dict(
         inforequest=self.instance.inforequest)
     self.fields[u'subject'].initial = self.instance.email.subject
     self.fields[u'content'].initial = self.instance.email.text
     self.fields[
         u'attachments'].initial = self.instance.email.attachment_set.order_by_pk(
         )
     self.fields[u'attachments'].attached_to = [
         self.instance.email, attached_to
     ]
     self.fields[u'effective_date'].initial = local_date(
         self.instance.email.processed)
Ejemplo n.º 11
0
def undecided_email_reminder():
    with translation(settings.LANGUAGE_CODE):
        inforequests = (Inforequest.objects.not_closed().with_undecided_email(
        ).prefetch_related(Inforequest.prefetch_newest_undecided_email()))

        filtered = []
        for inforequest in inforequests:
            try:
                email = inforequest.newest_undecided_email
                last = inforequest.last_undecided_email_reminder
                if last and last > email.processed:
                    continue
                days = workdays.between(local_date(email.processed),
                                        local_today())
                if days < 5:
                    continue
                nop()  # To let tests raise testing exception here.
                filtered.append(inforequest)
            except Exception:
                cron_logger.error(
                    u'Checking if undecided email reminder should be sent failed: %s\n%s'
                    % (repr(inforequest), traceback.format_exc()))

        if not filtered:
            return

        filtered = (Inforequest.objects.select_related(
            u'applicant').select_undecided_emails_count().prefetch_related(
                Inforequest.prefetch_main_branch(
                    None, Branch.objects.select_related(u'historicalobligee'))
            ).prefetch_related(
                Inforequest.prefetch_newest_undecided_email()).filter(
                    pk__in=(o.pk for o in filtered)))
        for inforequest in filtered:
            try:
                with transaction.atomic():
                    inforequest.send_undecided_email_reminder()
                    nop()  # To let tests raise testing exception here.
                    cron_logger.info(u'Sent undecided email reminder: %s' %
                                     repr(inforequest))  # pragma: no branch
            except Exception:
                cron_logger.error(
                    u'Sending undecided email reminder failed: %s\n%s' %
                    (repr(inforequest), traceback.format_exc()))
Ejemplo n.º 12
0
def undecided_email_reminder():
    with translation(settings.LANGUAGE_CODE):
        inforequests = (Inforequest.objects
                .not_closed()
                .with_undecided_email()
                .prefetch_related(Inforequest.prefetch_newest_undecided_email())
                )

        filtered = []
        for inforequest in inforequests:
            try:
                email = inforequest.newest_undecided_email
                last = inforequest.last_undecided_email_reminder
                if last and last > email.processed:
                    continue
                days = workdays.between(local_date(email.processed), local_today())
                if days < 5:
                    continue
                filtered.append(inforequest)
            except Exception:
                msg = u'Checking if undecided email reminder should be sent failed: {}\n{}'
                trace = unicode(traceback.format_exc(), u'utf-8')
                cron_logger.error(msg.format(inforequest, trace))

        if not filtered:
            return

        filtered = (Inforequest.objects
                .select_related(u'applicant')
                .select_undecided_emails_count()
                .prefetch_related(Inforequest.prefetch_main_branch(None,
                    Branch.objects.select_related(u'historicalobligee')))
                .prefetch_related(Inforequest.prefetch_newest_undecided_email())
                .filter(pk__in=(o.pk for o in filtered))
                )
        for inforequest in filtered:
            try:
                with transaction.atomic():
                    inforequest.send_undecided_email_reminder()
                    cron_logger.info(u'Sent undecided email reminder: {}'.format(inforequest))
            except Exception:
                msg = u'Sending undecided email reminder failed: {}\n{}'
                trace = unicode(traceback.format_exc(), u'utf-8')
                cron_logger.error(msg.format(inforequest, trace))
Ejemplo n.º 13
0
def undecided_email_reminder():
    with translation(settings.LANGUAGE_CODE):
        inforequests = (Inforequest.objects.not_closed().with_undecided_email(
        ).prefetch_related(Inforequest.prefetch_newest_undecided_email()))

        filtered = []
        for inforequest in inforequests:
            try:
                email = inforequest.newest_undecided_email
                last = inforequest.last_undecided_email_reminder
                if last and last > email.processed:
                    continue
                days = workdays.between(local_date(email.processed),
                                        local_today())
                if days < 5:
                    continue
                filtered.append(inforequest)
            except Exception:
                msg = u'Checking if undecided email reminder should be sent failed: {}\n{}'
                trace = unicode(traceback.format_exc(), u'utf-8')
                cron_logger.error(msg.format(inforequest, trace))

        if not filtered:
            return

        filtered = (Inforequest.objects.select_related(
            u'applicant').select_undecided_emails_count().prefetch_related(
                Inforequest.prefetch_main_branch(
                    None, Branch.objects.select_related(u'historicalobligee'))
            ).prefetch_related(
                Inforequest.prefetch_newest_undecided_email()).filter(
                    pk__in=(o.pk for o in filtered)))
        for inforequest in filtered:
            try:
                with transaction.atomic():
                    inforequest.send_undecided_email_reminder()
                    cron_logger.info(
                        u'Sent undecided email reminder: {}'.format(
                            inforequest))
            except Exception:
                msg = u'Sending undecided email reminder failed: {}\n{}'
                trace = unicode(traceback.format_exc(), u'utf-8')
                cron_logger.error(msg.format(inforequest, trace))
Ejemplo n.º 14
0
def undecided_email_reminder():
    with translation(settings.LANGUAGE_CODE):
        inforequests = (Inforequest.objects
                .not_closed()
                .with_undecided_email()
                .prefetch_related(Inforequest.prefetch_newest_undecided_email())
                )

        filtered = []
        for inforequest in inforequests:
            try:
                email = inforequest.newest_undecided_email
                last = inforequest.last_undecided_email_reminder
                if last and last > email.processed:
                    continue
                days = workdays.between(local_date(email.processed), local_today())
                if days < 5:
                    continue
                nop() # To let tests raise testing exception here.
                filtered.append(inforequest)
            except Exception:
                cron_logger.error(u'Checking if undecided email reminder should be sent failed: %s\n%s' % (repr(inforequest), traceback.format_exc()))

        if not filtered:
            return

        filtered = (Inforequest.objects
                .select_related(u'applicant')
                .select_undecided_emails_count()
                .prefetch_related(Inforequest.prefetch_main_branch(None, Branch.objects.select_related(u'historicalobligee')))
                .prefetch_related(Inforequest.prefetch_newest_undecided_email())
                .filter(pk__in=(o.pk for o in filtered))
                )
        for inforequest in filtered:
            try:
                with transaction.atomic():
                    inforequest.send_undecided_email_reminder()
                    nop() # To let tests raise testing exception here.
                    cron_logger.info(u'Sent undecided email reminder: %s' % repr(inforequest)) # pragma: no branch
            except Exception:
                cron_logger.error(u'Sending undecided email reminder failed: %s\n%s' % (repr(inforequest), traceback.format_exc()))
Ejemplo n.º 15
0
 def test_local_date(self):
     value = local_date(self._parse_dt(u'2014-12-10 15:45:00', u'UTC'))
     self._check_date(value, u'2014-12-10')
Ejemplo n.º 16
0
 def test_local_date_with_day_change(self):
     value = local_date(self._parse_dt(u'2014-12-10 23:45:00', u'UTC'))
     self._check_date(value, u'2014-12-11')
Ejemplo n.º 17
0
 def test_local_date_with_tz_as_tzinfo(self):
     value = local_date(self._parse_dt(u'2014-12-10 15:45:00', u'UTC'),
                        pytz.timezone(u'America/Montreal'))
     self._check_date(value, u'2014-12-10')
Ejemplo n.º 18
0
 def test_local_date_with_tz_as_string(self):
     value = local_date(self._parse_dt(u'2014-12-10 15:45:00', u'UTC'),
                        u'America/Montreal')
     self._check_date(value, u'2014-12-10')
Ejemplo n.º 19
0
 def test_local_date(self):
     value = local_date(self._parse_dt(u'2014-12-10 15:45:00', u'UTC'))
     self._check_date(value, u'2014-12-10')
Ejemplo n.º 20
0
 def test_local_date_with_day_change(self):
     value = local_date(self._parse_dt(u'2014-12-10 23:45:00', u'UTC'))
     self._check_date(value, u'2014-12-11')
Ejemplo n.º 21
0
 def test_local_date_with_tz_as_string(self):
     value = local_date(self._parse_dt(u'2014-12-10 15:45:00', u'UTC'), u'America/Montreal')
     self._check_date(value, u'2014-12-10')
Ejemplo n.º 22
0
 def test_local_date_with_tz_as_tzinfo(self):
     value = local_date(self._parse_dt(u'2014-12-10 15:45:00', u'UTC'), pytz.timezone(u'America/Montreal'))
     self._check_date(value, u'2014-12-10')