Commit d515cbf90e5c484dde766f9d1c027bc651c2f4b7

Authored by Jailson Dias
1 parent 33b19a45

Colocando a opção de varias notificações de pendencias para uma webconferencia

pendencies/migrations/0007_auto_20170323_1535.py 0 → 100644
@@ -0,0 +1,20 @@ @@ -0,0 +1,20 @@
  1 +# -*- coding: utf-8 -*-
  2 +# Generated by Django 1.10.4 on 2017-03-23 18:35
  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 + ('pendencies', '0006_auto_20170224_0023'),
  12 + ]
  13 +
  14 + operations = [
  15 + migrations.AlterField(
  16 + model_name='pendencies',
  17 + name='action',
  18 + field=models.CharField(blank=True, choices=[('view', 'Visualize'), ('create', 'Create'), ('answer', 'Answer'), ('access', 'Access'), ('participate', 'Participate'), ('finish', 'Finish'), ('submit', 'Submit')], max_length=100, verbose_name='Action'),
  19 + ),
  20 + ]
pendencies/models.py
@@ -5,8 +5,8 @@ from django.utils.translation import ugettext_lazy as _ @@ -5,8 +5,8 @@ from django.utils.translation import ugettext_lazy as _
5 from topics.models import Resource 5 from topics.models import Resource
6 6
7 class Pendencies(models.Model): 7 class Pendencies(models.Model):
8 - action = models.CharField(_('Action'), max_length = 100, choices = (("view", _("Visualize")), ("create", _("Create")), ("answer", _("Answer")), ("access", _("Access")), ("finish", _("Finish")), ("submit", _("Submit"))), blank = True) 8 + action = models.CharField(_('Action'), max_length = 100, choices = (("view", _("Visualize")), ("create", _("Create")), ("answer", _("Answer")), ("access", _("Access")), ("participate", _("Participate")), ("finish", _("Finish")), ("submit", _("Submit"))), blank = True)
9 begin_date = models.DateTimeField(_('Begin Date'), null = True, blank = True) 9 begin_date = models.DateTimeField(_('Begin Date'), null = True, blank = True)
10 end_date = models.DateTimeField(_('End Date'), null = True, blank = True) 10 end_date = models.DateTimeField(_('End Date'), null = True, blank = True)
11 limit_date = models.DateTimeField(_('Limit Date'), null = True, blank = True) 11 limit_date = models.DateTimeField(_('Limit Date'), null = True, blank = True)
12 - resource = models.ForeignKey(Resource, verbose_name = _('Resource'), related_name = 'pendencies_resource', null = True)  
13 \ No newline at end of file 12 \ No newline at end of file
  13 + resource = models.ForeignKey(Resource, verbose_name = _('Resource'), related_name = 'pendencies_resource', null = True)
webconference/forms.py
@@ -2,14 +2,19 @@ @@ -2,14 +2,19 @@
2 from django import forms 2 from django import forms
3 from django.utils.translation import ugettext_lazy as _ 3 from django.utils.translation import ugettext_lazy as _
4 from django.utils.html import strip_tags 4 from django.utils.html import strip_tags
  5 +from django.forms.models import inlineformset_factory
5 import datetime 6 import datetime
6 7
7 from subjects.models import Tag 8 from subjects.models import Tag
8 9
9 from .models import Webconference, ConferenceSettings 10 from .models import Webconference, ConferenceSettings
10 11
  12 +from pendencies.forms import PendenciesForm
  13 +from pendencies.models import Pendencies
  14 +
11 class WebconferenceForm(forms.ModelForm): 15 class WebconferenceForm(forms.ModelForm):
12 subject = None 16 subject = None
  17 + control_subject = forms.CharField(widget = forms.HiddenInput())
13 18
14 def __init__(self, *args, **kwargs): 19 def __init__(self, *args, **kwargs):
15 super(WebconferenceForm, self).__init__(*args, **kwargs) 20 super(WebconferenceForm, self).__init__(*args, **kwargs)
@@ -20,6 +25,8 @@ class WebconferenceForm(forms.ModelForm): @@ -20,6 +25,8 @@ class WebconferenceForm(forms.ModelForm):
20 self.subject = self.instance.topic.subject 25 self.subject = self.instance.topic.subject
21 self.initial['tags'] = ", ".join(self.instance.tags.all().values_list("name", flat = True)) 26 self.initial['tags'] = ", ".join(self.instance.tags.all().values_list("name", flat = True))
22 27
  28 + self.initial['control_subject'] = self.subject.id
  29 +
