示例#1
0
    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())
示例#2
0
    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}'))
示例#3
0
文件: views.py 项目: harumhelmy/hypha
    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
示例#4
0
文件: views.py 项目: harumhelmy/hypha
    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
示例#5
0
    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
示例#6
0
    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
示例#7
0
 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
示例#8
0
文件: views.py 项目: harumhelmy/hypha
 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
示例#9
0
文件: views.py 项目: harumhelmy/hypha
 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
示例#10
0
    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
示例#11
0
文件: views.py 项目: harumhelmy/hypha
    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
示例#12
0
文件: views.py 项目: harumhelmy/hypha
 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
示例#13
0
    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'])
示例#14
0
    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
示例#15
0
    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
示例#16
0
 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
示例#17
0
    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
示例#18
0
文件: views.py 项目: harumhelmy/hypha
 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,
     )
示例#19
0
    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)
示例#20
0
文件: views.py 项目: harumhelmy/hypha
    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)
示例#21
0
    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
示例#22
0
    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
示例#23
0
文件: views.py 项目: harumhelmy/hypha
    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)
示例#24
0
    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
示例#25
0
    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
示例#26
0
文件: views.py 项目: harumhelmy/hypha
    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
示例#27
0
 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)
示例#28
0
    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
示例#29
0
    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
示例#30
0
    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())