diff --git a/amadeus/static/js/main.js b/amadeus/static/js/main.js index 0a2d002..263d617 100755 --- a/amadeus/static/js/main.js +++ b/amadeus/static/js/main.js @@ -1,19 +1,19 @@ -var locale = navigator.language || navigator.userLanguage; - -$('.datetime-picker').datetimepicker({ - locale: locale -}); +$(function () { + var locale = navigator.language || navigator.userLanguage; -$('.date-picker').datetimepicker({ - locale: locale, - format: 'L' -}); + $('.datetime-picker').datetimepicker({ + locale: locale + }); -$('.text_wysiwyg').summernote({ - height: 200 -}); + $('.date-picker').datetimepicker({ + locale: locale, + format: 'L' + }); -$(function () { + $('.text_wysiwyg').summernote({ + height: 200 + }); + $('[data-toggle="tooltip"]').tooltip(); //Dropdown menu collapse diff --git a/pendencies/forms.py b/pendencies/forms.py index a29c78c..4791cba 100644 --- a/pendencies/forms.py +++ b/pendencies/forms.py @@ -1,10 +1,74 @@ # coding=utf-8 +import datetime + from django import forms from django.utils.translation import ugettext_lazy as _ +from subjects.models import Subject + from .models import Pendencies class PendenciesForm(forms.ModelForm): + subject = forms.CharField(widget = forms.HiddenInput()) + + def __init__(self, *args, **kwargs): + super(PendenciesForm, self).__init__(*args, **kwargs) + + if kwargs.get('initial'): + subject = kwargs['initial'].get('subject', None) + + if subject: + self.initial['subject'] = subject.id + + begin_date_check = forms.BooleanField(required = False) + end_date_check = forms.BooleanField(required = False) + class Meta: model = Pendencies - fields = ['action', 'begin_date', 'end_date'] \ No newline at end of file + fields = ['action', 'begin_date', 'end_date'] + + def clean(self): + cleaned_data = super(PendenciesForm, self).clean() + + begin_date = cleaned_data.get('begin_date', None) + end_date = cleaned_data.get('end_date', None) + begin_check = cleaned_data.get('begin_date_check', False) + end_check = cleaned_data.get('end_date_check', False) + subject_id = cleaned_data.get('subject', None) + + if not begin_date and begin_check: + self.add_error('begin_date', _('This field is required.')) + + if not end_date and end_check: + self.add_error('end_date', _('This field is required.')) + + if begin_date and end_date: + if not begin_date == ValueError and not end_date == ValueError: + if begin_date > end_date: + self.add_error('begin_date', _('This input should be filled with a date equal or before the End Date.')) + self.add_error('end_date', _('This input should be filled with a date equal or after the Begin Date.')) + + if subject_id: + subject = Subject.objects.get(id = subject_id) + + if not begin_date == ValueError and begin_date: + if begin_date.date() < datetime.datetime.today().date(): + self.add_error('begin_date', _("This input should be filled with a date equal or after today's date.")) + + if begin_date.date() < subject.init_date: + self.add_error('begin_date', _('This input should be filled with a date equal or after the subject begin date.')) + + if begin_date.date() > subject.end_date: + self.add_error('begin_date', _('This input should be filled with a date equal or after the subject end date.')) + + if not end_date == ValueError and end_date: + if end_date.date() < datetime.datetime.today().date(): + self.add_error('end_date', _("This input should be filled with a date equal or after today's date.")) + + if end_date.date() < subject.init_date: + self.add_error('end_date', _('This input should be filled with a date equal or after the subject begin date.')) + + if end_date.date() > subject.end_date: + self.add_error('end_date', _('This input should be filled with a date equal or before the subject end date.')) + + return cleaned_data diff --git a/webpage/forms.py b/webpage/forms.py index 26a39e6..be3a34d 100644 --- a/webpage/forms.py +++ b/webpage/forms.py @@ -2,13 +2,33 @@ from django import forms from django.forms.models import inlineformset_factory from django.utils.translation import ugettext_lazy as _ +from django.utils.html import strip_tags from pendencies.forms import PendenciesForm from pendencies.models import Pendencies +from subjects.models import Tag + from .models import Webpage class WebpageForm(forms.ModelForm): + subject = None + control_subject = forms.CharField(widget = forms.HiddenInput()) + + def __init__(self, *args, **kwargs): + super(WebpageForm, self).__init__(*args, **kwargs) + + self.subject = kwargs['initial'].get('subject', None) + + if self.instance.id: + self.subject = self.instance.subject + self.initial['tags'] = ", ".join(self.instance.tags.all().values_list("name", flat = True)) + + self.initial['control_subject'] = self.subject.id + + self.fields['students'].queryset = self.subject.students.all() + self.fields['groups'].queryset = self.subject.group_subject.all() + tags = forms.CharField(label = _('Tags'), required = False) class Meta: @@ -25,4 +45,62 @@ class WebpageForm(forms.ModelForm): 'groups': forms.SelectMultiple, } + def clean_name(self): + name = self.cleaned_data.get('name', '') + + topics = self.subject.topic_subject.all() + + for topic in topics: + if self.instance.id: + same_name = topic.resource_topic.filter(name__unaccent__iexact = name).exclude(id = self.instance.id).count() + else: + same_name = topic.resource_topic.filter(name__unaccent__iexact = name).count() + + if same_name > 0: + self._errors['name'] = [_('This subject already has a webpage with this name')] + + return ValueError + + return name + + def clean_content(self): + content = self.cleaned_data.get('content', '') + content = strip_tags(content) + + if content == '': + self._errors['content'] = [_('This field is required.')] + + return ValueError + + return content + + def save(self, commit = True): + super(WebpageForm, self).save(commit = True) + + self.instance.save() + + previous_tags = self.instance.tags.all() + + tags = self.cleaned_data['tags'].split(",") + + #Excluding unwanted tags + for prev in previous_tags: + if not prev.name in tags: + self.instance.tags.remove(prev) + + for tag in tags: + tag = tag.strip() + + exist = Tag.objects.filter(name = tag).exists() + + if exist: + new_tag = Tag.objects.get(name = tag) + else: + new_tag = Tag.objects.create(name = tag) + + if not new_tag in self.instance.tags.all(): + self.instance.tags.add(new_tag) + + return self.instance + InlinePendenciesFormset = inlineformset_factory(Webpage, Pendencies, form = PendenciesForm, extra = 1, can_delete = True) \ No newline at end of file diff --git a/webpage/migrations/0002_auto_20170120_1944.py b/webpage/migrations/0002_auto_20170120_1944.py new file mode 100644 index 0000000..f481480 --- /dev/null +++ b/webpage/migrations/0002_auto_20170120_1944.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10 on 2017-01-20 22:44 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('webpage', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='webpage', + name='content', + field=models.TextField(blank=True, verbose_name='Webpage Content'), + ), + ] diff --git a/webpage/models.py b/webpage/models.py index 3adaae2..b3bdf3d 100644 --- a/webpage/models.py +++ b/webpage/models.py @@ -5,7 +5,7 @@ from django.utils.translation import ugettext_lazy as _ from topics.models import Resource class Webpage(Resource): - content = models.TextField(_('HTML Page Content')) + content = models.TextField(_('Webpage Content'), blank = True) class Meta: verbose_name = _('WebPage') diff --git a/webpage/templates/webpages/_form.html b/webpage/templates/webpages/_form.html index 77253fb..24a91b4 100644 --- a/webpage/templates/webpages/_form.html +++ b/webpage/templates/webpages/_form.html @@ -4,14 +4,46 @@