23 self.fields['students'].queryset = self.subject.students.all() 30 self.fields['students'].queryset = self.subject.students.all()
24 self.fields['groups'].queryset = self.subject.group_subject.all() 31 self.fields['groups'].queryset = self.subject.group_subject.all()
25 32
@@ -120,3 +127,5 @@ class SettingsForm(forms.ModelForm): @@ -120,3 +127,5 @@ class SettingsForm(forms.ModelForm):
120 help_texts = { 127 help_texts = {
121 'domain': _('The domain of the jitsi server, e.g. meet.jit.si'), 128 'domain': _('The domain of the jitsi server, e.g. meet.jit.si'),
122 } 129 }
  130 +
  131 +InlinePendenciesFormset = inlineformset_factory(Webconference, Pendencies, form = PendenciesForm, extra = 1, max_num = 3, validate_max = True, can_delete = True)
webconference/migrations/0003_auto_20170323_1535.py 0 → 100644
@@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
  1 +# -*- coding: utf-8 -*-
  2 +# Generated by Django 1.10.4 on 2017-03-23 18:35
  3 +from __future__ import unicode_literals
  4 +
  5 +from django.db import migrations
  6 +
  7 +
  8 +class Migration(migrations.Migration):
  9 +
  10 + dependencies = [
  11 + ('webconference', '0002_conferencesettings'),
  12 + ]
  13 +
  14 + operations = [
  15 + migrations.AlterModelOptions(
  16 + name='conferencesettings',
  17 + options={'verbose_name': 'Web Conference Setting', 'verbose_name_plural': 'Web Conferences Setting'},
  18 + ),
  19 + ]
webconference/templates/webconference/_form.html
@@ -143,98 +143,104 @@ @@ -143,98 +143,104 @@
143 </div> 143 </div>
144 </div> 144 </div>
145 <div id="notifications" class="panel-collapse collapse"> 145 <div id="notifications" class="panel-collapse collapse">
146 -  
147 - <div class="notifies">  
148 - <div style="text-align:left">  
149 - {% render_field pendencies_form.id %}  
150 - {% render_field pendencies_form.resource %}  
151 - {% render_field pendencies_form.subject class='pend_subj' %}  
152 -  
153 - <div class="form-group{% if pendencies_form.has_error %} has-error {% endif %} row">  
154 - <label for="{{ pendencies_form.action.auto_id }}" class="pull-left action_label contol-label">  
155 - {% trans 'Action not performed by the user' %}:  
156 - </label>  
157 - <div class="col-md-3">  
158 - {% render_field pendencies_form.action class='form-control' %}  
159 - </div>  
160 -  
161 - <br clear="all" />  
162 -  
163 - <span id="helpBlock" class="help-block">{{ pendencies_form.action.help_text }}</span>  
164 -  
165 - {% if pendencies_form.action.errors %}  
166 - <div class="alert alert-danger alert-dismissible" role="alert">  
167 - <button type="button" class="close" data-dismiss="alert" aria-label="Close">  
168 - <span aria-hidden="true">&times;</span>  
169 - </button>  
170 - <ul>  
171 - {% for error in pendencies_form.action.errors %}  
172 - <li>{{ error }}</li>  
173 - {% endfor %}  
174 - </ul>  
175 - </div>  
176 - {% endif %}  
177 - </div>  
178 - <br clear="all" />  
179 - <div class="row">  
180 - <div class="col-md-12">  
181 - <p>{% trans 'Wished period' %}: </p>  
182 - </div>  
183 - </div>  
184 - <div class="form-group{% if pendencies_form.has_error %} has-error {% endif %} row">  
185 - <div class="col-lg-2 col-md-2 col-sm-2 col-xs-3 checkbox">  
186 - <label>  
187 - {% render_field pendencies_form.begin_date_check class="begin_date" %} {{ pendencies_form.begin_date.label }}  
188 - </label>  
189 - </div>  
190 - <div class="col-lg-4 col-md-4 col-sm-4 col-xs-4">  
191 - {% render_field pendencies_form.begin_date class='form-control datetime-picker begin_date_input' %}  
192 - </div>  
193 - </div>  
194 - <div class="row">  
195 - <span id="helpBlock" class="help-block">{{ pendencies_form.begin_date.help_text }}</span>  
196 -  
197 - {% if pendencies_form.begin_date.errors %}  
198 - <div class="alert alert-danger alert-dismissible" role="alert">  
199 - <button type="button" class="close" data-dismiss="alert" aria-label="Close">  
200 - <span aria-hidden="true">&times;</span>  
201 - </button>  
202 - <ul>  
203 - {% for error in pendencies_form.begin_date.errors %}  
204 - <li>{{ error }}</li>  
205 - {% endfor %}  
206 - </ul>  
207 - </div>  
208 - {% endif %}  
209 - </div>  
210 - <div class="form-group{% if pendencies_form.has_error %} has-error {% endif %} row">  
211 - <div class="col-lg-2 col-md-2 col-sm-2 col-xs-3 checkbox">  
212 - <label>  
213 - {% render_field pendencies_form.end_date_check class="end_date" %} {{ pendencies_form.end_date.label }}  
214 - </label>  
215 - </div>  
216 - <div class="col-lg-4 col-md-4 col-sm-4 col-xs-4">  
217 - {% render_field pendencies_form.end_date class='form-control datetime-picker end_date_input' %}  
218 - </div>  
219 - </div>  
220 - <div class="row">  
221 - <span id="helpBlock" class="help-block">{{ pendencies_form.end_date.help_text }}</span>  
222 -  
223 - {% if pendencies_form.end_date.errors %}  
224 - <div class="alert alert-danger alert-dismissible" role="alert">  
225 - <button type="button" class="close" data-dismiss="alert" aria-label="Close">  
226 - <span aria-hidden="true">&times;</span>  
227 - </button>  
228 - <ul>  
229 - {% for error in pendencies_form.end_date.errors %}  
230 - <li>{{ error }}</li>  
231 - {% endfor %}  
232 - </ul>  
233 - </div>  
234 - {% endif %}  
235 - </div> 146 + {{ pendencies_form.management_form }}
  147 + {{ pendencies_form.non_form_errors }}
  148 +
  149 + {% for notify in pendencies_form %}
  150 + <div class="notifies">
  151 + <div style="text-align:left">
  152 + {% render_field notify.id %}
  153 + {% render_field notify.resource %}
  154 + {% render_field notify.subject class='pend_subj' %}
  155 +
  156 + {% if notify.instance.pk %}{{ notify.DELETE }}{% endif %}
  157 +
  158 + <div class="form-group{% if notify.has_error %} has-error {% endif %} row">
  159 + <label for="{{ notify.action.auto_id }}" class="pull-left action_label contol-label">
  160 + {% trans 'Action not performed by the user' %}:
  161 + </label>
  162 + <div class="col-md-3">
  163 + {% render_field notify.action class='form-control' %}
  164 + </div>
  165 +
  166 + <br clear="all" />
  167 +
  168 + <span id="helpBlock" class="help-block">{{ notify.action.help_text }}</span>
  169 +
  170 + {% if notify.action.errors %}
  171 + <div class="alert alert-danger alert-dismissible" role="alert">
  172 + <button type="button" class="close" data-dismiss="alert" aria-label="Close">
  173 + <span aria-hidden="true">&times;</span>
  174 + </button>
  175 + <ul>
  176 + {% for error in notify.action.errors %}
  177 + <li>{{ error }}</li>
  178 + {% endfor %}
  179 + </ul>
  180 + </div>
  181 + {% endif %}
  182 + </div>
  183 + <br clear="all" />
  184 + <div class="row">
  185 + <div class="col-md-12">
  186 + <p>{% trans 'Wished period' %}: </p>
  187 + </div>
  188 + </div>
  189 + <div class="form-group{% if notify.has_error %} has-error {% endif %} row">
  190 + <div class="col-lg-2 col-md-2 col-sm-2 col-xs-3 checkbox">
  191 + <label>
  192 + {% render_field notify.begin_date_check class="begin_date" %} {{ notify.begin_date.label }}
  193 + </label>
  194 + </div>
  195 + <div class="col-lg-4 col-md-4 col-sm-4 col-xs-4">
  196 + {% render_field notify.begin_date class='form-control datetime-picker begin_date_input' %}
  197 + </div>
  198 + </div>
  199 + <div class="row">
  200 + <span id="helpBlock" class="help-block">{{ notify.begin_date.help_text }}</span>
  201 +
  202 + {% if notify.begin_date.errors %}
  203 + <div class="alert alert-danger alert-dismissible" role="alert">
  204 + <button type="button" class="close" data-dismiss="alert" aria-label="Close">
  205 + <span aria-hidden="true">&times;</span>
  206 + </button>
  207 + <ul>
  208 + {% for error in notify.begin_date.errors %}
  209 + <li>{{ error }}</li>
  210 + {% endfor %}
  211 + </ul>
  212 + </div>
  213 + {% endif %}
  214 + </div>
  215 + <div class="form-group{% if notify.has_error %} has-error {% endif %} row">
  216 + <div class="col-lg-2 col-md-2 col-sm-2 col-xs-3 checkbox">
  217 + <label>
  218 + {% render_field notify.end_date_check class="end_date" %} {{ notify.end_date.label }}
  219 + </label>
  220 + </div>
  221 + <div class="col-lg-4 col-md-4 col-sm-4 col-xs-4">
  222 + {% render_field notify.end_date class='form-control datetime-picker end_date_input' %}
  223 + </div>
  224 + </div>
  225 + <div class="row">
  226 + <span id="helpBlock" class="help-block">{{ notify.end_date.help_text }}</span>
  227 +
  228 + {% if notify.end_date.errors %}
  229 + <div class="alert alert-danger alert-dismissible" role="alert">
  230 + <button type="button" class="close" data-dismiss="alert" aria-label="Close">
  231 + <span aria-hidden="true">&times;</span>
  232 + </button>
  233 + <ul>
  234 + {% for error in notify.end_date.errors %}
  235 + <li>{{ error }}</li>
  236 + {% endfor %}
  237 + </ul>
  238 + </div>
  239 + {% endif %}
  240 + </div>
  241 + </div>
