Commit 187a98d4be47c5814c222ace1ac10ccf2c5e552e

Authored by Zambom
1 parent bc6a9694

Adjusting webpages notification

webpage/forms.py
1 # coding=utf-8 1 # coding=utf-8
2 from django import forms 2 from django import forms
3 -from django.forms.models import inlineformset_factory  
4 from django.utils.translation import ugettext_lazy as _ 3 from django.utils.translation import ugettext_lazy as _
5 from django.utils.html import strip_tags 4 from django.utils.html import strip_tags
6 5
7 -from pendencies.forms import PendenciesForm  
8 -from pendencies.models import Pendencies  
9 -  
10 from subjects.models import Tag 6 from subjects.models import Tag
11 7
12 from .models import Webpage 8 from .models import Webpage
13 9
14 class WebpageForm(forms.ModelForm): 10 class WebpageForm(forms.ModelForm):
15 subject = None 11 subject = None
16 - control_subject = forms.CharField(widget = forms.HiddenInput())  
17 - 12 +
18 def __init__(self, *args, **kwargs): 13 def __init__(self, *args, **kwargs):
19 super(WebpageForm, self).__init__(*args, **kwargs) 14 super(WebpageForm, self).__init__(*args, **kwargs)
20 15
@@ -23,8 +18,6 @@ class WebpageForm(forms.ModelForm): @@ -23,8 +18,6 @@ class WebpageForm(forms.ModelForm):
23 if self.instance.id: 18 if self.instance.id:
24 self.subject = self.instance.topic.subject 19 self.subject = self.instance.topic.subject
25 self.initial['tags'] = ", ".join(self.instance.tags.all().values_list("name", flat = True)) 20 self.initial['tags'] = ", ".join(self.instance.tags.all().values_list("name", flat = True))
26 -  
27 - self.initial['control_subject'] = self.subject.id  
28 21
29 self.fields['students'].queryset = self.subject.students.all() 22 self.fields['students'].queryset = self.subject.students.all()
30 self.fields['groups'].queryset = self.subject.group_subject.all() 23 self.fields['groups'].queryset = self.subject.group_subject.all()
@@ -101,6 +94,4 @@ class WebpageForm(forms.ModelForm): @@ -101,6 +94,4 @@ class WebpageForm(forms.ModelForm):
101 if not new_tag in self.instance.tags.all(): 94 if not new_tag in self.instance.tags.all():
102 self.instance.tags.add(new_tag) 95 self.instance.tags.add(new_tag)
103 96
104 - return self.instance  
105 -  
106 -InlinePendenciesFormset = inlineformset_factory(Webpage, Pendencies, form = PendenciesForm, extra = 1, can_delete = True)  
107 \ No newline at end of file 97 \ No newline at end of file
  98 + return self.instance
