def form_valid(self, form): super().form_valid(form) if not self.object.is_draft: messenger( MESSAGES.DETERMINATION_OUTCOME, request=self.request, user=self.object.author, submission=self.object.submission, related=self.object, ) transition = transition_from_outcome( int(form.cleaned_data.get('outcome')), self.submission) if self.object.outcome == NEEDS_MORE_INFO: # We keep a record of the message sent to the user in the comment Activity.comments.create( message=self.object.stripped_message, user=self.request.user, submission=self.submission, related_object=self.object, ) self.submission.perform_transition(transition, self.request.user, request=self.request, notify=False) return HttpResponseRedirect(self.submission.get_absolute_url())
def handle(self, *args, **options): site = ApplyHomePage.objects.first().get_site() set_urlconf('opentech.apply.urls') # Mock a HTTPRequest in order to pass the site settings into the # templates request = HttpRequest() request.META['SERVER_NAME'] = site.hostname request.META['SERVER_PORT'] = site.port request.META[settings.SECURE_PROXY_SSL_HEADER] = 'https' request.session = {} request._messages = FallbackStorage(request) today = timezone.now().date() due_date = today + relativedelta(days=options['days_before']) for project in Project.objects.in_progress(): next_report = project.report_config.current_due_report() due_soon = next_report.end_date == due_date not_notified_today = (not next_report.notified or next_report.notified.date() != today) if due_soon and not_notified_today: messenger( MESSAGES.REPORT_NOTIFY, request=request, user=None, source=project, related=next_report, ) # Notify about the due report next_report.notified = timezone.now() next_report.save() self.stdout.write( self.style.SUCCESS(f'Notified project: {project.id}'))
def form_valid(self, form): old_partners = set(self.get_object().partners.all()) response = super().form_valid(form) new_partners = set(form.instance.partners.all()) added = new_partners - old_partners removed = old_partners - new_partners messenger( MESSAGES.PARTNERS_UPDATED, request=self.request, user=self.request.user, source=self.kwargs['object'], added=added, removed=removed, ) messenger( MESSAGES.PARTNERS_UPDATED_PARTNER, request=self.request, user=self.request.user, source=self.kwargs['object'], added=added, removed=removed, ) return response
def form_valid(self, form): self.review = self.get_object() author, _ = AssignedReviewers.objects.get_or_create_for_user( submission=self.review.submission, reviewer=self.request.user, ) form.instance.author = author form.instance.review = self.review response = super().form_valid(form) opinion = form.instance messenger( MESSAGES.REVIEW_OPINION, request=self.request, user=self.request.user, source=self.review.submission, related=opinion, ) if opinion.opinion == DISAGREE: return HttpResponseRedirect( reverse_lazy('apply:submissions:reviews:form', args=(self.review.submission.pk, ))) else: return response
def form_valid(self, form): with transaction.atomic(): form.instance.approver = self.request.user form.instance.approved_at = timezone.now() form.instance.project = self.project response = super().form_valid(form) old_stage = self.project.get_status_display() messenger( MESSAGES.APPROVE_CONTRACT, request=self.request, user=self.request.user, source=self.project, related=self.object, ) self.project.status = IN_PROGRESS self.project.save(update_fields=['status']) messenger( MESSAGES.PROJECT_TRANSITION, request=self.request, user=self.request.user, source=self.project, related=old_stage, ) return response
def form_valid(self, form): project = self.kwargs['object'] old_stage = project.get_status_display() form.instance.project = project response = super().form_valid(form) messenger( MESSAGES.APPROVE_PROJECT, request=self.request, user=self.request.user, source=project, ) project.send_to_compliance(self.request) project.is_locked = False project.status = CONTRACTING project.save(update_fields=['is_locked', 'status']) messenger( MESSAGES.PROJECT_TRANSITION, request=self.request, user=self.request.user, source=project, related=old_stage, ) return response
def peeked(self, submission): messenger( MESSAGES.OPENED_SEALED, request=self.request, user=self.request.user, submission=submission, ) self.request.session.setdefault('peeked', {})[str(submission.id)] = True # Dictionary updates do not trigger session saves. Force update self.request.session.modified = True
def delete(self, request, *args, **kwargs): submission = self.get_object() messenger( MESSAGES.DELETE_SUBMISSION, user=request.user, request=request, source=submission, ) response = super().delete(request, *args, **kwargs) return response
def delete(self, request, *args, **kwargs): review = self.get_object() messenger( MESSAGES.DELETE_REVIEW, user=request.user, request=request, source=review.submission, related=review, ) response = super().delete(request, *args, **kwargs) return response
def delete(self, request, *args, **kwargs): response = super().delete(request, *args, **kwargs) messenger( MESSAGES.DELETE_PAYMENT_REQUEST, request=self.request, user=self.request.user, source=self.project, related=self.object, ) return response
def form_valid(self, form): response = super().form_valid(form) messenger( MESSAGES.CREATED_PROJECT, request=self.request, user=self.request.user, source=self.object, related=self.object.submission, ) return response
def form_valid(self, form): old = copy(self.get_object()) response = super().form_valid(form) # Record activity messenger( MESSAGES.SCREENING, request=self.request, user=self.request.user, source=self.object, related=str(old.screening_status), ) return response
def send_to_compliance(self, request): """Notify Compliance about this Project.""" messenger( MESSAGES.SENT_TO_COMPLIANCE, request=request, user=request.user, source=self, ) self.sent_to_compliance_at = timezone.now() self.save(update_fields=['sent_to_compliance_at'])
def form_valid(self, form): response = super().form_valid(form) messenger( MESSAGES.UPDATE_PAYMENT_REQUEST_STATUS, request=self.request, user=self.request.user, source=self.object.project, related=self.object, ) return response
def form_valid(self, form): # lock project response = super().form_valid(form) messenger( MESSAGES.SEND_FOR_APPROVAL, request=self.request, user=self.request.user, source=self.object, ) return response
def form_valid(self, form): # Fetch the old lead from the database old = copy(self.get_object()) response = super().form_valid(form) messenger( MESSAGES.UPDATE_LEAD, request=self.request, user=self.request.user, submission=form.instance, related=old.lead, ) return response
def form_valid(self, form): form.instance.form_fields = self.get_defined_fields() response = super().form_valid(form) if not self.object.is_draft: messenger( MESSAGES.NEW_REVIEW, request=self.request, user=self.object.author, submission=self.submission, related=self.object, ) return response
def perform_create(self, serializer): obj = serializer.save( timestamp=timezone.now(), type=COMMENT, user=self.request.user, source=ApplicationSubmission.objects.get(pk=self.kwargs['pk'])) messenger( MESSAGES.COMMENT, request=self.request, user=self.request.user, source=obj.submission, related=obj, )
def form_valid(self, form): messenger( MESSAGES.REQUEST_PROJECT_CHANGE, request=self.request, user=self.request.user, source=self.object, comment=form.cleaned_data['comment'], ) self.object.is_locked = False self.object.save(update_fields=['is_locked']) return redirect(self.object)
def form_valid(self, form): new_lead = form.cleaned_data['lead'] submissions = form.cleaned_data['submissions'] form.save() messenger( MESSAGES.BATCH_UPDATE_LEAD, request=self.request, user=self.request.user, sources=submissions, new_lead=new_lead, ) return super().form_valid(form)
def form_valid(self, form): project = self.kwargs['object'] form.instance.project = project response = super().form_valid(form) messenger( MESSAGES.UPLOAD_DOCUMENT, request=self.request, user=self.request.user, source=project, ) return response
def form_valid(self, form): form.instance.project = self.project form.instance.name = form.instance.document.name response = super().form_valid(form) messenger( MESSAGES.UPLOAD_DOCUMENT, request=self.request, user=self.request.user, source=self.project, ) return response
def form_valid(self, form): submissions = form.cleaned_data['submissions'] form.save() reviewers = [[role, form.cleaned_data[field_name]] for field_name, role in form.role_fields.items()] messenger( MESSAGES.BATCH_REVIEWERS_UPDATED, request=self.request, user=self.request.user, sources=submissions, added=reviewers, ) return super().form_valid(form)
def form_valid(self, form): # Fetch the old lead from the database old_lead = copy(self.get_object().lead) response = super().form_valid(form) messenger( MESSAGES.UPDATE_PROJECT_LEAD, request=self.request, user=self.request.user, source=form.instance, related=old_lead or 'Unassigned', ) return response
def form_valid(self, form): form.instance.project = self.project form.instance.by = self.request.user response = super().form_valid(form) messenger( MESSAGES.REQUEST_PAYMENT, request=self.request, user=self.request.user, source=self.project, related=self.object, ) return response
def form_valid(self, form): review = self.get_object() messenger( MESSAGES.EDIT_REVIEW, user=self.request.user, request=self.request, source=review.submission, related=review, ) response = super().form_valid(form) # Automatic workflow actions. review_workflow_actions(self.request, review.submission) return response
def render_landing_page(self, request, form_submission=None, *args, **kwargs): # We only reach this page after creation of a new submission # Hook in to notify about new applications messenger( MESSAGES.NEW_SUBMISSION, request=request, user=form_submission.user, submission=form_submission, ) return super().render_landing_page(request, form_submission=None, *args, **kwargs)
def form_valid(self, form): old_reviewers = set(self.get_object().reviewers.all()) response = super().form_valid(form) new_reviewers = set(form.instance.reviewers.all()) added = new_reviewers - old_reviewers removed = old_reviewers - new_reviewers messenger( MESSAGES.REVIEWERS_UPDATED, request=self.request, user=self.request.user, submission=self.kwargs['submission'], added=added, removed=removed, ) return response
def form_valid(self, form): project = self.kwargs['object'] form.instance.project = project if self.request.user == project.user: form.instance.is_signed = True response = super().form_valid(form) messenger( MESSAGES.UPLOAD_CONTRACT, request=self.request, user=self.request.user, source=project, related=form.instance, ) return response
def form_valid(self, form): self.object.new_data(form.cleaned_data) if 'save' in self.request.POST: self.object.create_revision(draft=True, by=self.request.user) return self.form_invalid(form) if 'submit' in self.request.POST: revision = self.object.create_revision(by=self.request.user) if revision: messenger( MESSAGES.EDIT, request=self.request, user=self.request.user, submission=self.object, related=revision, ) return HttpResponseRedirect(self.get_success_url())