From 38acfa5355000dccb93f37b165063c4c50cc2bc9 Mon Sep 17 00:00:00 2001 From: fbormann Date: Tue, 27 Sep 2016 18:49:44 -0300 Subject: [PATCH] fixed activity and material models, changed base.html on notifications --- core/templates/base.html | 9 ++++++++- courses/migrations/0002_auto_20160926_0026.py | 38 ++++++++++++++++++++++++++++++++++++++ courses/models.py | 16 ++++++++++++++-- courses/templates/subject_category/index.html | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ courses/urls.py | 3 ++- courses/views.py | 15 ++++++++++++++- 6 files changed, 153 insertions(+), 5 deletions(-) create mode 100644 courses/migrations/0002_auto_20160926_0026.py create mode 100644 courses/templates/subject_category/index.html diff --git a/core/templates/base.html b/core/templates/base.html index b88608a..77e639b 100644 --- a/core/templates/base.html +++ b/core/templates/base.html @@ -85,7 +85,14 @@ {% endif %} {% endfor %} -

See more

+
  • + +
  • diff --git a/courses/migrations/0002_auto_20160926_0026.py b/courses/migrations/0002_auto_20160926_0026.py new file mode 100644 index 0000000..06cd315 --- /dev/null +++ b/courses/migrations/0002_auto_20160926_0026.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10 on 2016-09-26 03:26 +from __future__ import unicode_literals + +import autoslug.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('courses', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='SubjectCategory', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100, verbose_name='Name')), + ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='name', unique=True, verbose_name='Slug')), + ('description', models.TextField(blank=True, verbose_name='Description')), + ('subjects', models.ManyToManyField(to='courses.Subject')), + ], + options={ + 'verbose_name_plural': 'subject categories', + 'verbose_name': 'subject category', + }, + ), + migrations.RemoveField( + model_name='activity', + name='create_date', + ), + migrations.RemoveField( + model_name='material', + name='create_date', + ), + ] diff --git a/courses/models.py b/courses/models.py index 79e1767..a996ae3 100644 --- a/courses/models.py +++ b/courses/models.py @@ -88,7 +88,6 @@ It is one kind of possible resources available inside a Topic. Activity is something that has a deadline and has to be delivered by the student """ class Activity(Resource): - create_date = models.DateTimeField(_('Creation Date'), auto_now_add = True) topic = models.ForeignKey(Topic, verbose_name = _('Topic')) limit_date = models.DateTimeField(_('Deliver Date')) student = models.ForeignKey(User, verbose_name = _('student')) @@ -98,8 +97,21 @@ class Activity(Resource): It represents any Material inside a topic, be it a file, a link, etc. """ class Material(Resource): - create_date = models.DateTimeField(_('Creation Date'), auto_now_add = True) topic = models.ForeignKey(Topic, verbose_name = _('Topic')) student = models.ForeignKey(User, verbose_name = _('student')) + + +""" +It is a category for each subject. +""" +class SubjectCategory(models.Model): + name = models.CharField(_('Name'), max_length= 100) + slug = AutoSlugField(_("Slug"),populate_from='name',unique=True) + description = models.TextField(_('Description'), blank = True) + subjects = models.ManyToManyField(Subject) + + class Meta: + verbose_name = _('subject category') + verbose_name_plural = _('subject categories') diff --git a/courses/templates/subject_category/index.html b/courses/templates/subject_category/index.html new file mode 100644 index 0000000..9ccc2f8 --- /dev/null +++ b/courses/templates/subject_category/index.html @@ -0,0 +1,77 @@ +{% extends 'base.html' %} + +{% load static i18n permission_tags %} + +{% block breadcrumbs %} + + +{% endblock %} + +{% block sidebar %} + +
    + +
    +

    {{course}}

    +
    + +
    + {% for category in subject_categories %} +
    + +
    + {% endfor %} +
    +
    + + {% if user|has_role:'system_admin' or user|has_role:'professor' %} + {% trans "Create Subject Category" %} + {% endif %} +{% endblock %} + +{% block content %} +
    +
    +
    +
    +

    {{subject}}

    +
    +
    + {% if user|has_role:'system_admin' or user in subject.professors %} + {% trans "edit" %} + {% endif %} +
    +
    + {% if user|has_role:'system_admin' or user in subject.professors %} + {% trans "delete" %} + {% endif %} +
    +
    +
    +
    +

    + {{subject.description|linebreaks}} +

    +
    +
    + + +{% endblock %} + +{% block rightbar %} + +
    +
    +

    {% trans "Pending Stuffs" %}

    +
    +
    + +
    +
    +{% endblock rightbar %} \ No newline at end of file diff --git a/courses/urls.py b/courses/urls.py index cca15f0..1c3c58a 100644 --- a/courses/urls.py +++ b/courses/urls.py @@ -20,5 +20,6 @@ urlpatterns = [ url(r'^subjects/delete/(?P[\w_-]+)/$', views.DeleteSubjectView.as_view(), name='delete_subject'), url(r'^topics/create/(?P[\w_-]+)/$', views.CreateTopicView.as_view(), name='create_topic'), url(r'^topics/update/(?P[\w_-]+)/$', views.UpdateTopicView.as_view(), name='update_topic'), - url(r'^topics/(?P[\w_-]+)/$', views.TopicsView.as_view(), name='view_topic') + url(r'^topics/(?P[\w_-]+)/$', views.TopicsView.as_view(), name='view_topic'), + url(r'^subjects/categories$',views.IndexSubjectCategoryView.as_view(), name='subject_category_index'), ] diff --git a/courses/views.py b/courses/views.py index ea1025b..5b29330 100644 --- a/courses/views.py +++ b/courses/views.py @@ -12,7 +12,7 @@ from django.db.models import Q from rolepermissions.verifications import has_object_permission from .forms import CourseForm, UpdateCourseForm, CategoryForm, SubjectForm,TopicForm -from .models import Course, Subject, Category,Topic +from .models import Course, Subject, Category,Topic, SubjectCategory from core.mixins import NotificationMixin from users.models import User @@ -441,3 +441,16 @@ class DeleteSubjectView(LoginRequiredMixin, HasRoleMixin, generic.DeleteView): def get_success_url(self): return reverse_lazy('course:view', kwargs={'slug' : self.object.course.slug}) + +class IndexSubjectCategoryView(LoginRequiredMixin, generic.ListView): + allowed_roles = ['professor', 'system_admin'] + login_url = reverse_lazy("core:home") + redirect_field_name = 'next' + model = SubjectCategory + template_name = 'subject_category/index.html' + paginate_by = 10 + + def get_context_data(self, **kwargs): + context = super(IndexSubjectCategoryView, self).get_context_data(**kwargs) + context['subject_categories'] = SubjectCategory.objects.all() + return context \ No newline at end of file -- libgit2 0.21.2