From a53fdfc8598a198e5138857da58b18985f8d5caf Mon Sep 17 00:00:00 2001 From: Zambom Date: Wed, 1 Mar 2017 23:37:40 -0300 Subject: [PATCH] Adjusting goals submit and adding my goals update --- goals/models.py | 2 +- goals/templates/goals/_form_submit.html | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ goals/templates/goals/submit.html | 51 +-------------------------------------------------- goals/templates/goals/update_submit.html | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ goals/templates/goals/view.html | 2 +- goals/templates/goals/window_submit.html | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ goals/templates/goals/window_view.html | 72 ------------------------------------------------------------------------ goals/urls.py | 3 ++- goals/views.py | 205 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------- 9 files changed, 375 insertions(+), 152 deletions(-) create mode 100644 goals/templates/goals/_form_submit.html create mode 100644 goals/templates/goals/update_submit.html create mode 100644 goals/templates/goals/window_submit.html delete mode 100644 goals/templates/goals/window_view.html diff --git a/goals/models.py b/goals/models.py index 233ed27..f682f07 100644 --- a/goals/models.py +++ b/goals/models.py @@ -19,7 +19,7 @@ class Goals(Resource): def access_link(self): if self.show_window: - return reverse_lazy('goals:window_view', args = (), kwargs = {'slug': self.slug}) + return reverse_lazy('goals:window_submit', args = (), kwargs = {'slug': self.slug}) return reverse_lazy('goals:submit', args = (), kwargs = {'slug': self.slug}) diff --git a/goals/templates/goals/_form_submit.html b/goals/templates/goals/_form_submit.html new file mode 100644 index 0000000..fad15c1 --- /dev/null +++ b/goals/templates/goals/_form_submit.html @@ -0,0 +1,53 @@ +{% load static i18n util_tags %} +{% load widget_tweaks %} + +
+ {% csrf_token %} + + {{ my_goals_formset.management_form }} + {{ my_goals_formset.non_form_errors }} + + {% for form, item in my_goals_formset|zip:goals.item_goal.all %} + {% render_field form.id %} + {% render_field form.item %} + {{ form.errors }} + + {% if form.instance.pk %}{{ form.DELETE }}{% endif %} + +
+
+

{% trans 'Goal' %} {{ item.order }}: {{ item.description }}

+

{% trans 'Minimum percentage desired' %}: {{ item.ref_value }}%

+
+ 0% + {% with form.value.value|default:"0" as item_value %} + {% render_field form.value class='slider_value' data-slider-value=item_value data-slider-min="0" data-slider-max="100" %} + {% endwith %} + 100% +
+ +
+ + {{ form.value.help_text }} + + {% if form.value.errors %} + + {% endif %} +
+ {% endfor %} +
+ +
+ +
+
\ No newline at end of file diff --git a/goals/templates/goals/submit.html b/goals/templates/goals/submit.html index 9eabcba..8dabae0 100644 --- a/goals/templates/goals/submit.html +++ b/goals/templates/goals/submit.html @@ -67,56 +67,7 @@
-
- {% csrf_token %} - - {{ my_goals_formset.management_form }} - {{ my_goals_formset.non_form_errors }} - - {% for form, item in my_goals_formset|zip:goals.item_goal.all %} - {% render_field form.id %} - {% render_field form.item %} - {{ form.errors }} - - {% if form.instance.pk %}{{ form.DELETE }}{% endif %} - -
-
-

{% trans 'Goal' %} {{ item.order }}: {{ item.description }}

-

{% trans 'Minimum percentage desired' %}: {{ item.ref_value }}%