236 </div> 242 </div>
237 - </div> 243 + {% endfor %}
238 </div> 244 </div>
239 </div> 245 </div>
240 246
@@ -274,7 +280,7 @@ @@ -274,7 +280,7 @@
274 {% endif %} 280 {% endif %}
275 </div> 281 </div>
276 282
277 - <p><em>{% trans 'Attribute students to web conference' %}:</em></p> 283 + <p><em>{% trans 'Attribute students to YouTube Video' %}:</em></p>
278 {% render_field form.students class='form-control' %} 284 {% render_field form.students class='form-control' %}
279 285
280 <span id="helpBlock" class="help-block">{{ form.students.help_text }}</span> 286 <span id="helpBlock" class="help-block">{{ form.students.help_text }}</span>
@@ -294,7 +300,7 @@ @@ -294,7 +300,7 @@
294 300
295 <br clear="all" /> 301 <br clear="all" />
296 302
297 - <p><em>{% trans 'Attribute groups to web conference' %}:</em></p> 303 + <p><em>{% trans 'Attribute groups to YouTube Video' %}:</em></p>
298 {% render_field form.groups class='form-control' %} 304 {% render_field form.groups class='form-control' %}
299 305
300 <span id="helpBlock" class="help-block">{{ form.groups.help_text }}</span> 306 <span id="helpBlock" class="help-block">{{ form.groups.help_text }}</span>
@@ -369,16 +375,53 @@ @@ -369,16 +375,53 @@
369 </form> 375 </form>
370 <script type="text/javascript"> 376 <script type="text/javascript">
371 $(function() { 377 $(function() {
372 - var begin_val = $('.begin_date_input').val(),  
373 - end_val = $('.end_date_input').val();  
374 -  
375 - if (begin_val != '') {  
376 - $(".begin_date").prop('checked', true);  
377 - }  
378 -  
379 - if (end_val != '') {  
380 - $(".end_date").prop('checked', true);  
381 - } 378 + $('.notifies').formset({
  379 + addText: '{% trans "Add new notification" %}',
  380 + deleteText: '{% trans "Remove this" %}',
  381 + prefix: '{{ pendencies_form.prefix }}',
  382 + added: function (row) {
  383 + var locale = navigator.language || navigator.userLanguage;
  384 +
  385 + $(row).find('.datetime-picker').each(function () {
  386 + $(this).datetimepicker({
  387 + locale: locale
  388 + });
  389 + });
  390 + $('.begin_date_input').on('click', function () {
  391 + var checkbox = $(this).parent().parent().find('.begin_date');
  392 + $(checkbox).prop('checked', true);
  393 + });
  394 + $('.end_date_input').on('click', function () {
  395 + var checkbox = $(this).parent().parent().find('.end_date');
  396 + $(checkbox).prop('checked', true);
  397 + });
  398 +
  399 + var subject = $("#id_control_subject").val();
  400 +
  401 + $(row).find('.pend_subj').val(subject);
  402 + }
  403 + });
  404 +
  405 + $('.begin_date_input').each(function () {
  406 + console.log($(this).val());
  407 + if ($(this).val() != '') {
  408 + $(this).parent().parent().find('.begin_date').prop('checked', true);
  409 + } else {
  410 + $(this).parent().parent().find('.begin_date').prop('checked', false);
  411 + }
  412 + });
  413 +
  414 + $('.end_date_input').each(function () {
  415 + if ($(this).val() != '') {
  416 + $(this).parent().parent().find('.end_date').prop('checked', true);
  417 + } else {
  418 + $(this).parent().parent().find('.end_date').prop('checked', false);
  419 + }
  420 + });
  421 +
  422 + var subject = $("#id_control_subject").val();
  423 +
  424 + $('.pend_subj').val(subject);
382 425
383 {% if not pendencies_form.is_valid and pendencies_form.is_bound %} 426 {% if not pendencies_form.is_valid and pendencies_form.is_bound %}
384 $("#notifications").collapse('toggle'); 427 $("#notifications").collapse('toggle');
webconference/templates/webconference/create.html
@@ -10,6 +10,7 @@ @@ -10,6 +10,7 @@
10 {% block javascript %} 10 {% block javascript %}
11 {{block.super}} 11 {{block.super}}
12 <script type="text/javascript" src="{% static 'js/bootstrap-tagsinput.js' %} "></script> 12 <script type="text/javascript" src="{% static 'js/bootstrap-tagsinput.js' %} "></script>
  13 + <script type="text/javascript" src="{% static 'js/jquery.formset.js' %} "></script>
13 {% endblock %} 14 {% endblock %}
14 15
15 {% block breadcrumbs %} 16 {% block breadcrumbs %}
webconference/templates/webconference/update.html
@@ -10,6 +10,7 @@ @@ -10,6 +10,7 @@
10 {% block javascript %} 10 {% block javascript %}
11 {{block.super}} 11 {{block.super}}
12 <script type="text/javascript" src="{% static 'js/bootstrap-tagsinput.js' %} "></script> 12 <script type="text/javascript" src="{% static 'js/bootstrap-tagsinput.js' %} "></script>
  13 + <script type="text/javascript" src="{% static 'js/jquery.formset.js' %} "></script>
13 {% endblock %} 14 {% endblock %}
14 15
15 {% block breadcrumbs %} 16 {% block breadcrumbs %}
webconference/views.py
@@ -18,7 +18,7 @@ from topics.models import Topic @@ -18,7 +18,7 @@ from topics.models import Topic
18 from pendencies.forms import PendenciesForm 18 from pendencies.forms import PendenciesForm
19 from braces import views as braces_mixins 19 from braces import views as braces_mixins
20 20
21 -from .forms import WebconferenceForm, SettingsForm 21 +from .forms import WebconferenceForm, SettingsForm, InlinePendenciesFormset
22 from .models import Webconference, ConferenceSettings as Settings 22 from .models import Webconference, ConferenceSettings as Settings
23 23
24 class NewWindowView(LoginRequiredMixin,LogMixin, generic.DetailView): 24 class NewWindowView(LoginRequiredMixin,LogMixin, generic.DetailView):
@@ -142,7 +142,7 @@ def participating(request): @@ -142,7 +142,7 @@ def participating(request):
142 142
143 return JsonResponse({'message':'ok'}) 143 return JsonResponse({'message':'ok'})
144 144
145 -@log_decorator('resources', 'finish', 'webconference') 145 +@log_decorator('resources', 'participate', 'webconference')
146 def finish(request): 146 def finish(request):
147 147
148 webconference = get_object_or_404(Webconference, slug = request.GET['roomName']) 148 webconference = get_object_or_404(Webconference, slug = request.GET['roomName'])
@@ -244,7 +244,8 @@ class CreateView(LoginRequiredMixin, LogMixin, generic.edit.CreateView): @@ -244,7 +244,8 @@ class CreateView(LoginRequiredMixin, LogMixin, generic.edit.CreateView):
244 244
245 slug = self.kwargs.get('slug', '') 245 slug = self.kwargs.get('slug', '')
246 topic = get_object_or_404(Topic, slug = slug) 246 topic = get_object_or_404(Topic, slug = slug)
247 - pendencies_form = PendenciesForm(initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}) 247 + pendencies_form = InlinePendenciesFormset(initial = [{'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize")), ("participate", _("Participate"))]}])
  248 + print (pendencies_form)
248 return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form)) 249 return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form))
249 250
250 def post(self, request, *args, **kwargs): 251 def post(self, request, *args, **kwargs):
@@ -256,12 +257,12 @@ class CreateView(LoginRequiredMixin, LogMixin, generic.edit.CreateView): @@ -256,12 +257,12 @@ class CreateView(LoginRequiredMixin, LogMixin, generic.edit.CreateView):
256 slug = self.kwargs.get('slug', '') 257 slug = self.kwargs.get('slug', '')
257 topic = get_object_or_404(Topic, slug = slug) 258 topic = get_object_or_404(Topic, slug = slug)
258 259
259 - pendencies_form = PendenciesForm(self.request.POST, initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}) 260 + pendencies_form = InlinePendenciesFormset(self.request.POST, initial = [{'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize")), ("participate", _("Participate"))]}])
260 261
261 if (form.is_valid() and pendencies_form.is_valid()): 262 if (form.is_valid() and pendencies_form.is_valid()):
262 - return self.form_valid(form, pendencies_form) 263 + return self.form_valid(form, pendencies_form)
263 else: 264 else:
264 - return self.form_invalid(form, pendencies_form) 265 + return self.form_invalid(form, pendencies_form)
265 266
266 def get_initial(self): 267 def get_initial(self):
267 initial = super(CreateView, self).get_initial() 268 initial = super(CreateView, self).get_initial()
@@ -274,6 +275,11 @@ class CreateView(LoginRequiredMixin, LogMixin, generic.edit.CreateView): @@ -274,6 +275,11 @@ class CreateView(LoginRequiredMixin, LogMixin, generic.edit.CreateView):
274 return initial 275 return initial
275 276
276 def form_invalid(self, form, pendencies_form): 277 def form_invalid(self, form, pendencies_form):
  278 + # print (form," Form")
  279 + # print (pendencies_form, " Penden")
  280 + for p_form in pendencies_form.forms:
  281 + p_form.fields['action'].choices = [("", "-------"),("view", _("Visualize")), ("participate", _("Participate"))]
  282 + print ("Invalid")
277 return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form)) 283 return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form))
278 284
279 def form_valid(self, form, pendencies_form): 285 def form_valid(self, form, pendencies_form):
@@ -289,13 +295,15 @@ class CreateView(LoginRequiredMixin, LogMixin, generic.edit.CreateView): @@ -289,13 +295,15 @@ class CreateView(LoginRequiredMixin, LogMixin, generic.edit.CreateView):
289 self.object.visible = False 295 self.object.visible = False
290 296
291 self.object.save() 297 self.object.save()
292 - pend_form = pendencies_form.save(commit = False)  
293 - pend_form.resource = self.object  
294 -  
295 - if not pend_form.action == "":  
296 - pend_form.save() 298 + pendencies_form.instance = self.object
  299 + pendencies_form.save(commit = False)
