Skip to content
Snippets Groups Projects
Commit c2527d0e authored by Carlos Vega's avatar Carlos Vega
Browse files

Issue #266 : roll back to Piotr version and add multilingual option in view (not in model)

parent a840f0eb
No related branches found
No related tags found
1 merge request!185Hotfix/voucher templates
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
......@@ -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
......@@ -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,
......
# 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()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment