Commit e4fe963c3bf4656f04f90ca95a48d57234d0e9cf
Exists in
master
and in
3 other branches
fixed conflict of merge
Showing
13 changed files
with
232 additions
and
145 deletions
Show diff stats
amadeus/static/css/base/amadeus.css
@@ -603,4 +603,12 @@ ul, li { | @@ -603,4 +603,12 @@ ul, li { | ||
603 | .form-group input[type=file] { | 603 | .form-group input[type=file] { |
604 | margin-top: 20px; | 604 | margin-top: 20px; |
605 | height: initial; | 605 | height: initial; |
606 | +} | ||
607 | + | ||
608 | +.no-subjects i { | ||
609 | + font-size: 50px; | ||
610 | +} | ||
611 | +.no-subjects h4 { | ||
612 | + font-family: Roboto; | ||
613 | + font-weight: normal; | ||
606 | } | 614 | } |
607 | \ No newline at end of file | 615 | \ No newline at end of file |
amadeus/static/css/themes/black.css
@@ -267,4 +267,13 @@ a, a:focus, a:hover { | @@ -267,4 +267,13 @@ a, a:focus, a:hover { | ||
267 | .filedrag { | 267 | .filedrag { |
268 | color: #555; | 268 | color: #555; |
269 | border: 2px dashed #555; | 269 | border: 2px dashed #555; |
270 | +} | ||
271 | + | ||
272 | +.footer { | ||
273 | + color: #FFFFFF; | ||
274 | + background: #26A69A; | ||
275 | +} | ||
276 | + | ||
277 | +.no-subjects { | ||
278 | + color: #999999; | ||
270 | } | 279 | } |
271 | \ No newline at end of file | 280 | \ No newline at end of file |
amadeus/static/css/themes/green.css
@@ -272,4 +272,8 @@ a, a:focus, a:hover { | @@ -272,4 +272,8 @@ a, a:focus, a:hover { | ||
272 | .footer { | 272 | .footer { |
273 | color: #FFFFFF; | 273 | color: #FFFFFF; |
274 | background: #26A69A; | 274 | background: #26A69A; |
275 | +} | ||
276 | + | ||
277 | +.no-subjects { | ||
278 | + color: #999999; | ||
275 | } | 279 | } |
276 | \ No newline at end of file | 280 | \ No newline at end of file |
amadeus/static/css/themes/red.css
@@ -267,4 +267,13 @@ a, a:focus, a:hover { | @@ -267,4 +267,13 @@ a, a:focus, a:hover { | ||
267 | .filedrag { | 267 | .filedrag { |
268 | color: #555; | 268 | color: #555; |
269 | border: 2px dashed #555; | 269 | border: 2px dashed #555; |
270 | +} | ||
271 | + | ||
272 | +.footer { | ||
273 | + color: #FFFFFF; | ||
274 | + background: #26A69A; | ||
275 | +} | ||
276 | + | ||
277 | +.no-subjects { | ||
278 | + color: #999999; | ||
270 | } | 279 | } |
271 | \ No newline at end of file | 280 | \ No newline at end of file |
subjects/forms.py
@@ -54,22 +54,32 @@ class CreateSubjectForm(forms.ModelForm): | @@ -54,22 +54,32 @@ class CreateSubjectForm(forms.ModelForm): | ||
54 | if not new_tag in self.instance.tags.all(): | 54 | if not new_tag in self.instance.tags.all(): |
55 | self.instance.tags.add(new_tag) | 55 | self.instance.tags.add(new_tag) |
56 | 56 | ||
57 | - #self.instance.save() | ||
58 | - | ||
59 | return self.instance | 57 | return self.instance |
60 | 58 | ||
61 | - def clean(self): | ||
62 | - cleaned_data = super(CreateSubjectForm, self).clean() | ||
63 | - print("este") | ||
64 | - if cleaned_data['subscribe_begin'] > cleaned_data['end_date']: | ||
65 | - raise forms.ValidationError(_('Subscribe period should be between course time')) | ||
66 | - return cleaned_data | 59 | + # def clean(self): |
60 | + # cleaned_data = super(CreateSubjectForm, self).clean() | ||
61 | + # print("este") | ||
62 | + # if cleaned_data['subscribe_begin'] > cleaned_data['end_date']: | ||
63 | + # self._errors['subscribe_begin'] = [_('Subscribe period should be between course time')] | ||
64 | + | ||
65 | + # return ValueError | ||
66 | + | ||
67 | + # return cleaned_data | ||
68 | + | ||
67 | def clean_subscribe_begin(self): | 69 | def clean_subscribe_begin(self): |
68 | subscribe_begin = self.cleaned_data['subscribe_begin'] | 70 | subscribe_begin = self.cleaned_data['subscribe_begin'] |
71 | + end_date = self.cleaned_data['end_date'] | ||
72 | + | ||
69 | if subscribe_begin < datetime.datetime.today().date(): | 73 | if subscribe_begin < datetime.datetime.today().date(): |
70 | - print("aqui") | ||
71 | - self._errors['subscribe_begin'] = _('this date must be today or after') | 74 | + self._errors['subscribe_begin'] = [_('this date must be today or after')] |
75 | + | ||
72 | return ValueError | 76 | return ValueError |
77 | + | ||
78 | + if subscribe_begin > end_date: | ||
79 | + self._errors['subscribe_begin'] = [_('Subscribe period should be between course time')] | ||
80 | + | ||
81 | + return ValueError | ||
82 | + | ||
73 | return subscribe_begin | 83 | return subscribe_begin |
74 | 84 | ||
75 | class CreateTagForm(forms.ModelForm): | 85 | class CreateTagForm(forms.ModelForm): |
subjects/models.py
@@ -49,10 +49,10 @@ class Subject(models.Model): | @@ -49,10 +49,10 @@ class Subject(models.Model): | ||
49 | def __str__(self): | 49 | def __str__(self): |
50 | return self.name | 50 | return self.name |
51 | 51 | ||
52 | - def clean(self): | 52 | + # def clean(self): |
53 | 53 | ||
54 | - if self.subscribe_begin > self.end_date: | ||
55 | - raise ValidationError(_('Subscribe period should be between course time')) | 54 | + # if self.subscribe_begin > self.end_date: |
55 | + # raise ValidationError(_('Subscribe period should be between course time')) | ||
56 | 56 | ||
57 | 57 | ||
58 | 58 |
subjects/templates/subjects/initial.html
@@ -27,14 +27,23 @@ | @@ -27,14 +27,23 @@ | ||
27 | 27 | ||
28 | <div class="col-md-12 cards-content"> | 28 | <div class="col-md-12 cards-content"> |
29 | <h2 class=" my-subjects-title"><b><i>{% trans "Meus Assuntos" %}</i></b></h2> | 29 | <h2 class=" my-subjects-title"><b><i>{% trans "Meus Assuntos" %}</i></b></h2> |
30 | - <div class="panel-group" id="subject-accordion" role="tablist" aria-multiselectable="true"> | ||
31 | - {% for subject in subjects %} | ||
32 | - {% include "subjects/subject_card.html" with accordion_id="subject-accordion" %} | ||
33 | - {% endfor %} | ||
34 | - </div> | 30 | + |
31 | + {% if subjects|length > 0 %} | ||
32 | + <div class="panel-group" id="subject-accordion" role="tablist" aria-multiselectable="true"> | ||
33 | + {% for subject in subjects %} | ||
34 | + {% include "subjects/subject_card.html" with accordion_id="subject-accordion" %} | ||
35 | + {% endfor %} | ||
36 | + | ||
37 | + {% pagination request paginator page_obj %} | ||
38 | + </div> | ||
39 | + {% else %} | ||
40 | + <div class="text-center no-subjects"> | ||
41 | + <i class="fa fa-graduation-cap"></i> | ||
42 | + <h4>{% trans 'You still do not posses any subject in our platform' %}</h4> | ||
43 | + </div> | ||
44 | + {% endif %} | ||
35 | </div> | 45 | </div> |
36 | 46 | ||
37 | - {% pagination request paginator page_obj %} | ||
38 | 47 | ||
39 | <script type="text/javascript" src="{% static 'js/course.js' %}"></script> | 48 | <script type="text/javascript" src="{% static 'js/course.js' %}"></script> |
40 | {% endblock content %} | 49 | {% endblock content %} |
41 | \ No newline at end of file | 50 | \ No newline at end of file |
subjects/templates/subjects/list.html
1 | {% extends 'categories/home.html' %} | 1 | {% extends 'categories/home.html' %} |
2 | 2 | ||
3 | {% load static i18n pagination %} | 3 | {% load static i18n pagination %} |
4 | -{% load django_bootstrap_breadcrumbs %} | 4 | +{% load django_bootstrap_breadcrumbs subject_counter %} |
5 | 5 | ||
6 | {% block javascript%} | 6 | {% block javascript%} |
7 | {{ block.super }} | 7 | {{ block.super }} |
@@ -33,11 +33,11 @@ | @@ -33,11 +33,11 @@ | ||
33 | <div id="core-subjects-options-div"> | 33 | <div id="core-subjects-options-div"> |
34 | <ul class="core-subjects-options"> | 34 | <ul class="core-subjects-options"> |
35 | {% if all %} | 35 | {% if all %} |
36 | - <a href="{% url 'subjects:index' %}"><li >{% trans "My subjects" %}</li></a> | ||
37 | - <a href="{% url 'subjects:index' 'all' %}" ><li class="active">{% trans "All subjects" %}</li></a> | 36 | + <a href="{% url 'subjects:index' %}"><li >{% trans "My subjects" %} ({{ totals.my_subjects }})</li></a> |
37 | + <a href="{% url 'subjects:index' 'all' %}" ><li class="active">{% trans "All subjects" %} ({{ totals.all_subjects }})</li></a> | ||
38 | {% else %} | 38 | {% else %} |
39 | - <a href="{% url 'subjects:index' %}"><li class="active">{% trans "My subjects" %}</li></a> | ||
40 | - <a href="{% url 'subjects:index' 'all' %}" ><li>{% trans "All subjects" %}</li></a> | 39 | + <a href="{% url 'subjects:index' %}"><li class="active">{% trans "My subjects" %} ({{ totals.my_subjects }})</li></a> |
40 | + <a href="{% url 'subjects:index' 'all' %}" ><li>{% trans "All subjects" %} ({{ totals.all_subjects }})</li></a> | ||
41 | {% endif %} | 41 | {% endif %} |
42 | 42 | ||
43 | </ul> | 43 | </ul> |
@@ -45,128 +45,134 @@ | @@ -45,128 +45,134 @@ | ||
45 | 45 | ||
46 | <!-- Code for listing categories --> | 46 | <!-- Code for listing categories --> |
47 | <div class="col-md-12 cards-content"> | 47 | <div class="col-md-12 cards-content"> |
48 | - <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true"> | ||
49 | - {% for category in categories %} | ||
50 | - {% if category.visible %} | ||
51 | - <div class="panel panel-info category-panel"> | ||
52 | - <div class="panel-heading"> | ||
53 | - <div class="row"> | ||
54 | - <div class="col-md-12 category-header"> | ||
55 | - <h4 class="panel-title"> | ||
56 | - <a class="category-course-link pull-left" data-parent="#accordion" data-toggle="collapse" href="#{{category.slug}}"> | ||
57 | - <button class="btn btn-default btn-xs text-center cat-selector"><i class="fa fa-angle-right fa-2x" aria-hidden="true"></i></button> {{category.name}} | ||
58 | - </a> | ||
59 | - </h4> | ||
60 | - | ||
61 | - <div class="col-md-5 pull-right category-card-items"> | ||
62 | - {% if request.user.is_staff or user in category.coordinators.all %} | ||
63 | - <a href="" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | ||
64 | - <i class="fa fa-ellipsis-v" aria-hidden="true"></i> | 48 | + {% if categories|length > 0 %} |
49 | + <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true"> | ||
50 | + {% for category in categories %} | ||
51 | + {% if category.visible %} | ||
52 | + <div class="panel panel-info category-panel"> | ||
53 | + <div class="panel-heading"> | ||
54 | + <div class="row"> | ||
55 | + <div class="col-md-12 category-header"> | ||
56 | + <h4 class="panel-title"> | ||
57 | + <a class="category-course-link pull-left" data-parent="#accordion" data-toggle="collapse" href="#{{category.slug}}"> | ||
58 | + <button class="btn btn-default btn-xs text-center cat-selector"><i class="fa fa-angle-right fa-2x" aria-hidden="true"></i></button> {{ category.name }} ({{ category|subject_count:user }}) | ||
65 | </a> | 59 | </a> |
66 | - <ul class="dropdown-menu pull-right" aria-labelledby="moreActions"> | ||
67 | - {% if request.user.is_staff %} | ||
68 | - <li><a href="{% url 'categories:replicate' category.slug %}"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i> {% trans 'Replicate' %}</a></li> | ||
69 | - {% endif %} | ||
70 | - <li><a href="{% url 'categories:update' category.slug %}"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i> {% trans 'Edit' %}</a></li> | ||
71 | - <li> | ||
72 | - <a href="javascript:delete_course.get('{% url 'categories:delete' category.slug %}?view=index','#category','#modal_course')" aria-hidden="true"><i class="fa fa-trash fa-fw" aria-hidden="true"></i> {% trans 'Remove' %}</a></li> | ||
73 | - </ul> | ||
74 | - {% endif %} | ||
75 | - <a href="" ><i class="fa fa-list" aria-hidden="true"></i></a> | ||
76 | - <a href=""><i class="fa fa-envelope-o" aria-hidden="true"></i></a> | ||
77 | - <a href=""><i class="fa fa-exclamation-triangle" aria-hidden="true"></i></a> | ||
78 | - <a href=""><i class="fa fa-bar-chart" aria-hidden="true"></i></a> | 60 | + </h4> |
61 | + | ||
62 | + <div class="col-md-5 pull-right category-card-items"> | ||
63 | + {% if request.user.is_staff or user in category.coordinators.all %} | ||
64 | + <a href="" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | ||
65 | + <i class="fa fa-ellipsis-v" aria-hidden="true"></i> | ||
66 | + </a> | ||
67 | + <ul class="dropdown-menu pull-right" aria-labelledby="moreActions"> | ||
68 | + {% if request.user.is_staff %} | ||
69 | + <li><a href="{% url 'categories:replicate' category.slug %}"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i> {% trans 'Replicate' %}</a></li> | ||
70 | + {% endif %} | ||
71 | + <li><a href="{% url 'categories:update' category.slug %}"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i> {% trans 'Edit' %}</a></li> | ||
72 | + <li> | ||
73 | + <a href="javascript:delete_course.get('{% url 'categories:delete' category.slug %}?view=index','#category','#modal_course')" aria-hidden="true"><i class="fa fa-trash fa-fw" aria-hidden="true"></i> {% trans 'Remove' %}</a></li> | ||
74 | + </ul> | ||
75 | + {% endif %} | ||
76 | + <a href="" ><i class="fa fa-list" aria-hidden="true"></i></a> | ||
77 | + <a href=""><i class="fa fa-envelope-o" aria-hidden="true"></i></a> | ||
78 | + <a href=""><i class="fa fa-exclamation-triangle" aria-hidden="true"></i></a> | ||
79 | + <a href=""><i class="fa fa-bar-chart" aria-hidden="true"></i></a> | ||
80 | + </div> | ||
79 | </div> | 81 | </div> |
80 | </div> | 82 | </div> |
81 | </div> | 83 | </div> |
82 | - </div> | ||
83 | - <div id="{{category.slug}}" class="panel-collapse panel-body collapse category-panel-content"> | ||
84 | - <input type="hidden" class="log_url" value="{% url 'categories:view_log' category.id %}" /> | ||
85 | - <input type="hidden" class="log_id" value="" /> | ||
86 | - {% if category.coordinators.all|length > 0 %} | ||
87 | - <h4><b>{% trans "Coordinator(s) " %}: </b> | ||
88 | - {{ category.coordinators.all|join:', ' }} | ||
89 | - </h4> | ||
90 | - {% else %} | ||
91 | - <h4> {% trans "It doesn't possess coordinators" %} </h4> | ||
92 | - {% endif %} | ||
93 | - | ||
94 | - {{category.description|safe}} | ||
95 | - | ||
96 | - {% if request.user in category.coordinators.all or request.user.is_staff %} | ||
97 | - <a href="{% url 'subjects:create' category.slug %}"><button class="create-subject-btn"> {% trans "Create new subject" %} </button></a> | ||
98 | - {% endif %} | 84 | + <div id="{{category.slug}}" class="panel-collapse panel-body collapse category-panel-content"> |
85 | + <input type="hidden" class="log_url" value="{% url 'categories:view_log' category.id %}" /> | ||
86 | + <input type="hidden" class="log_id" value="" /> | ||
87 | + {% if category.coordinators.all|length > 0 %} | ||
88 | + <h4><b>{% trans "Coordinator(s) " %}: </b> | ||
89 | + {{ category.coordinators.all|join:', ' }} | ||
90 | + </h4> | ||
91 | + {% else %} | ||
92 | + <h4> {% trans "It doesn't possess coordinators" %} </h4> | ||
93 | + {% endif %} | ||
94 | + | ||
95 | + {{category.description|safe}} | ||
99 | 96 | ||
100 | - <div class="panel-group subject-group" id="{{ category.slug }}-accordion" role="tablist" aria-multiselectable="true"> | ||
101 | - {% for subject in category.subject_category.all %} | ||
102 | - {% if request.user in subject.students.all or request.user.is_staff or request.user in subject.professor.all or all or request.user in subject.category.coordinators.all %} | ||
103 | - | ||
104 | - {% include "subjects/subject_card.html" %} | ||
105 | - {% endif %} | ||
106 | - {% endfor %} | 97 | + {% if request.user in category.coordinators.all or request.user.is_staff %} |
98 | + <a href="{% url 'subjects:create' category.slug %}"><button class="create-subject-btn"> {% trans "Create new subject" %} </button></a> | ||
99 | + {% endif %} | ||
100 | + | ||
101 | + <div class="panel-group subject-group" id="{{ category.slug }}-accordion" role="tablist" aria-multiselectable="true"> | ||
102 | + {% for subject in category.subject_category.all %} | ||
103 | + {% if request.user in subject.students.all or request.user.is_staff or request.user in subject.professor.all or all or request.user in subject.category.coordinators.all %} | ||
104 | + {% include "subjects/subject_card.html" %} | ||
105 | + {% endif %} | ||
106 | + {% endfor %} | ||
107 | + </div> | ||
107 | </div> | 108 | </div> |
108 | </div> | 109 | </div> |
109 | - </div> | ||
110 | - {% elif request.user in category.coordinators.all or request.user.is_staff %} | ||
111 | - <div class="panel special-panel"> | ||
112 | - <div class="panel-heading panel-invisible"> | ||
113 | - <div class="row"> | ||
114 | - <div class="col-md-12 category-header"> | ||
115 | - <h4 class="panel-title"> | ||
116 | - <a class="category-course-link pull-left" data-parent="#accordion" data-toggle="collapse" href="#{{category.slug}}"> | ||
117 | - <button class="btn btn-default btn-xs text-center cat-selector"><i class="fa fa-angle-right fa-2x" aria-hidden="true"></i></button> {{category.name}} | ||
118 | - </a> | ||
119 | - </h4> | ||
120 | - | ||
121 | - <div class="col-md-5 pull-right category-card-items"> | ||
122 | - {% if request.user.is_staff or user in category.coordinators.all %} | ||
123 | - <a href="" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | ||
124 | - <i class="fa fa-ellipsis-v" aria-hidden="true"></i> | 110 | + {% elif request.user in category.coordinators.all or request.user.is_staff %} |
111 | + <div class="panel special-panel"> | ||
112 | + <div class="panel-heading panel-invisible"> | ||
113 | + <div class="row"> | ||
114 | + <div class="col-md-12 category-header"> | ||
115 | + <h4 class="panel-title"> | ||
116 | + <a class="category-course-link pull-left" data-parent="#accordion" data-toggle="collapse" href="#{{category.slug}}"> | ||
117 | + <button class="btn btn-default btn-xs text-center cat-selector"><i class="fa fa-angle-right fa-2x" aria-hidden="true"></i></button> {{category.name}} ({{ category|subject_count:user }}) | ||
125 | </a> | 118 | </a> |
126 | - <ul class="dropdown-menu pull-right" aria-labelledby="moreActions"> | ||
127 | - {% if request.user.is_staff %} | ||
128 | - <li><a href="{% url 'categories:replicate' category.slug %}"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i> {% trans 'Replicate' %}</a></li> | ||
129 | - {% endif %} | ||
130 | - <li><a href="{% url 'categories:update' category.slug %}"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i> {% trans 'Edit' %}</a></li> | ||
131 | - <li><a href="javascript:delete_course.get('{% url 'categories:delete' category.slug %}?view=index','#category','#modal_course')"><i class="fa fa-trash fa-fw" aria-hidden="true"></i> {% trans 'Remove' %}</a></li> | ||
132 | - </ul> | ||
133 | - {% endif %} | ||
134 | - <a href="" ><i class="fa fa-list" aria-hidden="true"></i></a> | ||
135 | - <a href=""><i class="fa fa-envelope-o" aria-hidden="true"></i></a> | ||
136 | - <a href=""><i class="fa fa-exclamation-triangle" aria-hidden="true"></i></a> | ||
137 | - <a href=""><i class="fa fa-bar-chart" aria-hidden="true"></i></a> | 119 | + </h4> |
120 | + | ||
121 | + <div class="col-md-5 pull-right category-card-items"> | ||
122 | + {% if request.user.is_staff or user in category.coordinators.all %} | ||
123 | + <a href="" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | ||
124 | + <i class="fa fa-ellipsis-v" aria-hidden="true"></i> | ||
125 | + </a> | ||
126 | + <ul class="dropdown-menu pull-right" aria-labelledby="moreActions"> | ||
127 | + {% if request.user.is_staff %} | ||
128 | + <li><a href="{% url 'categories:replicate' category.slug %}"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i> {% trans 'Replicate' %}</a></li> | ||
129 | + {% endif %} | ||
130 | + <li><a href="{% url 'categories:update' category.slug %}"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i> {% trans 'Edit' %}</a></li> | ||
131 | + <li><a href="javascript:delete_course.get('{% url 'categories:delete' category.slug %}?view=index','#category','#modal_course')"><i class="fa fa-trash fa-fw" aria-hidden="true"></i> {% trans 'Remove' %}</a></li> | ||
132 | + </ul> | ||
133 | + {% endif %} | ||
134 | + <a href="" ><i class="fa fa-list" aria-hidden="true"></i></a> | ||
135 | + <a href=""><i class="fa fa-envelope-o" aria-hidden="true"></i></a> | ||
136 | + <a href=""><i class="fa fa-exclamation-triangle" aria-hidden="true"></i></a> | ||
137 | + <a href=""><i class="fa fa-bar-chart" aria-hidden="true"></i></a> | ||
138 | + </div> | ||
138 | </div> | 139 | </div> |
139 | </div> | 140 | </div> |
140 | </div> | 141 | </div> |
141 | - </div> | ||
142 | - <div id="{{category.slug}}" class="panel-collapse panel-body collapse category-panel-content"> | ||
143 | - <input type="hidden" class="log_url" value="{% url 'categories:view_log' category.id %}" /> | ||
144 | - <input type="hidden" class="log_id" value="" /> | ||
145 | - {% if category.coordinators.all|length > 0 %} | ||
146 | - <h4><b>{% trans "Coordinator(s) " %}: </b> | ||
147 | - {{ category.coordinators.all|join:', ' }} | ||
148 | - </h4> | ||
149 | - {% else %} | ||
150 | - <h4> {% trans "It doesn't possess coordinators" %} </h4> | ||
151 | - {% endif %} | ||
152 | - | ||
153 | - {{category.description|safe}} | ||
154 | - | ||
155 | - {% if request.user in category.coordinators.all or request.user.is_staff %} | ||
156 | - <a href="{% url 'subjects:create' category.slug %}"><button class="create-subject-btn"> {% trans "Create new subject" %} </button></a> | ||
157 | - {% endif %} | 142 | + <div id="{{category.slug}}" class="panel-collapse panel-body collapse category-panel-content"> |
143 | + <input type="hidden" class="log_url" value="{% url 'categories:view_log' category.id %}" /> | ||
144 | + <input type="hidden" class="log_id" value="" /> | ||
145 | + {% if category.coordinators.all|length > 0 %} | ||
146 | + <h4><b>{% trans "Coordinator(s) " %}: </b> | ||
147 | + {{ category.coordinators.all|join:', ' }} | ||
148 | + </h4> | ||
149 | + {% else %} | ||
150 | + <h4> {% trans "It doesn't possess coordinators" %} </h4> | ||
151 | + {% endif %} | ||
152 | + | ||
153 | + {{category.description|safe}} | ||
154 | + | ||
155 | + {% if request.user in category.coordinators.all or request.user.is_staff %} | ||
156 | + <a href="{% url 'subjects:create' category.slug %}"><button class="create-subject-btn"> {% trans "Create new subject" %} </button></a> | ||
157 | + {% endif %} | ||
158 | 158 | ||
159 | - <div class="panel-group subject-group" id="{{ category.slug }}-accordion" role="tablist" aria-multiselectable="true"> | ||
160 | - {% for subject in category.subject_category.all %} | ||
161 | - {% include "subjects/subject_card.html" %} | ||
162 | - {% endfor %} | 159 | + <div class="panel-group subject-group" id="{{ category.slug }}-accordion" role="tablist" aria-multiselectable="true"> |
160 | + {% for subject in category.subject_category.all %} | ||
161 | + {% include "subjects/subject_card.html" %} | ||
162 | + {% endfor %} | ||
163 | + </div> | ||
163 | </div> | 164 | </div> |
164 | </div> | 165 | </div> |
165 | - </div> | ||
166 | - {% endif %} | ||
167 | - {% endfor %} | ||
168 | - {% pagination request paginator page_obj %} | ||
169 | - </div> | 166 | + {% endif %} |
167 | + {% endfor %} | ||
168 | + {% pagination request paginator page_obj %} | ||
169 | + </div> | ||
170 | + {% else %} | ||
171 | + <div class="text-center no-subjects"> | ||
172 | + <i class="fa fa-graduation-cap"></i> | ||
173 | + <h4>{% trans 'You still do not posses any subject in our platform' %}</h4> | ||
174 | + </div> | ||
175 | + {% endif %} | ||
170 | </div> | 176 | </div> |
171 | <div id="modal_course"> | 177 | <div id="modal_course"> |
172 | </div> | 178 | </div> |
subjects/templates/subjects/subject_card.html
@@ -33,7 +33,7 @@ | @@ -33,7 +33,7 @@ | ||
33 | <div class="row"> | 33 | <div class="row"> |
34 | <div class="col-md-6"> | 34 | <div class="col-md-6"> |
35 | {% if subject.professor.all|length > 0 %} | 35 | {% if subject.professor.all|length > 0 %} |
36 | - <h4><b>{% trans "Professors(s) " %}: </b> | 36 | + <h4><b>{% trans "Professor(s) " %}: </b> |
37 | {{ subject.professor.all|join:', ' }} | 37 | {{ subject.professor.all|join:', ' }} |
38 | </h4> | 38 | </h4> |
39 | {% else %} | 39 | {% else %} |
@@ -94,7 +94,7 @@ | @@ -94,7 +94,7 @@ | ||
94 | <div class="row"> | 94 | <div class="row"> |
95 | <div class="col-md-6"> | 95 | <div class="col-md-6"> |
96 | {% if subject.professor.all|length > 0 %} | 96 | {% if subject.professor.all|length > 0 %} |
97 | - <h4><b>{% trans "Professors(s) " %}: </b> | 97 | + <h4><b>{% trans "Professor(s) " %}: </b> |
98 | {{ subject.professor.all|join:', ' }} | 98 | {{ subject.professor.all|join:', ' }} |
99 | </h4> | 99 | </h4> |
100 | {% else %} | 100 | {% else %} |
@@ -113,7 +113,7 @@ | @@ -113,7 +113,7 @@ | ||
113 | {% if show_buttons %} | 113 | {% if show_buttons %} |
114 | 114 | ||
115 | {% if request.user in subject.students.all or request.user in subject.professor.all or request.user.is_staff or request.user in subject.category.coordinators.all %} | 115 | {% if request.user in subject.students.all or request.user in subject.professor.all or request.user.is_staff or request.user in subject.category.coordinators.all %} |
116 | - <a href="{% url 'subjects:view' subject.slug %}" class="access-subject btn btn-primary btn-raised"> {% trans "Access Subject" %}</a> | 116 | + <a href="{% url 'subjects:view' subject.slug %}" class="btn btn-success btn-raised"> {% trans "Access Subject" %}</a> |
117 | {% else %} | 117 | {% else %} |
118 | <a href="#" class="subscribe-subject btn btn-primary btn-raised"> {% trans "Subscribe to Subject" %}</a> | 118 | <a href="#" class="subscribe-subject btn btn-primary btn-raised"> {% trans "Subscribe to Subject" %}</a> |
119 | {% endif %} | 119 | {% endif %} |
@@ -0,0 +1,13 @@ | @@ -0,0 +1,13 @@ | ||
1 | +from django import template | ||
2 | + | ||
3 | +register = template.Library() | ||
4 | + | ||
5 | +@register.filter(name = 'subject_count') | ||
6 | +def subject_count(category, user): | ||
7 | + total = 0 | ||
8 | + | ||
9 | + for subject in category.subject_category.all(): | ||
10 | + if user in subject.students.all() or user in subject.professor.all() or user in subject.category.coordinators.all(): | ||
11 | + total += 1 | ||
12 | + | ||
13 | + return total | ||
0 | \ No newline at end of file | 14 | \ No newline at end of file |
subjects/utils.py
@@ -12,4 +12,17 @@ def has_professor_profile(user, category): | @@ -12,4 +12,17 @@ def has_professor_profile(user, category): | ||
12 | if user in subject.professor.all(): | 12 | if user in subject.professor.all(): |
13 | return True | 13 | return True |
14 | 14 | ||
15 | - return False | ||
16 | \ No newline at end of file | 15 | \ No newline at end of file |
16 | + return False | ||
17 | + | ||
18 | +def count_subjects(categories, user, all_subs = True): | ||
19 | + total = 0 | ||
20 | + | ||
21 | + for category in categories: | ||
22 | + if not all_subs: | ||
23 | + for subject in category.subject_category.all(): | ||
24 | + if user in subject.students.all() or user in subject.professor.all() or user in subject.category.coordinators.all(): | ||
25 | + total += 1 | ||
26 | + else: | ||
27 | + total += category.subject_category.count() | ||
28 | + | ||
29 | + return total | ||
17 | \ No newline at end of file | 30 | \ No newline at end of file |
subjects/views.py
@@ -26,7 +26,7 @@ import time | @@ -26,7 +26,7 @@ import time | ||
26 | import datetime | 26 | import datetime |
27 | from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger | 27 | from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger |
28 | from .forms import CreateSubjectForm | 28 | from .forms import CreateSubjectForm |
29 | -from .utils import has_student_profile, has_professor_profile | 29 | +from .utils import has_student_profile, has_professor_profile, count_subjects |
30 | from users.models import User | 30 | from users.models import User |
31 | 31 | ||
32 | 32 | ||
@@ -42,12 +42,11 @@ class HomeView(LoginRequiredMixin, ListView): | @@ -42,12 +42,11 @@ class HomeView(LoginRequiredMixin, ListView): | ||
42 | subjects = Subject.objects.all().order_by("name") | 42 | subjects = Subject.objects.all().order_by("name") |
43 | else: | 43 | else: |
44 | 44 | ||
45 | + | ||
45 | pk = self.request.user.pk | 46 | pk = self.request.user.pk |
46 | 47 | ||
47 | subjects = Subject.objects.filter(students__pk=pk) | Subject.objects.filter(professor__pk=pk) | Subject.objects.filter(category__coordinators__pk=pk) | 48 | subjects = Subject.objects.filter(students__pk=pk) | Subject.objects.filter(professor__pk=pk) | Subject.objects.filter(category__coordinators__pk=pk) |
48 | 49 | ||
49 | - | ||
50 | - | ||
51 | 50 | ||
52 | return subjects | 51 | return subjects |
53 | 52 | ||
@@ -63,6 +62,7 @@ class HomeView(LoginRequiredMixin, ListView): | @@ -63,6 +62,7 @@ class HomeView(LoginRequiredMixin, ListView): | ||
63 | 62 | ||
64 | 63 | ||
65 | class IndexView(LoginRequiredMixin, ListView): | 64 | class IndexView(LoginRequiredMixin, ListView): |
65 | + totals = {} | ||
66 | 66 | ||
67 | login_url = reverse_lazy("users:login") | 67 | login_url = reverse_lazy("users:login") |
68 | redirect_field_name = 'next' | 68 | redirect_field_name = 'next' |
@@ -73,13 +73,18 @@ class IndexView(LoginRequiredMixin, ListView): | @@ -73,13 +73,18 @@ class IndexView(LoginRequiredMixin, ListView): | ||
73 | def get_queryset(self): | 73 | def get_queryset(self): |
74 | categories = Category.objects.all().order_by('name') | 74 | categories = Category.objects.all().order_by('name') |
75 | 75 | ||
76 | + self.totals['all_subjects'] = count_subjects(categories, self.request.user) | ||
77 | + self.totals['my_subjects'] = self.totals['all_subjects'] | ||
78 | + | ||
76 | if not self.request.user.is_staff: | 79 | if not self.request.user.is_staff: |
77 | - if not self.kwargs.get('option'): | ||
78 | - categories = Category.objects.all().order_by('name') | 80 | + my_categories = [category for category in categories if self.request.user in category.coordinators.all() \ |
81 | + or has_professor_profile(self.request.user, category) or has_student_profile(self.request.user, category)] | ||
82 | + #So I remove all categories that doesn't have the possibility for the user to be on | ||
83 | + | ||
84 | + self.totals['my_subjects'] = count_subjects(my_categories, self.request.user, False) | ||
79 | 85 | ||
80 | - categories = [category for category in categories if self.request.user in category.coordinators.all() \ | ||
81 | - or has_professor_profile(self.request.user, category) or has_student_profile(self.request.user, category)] | ||
82 | - #So I remove all categories that doesn't have the possibility for the user to be on | 86 | + if not self.kwargs.get('option'): |
87 | + categories = my_categories | ||
83 | 88 | ||
84 | return categories | 89 | return categories |
85 | 90 | ||
@@ -104,6 +109,7 @@ class IndexView(LoginRequiredMixin, ListView): | @@ -104,6 +109,7 @@ class IndexView(LoginRequiredMixin, ListView): | ||
104 | context['title'] = _('My Subjects') | 109 | context['title'] = _('My Subjects') |
105 | 110 | ||
106 | context['show_buttons'] = True #So it shows subscribe and access buttons | 111 | context['show_buttons'] = True #So it shows subscribe and access buttons |
112 | + context['totals'] = self.totals | ||
107 | 113 | ||
108 | if self.kwargs.get('option'): | 114 | if self.kwargs.get('option'): |
109 | context['all'] = True | 115 | context['all'] = True |
@@ -135,7 +141,7 @@ class SubjectCreateView(CreateView): | @@ -135,7 +141,7 @@ class SubjectCreateView(CreateView): | ||
135 | initial['name'] = subject.name | 141 | initial['name'] = subject.name |
136 | initial['visible'] = subject.visible | 142 | initial['visible'] = subject.visible |
137 | initial['professor'] = subject.professor.all() | 143 | initial['professor'] = subject.professor.all() |
138 | - initial['tags'] = subject.tags.all() | 144 | + initial['tags'] = ", ".join(subject.tags.all().values_list("name", flat = True)) |
139 | initial['init_date'] = subject.init_date | 145 | initial['init_date'] = subject.init_date |
140 | initial['end_date'] = subject.end_date | 146 | initial['end_date'] = subject.end_date |
141 | initial['students'] = subject.students.all() | 147 | initial['students'] = subject.students.all() |