297 300
  301 + for pform in pendencies_form.forms:
  302 + pend_form = pform.save(commit = False)
298 303
  304 + if not pend_form.action == "":
  305 + pend_form.save()
  306 + print ("Valid")
299 self.log_context['category_id'] = self.object.topic.subject.category.id 307 self.log_context['category_id'] = self.object.topic.subject.category.id
300 self.log_context['category_name'] = self.object.topic.subject.category.name 308 self.log_context['category_name'] = self.object.topic.subject.category.name
301 self.log_context['category_slug'] = self.object.topic.subject.category.slug 309 self.log_context['category_slug'] = self.object.topic.subject.category.slug
@@ -341,126 +349,122 @@ class CreateView(LoginRequiredMixin, LogMixin, generic.edit.CreateView): @@ -341,126 +349,122 @@ class CreateView(LoginRequiredMixin, LogMixin, generic.edit.CreateView):
341 return success_url 349 return success_url
342 350
343 class UpdateView(LoginRequiredMixin, LogMixin, generic.UpdateView): 351 class UpdateView(LoginRequiredMixin, LogMixin, generic.UpdateView):
344 - log_component = 'resources'  
345 - log_action = 'update'  
346 - log_resource = 'webconference'  
347 - log_context = {} 352 + log_component = 'resources'
  353 + log_action = 'update'
  354 + log_resource = 'webconference'
  355 + log_context = {}
