Commit c53a1c371747cd7a218d4ce2a085e95d45046aa6

Authored by Jailson Dias
1 parent 85a887fd

Procedimento de criar curso #49

courses/forms.py
1 1 from django import forms
2 2 from django.utils.translation import ugettext_lazy as _
3 3 from .models import Category, Course, Subject, Topic
  4 +import datetime
4 5  
5 6 class CategoryForm(forms.ModelForm):
6 7  
... ... @@ -16,6 +17,32 @@ class CategoryForm(forms.ModelForm):
16 17  
17 18  
18 19 class CourseForm(forms.ModelForm):
  20 + def clean_end_register_date(self):
  21 + init_register_date = self.data['init_register_date']
  22 + end_register_date = self.data['end_register_date']
  23 +
  24 + if init_register_date and end_register_date and end_register_date < init_register_date:
  25 + raise forms.ValidationError(_('The end date may not be before the start date.'))
  26 + return end_register_date
  27 +
  28 + def clean_init_date(self):
  29 + # print(dir(self))
  30 + print (self.data)
  31 + print (self.cleaned_data)
  32 + end_register_date = self.data['end_register_date']
  33 + init_date = self.data['init_date']
  34 +
  35 + if end_register_date and init_date and init_date <= end_register_date:
  36 + raise forms.ValidationError(_('The course start date must be after the end of registration.'))
  37 + return init_date
  38 +
  39 + def clean_end_date(self):
  40 + init_date = self.data['init_date']
  41 + end_date = self.data['end_date']
  42 +
  43 + if init_date and end_date and end_date < init_date:
  44 + raise forms.ValidationError(_('The end date may not be before the start date.'))
  45 + return end_date
19 46  
20 47 class Meta:
21 48 model = Course
... ... @@ -47,6 +74,8 @@ class CourseForm(forms.ModelForm):
47 74 }
48 75 widgets = {
49 76 'categoy': forms.Select(),
  77 + 'objectivies': forms.Textarea(attrs={'cols': 80, 'rows': 5}),
  78 + 'content': forms.Textarea(attrs={'cols': 80, 'rows': 5}),
50 79 }
51 80  
52 81 class SubjectForm(forms.ModelForm):
... ...
courses/templates/course/create.html
1   -{% extends 'app/base.html' %}
  1 +{% extends 'course/view.html' %}
2 2  
3 3 {% load static i18n %}
4 4 {% load widget_tweaks %}
... ... @@ -10,45 +10,56 @@
10 10 </ol>
11 11 {% endblock %}
12 12  
13   -{% block sidebar %}
14   - <div class="list-group">
15   - <a href="{% url 'course:manage' %}" class="list-group-item">
16   - {% trans 'Courses' %}
17   - </a>
18   - </div>
19   -{% endblock %}
20   -
21 13 {% block content %}
22   - <div class="alert alert-info alert-dismissible" role="alert">
23   - <button type="button" class="close" data-dismiss="alert" aria-label="Close">
24   - <span aria-hidden="true">&times;</span>
25   - </button>
26   - <p>{% trans 'All fields are required' %}</p>
27   - </div>
28 14  
29   - <form method="post" action="" enctype="multipart/form-data">
30   - {% csrf_token %}
31   - {% for field in form %}
32   - <div class="form-group{% if form.has_error %} has-error {% endif %}">
33   - <label for="{{ field.auto_id }}">{{ field.label }}</label>
34   - {% render_field field class='form-control input-sm' %}
35   - <span id="helpBlock" class="help-block">{{ field.help_text }}</span>
36   - {% if field.errors.length > 0 %}
37   - <div class="alert alert-danger alert-dismissible" role="alert">
38   - <button type="button" class="close" data-dismiss="alert" aria-label="Close">
39   - <span aria-hidden="true">&times;</span>
40   - </button>
41   - <ul>
42   - {% for error in field.errors %}
43   - <li>{{ error }}</li>
44   - {% endfor %}
45   - </ul>
46   - </div>
47   - </div>
48   - {% endif %}
49   - </div>
50   - {% endfor %}
51   - <input type="submit" value="{% trans 'Save' %}" class="btn btn-sm btn-success" />
52   - </form>
53   - <br clear="all" />
  15 +</br>
  16 +<div class="card card-content">
  17 + <div class="card-body">
  18 + <form method="post" action="" enctype="multipart/form-data">
  19 + {% csrf_token %}
  20 + {% for field in form %}
  21 + <div class="form-group {% if form.has_error %} has-error {% endif %} is-fileinput">
  22 + <label for="{{ field.auto_id }}">{{ field.label }}</label>
  23 + {% if field.auto_id == 'id_init_register_date' or field.auto_id == 'id_end_register_date' or field.auto_id == 'id_init_date' or field.auto_id == 'id_end_date'%}
  24 + {% render_field field class='form-control' type='date' %}
  25 + {% elif field.auto_id == 'id_image' %}
  26 + {% render_field field class='form-control' %}
  27 + <div class="input-group">
  28 + <input type="text" readonly="" class="form-control" placeholder="Choose your photo..."/>
  29 + <span class="input-group-btn input-group-sm">
  30 + <button type="button" class="btn btn-fab btn-fab-mini">
  31 + <i class="material-icons">attach_file</i>
  32 + </button>
  33 + </span>
  34 + </div>
  35 + {% else %}
  36 + {% render_field field class='form-control' %}
  37 + {% endif %}
  38 + <span class="help-block">{{ field.help_text }}</span>
  39 + {% if field.errors %}
  40 + <div class="row">
  41 + </br>
  42 + <div class="alert alert-danger alert-dismissible" role="alert">
  43 + <button type="button" class="close" data-dismiss="alert" aria-label="Close">
  44 + <span aria-hidden="true">&times;</span>
  45 + </button>
  46 + <ul>
  47 + {% for error in field.errors %}
  48 + <li>{{ error }}</li>
  49 + {% endfor %}
  50 + </ul>
  51 + </div>
  52 + </div>
  53 + {% endif %}
  54 + </div>
  55 + {% endfor %}
  56 + <div class="row text-center">
  57 + <input type="submit" value="{% trans 'Create' %}" class="btn btn-primary" />
  58 + </div>
  59 + </form>
  60 + </div>
  61 +</div>
  62 +</br>
  63 +</br>
  64 +</br>
