From c2527d0ee1892fe48d19ce411df634e4fd038d91 Mon Sep 17 00:00:00 2001
From: Carlos Vega <carlos.vega@uni.lu>
Date: Fri, 9 Nov 2018 15:05:15 +0100
Subject: [PATCH] Issue #266 : roll back to Piotr version and add multilingual
 option in view (not in model)

---
 smash/web/forms/mail_template.py              | 24 ++++++++
 .../templates/mail_templates/add_edit.html    | 60 ++++++++++++++++++-
 smash/web/urls.py                             | 10 ++--
 smash/web/views/mails.py                      | 57 +++++++++---------
 4 files changed, 115 insertions(+), 36 deletions(-)
 create mode 100644 smash/web/forms/mail_template.py

diff --git a/smash/web/forms/mail_template.py b/smash/web/forms/mail_template.py
new file mode 100644
index 00000000..cc14f13c
--- /dev/null
+++ b/smash/web/forms/mail_template.py
@@ -0,0 +1,24 @@
+from django import forms
+from django.forms import ModelForm
+from web.models import MailTemplate
+
+import logging
+logger = logging.getLogger(__name__)
+
+class MailTemplateForm(ModelForm):
+    class Meta:
+        model = MailTemplate
+        fields = '__all__'
+
+    def __init__(self, *args, **kwargs):
+        super(MailTemplateForm, self).__init__(*args, **kwargs)
+
+        instance = getattr(self, 'instance', None)
+        
+        self.fields['Multilingual'] = forms.BooleanField(label='Multilingual', disabled=True, required=False,
+        	help_text='Only for voucher context. Check this option if the voucher template is multilingual.', 
+        	widget=forms.CheckboxInput(attrs={'class': 'hidden_form_field', 'id': 'multilingual_checkbox'}))
+
+    def clean(self):
+        cleaned_data = super(MailTemplateForm, self).clean()
+        return cleaned_data
\ No newline at end of file
diff --git a/smash/web/templates/mail_templates/add_edit.html b/smash/web/templates/mail_templates/add_edit.html
index 4fbc9371..1c3fdf24 100644
--- a/smash/web/templates/mail_templates/add_edit.html
+++ b/smash/web/templates/mail_templates/add_edit.html
@@ -5,7 +5,11 @@
 {% block styles %}
     {{ block.super }}
     <link rel="stylesheet" href="{% static 'AdminLTE/plugins/awesomplete/awesomplete.css' %}"/>
-
+    <style type="text/css">
+        .help_text{
+            margin-left: 5px;
+        }
+    </style>
 {% endblock styles %}
 
 {% block ui_active_tab %}'subjects'{% endblock ui_active_tab %}
@@ -34,6 +38,9 @@
                                 <div class="form-group {% if field.errors %}has-error{% endif %}">
                                     <label class="col-sm-4  col-lg-offset-1 col-lg-2 control-label">
                                         {{ field.label }}
+                                        {% if field.help_text %}
+                                           <i class="fa fa-info-circle help_text" aria-hidden="true" data-toggle="tooltip" data-placement="top" title="{{field.help_text}}"></i>
+                                        {% endif %}
                                     </label>
 
                                     <div class="col-sm-8 col-lg-4">
@@ -72,5 +79,54 @@
     {{ block.super }}
 
     <script src="{% static 'AdminLTE/plugins/awesomplete/awesomplete.min.js' %}"></script>
-
+    <script type="text/javascript">
+
+        function should_be_checked(){
+            var ischecked = $('#multilingual_checkbox').is(":checked");
+            var hasnolang = $('#id_language').prop("selectedIndex") == 0;
+            var isvoucher = $('#id_context').find(":selected").text().toLowerCase() == 'voucher';
+
+            if(hasnolang && isvoucher && !ischecked){ //if has no language and is voucher, then is multilingual 
+                $('#multilingual_checkbox').attr('checked', true);
+                $('#multilingual_checkbox').prop('checked', true);
+                
+                $('#multilingual_checkbox').attr('disabled', true);
+            }
+        }
+
+        function on_context_or_language_change(){
+            var hasnoleng = $('#id_language').prop("selectedIndex") == 0;
+            var isvoucher = $('#id_context').find(":selected").text().toLowerCase() == 'voucher';
+            if(isvoucher && hasnoleng){
+                $('#multilingual_checkbox').attr('disabled', true);
+                
+                $('#multilingual_checkbox').attr('checked', true);
+                $('#multilingual_checkbox').prop('checked', true);
+            }else if(isvoucher && !hasnoleng){
+                $('#multilingual_checkbox').attr('disabled', false);
+                
+                $('#multilingual_checkbox').attr('checked', false);
+                $('#multilingual_checkbox').prop('checked', false);
+            }else{
+                $('#multilingual_checkbox').attr('disabled', true);
+
+                $('#multilingual_checkbox').attr('checked', false);
+                $('#multilingual_checkbox').prop('checked', false);
+            }
+        }            
+
+        function on_checkbox_change(){
+            var ischecked = $('#multilingual_checkbox').is(":checked");
+            if(ischecked){ //is because has no leng and is voucher
+                $('#id_language').prop("selectedIndex", 0);
+                $('#multilingual_checkbox').attr('disabled', true);
+            }
+        }
+
+        $('#id_language').on('change', on_context_or_language_change);
+        $('#id_context').on('change', on_context_or_language_change);
+        $('#multilingual_checkbox').on('change', on_checkbox_change);
+
+        $(document).ready(should_be_checked);
+    </script>
 {% endblock scripts %}