348 356
349 - login_url = reverse_lazy("users:login")  
350 - redirect_field_name = 'next' 357 + login_url = reverse_lazy("users:login")
  358 + redirect_field_name = 'next'
351 359
352 - template_name = 'webconference/update.html'  
353 - model = Webconference  
354 - form_class = WebconferenceForm 360 + template_name = 'webconference/update.html'
  361 + model = Webconference
  362 + form_class = WebconferenceForm
355 363
356 - def dispatch(self, request, *args, **kwargs):  
357 - slug = self.kwargs.get('topic_slug', '')  
358 - topic = get_object_or_404(Topic, slug = slug) 364 + def dispatch(self, request, *args, **kwargs):
  365 + slug = self.kwargs.get('topic_slug', '')
  366 + topic = get_object_or_404(Topic, slug = slug)
359 367
360 - if not has_subject_permissions(request.user, topic.subject):  
361 - return redirect(reverse_lazy('subjects:home')) 368 + if not has_subject_permissions(request.user, topic.subject):
  369 + return redirect(reverse_lazy('subjects:home'))
362 370
363 - return super(UpdateView, self).dispatch(request, *args, **kwargs) 371 + return super(UpdateView, self).dispatch(request, *args, **kwargs)
364 372
365 - def get(self, request, *args, **kwargs):  
366 - self.object = self.get_object() 373 + def get(self, request, *args, **kwargs):
  374 + self.object = self.get_object()
