Commit 0e8fc5748376c8f32f774ddfef94385b47f14562
Exists in
master
and in
3 other branches
Merge branch 'refactoring' of https://github.com/amadeusproject/amadeuslms into refactoring
Showing
20 changed files
with
310 additions
and
38 deletions
Show diff stats
amadeus/settings.py
@@ -172,7 +172,7 @@ USE_L10N = True | @@ -172,7 +172,7 @@ USE_L10N = True | ||
172 | 172 | ||
173 | USE_TZ = True | 173 | USE_TZ = True |
174 | 174 | ||
175 | - | 175 | +FORMAT_MODULE_PATH = 'amadeus.formats' |
176 | # Static files (CSS, JavaScript, Images) | 176 | # Static files (CSS, JavaScript, Images) |
177 | # https://docs.djangoproject.com/en/1.9/howto/static-files/ | 177 | # https://docs.djangoproject.com/en/1.9/howto/static-files/ |
178 | 178 | ||
@@ -269,10 +269,6 @@ OAUTH2_PROVIDER = { | @@ -269,10 +269,6 @@ OAUTH2_PROVIDER = { | ||
269 | 269 | ||
270 | 270 | ||
271 | #For date purposes | 271 | #For date purposes |
272 | -DATETIME_INPUT_FORMATS.append('%d/%m/%y') | ||
273 | -DATETIME_INPUT_FORMATS.append('%m/%d/%y') | ||
274 | -DATETIME_INPUT_FORMATS.append('%m/%d/%Y %I:%M %p') | ||
275 | -DATETIME_INPUT_FORMATS.append('%d/%m/%Y %H:%M') | ||
276 | DATE_INPUT_FORMATS.append('%d/%m/%y') | 272 | DATE_INPUT_FORMATS.append('%d/%m/%y') |
277 | DATE_INPUT_FORMATS.append('%m/%d/%y') | 273 | DATE_INPUT_FORMATS.append('%m/%d/%y') |
278 | 274 |
amadeus/static/css/.sass-cache/a7f87b90919294b62ab4f8079e31dcda8f485534/green.sassc
No preview for this file type
amadeus/static/css/base/amadeus.css
amadeus/static/css/themes/green.css
@@ -465,6 +465,9 @@ a.add-row { | @@ -465,6 +465,9 @@ a.add-row { | ||
465 | .btn:not(.btn-raised):not(.btn-link):focus, .btn:not(.btn-raised):not(.btn-link):hover, .input-group-btn .btn:not(.btn-raised):not(.btn-link):focus, .input-group-btn .btn:not(.btn-raised):not(.btn-link):hover { | 465 | .btn:not(.btn-raised):not(.btn-link):focus, .btn:not(.btn-raised):not(.btn-link):hover, .input-group-btn .btn:not(.btn-raised):not(.btn-link):focus, .input-group-btn .btn:not(.btn-raised):not(.btn-link):hover { |
466 | background-color: initial; } | 466 | background-color: initial; } |
467 | 467 | ||
468 | +.goalitems .slider { | ||
469 | + background-color: initial; } | ||
470 | + | ||
468 | @media(max-width: 768px) { | 471 | @media(max-width: 768px) { |
469 | .navbar .navbar-nav .dropdown .dropdown-menu li > a { | 472 | .navbar .navbar-nav .dropdown .dropdown-menu li > a { |
470 | color: #333333 !important; } | 473 | color: #333333 !important; } |
amadeus/static/css/themes/green.css.map
1 | { | 1 | { |
2 | "version": 3, | 2 | "version": 3, |
3 | -"mappings": "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", | 3 | +"mappings": "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", |
4 | "sources": ["green.sass"], | 4 | "sources": ["green.sass"], |
5 | "names": [], | 5 | "names": [], |
6 | "file": "green.css" | 6 | "file": "green.css" |
amadeus/static/css/themes/green.sass
@@ -636,6 +636,8 @@ a.add-row | @@ -636,6 +636,8 @@ a.add-row | ||
636 | .btn:not(.btn-raised):not(.btn-link):focus, .btn:not(.btn-raised):not(.btn-link):hover, .input-group-btn .btn:not(.btn-raised):not(.btn-link):focus, .input-group-btn .btn:not(.btn-raised):not(.btn-link):hover | 636 | .btn:not(.btn-raised):not(.btn-link):focus, .btn:not(.btn-raised):not(.btn-link):hover, .input-group-btn .btn:not(.btn-raised):not(.btn-link):focus, .input-group-btn .btn:not(.btn-raised):not(.btn-link):hover |
637 | background-color: initial | 637 | background-color: initial |
638 | 638 | ||
639 | +.goalitems .slider | ||
640 | + background-color: initial | ||
639 | 641 | ||
640 | 642 | ||
641 | @media(max-width: 768px) | 643 | @media(max-width: 768px) |
goals/forms.py
1 | # coding=utf-8 | 1 | # coding=utf-8 |
2 | from django import forms | 2 | from django import forms |
3 | +from datetime import datetime | ||
3 | from django.conf import settings | 4 | from django.conf import settings |
4 | from django.utils.translation import ugettext_lazy as _ | 5 | from django.utils.translation import ugettext_lazy as _ |
5 | from django.forms.models import inlineformset_factory | 6 | from django.forms.models import inlineformset_factory |
@@ -13,25 +14,27 @@ from .models import Goals, GoalItem | @@ -13,25 +14,27 @@ from .models import Goals, GoalItem | ||
13 | 14 | ||
14 | class GoalsForm(forms.ModelForm): | 15 | class GoalsForm(forms.ModelForm): |
15 | subject = None | 16 | subject = None |
17 | + topic = None | ||
16 | control_subject = forms.CharField(widget = forms.HiddenInput()) | 18 | control_subject = forms.CharField(widget = forms.HiddenInput()) |
17 | 19 | ||
18 | def __init__(self, *args, **kwargs): | 20 | def __init__(self, *args, **kwargs): |
19 | super(GoalsForm, self).__init__(*args, **kwargs) | 21 | super(GoalsForm, self).__init__(*args, **kwargs) |
20 | 22 | ||
21 | self.subject = kwargs['initial'].get('subject', None) | 23 | self.subject = kwargs['initial'].get('subject', None) |
24 | + self.topic = kwargs['initial'].get('topic', None) | ||
22 | 25 | ||
23 | if self.instance.id: | 26 | if self.instance.id: |
24 | self.subject = self.instance.topic.subject | 27 | self.subject = self.instance.topic.subject |
28 | + self.topic = self.instance.topic | ||
25 | self.initial['tags'] = ", ".join(self.instance.tags.all().values_list("name", flat = True)) | 29 | self.initial['tags'] = ", ".join(self.instance.tags.all().values_list("name", flat = True)) |
26 | 30 | ||
27 | self.initial['control_subject'] = self.subject.id | 31 | self.initial['control_subject'] = self.subject.id |
28 | 32 | ||
29 | tags = forms.CharField(label = _('Tags'), required = False) | 33 | tags = forms.CharField(label = _('Tags'), required = False) |
30 | - limit_submission_date = forms.DateTimeField(input_formats = settings.DATETIME_INPUT_FORMATS) | ||
31 | 34 | ||
32 | class Meta: | 35 | class Meta: |
33 | model = Goals | 36 | model = Goals |
34 | - fields = ['name', 'presentation', 'brief_description', 'show_window', 'visible'] | 37 | + fields = ['name', 'presentation', 'limit_submission_date', 'brief_description', 'show_window', 'visible'] |
35 | labels = { | 38 | labels = { |
36 | 'name': _('Name'), | 39 | 'name': _('Name'), |
37 | } | 40 | } |
@@ -43,16 +46,27 @@ class GoalsForm(forms.ModelForm): | @@ -43,16 +46,27 @@ class GoalsForm(forms.ModelForm): | ||
43 | def clean(self): | 46 | def clean(self): |
44 | cleaned_data = super(GoalsForm, self).clean() | 47 | cleaned_data = super(GoalsForm, self).clean() |
45 | 48 | ||
46 | - topic = cleaned_data.get('topic', None) | 49 | + limit_submission_date = cleaned_data.get('limit_submission_date', None) |
47 | 50 | ||
48 | - if topic: | 51 | + if self.topic: |
49 | if self.instance.id: | 52 | if self.instance.id: |
50 | - exist = topic.resource_topic.filter(goals__isnull = False).exclude(id = self.instance.id).exists() | 53 | + exist = self.topic.resource_topic.filter(goals__isnull = False).exclude(id = self.instance.id).exists() |
51 | else: | 54 | else: |
52 | - exist = topic.resource_topic.filter(goals__isnull = False).exists() | 55 | + exist = self.topic.resource_topic.filter(goals__isnull = False).exists() |
53 | 56 | ||
54 | if exist: | 57 | if exist: |
55 | - self.add_error('name', _('There already is another resource with the goals specification for the Topic %s')%(str(topic))) | 58 | + self.add_error('name', _('There already is another resource with the goals specification for the Topic %s')%(str(self.topic))) |
59 | + | ||
60 | + if limit_submission_date: | ||
61 | + if not limit_submission_date == ValueError: | ||
62 | + if not self.instance.id and limit_submission_date.date() < datetime.today().date(): | ||
63 | + self.add_error('limit_submission_date', _("This input should be filled with a date equal or after today's date.")) | ||
64 | + | ||
65 | + if limit_submission_date.date() < self.subject.init_date: | ||
66 | + self.add_error('limit_submission_date', _('This input should be filled with a date equal or after the subject begin date.')) | ||
67 | + | ||
68 | + if limit_submission_date.date() > self.subject.end_date: | ||
69 | + self.add_error('limit_submission_date', _('This input should be filled with a date equal or after the subject end date.')) | ||
56 | 70 | ||
57 | return cleaned_data | 71 | return cleaned_data |
58 | 72 | ||
@@ -90,5 +104,18 @@ class GoalItemForm(forms.ModelForm): | @@ -90,5 +104,18 @@ class GoalItemForm(forms.ModelForm): | ||
90 | model = GoalItem | 104 | model = GoalItem |
91 | fields = ['description', 'ref_value'] | 105 | fields = ['description', 'ref_value'] |
92 | 106 | ||
107 | + def clean(self): | ||
108 | + cleaned_data = super(GoalItemForm, self).clean() | ||
109 | + | ||
110 | + description = cleaned_data.get('description', None) | ||
111 | + ref_value = cleaned_data.get('ref_value', None) | ||
112 | + | ||
113 | + if ref_value and ref_value != "0": | ||
114 | + if not description: | ||
115 | + self.add_error('description', _('This field is required.')) | ||
116 | + | ||
117 | + return cleaned_data | ||
118 | + | ||
119 | + | ||
93 | InlinePendenciesFormset = inlineformset_factory(Goals, Pendencies, form = PendenciesLimitedForm, extra = 1, max_num = 3, validate_max = True, can_delete = True) | 120 | InlinePendenciesFormset = inlineformset_factory(Goals, Pendencies, form = PendenciesLimitedForm, extra = 1, max_num = 3, validate_max = True, can_delete = True) |
94 | InlineGoalItemFormset = inlineformset_factory(Goals, GoalItem, form = GoalItemForm, extra = 1, can_delete = True) | 121 | InlineGoalItemFormset = inlineformset_factory(Goals, GoalItem, form = GoalItemForm, extra = 1, can_delete = True) |
95 | \ No newline at end of file | 122 | \ No newline at end of file |
@@ -0,0 +1,20 @@ | @@ -0,0 +1,20 @@ | ||
1 | +# -*- coding: utf-8 -*- | ||
2 | +# Generated by Django 1.10 on 2017-02-24 20:21 | ||
3 | +from __future__ import unicode_literals | ||
4 | + | ||
5 | +from django.db import migrations, models | ||
6 | + | ||
7 | + | ||
8 | +class Migration(migrations.Migration): | ||
9 | + | ||
10 | + dependencies = [ | ||
11 | + ('goals', '0001_initial'), | ||
12 | + ] | ||
13 | + | ||
14 | + operations = [ | ||
15 | + migrations.AlterField( | ||
16 | + model_name='goals', | ||
17 | + name='limit_submission_date', | ||
18 | + field=models.DateTimeField(blank=True, null=True, verbose_name='Submission Limit Date'), | ||
19 | + ), | ||
20 | + ] |
goals/models.py
@@ -7,7 +7,7 @@ from topics.models import Resource | @@ -7,7 +7,7 @@ from topics.models import Resource | ||
7 | 7 | ||
8 | class Goals(Resource): | 8 | class Goals(Resource): |
9 | presentation = models.TextField(_('Presentation'), blank = True) | 9 | presentation = models.TextField(_('Presentation'), blank = True) |
10 | - limit_submission_date = models.DateTimeField(_('Submission Limit Date')) | 10 | + limit_submission_date = models.DateTimeField(_('Submission Limit Date'), null = True, blank = True) |
11 | 11 | ||
12 | class Meta: | 12 | class Meta: |
13 | verbose_name = _('Goal') | 13 | verbose_name = _('Goal') |
@@ -20,7 +20,7 @@ class Goals(Resource): | @@ -20,7 +20,7 @@ class Goals(Resource): | ||
20 | return reverse_lazy('file_links:download', args = (), kwargs = {'slug': self.slug}) | 20 | return reverse_lazy('file_links:download', args = (), kwargs = {'slug': self.slug}) |
21 | 21 | ||
22 | def update_link(self): | 22 | def update_link(self): |
23 | - return 'file_links:update' | 23 | + return 'goals:update' |
24 | 24 | ||
25 | def delete_link(self): | 25 | def delete_link(self): |
26 | return 'file_links:delete' | 26 | return 'file_links:delete' |
@@ -29,7 +29,7 @@ class Goals(Resource): | @@ -29,7 +29,7 @@ class Goals(Resource): | ||
29 | return _('Are you sure you want delete the goals') | 29 | return _('Are you sure you want delete the goals') |
30 | 30 | ||
31 | class GoalItem(models.Model): | 31 | class GoalItem(models.Model): |
32 | - description = models.CharField(_('Description'), max_length = 255) | 32 | + description = models.CharField(_('Description'), max_length = 255, blank = True) |
33 | ref_value = models.IntegerField(_('Referential Value')) | 33 | ref_value = models.IntegerField(_('Referential Value')) |
34 | order = models.PositiveSmallIntegerField(_('Order'), null = True) | 34 | order = models.PositiveSmallIntegerField(_('Order'), null = True) |
35 | goal = models.ForeignKey(Goals, verbose_name = _('Goal'), related_name = 'item_goal') | 35 | goal = models.ForeignKey(Goals, verbose_name = _('Goal'), related_name = 'item_goal') |
36 | \ No newline at end of file | 36 | \ No newline at end of file |
goals/templates/goals/_form.html
@@ -71,10 +71,10 @@ | @@ -71,10 +71,10 @@ | ||
71 | {% if item.instance.pk %}{{ item.DELETE }}{% endif %} | 71 | {% if item.instance.pk %}{{ item.DELETE }}{% endif %} |
72 | 72 | ||
73 | <div class="form-group{% if item.has_error %} has-error {% endif %} row"> | 73 | <div class="form-group{% if item.has_error %} has-error {% endif %} row"> |
74 | - <label for="{{ item.description.auto_id }}" class="pull-left action_label contol-label"> | 74 | + <label for="{{ item.description.auto_id }}" class="pull-left desc_label contol-label"> |
75 | {{ item.description.label }}<span>*</span>: | 75 | {{ item.description.label }}<span>*</span>: |
76 | </label> | 76 | </label> |
77 | - <div class="col-md-3"> | 77 | + <div class="col-md-11"> |
78 | {% render_field item.description class='form-control' %} | 78 | {% render_field item.description class='form-control' %} |
79 | </div> | 79 | </div> |
80 | 80 | ||
@@ -98,12 +98,14 @@ | @@ -98,12 +98,14 @@ | ||
98 | <br clear="all" /> | 98 | <br clear="all" /> |
99 | <div class="form-group{% if item.has_error %} has-error {% endif %} row"> | 99 | <div class="form-group{% if item.has_error %} has-error {% endif %} row"> |
100 | <label for="{{ item.ref_value.auto_id }}" class="pull-left action_label contol-label"> | 100 | <label for="{{ item.ref_value.auto_id }}" class="pull-left action_label contol-label"> |
101 | - {{ item.ref_value.label }}<span>*</span>: | 101 | + {% trans 'Minimum percentage desired' %}<span>*</span>: |
102 | </label> | 102 | </label> |
103 | <div class="col-md-9"> | 103 | <div class="col-md-9"> |
104 | - <span>0%</span> | ||
105 | - {% render_field item.ref_value class='slider_value' data-slider-min="0" data-slider-max="100" %} | ||
106 | - <span>100%</span> | 104 | + <span class="label">0%</span> |
105 | + {% with item.ref_value.value|default:"0" as item_value %} | ||
106 | + {% render_field item.ref_value class='slider_value' data-slider-value=item_value data-slider-min="0" data-slider-max="100" %} | ||
107 | + {% endwith %} | ||
108 | + <span class="label">100%</span> | ||
107 | </div> | 109 | </div> |
108 | 110 | ||
109 | <br clear="all" /> | 111 | <br clear="all" /> |
@@ -192,7 +194,7 @@ | @@ -192,7 +194,7 @@ | ||
192 | </div> | 194 | </div> |
193 | {% endif %} | 195 | {% endif %} |
194 | </div> | 196 | </div> |
195 | - | 197 | + |
196 | <div class="panel panel-info"> | 198 | <div class="panel panel-info"> |
197 | <div class="panel-heading"> | 199 | <div class="panel-heading"> |
198 | <div class="row"> | 200 | <div class="row"> |
@@ -212,6 +214,7 @@ | @@ -212,6 +214,7 @@ | ||
212 | {% for notify in pendencies_form %} | 214 | {% for notify in pendencies_form %} |
213 | <div class="notifies"> | 215 | <div class="notifies"> |
214 | <div style="text-align:left"> | 216 | <div style="text-align:left"> |
217 | + {{ notify.errors }} | ||
215 | {% render_field notify.id %} | 218 | {% render_field notify.id %} |
216 | {% render_field notify.resource %} | 219 | {% render_field notify.resource %} |
217 | {% render_field notify.subject class='pend_subj' %} | 220 | {% render_field notify.subject class='pend_subj' %} |
@@ -389,7 +392,7 @@ | @@ -389,7 +392,7 @@ | ||
389 | <script type="text/javascript"> | 392 | <script type="text/javascript"> |
390 | $(function() { | 393 | $(function() { |
391 | $(".slider_value").bootstrapSlider({ | 394 | $(".slider_value").bootstrapSlider({ |
392 | - tooltip: 'always' | 395 | + tooltip: 'always', |
393 | }); | 396 | }); |
394 | 397 | ||
395 | $('.goalitems').formset({ | 398 | $('.goalitems').formset({ |
@@ -407,7 +410,8 @@ | @@ -407,7 +410,8 @@ | ||
407 | new_input.bootstrapSlider({ | 410 | new_input.bootstrapSlider({ |
408 | tooltip: 'always', | 411 | tooltip: 'always', |
409 | min: '0', | 412 | min: '0', |
410 | - max: '100' | 413 | + max: '100', |
414 | + value: '0' | ||
411 | }); | 415 | }); |
412 | } | 416 | } |
413 | }); | 417 | }); |
@@ -475,6 +479,10 @@ | @@ -475,6 +479,10 @@ | ||
475 | {% if not pendencies_form.is_valid and pendencies_form.is_bound %} | 479 | {% if not pendencies_form.is_valid and pendencies_form.is_bound %} |
476 | $("#notifications").collapse('toggle'); | 480 | $("#notifications").collapse('toggle'); |
477 | {% endif %} | 481 | {% endif %} |
482 | + | ||
483 | + {% if not goalitems_form.is_valid and goalitems_form.is_bound %} | ||
484 | + $("#goal_items").collapse('toggle'); | ||
485 | + {% endif %} | ||
478 | }); | 486 | }); |
479 | </script> | 487 | </script> |
480 | <script type="text/javascript" src="{% static 'js/resources.js' %}"></script> | 488 | <script type="text/javascript" src="{% static 'js/resources.js' %}"></script> |
481 | \ No newline at end of file | 489 | \ No newline at end of file |
@@ -0,0 +1,37 @@ | @@ -0,0 +1,37 @@ | ||
1 | +{% extends 'subjects/view.html' %} | ||
2 | + | ||
3 | +{% load static i18n django_bootstrap_breadcrumbs %} | ||
4 | + | ||
5 | +{% block style %} | ||
6 | + {{block.super}} | ||
7 | + <link rel="stylesheet" type="text/css" href="{% static "css/bootstrap-tagsinput.css" %}"> | ||
8 | + <link rel="stylesheet" type="text/css" href="{% static "css/bootstrap-slider.css" %}"> | ||
9 | +{% endblock %} | ||
10 | + | ||
11 | +{% block javascript %} | ||
12 | + {{block.super}} | ||
13 | + <script type="text/javascript" src="{% static "js/bootstrap-tagsinput.js" %} "></script> | ||
14 | + <script type="text/javascript" src="{% static "js/bootstrap-slider.js" %} "></script> | ||
15 | + <script type="text/javascript" src="{% static "js/jquery.formset.js" %} "></script> | ||
16 | +{% endblock %} | ||
17 | + | ||
18 | +{% block breadcrumbs %} | ||
19 | + {{ block.super }} | ||
20 | + | ||
21 | + {% breadcrumb topic 'subjects:topic_view' topic.subject.slug topic.slug %} | ||
22 | + | ||
23 | + {% trans 'Edit: Topic Goals ' as bread %} | ||
24 | + {% breadcrumb bread 'goals:update' topic.slug goal.slug %} | ||
25 | +{% endblock %} | ||
26 | + | ||
27 | +{% block content %} | ||
28 | + <div class="card"> | ||
29 | + <div class="card-content"> | ||
30 | + <div class="card-body"> | ||
31 | + {% include 'goals/_form.html' %} | ||
32 | + </div> | ||
33 | + </div> | ||
34 | + </div> | ||
35 | + <br clear="all" /> | ||
36 | + <br clear="all" /> | ||
37 | +{% endblock %} |
goals/urls.py
@@ -5,4 +5,5 @@ from . import views | @@ -5,4 +5,5 @@ from . import views | ||
5 | 5 | ||
6 | urlpatterns = [ | 6 | urlpatterns = [ |
7 | url(r'^create/(?P<slug>[\w_-]+)/$', views.CreateView.as_view(), name = 'create'), | 7 | url(r'^create/(?P<slug>[\w_-]+)/$', views.CreateView.as_view(), name = 'create'), |
8 | + url(r'^update/(?P<topic_slug>[\w_-]+)/(?P<slug>[\w_-]+)/$', views.UpdateView.as_view(), name = 'update'), | ||
8 | ] | 9 | ] |
goals/views.py
@@ -103,6 +103,17 @@ class CreateView(LoginRequiredMixin, generic.edit.CreateView): | @@ -103,6 +103,17 @@ class CreateView(LoginRequiredMixin, generic.edit.CreateView): | ||
103 | 103 | ||
104 | goalitems_form.instance = self.object | 104 | goalitems_form.instance = self.object |
105 | goalitems_form.save(commit = False) | 105 | goalitems_form.save(commit = False) |
106 | + | ||
107 | + g_order = 1 | ||
108 | + | ||
109 | + for gform in goalitems_form.forms: | ||
110 | + goal_form = gform.save(commit = False) | ||
111 | + | ||
112 | + if not goal_form.description == "": | ||
113 | + goal_form.order = g_order | ||
114 | + goal_form.save() | ||
115 | + | ||
116 | + g_order += 1 | ||
106 | 117 | ||
107 | return redirect(self.get_success_url()) | 118 | return redirect(self.get_success_url()) |
108 | 119 | ||
@@ -131,4 +142,119 @@ class CreateView(LoginRequiredMixin, generic.edit.CreateView): | @@ -131,4 +142,119 @@ class CreateView(LoginRequiredMixin, generic.edit.CreateView): | ||
131 | 142 | ||
132 | success_url = reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug}) | 143 | success_url = reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug}) |
133 | 144 | ||
145 | + return success_url | ||
146 | + | ||
147 | +class UpdateView(LoginRequiredMixin, generic.UpdateView): | ||
148 | + login_url = reverse_lazy("users:login") | ||
149 | + redirect_field_name = 'next' | ||
150 | + | ||
151 | + template_name = 'goals/update.html' | ||
152 | + model = Goals | ||
153 | + form_class = GoalsForm | ||
154 | + context_object_name = 'goal' | ||
155 | + | ||
156 | + def dispatch(self, request, *args, **kwargs): | ||
157 | + slug = self.kwargs.get('topic_slug', '') | ||
158 | + topic = get_object_or_404(Topic, slug = slug) | ||
159 | + | ||
160 | + if not has_subject_permissions(request.user, topic.subject): | ||
161 | + return redirect(reverse_lazy('subjects:home')) | ||
162 | + | ||
163 | + return super(UpdateView, self).dispatch(request, *args, **kwargs) | ||
164 | + | ||
165 | + def get(self, request, *args, **kwargs): | ||
166 | + self.object = self.get_object() | ||
167 | + | ||
168 | + form_class = self.get_form_class() | ||
169 | + form = self.get_form(form_class) | ||
170 | + | ||
171 | + slug = self.kwargs.get('topic_slug', '') | ||
172 | + topic = get_object_or_404(Topic, slug = slug) | ||
173 | + | ||
174 | + pendencies_form = InlinePendenciesFormset(instance = self.object, initial = [{'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize")), ("submit", _("Submit"))]}]) | ||
175 | + goalitems_form = InlineGoalItemFormset(instance = self.object) | ||
176 | + | ||
177 | + return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form, goalitems_form = goalitems_form)) | ||
178 | + | ||
179 | + def post(self, request, *args, **kwargs): | ||
180 | + self.object = self.get_object() | ||
181 | + | ||
182 | + form_class = self.get_form_class() | ||
183 | + form = self.get_form(form_class) | ||
184 | + | ||
185 | + slug = self.kwargs.get('topic_slug', '') | ||
186 | + topic = get_object_or_404(Topic, slug = slug) | ||
187 | + | ||
188 | + pendencies_form = InlinePendenciesFormset(self.request.POST, instance = self.object, initial = [{'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize")), ("submit", _("Submit"))]}]) | ||
189 | + goalitems_form = InlineGoalItemFormset(self.request.POST, instance = self.object) | ||
190 | + | ||
191 | + if (form.is_valid() and pendencies_form.is_valid() and goalitems_form.is_valid()): | ||
192 | + return self.form_valid(form, pendencies_form, goalitems_form) | ||
193 | + else: | ||
194 | + return self.form_invalid(form, pendencies_form, goalitems_form) | ||
195 | + | ||
196 | + def form_invalid(self, form, pendencies_form, goalitems_form): | ||
197 | + for p_form in pendencies_form.forms: | ||
198 | + p_form.fields['action'].choices = [("", "-------"),("view", _("Visualize")), ("submit", _("Submit"))] | ||
199 | + | ||
200 | + return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form, goalitems_form = goalitems_form)) | ||
201 | + | ||
202 | + def form_valid(self, form, pendencies_form, goalitems_form): | ||
203 | + self.object = form.save(commit = False) | ||
204 | + | ||
205 | + if not self.object.topic.visible and not self.object.topic.repository: | ||
206 | + self.object.visible = False | ||
207 | + | ||
208 | + self.object.save() | ||
209 | + | ||
210 | + pendencies_form.instance = self.object | ||
211 | + pendencies_form.save(commit = False) | ||
212 | + | ||
213 | + for form in pendencies_form.forms: | ||
214 | + pend_form = form.save(commit = False) | ||
215 | + | ||
216 | + if not pend_form.action == "": | ||
217 | + pend_form.save() | ||
218 | + | ||
219 | + goalitems_form.instance = self.object | ||
220 | + goalitems_form.save(commit = False) | ||
221 | + | ||
222 | + g_order = self.object.item_goal.count() + 1 | ||
223 | + | ||
224 | + for gform in goalitems_form.forms: | ||
225 | + goal_form = gform.save(commit = False) | ||
226 | + | ||
227 | + if not goal_form.description == "": | ||
228 | + goal_form.order = g_order | ||
229 | + goal_form.save() | ||
230 | + | ||
231 | + g_order += 1 | ||
232 | + | ||
233 | + return redirect(self.get_success_url()) | ||
234 | + | ||
235 | + def get_context_data(self, **kwargs): | ||
236 | + context = super(UpdateView, self).get_context_data(**kwargs) | ||
237 | + | ||
238 | + context['title'] = _('Update Topic Goals') | ||
239 | + | ||
240 | + slug = self.kwargs.get('topic_slug', '') | ||
241 | + topic = get_object_or_404(Topic, slug = slug) | ||
242 | + | ||
243 | + context['topic'] = topic | ||
244 | + context['subject'] = topic.subject | ||
245 | + | ||
246 | + return context | ||
247 | + | ||
248 | + def get_success_url(self): | ||
249 | + messages.success(self.request, _('The YouTube Video "%s" was updated successfully!')%(self.object.name)) | ||
250 | + | ||
251 | + #success_url = reverse_lazy('youtube:view', kwargs = {'slug': self.object.slug}) | ||
252 | + | ||
253 | + #if self.object.show_window: | ||
254 | + # self.request.session['resources'] = {} | ||
255 | + # self.request.session['resources']['new_page'] = True | ||
256 | + # self.request.session['resources']['new_page_url'] = reverse('youtube:window_view', kwargs = {'slug': self.object.slug}) | ||
257 | + | ||
258 | + success_url = reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug}) | ||
259 | + | ||
134 | return success_url | 260 | return success_url |
135 | \ No newline at end of file | 261 | \ No newline at end of file |
pendencies/forms.py
@@ -4,6 +4,8 @@ import datetime | @@ -4,6 +4,8 @@ import datetime | ||
4 | from django import forms | 4 | from django import forms |
5 | from django.conf import settings | 5 | from django.conf import settings |
6 | from django.utils.translation import ugettext_lazy as _ | 6 | from django.utils.translation import ugettext_lazy as _ |
7 | +from django.utils.formats import get_format | ||
8 | +from django.utils import timezone | ||
7 | 9 | ||
8 | from subjects.models import Subject | 10 | from subjects.models import Subject |
9 | 11 | ||
@@ -17,15 +19,18 @@ class PendenciesForm(forms.ModelForm): | @@ -17,15 +19,18 @@ class PendenciesForm(forms.ModelForm): | ||
17 | 19 | ||
18 | if kwargs.get('initial', None): | 20 | if kwargs.get('initial', None): |
19 | self.fields['action'].choices = kwargs['initial'].get('actions', []) | 21 | self.fields['action'].choices = kwargs['initial'].get('actions', []) |
22 | + | ||
23 | + datetime_formats = get_format('DATETIME_INPUT_FORMATS') | ||
24 | + | ||
25 | + self.fields['begin_date'].input_formats = datetime_formats | ||
26 | + self.fields['end_date'].input_formats = datetime_formats | ||
20 | 27 | ||
21 | begin_date_check = forms.BooleanField(required = False) | 28 | begin_date_check = forms.BooleanField(required = False) |
22 | end_date_check = forms.BooleanField(required = False) | 29 | end_date_check = forms.BooleanField(required = False) |
23 | - begin_date = forms.DateTimeField(input_formats = settings.DATETIME_INPUT_FORMATS) | ||
24 | - end_date = forms.DateTimeField(input_formats = settings.DATETIME_INPUT_FORMATS) | ||
25 | - | 30 | + |
26 | class Meta: | 31 | class Meta: |
27 | model = Pendencies | 32 | model = Pendencies |
28 | - fields = ['action'] | 33 | + fields = ['action', 'begin_date', 'end_date'] |
29 | 34 | ||
30 | def clean(self): | 35 | def clean(self): |
31 | cleaned_data = super(PendenciesForm, self).clean() | 36 | cleaned_data = super(PendenciesForm, self).clean() |
@@ -88,23 +93,27 @@ class PendenciesLimitedForm(forms.ModelForm): | @@ -88,23 +93,27 @@ class PendenciesLimitedForm(forms.ModelForm): | ||
88 | 93 | ||
89 | if kwargs.get('initial', None): | 94 | if kwargs.get('initial', None): |
90 | self.fields['action'].choices = kwargs['initial'].get('actions', []) | 95 | self.fields['action'].choices = kwargs['initial'].get('actions', []) |
96 | + | ||
97 | + datetime_formats = get_format('DATETIME_INPUT_FORMATS') | ||
98 | + | ||
99 | + self.fields['begin_date'].input_formats = datetime_formats | ||
100 | + self.fields['end_date'].input_formats = datetime_formats | ||
101 | + self.fields['limit_date'].input_formats = datetime_formats | ||
91 | 102 | ||
92 | begin_date_check = forms.BooleanField(required = False) | 103 | begin_date_check = forms.BooleanField(required = False) |
93 | end_date_check = forms.BooleanField(required = False) | 104 | end_date_check = forms.BooleanField(required = False) |
94 | limit_date_check = forms.BooleanField(required = False) | 105 | limit_date_check = forms.BooleanField(required = False) |
95 | - begin_date = forms.DateTimeField(input_formats = settings.DATETIME_INPUT_FORMATS) | ||
96 | - end_date = forms.DateTimeField(input_formats = settings.DATETIME_INPUT_FORMATS) | ||
97 | - limit_date = forms.DateTimeField(input_formats = settings.DATETIME_INPUT_FORMATS) | ||
98 | - | 106 | + |
99 | class Meta: | 107 | class Meta: |
100 | model = Pendencies | 108 | model = Pendencies |
101 | - fields = ['action'] | 109 | + fields = ['action', 'begin_date', 'end_date', 'limit_date'] |
102 | 110 | ||
103 | def clean(self): | 111 | def clean(self): |
104 | cleaned_data = super(PendenciesLimitedForm, self).clean() | 112 | cleaned_data = super(PendenciesLimitedForm, self).clean() |
105 | 113 | ||
106 | pend_id = cleaned_data.get('id', None) | 114 | pend_id = cleaned_data.get('id', None) |
107 | 115 | ||
116 | + limit_submission_date = self.data.get('limit_submission_date', None) | ||
108 | action = cleaned_data.get('action', None) | 117 | action = cleaned_data.get('action', None) |
109 | begin_date = cleaned_data.get('begin_date', None) | 118 | begin_date = cleaned_data.get('begin_date', None) |
110 | end_date = cleaned_data.get('end_date', None) | 119 | end_date = cleaned_data.get('end_date', None) |
@@ -114,7 +123,7 @@ class PendenciesLimitedForm(forms.ModelForm): | @@ -114,7 +123,7 @@ class PendenciesLimitedForm(forms.ModelForm): | ||
114 | limit_check = cleaned_data.get('limit_date_check', False) | 123 | limit_check = cleaned_data.get('limit_date_check', False) |
115 | subject_id = cleaned_data.get('subject', None) | 124 | subject_id = cleaned_data.get('subject', None) |
116 | 125 | ||
117 | - if begin_check or end_check: | 126 | + if begin_check or end_check or limit_date: |
118 | if not action: | 127 | if not action: |
119 | self.add_error('action', _('This field is required.')) | 128 | self.add_error('action', _('This field is required.')) |
120 | 129 | ||
@@ -124,12 +133,27 @@ class PendenciesLimitedForm(forms.ModelForm): | @@ -124,12 +133,27 @@ class PendenciesLimitedForm(forms.ModelForm): | ||
124 | if not end_date and end_check: | 133 | if not end_date and end_check: |
125 | self.add_error('end_date', _('This field is required.')) | 134 | self.add_error('end_date', _('This field is required.')) |
126 | 135 | ||
136 | + if not limit_date and limit_check: | ||
137 | + self.add_error('limit_date', _('This field is required.')) | ||
138 | + | ||
127 | if begin_date and end_date: | 139 | if begin_date and end_date: |
128 | if not begin_date == ValueError and not end_date == ValueError: | 140 | if not begin_date == ValueError and not end_date == ValueError: |
129 | if begin_date > end_date: | 141 | if begin_date > end_date: |
130 | self.add_error('begin_date', _('This input should be filled with a date equal or before the End Date.')) | 142 | self.add_error('begin_date', _('This input should be filled with a date equal or before the End Date.')) |
131 | self.add_error('end_date', _('This input should be filled with a date equal or after the Begin Date.')) | 143 | self.add_error('end_date', _('This input should be filled with a date equal or after the Begin Date.')) |
132 | 144 | ||
145 | + if begin_date and limit_date: | ||
146 | + if not begin_date == ValueError and not limit_date == ValueError: | ||
147 | + if begin_date > limit_date: | ||
148 | + self.add_error('begin_date', _('This input should be filled with a date equal or before the Limit Date.')) | ||
149 | + self.add_error('limit_date', _('This input should be filled with a date equal or after the Begin Date.')) | ||
150 | + | ||
151 | + if end_date and limit_date: | ||
152 | + if not end_date == ValueError and not limit_date == ValueError: | ||
153 | + if end_date > limit_date: | ||
154 | + self.add_error('end_date', _('This input should be filled with a date equal or before the Limit Date.')) | ||
155 | + self.add_error('limit_date', _('This input should be filled with a date equal or after the End Date.')) | ||
156 | + | ||
133 | if subject_id: | 157 | if subject_id: |
134 | subject = Subject.objects.get(id = subject_id) | 158 | subject = Subject.objects.get(id = subject_id) |
135 | 159 | ||
@@ -153,4 +177,30 @@ class PendenciesLimitedForm(forms.ModelForm): | @@ -153,4 +177,30 @@ class PendenciesLimitedForm(forms.ModelForm): | ||
153 | if end_date.date() > subject.end_date: | 177 | if end_date.date() > subject.end_date: |
154 | self.add_error('end_date', _('This input should be filled with a date equal or before the subject end date.')) | 178 | self.add_error('end_date', _('This input should be filled with a date equal or before the subject end date.')) |
155 | 179 | ||
180 | + if not limit_date == ValueError and limit_date: | ||
181 | + if not self.instance.id and limit_date.date() < datetime.datetime.today().date(): | ||
182 | + self.add_error('limit_date', _("This input should be filled with a date equal or after today's date.")) | ||
183 | + | ||
184 | + if limit_date.date() < subject.init_date: | ||
185 | + self.add_error('limit_date', _('This input should be filled with a date equal or after the subject begin date.')) | ||
186 | + | ||
187 | + if limit_date.date() > subject.end_date: | ||
188 | + self.add_error('limit_date', _('This input should be filled with a date equal or before the subject end date.')) | ||
189 | + | ||
190 | + if limit_submission_date: | ||
191 | + limit_submission_date = datetime.datetime.strptime(limit_submission_date, get_format('DATETIME_FORMAT')) | ||
192 | + limit_submission_date = timezone.make_aware(limit_submission_date, timezone.get_current_timezone()) | ||
193 | + | ||
194 | + if not begin_date == ValueError and begin_date: | ||
195 | + if begin_date > limit_submission_date: | ||
196 | + self.add_error('begin_date', _('This input should be filled with a date equal or before the goals submission limit date.')) | ||
197 | + | ||
198 | + if not end_date == ValueError and end_date: | ||
199 | + if end_date > limit_submission_date: | ||
200 | + self.add_error('end_date', _('This input should be filled with a date equal or before the goals submission limit date.')) | ||
201 | + | ||
202 | + if not limit_date == ValueError and limit_date: | ||
203 | + if limit_date > limit_submission_date: | ||
204 | + self.add_error('limit_date', _('This input should be filled with a date equal or before the goals submission limit date.')) | ||
205 | + | ||
156 | return cleaned_data | 206 | return cleaned_data |
users/templates/users/login.html
@@ -126,8 +126,6 @@ | @@ -126,8 +126,6 @@ | ||
126 | 126 | ||
127 | </a> | 127 | </a> |
128 | <ul class="dropdown-menu"> | 128 | <ul class="dropdown-menu"> |
129 | - | ||
130 | - | ||
131 | {% get_available_languages as LANGUAGES %} | 129 | {% get_available_languages as LANGUAGES %} |
132 | {% get_language_info_list for LANGUAGES as languages %} | 130 | {% get_language_info_list for LANGUAGES as languages %} |
133 | {% for language in languages %} | 131 | {% for language in languages %} |