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 %}
+
+
+
+
+
+
+
\ 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 @@
-
-
-
-
-
-
+ {% 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 %}
+
+
+
+ {% 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