367 375
368 - form_class = self.get_form_class()  
369 - form = self.get_form(form_class) 376 + form_class = self.get_form_class()
  377 + form = self.get_form(form_class)
370 378
371 - slug = self.kwargs.get('topic_slug', '')  
372 - topic = get_object_or_404(Topic, slug = slug) 379 + slug = self.kwargs.get('topic_slug', '')
  380 + topic = get_object_or_404(Topic, slug = slug)
373 381
374 - pend_form = self.object.pendencies_resource.all() 382 + pendencies_form = InlinePendenciesFormset(instance=self.object, initial = [{'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize")), ("participate", _("Participate"))]}])
375 383
376 - if len(pend_form) > 0:  
377 - pendencies_form = PendenciesForm(instance = pend_form[0], initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]})  
378 - else:  
379 - pendencies_form = PendenciesForm(initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}) 384 + return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form))
380 385
381 - return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form)) 386 + def post(self, request, *args, **kwargs):
  387 + self.object = self.get_object()
382 388
383 - def post(self, request, *args, **kwargs):  
384 - self.object = self.get_object() 389 + form_class = self.get_form_class()
  390 + form = self.get_form(form_class)
385 391
386 - form_class = self.get_form_class()  
387 - form = self.get_form(form_class) 392 + slug = self.kwargs.get('topic_slug', '')
  393 + topic = get_object_or_404(Topic, slug = slug)
388 394
389 - slug = self.kwargs.get('topic_slug', '')  
390 - topic = get_object_or_404(Topic, slug = slug) 395 + pendencies_form = InlinePendenciesFormset(self.request.POST, instance = self.object, initial = [{'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize")), ("participate", _("Participate"))]}])
391 396
392 - pend_form = self.object.pendencies_resource.all() 397 + if (form.is_valid() and pendencies_form.is_valid()):
  398 + return self.form_valid(form, pendencies_form)
  399 + else:
  400 + return self.form_invalid(form, pendencies_form)
393 401
394 - if len(pend_form) > 0:  
395 - pendencies_form = PendenciesForm(self.request.POST, instance = pend_form[0], initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]})  
396 - else:  
397 - pendencies_form = PendenciesForm(self.request.POST, initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}) 402 + def form_invalid(self, form, pendencies_form):
  403 + for p_form in pendencies_form.forms:
  404 + p_form.fields['action'].choices = [("", "-------"),("view", _("Visualize")), ("participate", _("Participate"))]
398 405
399 - if (form.is_valid() and pendencies_form.is_valid()):  
400 - return self.form_valid(form, pendencies_form)  
401 - else:  
402 - return self.form_invalid(form, pendencies_form) 406 + return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form))
403 407
404 - def form_invalid(self, form, pendencies_form):  
405 - return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form)) 408 + def form_valid(self, form, pendencies_form):
  409 + self.object = form.save(commit = False)
406 410
407 - def form_valid(self, form, pendencies_form):  
408 - self.object = form.save(commit = False) 411 + if not self.object.topic.visible and not self.object.topic.repository:
  412 + self.object.visible = False
409 413
410 - if not self.object.topic.visible and not self.object.topic.repository:  
411 - self.object.visible = False 414 + self.object.save()
412 415
413 - self.object.save() 416 + pendencies_form.instance = self.object
  417 + pendencies_form.save(commit = False)