-
- 0% - {% with form.value.value|default:"0" as item_value %} - {% render_field form.value class='slider_value' data-slider-value=item_value data-slider-min="0" data-slider-max="100" %} - {% endwith %} - 100% -
- -
- - {{ form.value.help_text }} - - {% if form.value.errors %} - - {% endif %} -
- {% endfor %} -
- -
- -
-
+ {% include "goals/_form_submit.html" %} diff --git a/goals/templates/goals/update_submit.html b/goals/templates/goals/update_submit.html new file mode 100644 index 0000000..6c8ccb7 --- /dev/null +++ b/goals/templates/goals/update_submit.html @@ -0,0 +1,84 @@ +{% extends 'subjects/view.html' %} + +{% load static i18n pagination permissions_tags subject_counter util_tags %} +{% load django_bootstrap_breadcrumbs %} +{% load widget_tweaks %} + +{% block style %} + {{block.super}} + +{% endblock %} + +{% block javascript%} + {{ block.super }} + +{% endblock%} + +{% block breadcrumbs %} + {{ block.super }} + {% breadcrumb topic 'subjects:topic_view' subject.slug topic.slug %} + {% breadcrumb goals 'goals:view' goals.slug %} + + {% trans 'Update My Goals' as bread %} + {% breadcrumb bread 'goals:update_submit' goals.slug %} +{% endblock %} + +{% block content %} + {% if messages %} + {% for message in messages %} + + {% endfor %} + {% endif %} + + {% resource_permissions request.user goals as has_resource_permissions %} + + {% if goals.visible %} +
+
+ {% elif has_resource_permissions %} +
+
+ {% endif %} + +
+
+ {% autoescape off %} + {{ goals.presentation }} + {% endautoescape %} + +
+ + {% trans "Limit submission date" %}: {{ goals.limit_submission_date }} + +
+ + {% include "goals/_form_submit.html" %} +
+
+ + +{% endblock %} diff --git a/goals/templates/goals/view.html b/goals/templates/goals/view.html index 1a4d7ad..9a0f179 100644 --- a/goals/templates/goals/view.html +++ b/goals/templates/goals/view.html @@ -80,7 +80,7 @@
diff --git a/goals/templates/goals/window_submit.html b/goals/templates/goals/window_submit.html new file mode 100644 index 0000000..a5ecc52 --- /dev/null +++ b/goals/templates/goals/window_submit.html @@ -0,0 +1,55 @@ + + +{% load static i18n util_tags %} +{% load widget_tweaks %} + + + + {{ title }} | {{ theme.title }} + + + + + + + + + + + + + + + + + + {% with 'css/themes/'|add:theme.css_style|add:'.css' as theme_selected %} + + {% endwith %} + + + + +
+ {% autoescape off %} + {{ goals.presentation }} + {% endautoescape %} + +
+ + {% trans "Limit submission date" %}: {{ goals.limit_submission_date }} + +
+ + {% include "goals/_form_submit.html" %} +
+ + + + \ No newline at end of file diff --git a/goals/templates/goals/window_view.html b/goals/templates/goals/window_view.html deleted file mode 100644 index 3c7240f..0000000 --- a/goals/templates/goals/window_view.html +++ /dev/null @@ -1,72 +0,0 @@ - - -{% load static i18n %} - - - - {{ title }} | {{ theme.title }} - - - - - - - - - - - - - - - - - - {% with 'css/themes/'|add:theme.css_style|add:'.css' as theme_selected %} - - {% endwith %} - - - - -
- {% autoescape off %} - {{ goals.presentation }} - {% endautoescape %} - -
- - {% trans "Limit submission date" %}: {{ goals.limit_submission_date }} - -
- - {% for item in goals.item_goal.all %} -
-
-

{% trans 'Goal' %} {{ item.order }}: {{ item.description }}

-

{% trans 'Minimum percentage desired' %}: {{ item.ref_value }}%

