+
+
+{% endblock %}
diff --git a/goals/urls.py b/goals/urls.py
index 67e6698..76882fb 100644
--- a/goals/urls.py
+++ b/goals/urls.py
@@ -5,4 +5,5 @@ from . import views
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'),
]
diff --git a/goals/views.py b/goals/views.py
index 7f41d9c..7775e36 100644
--- a/goals/views.py
+++ b/goals/views.py
@@ -90,7 +90,7 @@ class CreateView(LoginRequiredMixin, generic.edit.CreateView):
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)
@@ -98,11 +98,22 @@ class CreateView(LoginRequiredMixin, generic.edit.CreateView):
for pform in pendencies_form.forms:
pend_form = pform.save(commit = False)
- #if not pend_form.action == "":
- #pend_form.save()
+ if not pend_form.action == "":
+ pend_form.save()
goalitems_form.instance = self.object
goalitems_form.save(commit = False)
+
+ g_order = 1
+
+ for gform in goalitems_form.forms:
+ goal_form = gform.save(commit = False)
+
+ if not goal_form.description == "":
+ goal_form.order = g_order
+ goal_form.save()
+
+ g_order += 1
return redirect(self.get_success_url())
@@ -131,4 +142,119 @@ class CreateView(LoginRequiredMixin, generic.edit.CreateView):
success_url = reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug})
+ return success_url
+
+class UpdateView(LoginRequiredMixin, generic.UpdateView):
+ login_url = reverse_lazy("users:login")
+ redirect_field_name = 'next'
+
+ template_name = 'goals/update.html'
+ model = Goals
+ form_class = GoalsForm
+ context_object_name = 'goal'
+
+ 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'))
+
+ return super(UpdateView, 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('topic_slug', '')
+ topic = get_object_or_404(Topic, slug = slug)
+
+ pendencies_form = InlinePendenciesFormset(instance = self.object, initial = [{'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize")), ("submit", _("Submit"))]}])
+ goalitems_form = InlineGoalItemFormset(instance = self.object)
+
+ return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form, goalitems_form = goalitems_form))
+
+ 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('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")), ("submit", _("Submit"))]}])
+ goalitems_form = InlineGoalItemFormset(self.request.POST, instance = self.object)
+
+ if (form.is_valid() and pendencies_form.is_valid() and goalitems_form.is_valid()):
+ return self.form_valid(form, pendencies_form, goalitems_form)
+ else:
+ return self.form_invalid(form, pendencies_form, goalitems_form)
+
+ def form_invalid(self, form, pendencies_form, goalitems_form):
+ for p_form in pendencies_form.forms:
+ p_form.fields['action'].choices = [("", "-------"),("view", _("Visualize")), ("submit", _("Submit"))]
+
+ return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form, goalitems_form = goalitems_form))
+
+ def form_valid(self, form, pendencies_form, goalitems_form):
+ self.object = form.save(commit = False)
+
+ if not self.object.topic.visible and not self.object.topic.repository:
+ self.object.visible = False
+
+ self.object.save()
+
+ pendencies_form.instance = self.object
+ pendencies_form.save(commit = False)
+
+ for form in pendencies_form.forms:
+ pend_form = form.save(commit = False)
+
+ if not pend_form.action == "":
+ pend_form.save()
+
+ goalitems_form.instance = self.object
+ goalitems_form.save(commit = False)
+
+ g_order = self.object.item_goal.count() + 1
+
+ for gform in goalitems_form.forms:
+ goal_form = gform.save(commit = False)
+
+ if not goal_form.description == "":
+ goal_form.order = g_order
+ goal_form.save()
+
+ g_order += 1
+
+ return redirect(self.get_success_url())
+
+ def get_context_data(self, **kwargs):
+ context = super(UpdateView, self).get_context_data(**kwargs)
+
+ context['title'] = _('Update Topic Goals')
+
+ slug = self.kwargs.get('topic_slug', '')
+ topic = get_object_or_404(Topic, slug = slug)
+
+ context['topic'] = topic
+ context['subject'] = topic.subject
+
+ return context
+
+ def get_success_url(self):
+ messages.success(self.request, _('The YouTube Video "%s" was updated successfully!')%(self.object.name))
+
+ #success_url = reverse_lazy('youtube: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('youtube:window_view', kwargs = {'slug': self.object.slug})
+
+ success_url = reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug})
+
return success_url
\ No newline at end of file
diff --git a/pendencies/forms.py b/pendencies/forms.py
index ccde5b4..dc94056 100644
--- a/pendencies/forms.py
+++ b/pendencies/forms.py
@@ -4,6 +4,8 @@ import datetime
from django import forms
from django.conf import settings
from django.utils.translation import ugettext_lazy as _
+from django.utils.formats import get_format
+from django.utils import timezone
from subjects.models import Subject
@@ -18,8 +20,10 @@ class PendenciesForm(forms.ModelForm):
if kwargs.get('initial', None):
self.fields['action'].choices = kwargs['initial'].get('actions', [])
- self.fields['begin_date'].input_formats = settings.DATETIME_INPUT_FORMATS
- self.fields['end_date'].input_formats = settings.DATETIME_INPUT_FORMATS
+ datetime_formats = get_format('DATETIME_INPUT_FORMATS')
+
+ self.fields['begin_date'].input_formats = datetime_formats
+ self.fields['end_date'].input_formats = datetime_formats
begin_date_check = forms.BooleanField(required = False)
end_date_check = forms.BooleanField(required = False)
@@ -89,21 +93,23 @@ class PendenciesLimitedForm(forms.ModelForm):
if kwargs.get('initial', None):
self.fields['action'].choices = kwargs['initial'].get('actions', [])
+
+ datetime_formats = get_format('DATETIME_INPUT_FORMATS')
+
+ self.fields['begin_date'].input_formats = datetime_formats
+ self.fields['end_date'].input_formats = datetime_formats
+ self.fields['limit_date'].input_formats = datetime_formats
begin_date_check = forms.BooleanField(required = False)
end_date_check = forms.BooleanField(required = False)
limit_date_check = forms.BooleanField(required = False)
- begin_date = forms.DateTimeField(input_formats = settings.DATETIME_INPUT_FORMATS)
- end_date = forms.DateTimeField(input_formats = settings.DATETIME_INPUT_FORMATS)
- limit_date = forms.DateTimeField(input_formats = settings.DATETIME_INPUT_FORMATS)
-
+
class Meta:
model = Pendencies
- fields = ['action']
+ fields = ['action', 'begin_date', 'end_date', 'limit_date']
def clean(self):
cleaned_data = super(PendenciesLimitedForm, self).clean()
- print(self.data)
pend_id = cleaned_data.get('id', None)
@@ -111,14 +117,12 @@ class PendenciesLimitedForm(forms.ModelForm):
action = cleaned_data.get('action', None)
begin_date = cleaned_data.get('begin_date', None)
end_date = cleaned_data.get('end_date', None)
- #limit_date = cleaned_data.get('limit_date', None)
+ limit_date = cleaned_data.get('limit_date', None)
begin_check = cleaned_data.get('begin_date_check', False)
end_check = cleaned_data.get('end_date_check', False)
- #limit_check = cleaned_data.get('limit_date_check', False)
+ limit_check = cleaned_data.get('limit_date_check', False)
subject_id = cleaned_data.get('subject', None)
- print(limit_submission_date)
-
if begin_check or end_check or limit_date:
if not action:
self.add_error('action', _('This field is required.'))
@@ -129,8 +133,8 @@ class PendenciesLimitedForm(forms.ModelForm):
if not end_date and end_check:
self.add_error('end_date', _('This field is required.'))
- #if not limit_date and limit_check:
- # self.add_error('limit_date', _('This field is required.'))
+ if not limit_date and limit_check:
+ self.add_error('limit_date', _('This field is required.'))
if begin_date and end_date:
if not begin_date == ValueError and not end_date == ValueError:
@@ -138,17 +142,17 @@ class PendenciesLimitedForm(forms.ModelForm):
self.add_error('begin_date', _('This input should be filled with a date equal or before the End Date.'))
self.add_error('end_date', _('This input should be filled with a date equal or after the Begin Date.'))
- #if begin_date and limit_date:
- # if not begin_date == ValueError and not limit_date == ValueError:
- # if begin_date > limit_date:
- # self.add_error('begin_date', _('This input should be filled with a date equal or before the Limit Date.'))
- # self.add_error('limit_date', _('This input should be filled with a date equal or after the Begin Date.'))
+ if begin_date and limit_date:
+ if not begin_date == ValueError and not limit_date == ValueError:
+ if begin_date > limit_date:
+ self.add_error('begin_date', _('This input should be filled with a date equal or before the Limit Date.'))
+ self.add_error('limit_date', _('This input should be filled with a date equal or after the Begin Date.'))
- #if end_date and limit_date:
- # if not end_date == ValueError and not limit_date == ValueError:
- # if end_date > limit_date:
- # self.add_error('end_date', _('This input should be filled with a date equal or before the Limit Date.'))
- # self.add_error('limit_date', _('This input should be filled with a date equal or after the End Date.'))
+ if end_date and limit_date:
+ if not end_date == ValueError and not limit_date == ValueError:
+ if end_date > limit_date:
+ self.add_error('end_date', _('This input should be filled with a date equal or before the Limit Date.'))
+ self.add_error('limit_date', _('This input should be filled with a date equal or after the End Date.'))
if subject_id:
subject = Subject.objects.get(id = subject_id)
@@ -173,14 +177,30 @@ class PendenciesLimitedForm(forms.ModelForm):
if end_date.date() > subject.end_date:
self.add_error('end_date', _('This input should be filled with a date equal or before the subject end date.'))
- #if not limit_date == ValueError and limit_date:
- # if not self.instance.id and limit_date.date() < datetime.datetime.today().date():
- # self.add_error('limit_date', _("This input should be filled with a date equal or after today's date."))
+ if not limit_date == ValueError and limit_date:
+ if not self.instance.id and limit_date.date() < datetime.datetime.today().date():
+ self.add_error('limit_date', _("This input should be filled with a date equal or after today's date."))
- # if limit_date.date() < subject.init_date:
- # self.add_error('limit_date', _('This input should be filled with a date equal or after the subject begin date.'))
+ if limit_date.date() < subject.init_date:
+ self.add_error('limit_date', _('This input should be filled with a date equal or after the subject begin date.'))
+
+ if limit_date.date() > subject.end_date:
+ self.add_error('limit_date', _('This input should be filled with a date equal or before the subject end date.'))
+
+ if limit_submission_date:
+ limit_submission_date = datetime.datetime.strptime(limit_submission_date, get_format('DATETIME_FORMAT'))
+ limit_submission_date = timezone.make_aware(limit_submission_date, timezone.get_current_timezone())
+
+ if not begin_date == ValueError and begin_date:
+ if begin_date > limit_submission_date:
+ self.add_error('begin_date', _('This input should be filled with a date equal or before the goals submission limit date.'))
+
+ if not end_date == ValueError and end_date:
+ if end_date > limit_submission_date:
+ self.add_error('end_date', _('This input should be filled with a date equal or before the goals submission limit date.'))
- # if limit_date.date() > subject.end_date:
- # self.add_error('limit_date', _('This input should be filled with a date equal or before the subject end date.'))
+ if not limit_date == ValueError and limit_date:
+ if limit_date > limit_submission_date:
+ self.add_error('limit_date', _('This input should be filled with a date equal or before the goals submission limit date.'))
return cleaned_data
--
libgit2 0.21.2