414 418
415 - pend_form = pendencies_form.save(commit = False)  
416 - pend_form.resource = self.object 419 + for form in pendencies_form.forms:
  420 + pend_form = form.save(commit = False)
417 421
418 - if not pend_form.action == "":  
419 - pend_form.save() 422 + if not pend_form.action == "":
  423 + pend_form.save()
420 424
421 - self.log_context['category_id'] = self.object.topic.subject.category.id  
422 - self.log_context['category_name'] = self.object.topic.subject.category.name  
423 - self.log_context['category_slug'] = self.object.topic.subject.category.slug  
424 - self.log_context['subject_id'] = self.object.topic.subject.id  
425 - self.log_context['subject_name'] = self.object.topic.subject.name  
426 - self.log_context['subject_slug'] = self.object.topic.subject.slug  
427 - self.log_context['topic_id'] = self.object.topic.id  
428 - self.log_context['topic_name'] = self.object.topic.name  
429 - self.log_context['topic_slug'] = self.object.topic.slug  
430 - self.log_context['webconference_id'] = self.object.id  
431 - self.log_context['webconference_name'] = self.object.name  
432 - self.log_context['webconference_slug'] = self.object.slug 425 + self.log_context['category_id'] = self.object.topic.subject.category.id
  426 + self.log_context['category_name'] = self.object.topic.subject.category.name
  427 + self.log_context['category_slug'] = self.object.topic.subject.category.slug
  428 + self.log_context['subject_id'] = self.object.topic.subject.id
  429 + self.log_context['subject_name'] = self.object.topic.subject.name
  430 + self.log_context['subject_slug'] = self.object.topic.subject.slug
  431 + self.log_context['topic_id'] = self.object.topic.id
  432 + self.log_context['topic_name'] = self.object.topic.name
  433 + self.log_context['topic_slug'] = self.object.topic.slug
  434 + self.log_context['webconference_id'] = self.object.id
  435 + self.log_context['webconference_name'] = self.object.name
  436 + self.log_context['webconference_slug'] = self.object.slug
433 437
434 - super(UpdateView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) 438 + super(UpdateView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)
435 439
436 - return redirect(self.get_success_url()) 440 + return redirect(self.get_success_url())
437 441
438 - def get_context_data(self, **kwargs):  
439 - context = super(UpdateView, self).get_context_data(**kwargs) 442 + def get_context_data(self, **kwargs):
  443 + context = super(UpdateView, self).get_context_data(**kwargs)
440 444
441 - context['title'] = _('Update Web Conference') 445 + context['title'] = _('Update Web Conference')
442 446
443 - slug = self.kwargs.get('topic_slug', '')  
444 - topic = get_object_or_404(Topic, slug = slug) 447 + slug = self.kwargs.get('topic_slug', '')
  448 + topic = get_object_or_404(Topic, slug = slug)
445 449
446 - context['topic'] = topic  
447 - context['subject'] = topic.subject 450 + context['topic'] = topic
  451 + context['subject'] = topic.subject
448 452
449 - return context 453 + return context
450 454
451 - def get_success_url(self):  
452 - messages.success(self.request, _('The Web conference "%s" was updated successfully!')%(self.object.name)) 455 + def get_success_url(self):
  456 + messages.success(self.request, _('The Web conference "%s" was updated successfully!')%(self.object.name))
453 457
454 - success_url = reverse_lazy('webconferences:view', kwargs = {'slug': self.object.slug}) 458 + success_url = reverse_lazy('webconferences:view', kwargs = {'slug': self.object.slug})
455 459
456 - if self.object.show_window:  
457 - self.request.session['resources'] = {}  
458 - self.request.session['resources']['new_page'] = True  
459 - self.request.session['resources']['new_page_url'] = reverse('webconferences:window_view', kwargs = {'slug': self.object.slug}) 460 + if self.object.show_window:
  461 + self.request.session['resources'] = {}
  462 + self.request.session['resources']['new_page'] = True
  463 + self.request.session['resources']['new_page_url'] = reverse('webconferences:window_view', kwargs = {'slug': self.object.slug})
460 464
461 - success_url = reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug}) 465 + success_url = reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug})
462 466
463 - return success_url 467 + return success_url
464 468
465 class DeleteView(LoginRequiredMixin, LogMixin, generic.DeleteView): 469 class DeleteView(LoginRequiredMixin, LogMixin, generic.DeleteView):
466 log_component = 'resources' 470 log_component = 'resources'