54 65 {% endblock %}
... ...
courses/urls.py
... ... @@ -4,7 +4,7 @@ from . import views
4 4  
5 5 urlpatterns = [
6 6 url(r'^$', views.IndexView.as_view(), name='manage'),
7   - url(r'^create/$', views.CreateView.as_view(), name='create'),
  7 + url(r'^create/$', views.CreateCourseView.as_view(), name='create'),
8 8 url(r'^edit/(?P<slug>[\w_-]+)/$', views.UpdateView.as_view(), name='update'),
9 9 url(r'^(?P<slug>[\w_-]+)/$', views.CourseView.as_view(), name='view'),
10 10 url(r'^delete/(?P<slug>[\w_-]+)/$', views.DeleteView.as_view(), name='delete'),
... ...
courses/views.py
... ... @@ -32,7 +32,7 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView):
32 32  
33 33 return context
34 34  
35   -class CreateView(LoginRequiredMixin, HasRoleMixin, NotificationMixin,generic.edit.CreateView):
  35 +class CreateCourseView(LoginRequiredMixin, HasRoleMixin, NotificationMixin,generic.edit.CreateView):
36 36  
37 37 allowed_roles = ['professor', 'system_admin']
38 38 login_url = reverse_lazy("core:home")
... ... @@ -41,17 +41,9 @@ class CreateView(LoginRequiredMixin, HasRoleMixin, NotificationMixin,generic.edi
41 41 form_class = CourseForm
42 42 success_url = reverse_lazy('course:manage')
43 43 def form_valid(self, form):
44   - self.object = form.save(commit = False)
45   - self.object.slug = slugify(self.object.name)
46   - print('Fooooiiii!!')
47   - self.object.save()
48   -
49   - return super(CreateView, self).form_valid(form)
50   -
51   - def render_to_response(self, context, **response_kwargs):
52   - messages.success(self.request, _('Course created successfully!'))
53   -
54   - return self.response_class(request=self.request, template=self.get_template_names(), context=context, using=self.template_engine)
  44 + self.object = form.save()
  45 + self.object.professors.add(self.request.user)
  46 + return super(CreateCourseView, self).form_valid(form)
55 47  
56 48 class UpdateView(LoginRequiredMixin, HasRoleMixin, generic.UpdateView):
57 49  
... ... @@ -87,7 +79,7 @@ class CourseView(LoginRequiredMixin, NotificationMixin, generic.DetailView):
87 79 context = super(CourseView, self).get_context_data(**kwargs)
88 80 course = get_object_or_404(Course, slug = self.kwargs.get('slug'))
89 81 if has_role(self.request.user,'system_admin'):
90   - subjects = Subject.objects.all()
  82 + subjects = course.subjects.all()
91 83 elif has_role(self.request.user,'professor'):
92 84 subjects = course.subjects.filter(professors__in=[self.request.user])
93 85 elif has_role(self.request.user, 'student'):
... ...