From c63fdf9cb7b19d723cd7c1a989d6958d0602d019 Mon Sep 17 00:00:00 2001 From: sandeepsajan0 <sandeepsajan0@gmail.com> Date: Tue, 12 Jul 2022 12:07:53 +0530 Subject: [PATCH] fix PAF submit issue --- hypha/apply/projects/forms/project.py | 28 ++++++---- .../project_approval_form.html | 55 +++++++++++++++++++ hypha/apply/projects/views/project.py | 24 +++++++- 3 files changed, 93 insertions(+), 14 deletions(-) create mode 100644 hypha/apply/projects/templates/application_projects/project_approval_form.html diff --git a/hypha/apply/projects/forms/project.py b/hypha/apply/projects/forms/project.py index a301b3d4a..c7e3e2c73 100644 --- a/hypha/apply/projects/forms/project.py +++ b/hypha/apply/projects/forms/project.py @@ -4,6 +4,7 @@ from django.db.models import Q from django.utils.translation import gettext_lazy as _ from hypha.apply.funds.models import ApplicationSubmission +from hypha.apply.stream_forms.forms import StreamBaseForm from hypha.apply.users.groups import STAFF_GROUP_NAME from ..models.project import COMMITTED, Approval, Contract, PacketFile, Project @@ -76,28 +77,31 @@ class CreateApprovalForm(forms.ModelForm): return by -class ProjectApprovalForm(forms.ModelForm): +class MixedMetaClass(type(StreamBaseForm), type(forms.ModelForm)): + pass + + +class ProjectApprovalForm(StreamBaseForm, forms.ModelForm, metaclass=MixedMetaClass): class Meta: fields = [ 'title', - 'value', - 'proposed_start', - 'proposed_end', ] model = Project widgets = { - 'title': forms.TextInput, - 'proposed_end': forms.DateInput, - 'proposed_start': forms.DateInput, + 'title': forms.HiddenInput() } def __init__(self, *args, extra_fields=None, **kwargs): super().__init__(*args, **kwargs) - if extra_fields: - self.fields = { - **self.fields, - **extra_fields, - } + + def clean(self): + cleaned_data = super().clean() + cleaned_data['form_data'] = { + key: value + for key, value in cleaned_data.items() + if key not in self._meta.fields + } + return cleaned_data def save(self, *args, **kwargs): self.instance.form_data = { diff --git a/hypha/apply/projects/templates/application_projects/project_approval_form.html b/hypha/apply/projects/templates/application_projects/project_approval_form.html new file mode 100644 index 000000000..8520b225d --- /dev/null +++ b/hypha/apply/projects/templates/application_projects/project_approval_form.html @@ -0,0 +1,55 @@ +{% extends "base-apply.html" %} +{% load i18n static %} +{% block title %}Editing: {{object.title }}{% endblock %} +{% block content %} +<div class="admin-bar"> + <div class="admin-bar__inner"> + <h2 class="heading heading--no-margin">{% trans "Editing" %}: {{ object.title }}</h2> + </div> +</div> + +{% include "forms/includes/form_errors.html" with form=form %} + +<div class="wrapper wrapper--light-grey-bg wrapper--form wrapper--sidebar"> + <div class="wrapper--sidebar--inner"> + <form class="form application-form" action="" method="post" enctype="multipart/form-data"> + {% csrf_token %} + {{ form.media }} + + {% for field in form %} + {% if field.field %} + {% if field.field.multi_input_field %} + {% include "forms/includes/multi_input_field.html" %} + {% else %} + {% include "forms/includes/field.html" %} + {% endif %} + {% else %} + {{ field.block }} + {% endif %} + {% endfor %} + + {# Hidden fields needed e.g. for django-file-form. See `StreamBaseForm.hidden_fields` #} + {% for hidden_field in form.hidden_fields %} + {{ hidden_field }} + {% endfor %} + + {% trans "Save draft" as save_draft %} + {% for button_name, button_type, button_value in buttons %} + <button class="button button--submit button--top-space button--{{ button_type }}" type="submit" name="{{ button_name }}" {% if button_value == save_draft %}formnovalidate{% endif %}>{{ button_value }}</button> + {% endfor %} + </form> + </div> +</div> + +{% endblock %} + +{% block extra_js %} + <script src="{% static 'js/apply/list-input-files.js' %}"></script> + <script src="{% static 'js/apply/tinymce-word-count.js' %}"></script> + <script src="{% static 'js/apply/multi-input-fields.js' %}"></script> + <script src="{% static 'js/apply/submission-form-copy.js' %}"></script> + <script src="{% static 'js/apply/application-form-links-new-window.js' %}"></script> + {% if not show_all_group_fields %} + <script src="{% static 'js/apply/form-group-toggle.js' %}"></script> + {% endif %} +{% endblock %} diff --git a/hypha/apply/projects/views/project.py b/hypha/apply/projects/views/project.py index f563bd0f0..294eb1f3f 100644 --- a/hypha/apply/projects/views/project.py +++ b/hypha/apply/projects/views/project.py @@ -28,6 +28,7 @@ from django_tables2 import SingleTableMixin from hypha.apply.activity.messaging import MESSAGES, messenger from hypha.apply.activity.views import ActivityContextMixin, CommentFormView +from hypha.apply.stream_forms.models import BaseStreamForm from hypha.apply.users.decorators import ( approver_required, staff_or_finance_required, @@ -590,9 +591,14 @@ class ProjectDetailPDFView(SingleObjectMixin, View): @method_decorator(staff_required, name='dispatch') -class ProjectApprovalEditView(UpdateView): - form_class = ProjectApprovalForm +class ProjectApprovalEditView(BaseStreamForm, UpdateView): + submission_form_class = ProjectApprovalForm model = Project + template_name = 'application_projects/project_approval_form.html' + + def buttons(self): + yield ('submit', 'primary', _('Submit')) + # yield ('save', 'white', _('Save draft')) def dispatch(self, request, *args, **kwargs): project = self.get_object() @@ -610,6 +616,20 @@ class ProjectApprovalEditView(UpdateView): return approval_form + def get_context_data(self, **kwargs): + return super().get_context_data( + title=self.object.title, + buttons=self.buttons(), + **kwargs + ) + + def get_defined_fields(self): + approval_form = self.object.submission.get_from_parent('approval_form') + if approval_form: + return approval_form.form_fields + return self.object.get_defined_fields() + + def get_form_kwargs(self): kwargs = super().get_form_kwargs() -- GitLab