diff --git a/hypha/apply/determinations/migrations/0012_auto_20220509_1136.py b/hypha/apply/determinations/migrations/0012_auto_20220509_1136.py new file mode 100644 index 0000000000000000000000000000000000000000..1fbaf3e5427cd001e9cb74753f7b4884e66eb2fd --- /dev/null +++ b/hypha/apply/determinations/migrations/0012_auto_20220509_1136.py @@ -0,0 +1,59 @@ +# Generated by Django 3.2.13 on 2022-05-09 11:36 + +from django.db import migrations +import wagtail.core.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('determinations', '0011_auto_20220111_1314'), + ] + + operations = [ + migrations.AlterField( + model_name='determinationmessagesettings', + name='concept_accepted', + field=wagtail.core.fields.RichTextField(blank=True, verbose_name='Approved'), + ), + migrations.AlterField( + model_name='determinationmessagesettings', + name='concept_more_info', + field=wagtail.core.fields.RichTextField(blank=True, verbose_name='Needs more info'), + ), + migrations.AlterField( + model_name='determinationmessagesettings', + name='concept_rejected', + field=wagtail.core.fields.RichTextField(blank=True, verbose_name='Dismissed'), + ), + migrations.AlterField( + model_name='determinationmessagesettings', + name='proposal_accepted', + field=wagtail.core.fields.RichTextField(blank=True, verbose_name='Approved'), + ), + migrations.AlterField( + model_name='determinationmessagesettings', + name='proposal_more_info', + field=wagtail.core.fields.RichTextField(blank=True, verbose_name='Needs more info'), + ), + migrations.AlterField( + model_name='determinationmessagesettings', + name='proposal_rejected', + field=wagtail.core.fields.RichTextField(blank=True, verbose_name='Dismissed'), + ), + migrations.AlterField( + model_name='determinationmessagesettings', + name='request_accepted', + field=wagtail.core.fields.RichTextField(blank=True, verbose_name='Approved'), + ), + migrations.AlterField( + model_name='determinationmessagesettings', + name='request_more_info', + field=wagtail.core.fields.RichTextField(blank=True, verbose_name='Needs more info'), + ), + migrations.AlterField( + model_name='determinationmessagesettings', + name='request_rejected', + field=wagtail.core.fields.RichTextField(blank=True, verbose_name='Dismissed'), + ), + ] diff --git a/hypha/apply/determinations/models.py b/hypha/apply/determinations/models.py index 5e5bcbb9a5bcc4a265816f664153dbc9c9516248..7d21872249a74c2eecdc34ccb4d91d78068e6a82 100644 --- a/hypha/apply/determinations/models.py +++ b/hypha/apply/determinations/models.py @@ -15,6 +15,7 @@ from wagtail.contrib.settings.models import BaseSetting, register_setting from wagtail.core.fields import RichTextField, StreamField from hypha.apply.funds.models.mixins import AccessFormData +from hypha.apply.funds.workflow import Concept, Proposal, Request from .blocks import ( DeterminationBlock, @@ -184,21 +185,25 @@ class DeterminationMessageSettings(BaseSetting): class Meta: verbose_name = 'determination messages' - request_accepted = RichTextField("Approved") - request_rejected = RichTextField("Dismissed") - request_more_info = RichTextField("Needs more info") + request_accepted = RichTextField("Approved", blank=True) + request_rejected = RichTextField("Dismissed", blank=True) + request_more_info = RichTextField("Needs more info", blank=True) - concept_accepted = RichTextField("Approved") - concept_rejected = RichTextField("Dismissed") - concept_more_info = RichTextField("Needs more info") + concept_accepted = RichTextField("Approved", blank=True) + concept_rejected = RichTextField("Dismissed", blank=True) + concept_more_info = RichTextField("Needs more info", blank=True) - proposal_accepted = RichTextField("Approved") - proposal_rejected = RichTextField("Dismissed") - proposal_more_info = RichTextField("Needs more info") + proposal_accepted = RichTextField("Approved", blank=True) + proposal_rejected = RichTextField("Dismissed", blank=True) + proposal_more_info = RichTextField("Needs more info", blank=True) def get_for_stage(self, stage_name): message_templates = {} - prefix = f"{stage_name.lower()}_" + if stage_name in [Request.name, Concept.name, Proposal.name]: + prefix = f"{stage_name.lower()}_" + else: + # Use Request's message templates for remaining workflows + prefix = "request_" for field in self._meta.get_fields(): if prefix in field.name: diff --git a/hypha/apply/determinations/templates/determinations/base_determination_form.html b/hypha/apply/determinations/templates/determinations/base_determination_form.html index 26b805e215d47af818c7ed357f1a4299c58c1cf3..510c1d5538dccbe892b9cb13298ef2951400c00b 100644 --- a/hypha/apply/determinations/templates/determinations/base_determination_form.html +++ b/hypha/apply/determinations/templates/determinations/base_determination_form.html @@ -52,8 +52,7 @@ </form> {% for type, message in message_templates.items %} <div class="is-hidden" data-type="{{ type }}" id="determination-message-{{ type }}"> - <h1>message</h1> - {{ message|bleach }} + {{ message }} </div> {% endfor %} </div> @@ -61,5 +60,6 @@ {% endblock %} {% block extra_js %} - {# Skip this until the script is improved. <script src="{% static 'js/apply/determination-template.js' %}"></script> #} + {{ field_blocks_ids|json_script:"block-ids" }} + <script src="{% static 'js/apply/determination-template.js' %}"></script> {% endblock %} diff --git a/hypha/apply/determinations/views.py b/hypha/apply/determinations/views.py index c75fd11952e5a7ef1aef4f83cf36ca1416eefa30..acd32c39a62741efe87457cf024e6a1eb83a1ede 100644 --- a/hypha/apply/determinations/views.py +++ b/hypha/apply/determinations/views.py @@ -24,7 +24,7 @@ from hypha.apply.stream_forms.models import BaseStreamForm from hypha.apply.users.decorators import staff_required from hypha.apply.utils.views import CreateOrUpdateView, ViewDispatcher -from .blocks import DeterminationBlock +from .blocks import DeterminationBlock, DeterminationMessageBlock from .forms import ( BatchConceptDeterminationForm, BatchDeterminationForm, @@ -308,9 +308,18 @@ class DeterminationCreateOrUpdateView(BaseStreamForm, CreateOrUpdateView): site = Site.find_for_request(self.request) determination_messages = DeterminationMessageSettings.for_site(site) + # Pass blocks ids to identify block types(determination & message) in determination message template js. + field_blocks_ids = {} + if self.submission.is_determination_form_attached: + for field_block in self.get_defined_fields(): + if isinstance(field_block.block, DeterminationBlock) or \ + isinstance(field_block.block, DeterminationMessageBlock): + field_blocks_ids[field_block.block_type] = field_block.id + return super().get_context_data( submission=self.submission, message_templates=determination_messages.get_for_stage(self.submission.stage.name), + field_blocks_ids=field_blocks_ids, **kwargs ) diff --git a/hypha/static_src/src/javascript/apply/determination-template.js b/hypha/static_src/src/javascript/apply/determination-template.js index 092e2ce552c32ecfc727b4fd93ecbfac973dca42..a243faa3de98b2fa93ce49848161953900fe9b66 100644 --- a/hypha/static_src/src/javascript/apply/determination-template.js +++ b/hypha/static_src/src/javascript/apply/determination-template.js @@ -1,10 +1,11 @@ (function ($) { 'use strict'; + const field_blocks_ids = JSON.parse(document.getElementById('block-ids').textContent); let DeterminationCopy = class { static selector() { - return '#id_outcome'; + return ('#id_' + field_blocks_ids['determination']); } constructor(node) { @@ -32,7 +33,8 @@ } updateTextArea(text) { - window.tinyMCE.get('id_message').setContent(text); + this.message_box = document.querySelector('#id_' + field_blocks_ids['message'] + '_ifr'); + this.message_box.contentDocument.getElementsByTagName('body')[0].innerHTML = text; } };