108 \ No newline at end of file 99 \ No newline at end of file
webpage/templates/webpages/_form.html
@@ -102,103 +102,98 @@ @@ -102,103 +102,98 @@
102 </div> 102 </div>
103 </div> 103 </div>
104 <div id="notifications" class="panel-collapse collapse"> 104 <div id="notifications" class="panel-collapse collapse">
105 - {{ pendencies_form.management_form }}  
106 - {{ pendencies_form.non_form_errors }}  
107 -  
108 - {% for notify in pendencies_form %}  
109 - <div class="notifies">  
110 - <div style="text-align:left">  
111 - {% if notify.instance.pk %}{{ notify.DELETE }}{% endif %}  
112 - {% render_field notify.id %}  
113 - {% render_field notify.resource %}  
114 - {% render_field notify.subject class='pend_subj' %}  
115 -  
116 - <div class="form-group{% if notify.has_error %} has-error {% endif %} row">  
117 - <label for="{{ notify.action.auto_id }}" class="pull-left action_label contol-label">  
118 - {% trans 'Action not performed by the user' %}:  
119 - </label>  
120 - <div class="col-md-3">  
121 - {% render_field notify.action class='form-control' %}  
122 - </div>  
123 -  
124 - <br clear="all" />  
125 -  
126 - <span id="helpBlock" class="help-block">{{ notify.action.help_text }}</span>  
127 -  
128 - {% if notify.action.errors %}  
129 - <div class="alert alert-danger alert-dismissible" role="alert">  
130 - <button type="button" class="close" data-dismiss="alert" aria-label="Close">  
131 - <span aria-hidden="true">&times;</span>  
132 - </button>  
133 - <ul>  
134 - {% for error in notify.action.errors %}  
135 - <li>{{ error }}</li>  
136 - {% endfor %}  
137 - </ul>  
138 - </div>  
139 - {% endif %}  
140 - </div>  
141 - <br clear="all" />  
142 - <div class="row">  
143 - <div class="col-md-offset-2">  
144 - <p>{% trans 'Wished period' %}: </p>  
145 - </div>  
146 - </div>  
147 - <div class="form-group{% if notify.has_error %} has-error {% endif %} row">  
148 - <div class="col-lg-offset-3 col-md-offset-3 col-sm-offset-3 col-lg-2 col-md-2 col-sm-2 col-xs-3 checkbox">  
149 - <label>  
150 - {% render_field notify.begin_date_check class="begin_date" %} {{ notify.begin_date.label }}  
151 - </label>  
152 - </div>  
153 - <div class="col-lg-4 col-md-4 col-sm-4 col-xs-4">  
154 - {% render_field notify.begin_date class='form-control datetime-picker begin_date_input' %}  
155 - </div>  
156 - </div>  
157 - <div class="row">  
158 - <span id="helpBlock" class="help-block">{{ notify.begin_date.help_text }}</span>  
159 -  
160 - {% if notify.begin_date.errors %}  
161 - <div class="alert alert-danger alert-dismissible" role="alert">  
162 - <button type="button" class="close" data-dismiss="alert" aria-label="Close">  
163 - <span aria-hidden="true">&times;</span>  
164 - </button>  
165 - <ul>  
166 - {% for error in notify.begin_date.errors %}  
167 - <li>{{ error }}</li>  
168 - {% endfor %}  
169 - </ul>  
170 - </div>  
171 - {% endif %}  
172 - </div>  
173 - <div class="form-group{% if notify.has_error %} has-error {% endif %} row">  
174 - <div class="col-lg-offset-3 col-md-offset-3 col-sm-offset-3 col-lg-2 col-md-2 col-sm-2 col-xs-3 checkbox">  
175 - <label>  
176 - {% render_field notify.end_date_check class="end_date" %} {{ notify.end_date.label }}  
177 - </label>  
178 - </div>  
179 - <div class="col-lg-4 col-md-4 col-sm-4 col-xs-4">  
180 - {% render_field notify.end_date class='form-control datetime-picker end_date_input' %}  
181 - </div>  
182 - </div>  
183 - <div class="row">  
184 - <span id="helpBlock" class="help-block">{{ notify.end_date.help_text }}</span>  
185 -  
186 - {% if notify.end_date.errors %}  
187 - <div class="alert alert-danger alert-dismissible" role="alert">  
188 - <button type="button" class="close" data-dismiss="alert" aria-label="Close">  
189 - <span aria-hidden="true">&times;</span>  
190 - </button>  
191 - <ul>  
192 - {% for error in notify.end_date.errors %}  
193 - <li>{{ error }}</li>  
194 - {% endfor %}  
195 - </ul>  
196 - </div>  
197 - {% endif %}  
198 - </div>  
199 - </div> 105 +
  106 + <div class="notifies">
  107 + <div style="text-align:left">
  108 + {% render_field pendencies_form.id %}
  109 + {% render_field pendencies_form.resource %}
  110 + {% render_field pendencies_form.subject class='pend_subj' %}
  111 +
  112 + <div class="form-group{% if pendencies_form.has_error %} has-error {% endif %} row">
  113 + <label for="{{ pendencies_form.action.auto_id }}" class="pull-left action_label contol-label">
  114 + {% trans 'Action not performed by the user' %}:
  115 + </label>
  116 + <div class="col-md-3">
  117 + {% render_field pendencies_form.action class='form-control' %}
  118 + </div>
  119 +
  120 + <br clear="all" />
  121 +
  122 + <span id="helpBlock" class="help-block">{{ pendencies_form.action.help_text }}</span>
  123 +
  124 + {% if pendencies_form.action.errors %}
  125 + <div class="alert alert-danger alert-dismissible" role="alert">
  126 + <button type="button" class="close" data-dismiss="alert" aria-label="Close">
  127 + <span aria-hidden="true">&times;</span>
  128 + </button>
  129 + <ul>
  130 + {% for error in pendencies_form.action.errors %}
  131 + <li>{{ error }}</li>
  132 + {% endfor %}
  133 + </ul>
  134 + </div>
  135 + {% endif %}
  136 + </div>
  137 + <br clear="all" />
  138 + <div class="row">
  139 + <div class="col-md-12">
  140 + <p>{% trans 'Wished period' %}: </p>
  141 + </div>
  142 + </div>
  143 + <div class="form-group{% if pendencies_form.has_error %} has-error {% endif %} row">
  144 + <div class="col-lg-2 col-md-2 col-sm-2 col-xs-3 checkbox">
  145 + <label>
  146 + {% render_field pendencies_form.begin_date_check class="begin_date" %} {{ pendencies_form.begin_date.label }}
  147 + </label>
  148 + </div>
  149 + <div class="col-lg-4 col-md-4 col-sm-4 col-xs-4">
  150 + {% render_field pendencies_form.begin_date class='form-control datetime-picker begin_date_input' %}
  151 + </div>
  152 + </div>
  153 + <div class="row">
  154 + <span id="helpBlock" class="help-block">{{ pendencies_form.begin_date.help_text }}</span>
  155 +
  156 + {% if pendencies_form.begin_date.errors %}
  157 + <div class="alert alert-danger alert-dismissible" role="alert">
  158 + <button type="button" class="close" data-dismiss="alert" aria-label="Close">
  159 + <span aria-hidden="true">&times;</span>
  160 + </button>
  161 + <ul>
  162 + {% for error in pendencies_form.begin_date.errors %}
  163 + <li>{{ error }}</li>
  164 + {% endfor %}
  165 + </ul>
  166 + </div>
  167 + {% endif %}
  168 + </div>
  169 + <div class="form-group{% if pendencies_form.has_error %} has-error {% endif %} row">
  170 + <div class="col-lg-2 col-md-2 col-sm-2 col-xs-3 checkbox">
  171 + <label>
  172 + {% render_field pendencies_form.end_date_check class="end_date" %} {{ pendencies_form.end_date.label }}
  173 + </label>
  174 + </div>
  175 + <div class="col-lg-4 col-md-4 col-sm-4 col-xs-4">
  176 + {% render_field pendencies_form.end_date class='form-control datetime-picker end_date_input' %}
  177 + </div>
  178 + </div>
  179 + <div class="row">
  180 + <span id="helpBlock" class="help-block">{{ pendencies_form.end_date.help_text }}</span>
  181 +
  182 + {% if pendencies_form.end_date.errors %}
  183 + <div class="alert alert-danger alert-dismissible" role="alert">
  184 + <button type="button" class="close" data-dismiss="alert" aria-label="Close">
  185 + <span aria-hidden="true">&times;</span>
  186 + </button>
  187 + <ul>
  188 + {% for error in pendencies_form.end_date.errors %}
  189 + <li>{{ error }}</li>
  190 + {% endfor %}
  191 + </ul>
  192 + </div>
  193 + {% endif %}
  194 + </div>