-
- 0% - - 100% -
-
- {% endfor %} - -
- - -
- - - - \ No newline at end of file diff --git a/goals/urls.py b/goals/urls.py index 21b7b0e..fdd0b9f 100644 --- a/goals/urls.py +++ b/goals/urls.py @@ -7,7 +7,8 @@ urlpatterns = [ url(r'^create/(?P[\w_-]+)/$', views.CreateView.as_view(), name = 'create'), url(r'^update/(?P[\w_-]+)/(?P[\w_-]+)/$', views.UpdateView.as_view(), name = 'update'), url(r'^delete/(?P[\w_-]+)/$', views.DeleteView.as_view(), name = 'delete'), - url(r'^window_view/(?P[\w_-]+)/$', views.NewWindowView.as_view(), name = 'window_view'), + url(r'^window_submit/(?P[\w_-]+)/$', views.NewWindowSubmit.as_view(), name = 'window_submit'), url(r'^view/(?P[\w_-]+)/$', views.InsideView.as_view(), name = 'view'), url(r'^submit/(?P[\w_-]+)/$', views.SubmitView.as_view(), name = 'submit'), + url(r'^update_submit/(?P[\w_-]+)/$', views.UpdateSubmit.as_view(), name = 'update_submit'), ] diff --git a/goals/views.py b/goals/views.py index b3ecb72..63948af 100644 --- a/goals/views.py +++ b/goals/views.py @@ -4,7 +4,7 @@ from django.contrib import messages from django.core.urlresolvers import reverse, reverse_lazy from django.utils.translation import ugettext_lazy as _ from django.contrib.auth.mixins import LoginRequiredMixin -from django.forms import formset_factory +from django.forms import formset_factory, modelformset_factory from amadeus.permissions import has_subject_permissions, has_resource_permissions @@ -13,30 +13,6 @@ from topics.models import Topic from .forms import GoalsForm, MyGoalsForm, InlinePendenciesFormset, InlineGoalItemFormset from .models import Goals, MyGoals -class NewWindowView(LoginRequiredMixin, generic.DetailView): - login_url = reverse_lazy("users:login") - redirect_field_name = 'next' - - template_name = 'goals/window_view.html' - model = Goals - context_object_name = 'goals' - - def dispatch(self, request, *args, **kwargs): - slug = self.kwargs.get('slug', '') - goals = get_object_or_404(Goals, slug = slug) - - if not has_resource_permissions(request.user, goals): - return redirect(reverse_lazy('subjects:home')) - - return super(NewWindowView, self).dispatch(request, *args, **kwargs) - - def get_context_data(self, **kwargs): - context = super(NewWindowView, self).get_context_data(**kwargs) - - context['title'] = (self.object.name) - - return context - class InsideView(LoginRequiredMixin, generic.ListView): login_url = reverse_lazy("users:login") redirect_field_name = 'next' @@ -76,6 +52,90 @@ class InsideView(LoginRequiredMixin, generic.ListView): return context +class NewWindowSubmit(LoginRequiredMixin, generic.edit.CreateView): + login_url = reverse_lazy("users:login") + redirect_field_name = 'next' + + template_name = 'goals/window_submit.html' + form_class = MyGoalsForm + + def dispatch(self, request, *args, **kwargs): + slug = self.kwargs.get('slug', '') + goals = get_object_or_404(Goals, slug = slug) + + if not has_resource_permissions(request.user, goals): + return redirect(reverse_lazy('subjects:home')) + + if MyGoals.objects.filter(item__goal = goals, user = request.user).exists(): + return redirect(reverse_lazy('goals:view', args = (), kwargs = {'slug': slug})) + + return super(NewWindowSubmit, self).dispatch(request, *args, **kwargs) + + def get(self, request, *args, **kwargs): + self.object = None + + form_class = self.get_form_class() + form = self.get_form(form_class) + + slug = self.kwargs.get('slug', '') + goals = get_object_or_404(Goals, slug = slug) + + MyGoalsFormset = formset_factory(MyGoalsForm, extra = 0) + my_goals_formset = MyGoalsFormset(initial = [{'item': x.id, 'value': x.ref_value} for x in goals.item_goal.all()]) + + return self.render_to_response(self.get_context_data(my_goals_formset = my_goals_formset)) + + def post(self, request, *args, **kwargs): + self.object = None + + form_class = self.get_form_class() + form = self.get_form(form_class) + + slug = self.kwargs.get('slug', '') + goals = get_object_or_404(Goals, slug = slug) + + MyGoalsFormset = formset_factory(MyGoalsForm, extra = 0) + my_goals_formset = MyGoalsFormset(self.request.POST, initial = [{'item': x.id, 'value': x.ref_value} for x in goals.item_goal.all()]) + + if (my_goals_formset.is_valid()): + return self.form_valid(my_goals_formset) + else: + return self.form_invalid(my_goals_formset) + + def form_invalid(self, my_goals_formset): + return self.render_to_response(self.get_context_data(my_goals_formset = my_goals_formset)) + + def form_valid(self, my_goals_formset): + for forms in my_goals_formset.forms: + form = forms.save(commit = False) + form.user = self.request.user + + form.save() + + return redirect(self.get_success_url()) + + def get_context_data(self, **kwargs): + context = super(NewWindowSubmit, self).get_context_data(**kwargs) + + slug = self.kwargs.get('slug', '') + goals = get_object_or_404(Goals, slug = slug) + + context['title'] = goals.name + + context['goals'] = goals + + return context + + def get_success_url(self): + slug = self.kwargs.get('slug', '') + goals = get_object_or_404(Goals, slug = slug) + + messages.success(self.request, _('Your goals for %s was save successfully!')%(goals.topic.name)) + + success_url = reverse_lazy('goals:view', kwargs = {'slug': slug}) + + return success_url + class SubmitView(LoginRequiredMixin, generic.edit.CreateView): login_url = reverse_lazy("users:login") redirect_field_name = 'next' @@ -90,6 +150,9 @@ class SubmitView(LoginRequiredMixin, generic.edit.CreateView): if not has_resource_permissions(request.user, goals): return redirect(reverse_lazy('subjects:home')) + if MyGoals.objects.filter(item__goal = goals, user = request.user).exists(): + return redirect(reverse_lazy('goals:view', args = (), kwargs = {'slug': slug})) + return super(SubmitView, self).dispatch(request, *args, **kwargs) def get(self, request, *args, **kwargs): @@ -159,6 +222,94 @@ class SubmitView(LoginRequiredMixin, generic.edit.CreateView): return success_url +class UpdateSubmit(LoginRequiredMixin, generic.UpdateView): + login_url = reverse_lazy("users:login") + redirect_field_name = 'next' + + template_name = 'goals/submit.html' + form_class = MyGoalsForm + + def get_object(self, queryset = None): + slug = self.kwargs.get('slug', '') + goals = get_object_or_404(Goals, slug = slug) + + return MyGoals.objects.filter(item__goal = goals, user = self.request.user)[0] + + def dispatch(self, request, *args, **kwargs): + slug = self.kwargs.get('slug', '') + goals = get_object_or_404(Goals, slug = slug) + + if not has_resource_permissions(request.user, goals): + return redirect(reverse_lazy('subjects:home')) + + return super(UpdateSubmit, self).dispatch(request, *args, **kwargs) + + def get(self, request, *args, **kwargs): + self.object = self.get_object() + + form_class = self.get_form_class() + form = self.get_form(form_class) + + slug = self.kwargs.get('slug', '') + goals = get_object_or_404(Goals, slug = slug) + + MyGoalsFormset = modelformset_factory(MyGoals, form = MyGoalsForm, extra = 0) + my_goals_formset = MyGoalsFormset() + + return self.render_to_response(self.get_context_data(my_goals_formset = my_goals_formset)) + + def post(self, request, *args, **kwargs): + self.object = self.get_object() + + form_class = self.get_form_class() + form = self.get_form(form_class) + + slug = self.kwargs.get('slug', '') + goals = get_object_or_404(Goals, slug = slug) + + MyGoalsFormset = modelformset_factory(MyGoals, form = MyGoalsForm, extra = 0) + my_goals_formset = MyGoalsFormset(self.request.POST) + + if (my_goals_formset.is_valid()): + return self.form_valid(my_goals_formset) + else: + return self.form_invalid(my_goals_formset) + + def form_invalid(self, my_goals_formset): + return self.render_to_response(self.get_context_data(my_goals_formset = my_goals_formset)) + + def form_valid(self, my_goals_formset): + for forms in my_goals_formset.forms: + form = forms.save(commit = False) + + form.save() + + return redirect(self.get_success_url()) + + def get_context_data(self, **kwargs): + context = super(UpdateSubmit, self).get_context_data(**kwargs) + + slug = self.kwargs.get('slug', '') + goals = get_object_or_404(Goals, slug = slug) + + context['title'] = goals.name + + context['goals'] = goals + context['topic'] = goals.topic + context['subject'] = goals.topic.subject + + return context + + def get_success_url(self): + slug = self.kwargs.get('slug', '') + goals = get_object_or_404(Goals, slug = slug) + + messages.success(self.request, _('Your goals for %s was update successfully!')%(goals.topic.name)) + + success_url = reverse_lazy('goals:view', kwargs = {'slug': slug}) + + return success_url + class CreateView(LoginRequiredMixin, generic.edit.CreateView): login_url = reverse_lazy("users:login") redirect_field_name = 'next' @@ -285,7 +436,7 @@ class CreateView(LoginRequiredMixin, generic.edit.CreateView): if self.object.show_window: self.request.session['resources'] = {} self.request.session['resources']['new_page'] = True - self.request.session['resources']['new_page_url'] = reverse('goals:window_view', kwargs = {'slug': self.object.slug}) + self.request.session['resources']['new_page_url'] = reverse('goals:window_submit', kwargs = {'slug': self.object.slug}) success_url = reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug}) @@ -400,7 +551,7 @@ class UpdateView(LoginRequiredMixin, generic.UpdateView): if self.object.show_window: self.request.session['resources'] = {} self.request.session['resources']['new_page'] = True - self.request.session['resources']['new_page_url'] = reverse('goals:window_view', kwargs = {'slug': self.object.slug}) + self.request.session['resources']['new_page_url'] = reverse('goals:window_submit', kwargs = {'slug': self.object.slug}) success_url = reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug}) -- libgit2 0.21.2