From 6d39e7c53d9d3dfba7a73521a9a67dde86f81476 Mon Sep 17 00:00:00 2001 From: fbormann Date: Thu, 17 Nov 2016 01:11:26 -0300 Subject: [PATCH] reverting commit that modified course --- app/migrations/0001_initial.py | 5 +++-- app/migrations/0002_auto_20161115_2054.py | 20 ++++++++++++++++++++ core/migrations/0001_initial.py | 3 ++- core/migrations/0002_auto_20161115_1936.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ courses/forms.py | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------- courses/migrations/0001_initial.py | 18 +++++++++++++----- courses/migrations/0002_auto_20161115_1936.py | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ courses/models.py | 13 +++++++++++-- courses/templates/course/course_card.html | 2 +- exam/migrations/0001_initial.py | 4 +++- exam/migrations/0002_auto_20161115_1936.py | 30 ++++++++++++++++++++++++++++++ exercise/migrations/0001_initial.py | 3 ++- files/migrations/0001_initial.py | 5 +++-- files/migrations/0002_topicfile_professor.py | 3 ++- forum/migrations/0001_initial.py | 3 ++- forum/migrations/0002_auto_20161115_1936.py | 35 +++++++++++++++++++++++++++++++++++ links/migrations/0001_initial.py | 2 +- poll/migrations/0001_initial.py | 3 ++- poll/migrations/0002_auto_20161115_1936.py | 30 ++++++++++++++++++++++++++++++ users/migrations/0001_initial.py | 11 ++++++----- users/migrations/0002_auto_20161115_1941.py | 20 ++++++++++++++++++++ users/migrations/0003_auto_20161115_2054.py | 30 ++++++++++++++++++++++++++++++ 22 files changed, 434 insertions(+), 34 deletions(-) create mode 100644 app/migrations/0002_auto_20161115_2054.py create mode 100644 core/migrations/0002_auto_20161115_1936.py create mode 100644 courses/migrations/0002_auto_20161115_1936.py create mode 100644 exam/migrations/0002_auto_20161115_1936.py create mode 100644 forum/migrations/0002_auto_20161115_1936.py create mode 100644 poll/migrations/0002_auto_20161115_1936.py create mode 100644 users/migrations/0002_auto_20161115_1941.py create mode 100644 users/migrations/0003_auto_20161115_2054.py diff --git a/app/migrations/0001_initial.py b/app/migrations/0001_initial.py index be12c7a..e5dc19b 100644 --- a/app/migrations/0001_initial.py +++ b/app/migrations/0001_initial.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.10 on 2016-11-17 03:09 + +# Generated by Django 1.10 on 2016-11-15 22:36 from __future__ import unicode_literals from django.db import migrations, models @@ -23,7 +24,7 @@ class Migration(migrations.Migration): ('username', models.CharField(max_length=30, verbose_name='Email host username')), ('password', models.CharField(blank=True, max_length=30, verbose_name='Email host password')), ('safe_conection', models.IntegerField(choices=[(0, 'No'), (1, 'TLS, if available'), (2, 'TLS'), (3, 'SSL')], default=0, verbose_name='Use safe conection')), - ('default_from_email', models.EmailField(max_length=254, verbose_name='Default from email')), + ('default_from_email', models.EmailField(blank=True, max_length=254, verbose_name='Default from email')), ], options={ 'verbose_name': 'Amadeus SMTP setting', diff --git a/app/migrations/0002_auto_20161115_2054.py b/app/migrations/0002_auto_20161115_2054.py new file mode 100644 index 0000000..0a8a21f --- /dev/null +++ b/app/migrations/0002_auto_20161115_2054.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10 on 2016-11-15 23:54 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('app', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='emailbackend', + name='default_from_email', + field=models.EmailField(max_length=254, verbose_name='Default from email'), + ), + ] diff --git a/core/migrations/0001_initial.py b/core/migrations/0001_initial.py index a42da7e..e220921 100644 --- a/core/migrations/0001_initial.py +++ b/core/migrations/0001_initial.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.10 on 2016-11-17 03:09 + +# Generated by Django 1.10 on 2016-11-15 22:36 from __future__ import unicode_literals import autoslug.fields diff --git a/core/migrations/0002_auto_20161115_1936.py b/core/migrations/0002_auto_20161115_1936.py new file mode 100644 index 0000000..084112a --- /dev/null +++ b/core/migrations/0002_auto_20161115_1936.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10 on 2016-11-15 22:36 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('core', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='notification', + name='actor', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='notification_Performer', to=settings.AUTH_USER_MODEL, verbose_name='Performer'), + ), + migrations.AddField( + model_name='notification', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notification_Actor', to=settings.AUTH_USER_MODEL, verbose_name='User'), + ), + migrations.AddField( + model_name='log', + name='action_resource', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Action_Resource', verbose_name='Action_Resource'), + ), + migrations.AddField( + model_name='log', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Actor'), + ), + migrations.AddField( + model_name='action_resource', + name='action', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Action', verbose_name='Action_Applied'), + ), + migrations.AddField( + model_name='action_resource', + name='resource', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Resource', verbose_name='Resource'), + ), + ] diff --git a/courses/forms.py b/courses/forms.py index ab0d19e..6084e1e 100644 --- a/courses/forms.py +++ b/courses/forms.py @@ -18,30 +18,64 @@ class CategoryCourseForm(forms.ModelForm): class CourseForm(forms.ModelForm): - + def clean_end_register_date(self): + init_register_date = self.cleaned_data['init_register_date'] + end_register_date = self.cleaned_data['end_register_date'] + + if init_register_date and end_register_date and end_register_date < init_register_date: + raise forms.ValidationError(_('The end date may not be before the start date.')) + return end_register_date + + def clean_init_date(self): + end_register_date = self.cleaned_data['end_register_date'] + init_date = self.cleaned_data['init_date'] + + if end_register_date and init_date and init_date <= end_register_date: + raise forms.ValidationError(_('The course start date must be after the end of registration.')) + return init_date + + def clean_end_date(self): + init_date = self.cleaned_data['init_date'] + end_date = self.cleaned_data['end_date'] + + if init_date and end_date and end_date < init_date: + raise forms.ValidationError(_('The end date may not be before the start date.')) + return end_date class Meta: model = Course - fields = ('name', 'description', - 'category', 'coordenator','public') + fields = ('name', 'objectivies', 'content', 'max_students', 'init_register_date', 'end_register_date', + 'init_date', 'end_date', 'category', 'coordenator','public') labels = { 'name': _('Name'), + 'objectivies': _('Objectives'), 'content': _('Content'), + 'max_students': _('Number of studets maximum'), + 'init_register_date': _('Course registration start date'), + 'end_register_date': _('Course registration end date'), + 'init_date': _('Course start date'), + 'end_date': _('Course end date'), 'category': _('Category'), 'coordenator': _('Coordenator'), 'public':_('Public'), } help_texts = { 'name': _('Course name'), + 'objectivies': _('Course objective'), 'content': _('Course modules'), + 'max_students': _('Max number of students that a class can have'), + 'init_register_date': _('Date that starts the registration period of the course (dd/mm/yyyy)'), + 'end_register_date': _('Date that ends the registration period of the course (dd/mm/yyyy)'), + 'init_date': _('Date that the course starts (dd/mm/yyyy)'), + 'end_date': _('Date that the course ends (dd/mm/yyyy)'), 'category': _('CourseCategory which the course belongs'), 'coordenator': _('Course Coordenator'), 'public':_('To define if the course can be accessed by people not registered'), } widgets = { - 'category': forms.Select(), + 'ategoy': forms.Select(), 'coordenator': forms.Select(), 'content': SummernoteWidget(), 'objectivies': SummernoteWidget(), @@ -49,31 +83,70 @@ class CourseForm(forms.ModelForm): class UpdateCourseForm(CourseForm): + def clean_end_register_date(self): + init_register_date = self.cleaned_data['init_register_date'] + end_register_date = self.cleaned_data['end_register_date'] + + if init_register_date and end_register_date and end_register_date < init_register_date: + raise forms.ValidationError(_('The end date may not be before the start date.')) + return end_register_date + + def clean_init_date(self): + end_register_date = self.cleaned_data['end_register_date'] + init_date = self.cleaned_data['init_date'] + + if end_register_date and init_date and init_date <= end_register_date: + raise forms.ValidationError(_('The course start date must be after the end of registration.')) + return init_date + + def clean_end_date(self): + init_date = self.cleaned_data['init_date'] + end_date = self.cleaned_data['end_date'] + + if init_date and end_date and end_date < init_date: + raise forms.ValidationError(_('The end date may not be before the start date.')) + return end_date + def __init__(self, *args, **kwargs): super(UpdateCourseForm, self).__init__(*args, **kwargs) + self.fields["students"].required = False class Meta: model = Course - fields = ('name', 'description', - 'category', 'coordenator','public') + fields = ('name', 'objectivies', 'content', 'max_students', 'init_register_date', 'end_register_date', + 'init_date', 'end_date', 'category','students', 'coordenator','public') labels = { 'name': _('Name'), - 'description': _('Description'), + 'objectivies': _('Objectives'), + 'content': _('Content'), + 'max_students': _('Number of studets maximum'), + 'init_register_date': _('Course registration start date'), + 'end_register_date': _('Course registration end date'), + 'init_date': _('Course start date'), + 'end_date': _('Course end date'), 'category': _('Category'), 'coordenator': _('Coordenator'), + 'students': _('Student'), 'public':_('Public'), } help_texts = { 'name': _('Course name'), - 'description': _('Description about the course'), + 'objectivies': _('Course objective'), + 'content': _('Course modules'), + 'max_students': _('Max number of students that a class can have'), + 'init_register_date': _('Date that starts the registration period of the course (dd/mm/yyyy)'), + 'end_register_date': _('Date that ends the registration period of the course (dd/mm/yyyy)'), + 'init_date': _('Date that the course starts (dd/mm/yyyy)'), + 'end_date': _('Date that the course ends (dd/mm/yyyy)'), 'category': _('CourseCategory which the course belongs'), 'coordenator': _('Course Coordenator'), + 'students': _("Course's Students"), 'public':_('To define if the course can be accessed by people not registered'), } widgets = { - 'category': forms.Select(), + 'categoy': forms.Select(), 'coordenator': forms.Select(), - 'description': SummernoteWidget(), + 'content': SummernoteWidget(), 'objectivies': SummernoteWidget(), } diff --git a/courses/migrations/0001_initial.py b/courses/migrations/0001_initial.py index 390783a..95c4f06 100644 --- a/courses/migrations/0001_initial.py +++ b/courses/migrations/0001_initial.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.10 on 2016-11-17 03:09 + +# Generated by Django 1.10 on 2016-11-15 22:36 from __future__ import unicode_literals import autoslug.fields @@ -57,13 +58,20 @@ class Migration(migrations.Migration): ('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='Content')), + ('objectivies', models.TextField(blank=True, verbose_name='Objectivies')), + ('content', models.TextField(blank=True, verbose_name='Content')), + ('max_students', models.PositiveIntegerField(blank=True, verbose_name='Maximum Students')), + ('create_date', models.DateTimeField(auto_now_add=True, verbose_name='Creation Date')), + ('init_register_date', models.DateField(verbose_name='Register Date (Begin)')), + ('end_register_date', models.DateField(verbose_name='Register Date (End)')), + ('init_date', models.DateField(verbose_name='Begin of Course Date')), + ('end_date', models.DateField(verbose_name='End of Course Date')), ('public', models.BooleanField(default=False, verbose_name='Public')), ], options={ 'verbose_name': 'Course', - 'ordering': ('name',), 'verbose_name_plural': 'Courses', + 'ordering': ('create_date', 'name'), }, ), migrations.CreateModel( @@ -121,8 +129,8 @@ class Migration(migrations.Migration): ], options={ 'verbose_name': 'Subject', - 'ordering': ('create_date', 'name'), 'verbose_name_plural': 'Subjects', + 'ordering': ('create_date', 'name'), }, ), migrations.CreateModel( @@ -153,8 +161,8 @@ class Migration(migrations.Migration): ], options={ 'verbose_name': 'Topic', - 'ordering': ('create_date', 'name'), 'verbose_name_plural': 'Topics', + 'ordering': ('create_date', 'name'), }, ), ] diff --git a/courses/migrations/0002_auto_20161115_1936.py b/courses/migrations/0002_auto_20161115_1936.py new file mode 100644 index 0000000..f3dfad1 --- /dev/null +++ b/courses/migrations/0002_auto_20161115_1936.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10 on 2016-11-15 22:36 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('courses', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddField( + model_name='subject', + name='professors', + field=models.ManyToManyField(related_name='professors_subjects', to=settings.AUTH_USER_MODEL, verbose_name='Professors'), + ), + migrations.AddField( + model_name='subject', + name='students', + field=models.ManyToManyField(blank=True, related_name='subject_student', to=settings.AUTH_USER_MODEL, verbose_name='Students'), + ), + migrations.AddField( + model_name='material', + name='students', + field=models.ManyToManyField(related_name='materials', to=settings.AUTH_USER_MODEL, verbose_name='Students'), + ), + migrations.AddField( + model_name='material', + name='topic', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='materials', to='courses.Topic', verbose_name='Topic'), + ), + migrations.AddField( + model_name='linkmaterial', + name='material', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='material_link', to='courses.Material', verbose_name='Material'), + ), + migrations.AddField( + model_name='filematerial', + name='material', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='material_file', to='courses.Material', verbose_name='Material'), + ), + migrations.AddField( + model_name='course', + name='category', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='course_category', to='courses.CourseCategory', verbose_name='Category'), + ), + migrations.AddField( + model_name='course', + name='coordenator', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='course_coordenator', to=settings.AUTH_USER_MODEL, verbose_name='Coordenator'), + ), + migrations.AddField( + model_name='course', + name='professors', + field=models.ManyToManyField(related_name='courses_professors', to=settings.AUTH_USER_MODEL, verbose_name='Professors'), + ), + migrations.AddField( + model_name='course', + name='students', + field=models.ManyToManyField(blank=True, related_name='courses_student', to=settings.AUTH_USER_MODEL, verbose_name='Students'), + ), + migrations.AddField( + model_name='activityfile', + name='diet', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='files', to='courses.Activity'), + ), + migrations.AddField( + model_name='activity', + name='students', + field=models.ManyToManyField(related_name='activities', to=settings.AUTH_USER_MODEL, verbose_name='Students'), + ), + migrations.AddField( + model_name='activity', + name='topic', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='activities', to='courses.Topic', verbose_name='Topic'), + ), + ] diff --git a/courses/models.py b/courses/models.py index 0ebb727..ecee6df 100644 --- a/courses/models.py +++ b/courses/models.py @@ -38,13 +38,22 @@ class Course(models.Model): name = models.CharField(_('Name'), max_length = 100) slug = AutoSlugField(_("Slug"),populate_from='name',unique=True) - description = models.TextField(_('Content'), blank = True) + objectivies = models.TextField(_('Objectivies'), blank = True) + content = models.TextField(_('Content'), blank = True) + max_students = models.PositiveIntegerField(_('Maximum Students'), blank = True) + create_date = models.DateTimeField(_('Creation Date'), auto_now_add = True) + init_register_date = models.DateField(_('Register Date (Begin)')) + end_register_date = models.DateField(_('Register Date (End)')) + init_date = models.DateField(_('Begin of Course Date')) + end_date = models.DateField(_('End of Course Date')) category = models.ForeignKey(CourseCategory, verbose_name = _('Category'), related_name='course_category') coordenator = models.ForeignKey(User, verbose_name = _('Coordenator'), related_name ='course_coordenator', null = True) + professors = models.ManyToManyField(User,verbose_name=_('Professors'), related_name='courses_professors') + students = models.ManyToManyField(User,verbose_name=_('Students'), related_name='courses_student', blank = True) public = models.BooleanField(_('Public'), default=False) class Meta: - ordering = ('name',) + ordering = ('create_date','name') verbose_name = _('Course') verbose_name_plural = _('Courses') diff --git a/courses/templates/course/course_card.html b/courses/templates/course/course_card.html index 7fe0c71..5073786 100644 --- a/courses/templates/course/course_card.html +++ b/courses/templates/course/course_card.html @@ -52,7 +52,7 @@