200 </div> 195 </div>
201 - {% endfor %} 196 + </div>
202 </div> 197 </div>
203 </div> 198 </div>
204 199
@@ -333,40 +328,16 @@ @@ -333,40 +328,16 @@
333 </form> 328 </form>
334 <script type="text/javascript"> 329 <script type="text/javascript">
335 $(function() { 330 $(function() {
336 - $('.notifies').formset({  
337 - addText: '{% trans "Add new notification" %}',  
338 - deleteText: '{% trans "Remove this notification" %}',  
339 - prefix: '{{ pendencies_form.prefix }}',  
340 - added: function (row) {  
341 - var locale = navigator.language || navigator.userLanguage;  
342 -  
343 - $(row).find('.datetime-picker').each(function () {  
344 - $(this).datetimepicker({  
345 - locale: locale  
346 - });  
347 - });  
348 -  
349 - $('.begin_date_input').on('click', function () {  
350 - var checkbox = $(this).parent().parent().find('.begin_date');  
351 -  
352 - $(checkbox).prop('checked', true);  
353 - });  
354 -  
355 - $('.end_date_input').on('click', function () {  
356 - var checkbox = $(this).parent().parent().find('.end_date');  
357 -  
358 - $(checkbox).prop('checked', true);  
359 - });  
360 -  
361 - subject = $("#id_control_subject").val();  
362 -  
363 - $(row).find('.pend_subj').val(subject);  
364 - }  
365 - }); 331 + var begin_val = $('.begin_date_input').val(),
  332 + end_val = $('.end_date_input').val();
366 333
367 - subject = $("#id_control_subject").val(); 334 + if (begin_val != '') {
  335 + $(".begin_date").prop('checked', true);
  336 + }
368 337
369 - $('.pend_subj').val(subject); 338 + if (end_val != '') {
  339 + $(".end_date").prop('checked', true);
  340 + }
370 341
371 {% if not pendencies_form.is_valid and pendencies_form.is_bound %} 342 {% if not pendencies_form.is_valid and pendencies_form.is_bound %}
372 $("#notifications").collapse('toggle'); 343 $("#notifications").collapse('toggle');
webpage/views.py
@@ -9,7 +9,9 @@ from amadeus.permissions import has_subject_permissions, has_resource_permission @@ -9,7 +9,9 @@ from amadeus.permissions import has_subject_permissions, has_resource_permission
9 9
10 from topics.models import Topic 10 from topics.models import Topic
11 11
12 -from .forms import WebpageForm, InlinePendenciesFormset 12 +from pendencies.forms import PendenciesForm
  13 +
  14 +from .forms import WebpageForm
13 from .models import Webpage 15 from .models import Webpage
14 16
15 class NewWindowView(LoginRequiredMixin, generic.DetailView): 17 class NewWindowView(LoginRequiredMixin, generic.DetailView):
@@ -81,7 +83,7 @@ class CreateView(LoginRequiredMixin, generic.edit.CreateView): @@ -81,7 +83,7 @@ class CreateView(LoginRequiredMixin, generic.edit.CreateView):
81 slug = self.kwargs.get('slug', '') 83 slug = self.kwargs.get('slug', '')
82 topic = get_object_or_404(Topic, slug = slug) 84 topic = get_object_or_404(Topic, slug = slug)
83 85
84 - pendencies_form = InlinePendenciesFormset(initial = [{'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}]) 86 + pendencies_form = PendenciesForm(initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]})
85 87
86 return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form)) 88 return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form))
87 89
@@ -94,7 +96,7 @@ class CreateView(LoginRequiredMixin, generic.edit.CreateView): @@ -94,7 +96,7 @@ class CreateView(LoginRequiredMixin, generic.edit.CreateView):
94 slug = self.kwargs.get('slug', '') 96 slug = self.kwargs.get('slug', '')
95 topic = get_object_or_404(Topic, slug = slug) 97 topic = get_object_or_404(Topic, slug = slug)
96 98
97 - pendencies_form = InlinePendenciesFormset(self.request.POST, initial = [{'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}]) 99 + pendencies_form = PendenciesForm(self.request.POST, initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]})
98 100
99 if (form.is_valid() and pendencies_form.is_valid()): 101 if (form.is_valid() and pendencies_form.is_valid()):
100 return self.form_valid(form, pendencies_form) 102 return self.form_valid(form, pendencies_form)
@@ -128,15 +130,12 @@ class CreateView(LoginRequiredMixin, generic.edit.CreateView): @@ -128,15 +130,12 @@ class CreateView(LoginRequiredMixin, generic.edit.CreateView):
128 130
129 self.object.save() 131 self.object.save()
130 132
131 - pendencies_form.instance = self.object  
132 - pendencies_form.save(commit = False) 133 + pend_form = pendencies_form.save(commit = False)
  134 + pend_form.resource = self.object
  135 +
  136 + if not pend_form.action == "":
  137 + pend_form.save()
133 138
134 - for pform in pendencies_form.forms:  
135 - pend_form = pform.save(commit = False)  
136 -  
137 - if not pend_form.action == "":  
138 - pend_form.save()  
139 -  
140 return redirect(self.get_success_url()) 139 return redirect(self.get_success_url())
141 140
142 def get_context_data(self, **kwargs): 141 def get_context_data(self, **kwargs):
@@ -183,6 +182,24 @@ class UpdateView(LoginRequiredMixin, generic.UpdateView): @@ -183,6 +182,24 @@ class UpdateView(LoginRequiredMixin, generic.UpdateView):
183 182
184 return super(UpdateView, self).dispatch(request, *args, **kwargs) 183 return super(UpdateView, self).dispatch(request, *args, **kwargs)
185 184
  185 + def get(self, request, *args, **kwargs):
  186 + self.object = self.get_object()
  187 +
  188 + form_class = self.get_form_class()
  189 + form = self.get_form(form_class)
  190 +
  191 + slug = self.kwargs.get('topic_slug', '')
  192 + topic = get_object_or_404(Topic, slug = slug)
  193 +
  194 + pend_form = self.object.pendencies_resource.all()
  195 +
  196 + if len(pend_form) > 0:
  197 + pendencies_form = PendenciesForm(instance = pend_form[0], initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]})
  198 + else:
  199 + pendencies_form = PendenciesForm(initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]})
  200 +
  201 + return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form))
  202 +