\ No newline at end of file
diff --git a/smash/web/urls.py b/smash/web/urls.py
index 65d7d4e8..7fd886c2 100644
--- a/smash/web/urls.py
+++ b/smash/web/urls.py
@@ -158,11 +158,11 @@ urlpatterns = [
     ####################
 
     url(r'^mail_templates$', views.mails.MailTemplatesListView.as_view(), name='web.views.mail_templates'),
-    url(r'^mail_templates/add$', views.mails.MailTemplatesCreateView.as_view(), name='web.views.mail_template_add'),
-    url(r'^mail_templates/(?P<pk>\d+)/delete$', views.mails.MailTemplatesDeleteView.as_view(),
-        name='web.views.mail_template_delete'),
-    url(r'^mail_templates/(?P<pk>\d+)/edit$', views.mails.MailTemplatesEditView.as_view(),
-        name='web.views.mail_template_edit'),
+
+    url(r'^mail_templates/add$', views.mails.mail_template_add, name='web.views.mail_template_add'),
+    url(r'^mail_templates/(?P<pk>\d+)/edit$', views.mails.mail_template_edit, name='web.views.mail_template_edit'),
+
+    url(r'^mail_templates/(?P<pk>\d+)/delete$', views.mails.MailTemplatesDeleteView.as_view(), name='web.views.mail_template_delete'),
     url(r'^mail_templates/(?P<mail_template_id>\d+)/generate/(?P<instance_id>\d+)$', views.mails.generate,
         name="web.views.mail_template_generate"),
     url(r'^mail_templates/print_vouchers$', views.mails.generate_for_vouchers,
diff --git a/smash/web/views/mails.py b/smash/web/views/mails.py
index 02fd7803..5cad460e 100644
--- a/smash/web/views/mails.py
+++ b/smash/web/views/mails.py
@@ -1,6 +1,4 @@
 # coding=utf-8
-import logging
-logger = logging.getLogger(__name__)
 import StringIO
 from wsgiref.util import FileWrapper
 
@@ -19,6 +17,10 @@ from ..models import StudySubject, Visit, Appointment, MailTemplate, Voucher
 from ..models.constants import MAIL_TEMPLATE_CONTEXT_SUBJECT, MAIL_TEMPLATE_CONTEXT_VISIT, \
     MAIL_TEMPLATE_CONTEXT_APPOINTMENT, MAIL_TEMPLATE_CONTEXT_VOUCHER
 
+from ..forms.mail_template import MailTemplateForm
+from . import wrap_response
+from django.shortcuts import redirect, get_object_or_404
+
 MIMETYPE_DOCX = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
 
 CONTEXT_TYPES_MAPPING = {
@@ -44,14 +46,28 @@ class MailTemplatesListView(ListView, WrappedView):
                                    }
         return context
 
-
-class MailTemplatesCreateView(CreateView, WrappedView):
-    model = MailTemplate
-    template_name = "mail_templates/add.html"
-    fields = '__all__'
-    success_url = reverse_lazy('web.views.mail_templates')
-    success_message = "Template created"
-
+def mail_template_add(request):
+    if request.method == 'POST':
+        form = MailTemplateForm(request.POST, request.FILES)
+        if form.is_valid():
+            form.save()
+            return redirect('web.views.mail_templates')
+    else:
+        form = MailTemplateForm()
+
+    return wrap_response(request, 'mail_templates/add.html', {'form': form})
+
+def mail_template_edit(request, pk):
+    template = get_object_or_404(MailTemplate, pk=pk)
+    if request.method == 'POST':
+        form = MailTemplateForm(request.POST, request.FILES, instance=template)
+        if form.is_valid():
+            form.save()
+            return redirect('web.views.mail_templates')
+    else:
+        form = MailTemplateForm(instance=template)
+
+    return wrap_response(request, 'mail_templates/edit.html', {'form': form, 'mail_template': template})
 
 class MailTemplatesDeleteView(DeleteView, WrappedView):
     model = MailTemplate
@@ -62,16 +78,6 @@ class MailTemplatesDeleteView(DeleteView, WrappedView):
         messages.success(request, "Template deleted")
         return super(MailTemplatesDeleteView, self).delete(request, *args, **kwargs)
 
-
-class MailTemplatesEditView(UpdateView, WrappedView):
-    model = MailTemplate
-    success_url = reverse_lazy('web.views.mail_templates')
-    fields = '__all__'
-    success_message = "Template edited"
-    template_name = "mail_templates/edit.html"
-    context_object_name = "mail_template"
-
-
 def generate(request, mail_template_id, instance_id):
     mail_template = get_object_or_404(MailTemplate, id=mail_template_id)
     instance = get_object_or_404(CONTEXT_TYPES_MAPPING[mail_template.context], id=instance_id)
@@ -84,20 +90,13 @@ def generate(request, mail_template_id, instance_id):
     response['Content-Disposition'] = 'attachment; filename={}.docx'.format(mail_template.name)
     return response
 
-
 def generate_for_vouchers(request):
     ids = request.GET.get('voucher_id', '').split(',')
     vouchers = []
-    languages = []
     for voucher_id in ids:
         if voucher_id.isdigit():
-            voucher = Voucher.objects.get(pk=int(voucher_id))
-            vouchers.append(voucher)
-            try:
-                languages.extend(voucher.study_subject.subject.languages.all())
-            except: #if no languages or no subject or no study subject 
-                continue
-    templates = MailTemplate.get_voucher_mail_templates(list(set(languages)))[0]
+            vouchers.append(Voucher.objects.get(pk=int(voucher_id)))
+    templates = MailTemplate.get_voucher_mail_templates([])[0]
 
     output_stream = StringIO.StringIO()
 
-- 
GitLab