diff --git a/pendencies/migrations/0007_auto_20170323_1535.py b/pendencies/migrations/0007_auto_20170323_1535.py new file mode 100644 index 0000000..9b874fc --- /dev/null +++ b/pendencies/migrations/0007_auto_20170323_1535.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.4 on 2017-03-23 18:35 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('pendencies', '0006_auto_20170224_0023'), + ] + + operations = [ + migrations.AlterField( + model_name='pendencies', + name='action', + 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'), + ), + ] diff --git a/pendencies/models.py b/pendencies/models.py index f612d0f..6f62672 100644 --- a/pendencies/models.py +++ b/pendencies/models.py @@ -5,8 +5,8 @@ from django.utils.translation import ugettext_lazy as _ from topics.models import Resource class Pendencies(models.Model): - action = models.CharField(_('Action'), max_length = 100, choices = (("view", _("Visualize")), ("create", _("Create")), ("answer", _("Answer")), ("access", _("Access")), ("finish", _("Finish")), ("submit", _("Submit"))), blank = True) + action = models.CharField(_('Action'), max_length = 100, choices = (("view", _("Visualize")), ("create", _("Create")), ("answer", _("Answer")), ("access", _("Access")), ("participate", _("Participate")), ("finish", _("Finish")), ("submit", _("Submit"))), blank = True) begin_date = models.DateTimeField(_('Begin Date'), null = True, blank = True) end_date = models.DateTimeField(_('End Date'), null = True, blank = True) limit_date = models.DateTimeField(_('Limit Date'), null = True, blank = True) - resource = models.ForeignKey(Resource, verbose_name = _('Resource'), related_name = 'pendencies_resource', null = True) \ No newline at end of file + resource = models.ForeignKey(Resource, verbose_name = _('Resource'), related_name = 'pendencies_resource', null = True) diff --git a/webconference/forms.py b/webconference/forms.py index fb31d93..f61fc56 100644 --- a/webconference/forms.py +++ b/webconference/forms.py @@ -2,14 +2,19 @@ from django import forms from django.utils.translation import ugettext_lazy as _ from django.utils.html import strip_tags +from django.forms.models import inlineformset_factory import datetime from subjects.models import Tag from .models import Webconference, ConferenceSettings +from pendencies.forms import PendenciesForm +from pendencies.models import Pendencies + class WebconferenceForm(forms.ModelForm): subject = None + control_subject = forms.CharField(widget = forms.HiddenInput()) def __init__(self, *args, **kwargs): super(WebconferenceForm, self).__init__(*args, **kwargs) @@ -20,6 +25,8 @@ class WebconferenceForm(forms.ModelForm): self.subject = self.instance.topic.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() @@ -120,3 +127,5 @@ class SettingsForm(forms.ModelForm): help_texts = { 'domain': _('The domain of the jitsi server, e.g. meet.jit.si'), } + +InlinePendenciesFormset = inlineformset_factory(Webconference, Pendencies, form = PendenciesForm, extra = 1, max_num = 3, validate_max = True, can_delete = True) diff --git a/webconference/migrations/0003_auto_20170323_1535.py b/webconference/migrations/0003_auto_20170323_1535.py new file mode 100644 index 0000000..97cfde2 --- /dev/null +++ b/webconference/migrations/0003_auto_20170323_1535.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.4 on 2017-03-23 18:35 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('webconference', '0002_conferencesettings'), + ] + + operations = [ + migrations.AlterModelOptions( + name='conferencesettings', + options={'verbose_name': 'Web Conference Setting', 'verbose_name_plural': 'Web Conferences Setting'}, + ), + ] diff --git a/webconference/templates/webconference/_form.html b/webconference/templates/webconference/_form.html index d9908c9..8181bd1 100644 --- a/webconference/templates/webconference/_form.html +++ b/webconference/templates/webconference/_form.html @@ -143,98 +143,104 @@
- -
-
- {% render_field pendencies_form.id %} - {% render_field pendencies_form.resource %} - {% render_field pendencies_form.subject class='pend_subj' %} - -
- -
- {% render_field pendencies_form.action class='form-control' %} -
- -
- - {{ pendencies_form.action.help_text }} - - {% if pendencies_form.action.errors %} - - {% endif %} -
-
-
-
-

{% trans 'Wished period' %}:

-
-
-
-
- -
-
- {% render_field pendencies_form.begin_date class='form-control datetime-picker begin_date_input' %} -
-
-
- {{ pendencies_form.begin_date.help_text }} - - {% if pendencies_form.begin_date.errors %} - - {% endif %} -
-
-
- -
-
- {% render_field pendencies_form.end_date class='form-control datetime-picker end_date_input' %} -
-
-
- {{ pendencies_form.end_date.help_text }} - - {% if pendencies_form.end_date.errors %} - - {% endif %} -
+ {{ pendencies_form.management_form }} + {{ pendencies_form.non_form_errors }} + + {% for notify in pendencies_form %} +
+
+ {% render_field notify.id %} + {% render_field notify.resource %} + {% render_field notify.subject class='pend_subj' %} + + {% if notify.instance.pk %}{{ notify.DELETE }}{% endif %} + +
+ +
+ {% render_field notify.action class='form-control' %} +
+ +
+ + {{ notify.action.help_text }} + + {% if notify.action.errors %} + + {% endif %} +
+
+
+
+

{% trans 'Wished period' %}:

+
+
+
+
+ +
+
+ {% render_field notify.begin_date class='form-control datetime-picker begin_date_input' %} +
+
+
+ {{ notify.begin_date.help_text }} + + {% if notify.begin_date.errors %} + + {% endif %} +
+
+
+ +
+
+ {% render_field notify.end_date class='form-control datetime-picker end_date_input' %} +
+
+
+ {{ notify.end_date.help_text }} + + {% if notify.end_date.errors %} + + {% endif %} +
+
-
+ {% endfor %}
@@ -274,7 +280,7 @@ {% endif %} -

{% trans 'Attribute students to web conference' %}:

+

{% trans 'Attribute students to YouTube Video' %}:

{% render_field form.students class='form-control' %} {{ form.students.help_text }} @@ -294,7 +300,7 @@
-

{% trans 'Attribute groups to web conference' %}:

+

{% trans 'Attribute groups to YouTube Video' %}:

{% render_field form.groups class='form-control' %} {{ form.groups.help_text }} @@ -369,16 +375,53 @@ + {% endblock %} {% block breadcrumbs %} diff --git a/webconference/templates/webconference/update.html b/webconference/templates/webconference/update.html index 7610dc4..b8d3e86 100644 --- a/webconference/templates/webconference/update.html +++ b/webconference/templates/webconference/update.html @@ -10,6 +10,7 @@ {% block javascript %} {{block.super}} + {% endblock %} {% block breadcrumbs %} diff --git a/webconference/views.py b/webconference/views.py index 6bc16e9..5b8533f 100644 --- a/webconference/views.py +++ b/webconference/views.py @@ -18,7 +18,7 @@ from topics.models import Topic from pendencies.forms import PendenciesForm from braces import views as braces_mixins -from .forms import WebconferenceForm, SettingsForm +from .forms import WebconferenceForm, SettingsForm, InlinePendenciesFormset from .models import Webconference, ConferenceSettings as Settings class NewWindowView(LoginRequiredMixin,LogMixin, generic.DetailView): @@ -142,7 +142,7 @@ def participating(request): return JsonResponse({'message':'ok'}) -@log_decorator('resources', 'finish', 'webconference') +@log_decorator('resources', 'participate', 'webconference') def finish(request): webconference = get_object_or_404(Webconference, slug = request.GET['roomName']) @@ -244,7 +244,8 @@ class CreateView(LoginRequiredMixin, LogMixin, generic.edit.CreateView): slug = self.kwargs.get('slug', '') topic = get_object_or_404(Topic, slug = slug) - pendencies_form = PendenciesForm(initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}) + pendencies_form = InlinePendenciesFormset(initial = [{'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize")), ("participate", _("Participate"))]}]) + print (pendencies_form) return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form)) def post(self, request, *args, **kwargs): @@ -256,12 +257,12 @@ class CreateView(LoginRequiredMixin, LogMixin, generic.edit.CreateView): slug = self.kwargs.get('slug', '') topic = get_object_or_404(Topic, slug = slug) - pendencies_form = PendenciesForm(self.request.POST, initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}) + pendencies_form = InlinePendenciesFormset(self.request.POST, initial = [{'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize")), ("participate", _("Participate"))]}]) if (form.is_valid() and pendencies_form.is_valid()): - return self.form_valid(form, pendencies_form) + return self.form_valid(form, pendencies_form) else: - return self.form_invalid(form, pendencies_form) + return self.form_invalid(form, pendencies_form) def get_initial(self): initial = super(CreateView, self).get_initial() @@ -274,6 +275,11 @@ class CreateView(LoginRequiredMixin, LogMixin, generic.edit.CreateView): return initial def form_invalid(self, form, pendencies_form): + # print (form," Form") + # print (pendencies_form, " Penden") + for p_form in pendencies_form.forms: + p_form.fields['action'].choices = [("", "-------"),("view", _("Visualize")), ("participate", _("Participate"))] + print ("Invalid") return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form)) def form_valid(self, form, pendencies_form): @@ -289,13 +295,15 @@ class CreateView(LoginRequiredMixin, LogMixin, generic.edit.CreateView): self.object.visible = False self.object.save() - pend_form = pendencies_form.save(commit = False) - pend_form.resource = self.object - - if not pend_form.action == "": - pend_form.save() + pendencies_form.instance = self.object + pendencies_form.save(commit = False) + for pform in pendencies_form.forms: + pend_form = pform.save(commit = False) + if not pend_form.action == "": + pend_form.save() + print ("Valid") self.log_context['category_id'] = self.object.topic.subject.category.id self.log_context['category_name'] = self.object.topic.subject.category.name self.log_context['category_slug'] = self.object.topic.subject.category.slug @@ -341,126 +349,122 @@ class CreateView(LoginRequiredMixin, LogMixin, generic.edit.CreateView): return success_url class UpdateView(LoginRequiredMixin, LogMixin, generic.UpdateView): - log_component = 'resources' - log_action = 'update' - log_resource = 'webconference' - log_context = {} + log_component = 'resources' + log_action = 'update' + log_resource = 'webconference' + log_context = {} - login_url = reverse_lazy("users:login") - redirect_field_name = 'next' + login_url = reverse_lazy("users:login") + redirect_field_name = 'next' - template_name = 'webconference/update.html' - model = Webconference - form_class = WebconferenceForm + template_name = 'webconference/update.html' + model = Webconference + form_class = WebconferenceForm - def dispatch(self, request, *args, **kwargs): - slug = self.kwargs.get('topic_slug', '') - topic = get_object_or_404(Topic, slug = slug) + def dispatch(self, request, *args, **kwargs): + slug = self.kwargs.get('topic_slug', '') + topic = get_object_or_404(Topic, slug = slug) - if not has_subject_permissions(request.user, topic.subject): - return redirect(reverse_lazy('subjects:home')) + if not has_subject_permissions(request.user, topic.subject): + return redirect(reverse_lazy('subjects:home')) - return super(UpdateView, self).dispatch(request, *args, **kwargs) + return super(UpdateView, self).dispatch(request, *args, **kwargs) - def get(self, request, *args, **kwargs): - self.object = self.get_object() + def get(self, request, *args, **kwargs): + self.object = self.get_object() - form_class = self.get_form_class() - form = self.get_form(form_class) + form_class = self.get_form_class() + form = self.get_form(form_class) - slug = self.kwargs.get('topic_slug', '') - topic = get_object_or_404(Topic, slug = slug) + slug = self.kwargs.get('topic_slug', '') + topic = get_object_or_404(Topic, slug = slug) - pend_form = self.object.pendencies_resource.all() + pendencies_form = InlinePendenciesFormset(instance=self.object, initial = [{'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize")), ("participate", _("Participate"))]}]) - if len(pend_form) > 0: - pendencies_form = PendenciesForm(instance = pend_form[0], initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}) - else: - pendencies_form = PendenciesForm(initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}) + return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form)) - return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form)) + def post(self, request, *args, **kwargs): + self.object = self.get_object() - def post(self, request, *args, **kwargs): - self.object = self.get_object() + form_class = self.get_form_class() + form = self.get_form(form_class) - form_class = self.get_form_class() - form = self.get_form(form_class) + slug = self.kwargs.get('topic_slug', '') + topic = get_object_or_404(Topic, slug = slug) - slug = self.kwargs.get('topic_slug', '') - topic = get_object_or_404(Topic, slug = slug) + pendencies_form = InlinePendenciesFormset(self.request.POST, instance = self.object, initial = [{'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize")), ("participate", _("Participate"))]}]) - pend_form = self.object.pendencies_resource.all() + if (form.is_valid() and pendencies_form.is_valid()): + return self.form_valid(form, pendencies_form) + else: + return self.form_invalid(form, pendencies_form) - if len(pend_form) > 0: - pendencies_form = PendenciesForm(self.request.POST, instance = pend_form[0], initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}) - else: - pendencies_form = PendenciesForm(self.request.POST, initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}) + def form_invalid(self, form, pendencies_form): + for p_form in pendencies_form.forms: + p_form.fields['action'].choices = [("", "-------"),("view", _("Visualize")), ("participate", _("Participate"))] - if (form.is_valid() and pendencies_form.is_valid()): - return self.form_valid(form, pendencies_form) - else: - return self.form_invalid(form, pendencies_form) + return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form)) - def form_invalid(self, form, pendencies_form): - return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form)) + def form_valid(self, form, pendencies_form): + self.object = form.save(commit = False) - def form_valid(self, form, pendencies_form): - self.object = form.save(commit = False) + if not self.object.topic.visible and not self.object.topic.repository: + self.object.visible = False - if not self.object.topic.visible and not self.object.topic.repository: - self.object.visible = False + self.object.save() - self.object.save() + pendencies_form.instance = self.object + pendencies_form.save(commit = False) - pend_form = pendencies_form.save(commit = False) - pend_form.resource = self.object + for form in pendencies_form.forms: + pend_form = form.save(commit = False) - if not pend_form.action == "": - pend_form.save() + if not pend_form.action == "": + pend_form.save() - self.log_context['category_id'] = self.object.topic.subject.category.id - self.log_context['category_name'] = self.object.topic.subject.category.name - self.log_context['category_slug'] = self.object.topic.subject.category.slug - self.log_context['subject_id'] = self.object.topic.subject.id - self.log_context['subject_name'] = self.object.topic.subject.name - self.log_context['subject_slug'] = self.object.topic.subject.slug - self.log_context['topic_id'] = self.object.topic.id - self.log_context['topic_name'] = self.object.topic.name - self.log_context['topic_slug'] = self.object.topic.slug - self.log_context['webconference_id'] = self.object.id - self.log_context['webconference_name'] = self.object.name - self.log_context['webconference_slug'] = self.object.slug + self.log_context['category_id'] = self.object.topic.subject.category.id + self.log_context['category_name'] = self.object.topic.subject.category.name + self.log_context['category_slug'] = self.object.topic.subject.category.slug + self.log_context['subject_id'] = self.object.topic.subject.id + self.log_context['subject_name'] = self.object.topic.subject.name + self.log_context['subject_slug'] = self.object.topic.subject.slug + self.log_context['topic_id'] = self.object.topic.id + self.log_context['topic_name'] = self.object.topic.name + self.log_context['topic_slug'] = self.object.topic.slug + self.log_context['webconference_id'] = self.object.id + self.log_context['webconference_name'] = self.object.name + self.log_context['webconference_slug'] = self.object.slug - super(UpdateView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) + super(UpdateView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) - return redirect(self.get_success_url()) + return redirect(self.get_success_url()) - def get_context_data(self, **kwargs): - context = super(UpdateView, self).get_context_data(**kwargs) + def get_context_data(self, **kwargs): + context = super(UpdateView, self).get_context_data(**kwargs) - context['title'] = _('Update Web Conference') + context['title'] = _('Update Web Conference') - slug = self.kwargs.get('topic_slug', '') - topic = get_object_or_404(Topic, slug = slug) + slug = self.kwargs.get('topic_slug', '') + topic = get_object_or_404(Topic, slug = slug) - context['topic'] = topic - context['subject'] = topic.subject + context['topic'] = topic + context['subject'] = topic.subject - return context + return context - def get_success_url(self): - messages.success(self.request, _('The Web conference "%s" was updated successfully!')%(self.object.name)) + def get_success_url(self): + messages.success(self.request, _('The Web conference "%s" was updated successfully!')%(self.object.name)) - success_url = reverse_lazy('webconferences:view', kwargs = {'slug': self.object.slug}) + success_url = reverse_lazy('webconferences:view', kwargs = {'slug': self.object.slug}) - if self.object.show_window: - self.request.session['resources'] = {} - self.request.session['resources']['new_page'] = True - self.request.session['resources']['new_page_url'] = reverse('webconferences:window_view', kwargs = {'slug': self.object.slug}) + if self.object.show_window: + self.request.session['resources'] = {} + self.request.session['resources']['new_page'] = True + self.request.session['resources']['new_page_url'] = reverse('webconferences:window_view', kwargs = {'slug': self.object.slug}) - success_url = reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug}) + success_url = reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug}) - return success_url + return success_url class DeleteView(LoginRequiredMixin, LogMixin, generic.DeleteView): log_component = 'resources' -- libgit2 0.21.2