186 def post(self, request, *args, **kwargs): 203 def post(self, request, *args, **kwargs):
187 self.object = self.get_object() 204 self.object = self.get_object()
188 205
@@ -192,7 +209,12 @@ class UpdateView(LoginRequiredMixin, generic.UpdateView): @@ -192,7 +209,12 @@ class UpdateView(LoginRequiredMixin, generic.UpdateView):
192 slug = self.kwargs.get('topic_slug', '') 209 slug = self.kwargs.get('topic_slug', '')
193 topic = get_object_or_404(Topic, slug = slug) 210 topic = get_object_or_404(Topic, slug = slug)
194 211
195 - pendencies_form = InlinePendenciesFormset(self.request.POST, instance = self.object, initial = [{'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}]) 212 + pend_form = self.object.pendencies_resource.all()
  213 +
  214 + if len(pend_form) > 0:
  215 + pendencies_form = PendenciesForm(self.request.POST, instance = pend_form[0], initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]})
  216 + else:
  217 + pendencies_form = PendenciesForm(self.request.POST, initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]})
196 218
197 if (form.is_valid() and pendencies_form.is_valid()): 219 if (form.is_valid() and pendencies_form.is_valid()):
198 return self.form_valid(form, pendencies_form) 220 return self.form_valid(form, pendencies_form)
@@ -210,14 +232,11 @@ class UpdateView(LoginRequiredMixin, generic.UpdateView): @@ -210,14 +232,11 @@ class UpdateView(LoginRequiredMixin, generic.UpdateView):
210 232
211 self.object.save() 233 self.object.save()
212 234
213 - pendencies_form.instance = self.object  
214 - pendencies_form.save(commit = False) 235 + pend_form = pendencies_form.save(commit = False)
  236 + pend_form.resource = self.object
215 237
216 - for form in pendencies_form.forms:  
217 - pend_form = form.save(commit = False)  
218 -  
219 - if not pend_form.action == "":  
220 - pend_form.save() 238 + if not pend_form.action == "":
  239 + pend_form.save()
221 240
222 return redirect(self.get_success_url()) 241 return redirect(self.get_success_url())
223 242
@@ -232,10 +251,6 @@ class UpdateView(LoginRequiredMixin, generic.UpdateView): @@ -232,10 +251,6 @@ class UpdateView(LoginRequiredMixin, generic.UpdateView):
232 context['topic'] = topic 251 context['topic'] = topic
233 context['subject'] = topic.subject 252 context['subject'] = topic.subject
234 253
235 - if not self.request.POST:  
236 - context['form'] = WebpageForm(instance=self.object, initial = {'subject': topic.subject})  
237 - context['pendencies_form'] = InlinePendenciesFormset(instance=self.object, initial = [{'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}])  
238 -  
239 return context 254 return context
240 255
241 def get_success_url(self): 256 def get_success_url(self):