diff --git a/amadeus/settings.py b/amadeus/settings.py index aae1913..0448ebf 100644 --- a/amadeus/settings.py +++ b/amadeus/settings.py @@ -58,6 +58,7 @@ INSTALLED_APPS = [ 'log', 'categories', 'subjects', + 'students_group', 'topics', 'mailsender', 'security', diff --git a/amadeus/urls.py b/amadeus/urls.py index 157e24c..3a2a335 100644 --- a/amadeus/urls.py +++ b/amadeus/urls.py @@ -27,6 +27,7 @@ urlpatterns = [ url(r'^$', index, name = 'home'), url(r'^categories/', include('categories.urls', namespace = 'categories')), url(r'^subjects/', include('subjects.urls', namespace = 'subjects')), + url(r'^groups/', include('students_group.urls', namespace = 'groups')), url(r'^topics/', include('topics.urls', namespace = 'topics')), url(r'^mailsender/', include('mailsender.urls', namespace = 'mailsender')), url(r'^security/', include('security.urls', namespace = 'security')), diff --git a/categories/migrations/0007_auto_20170118_1711.py b/categories/migrations/0007_auto_20170118_1711.py new file mode 100644 index 0000000..8c87d11 --- /dev/null +++ b/categories/migrations/0007_auto_20170118_1711.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10 on 2017-01-18 20:11 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('categories', '0006_auto_20170102_1856'), + ] + + operations = [ + migrations.AlterField( + model_name='category', + name='coordinators', + field=models.ManyToManyField(blank=True, related_name='Coordenadores', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/students_group/__init__.py b/students_group/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/students_group/__init__.py diff --git a/students_group/admin.py b/students_group/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/students_group/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/students_group/apps.py b/students_group/apps.py new file mode 100644 index 0000000..69985c7 --- /dev/null +++ b/students_group/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class StudentsGroupConfig(AppConfig): + name = 'students_group' diff --git a/students_group/forms.py b/students_group/forms.py new file mode 100644 index 0000000..d2fc2ca --- /dev/null +++ b/students_group/forms.py @@ -0,0 +1,36 @@ +# coding=utf-8 +from django import forms +from django.utils.translation import ugettext_lazy as _ + +from .models import StudentsGroup + +class StudentsGroupForm(forms.ModelForm): + subject = None + + def __init__(self, *args, **kwargs): + super(StudentsGroupForm, self).__init__(*args, **kwargs) + + self.subject = kwargs['initial'].get('subject', None) + + def clean_name(self): + name = self.cleaned_data.get('name', '') + + if self.instance.id: + same_name = self.subject.group_subject.filter(name__unaccent__iexact = name).exclude(id = self.instance.id).count() + else: + same_name = self.subject.group_subject.filter(name__unaccent__iexact = name).count() + + if same_name > 0: + self._errors['name'] = [_('This subject already has a group with this name')] + + return ValueError + + return name + + class Meta: + model = StudentsGroup + fields = ['name', 'description', 'participants'] + widgets = { + 'description': forms.Textarea, + 'participants': forms.SelectMultiple, + } \ No newline at end of file diff --git a/students_group/migrations/0001_initial.py b/students_group/migrations/0001_initial.py new file mode 100644 index 0000000..06c66df --- /dev/null +++ b/students_group/migrations/0001_initial.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10 on 2017-01-18 20:11 +from __future__ import unicode_literals + +import autoslug.fields +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), + ('subjects', '0012_auto_20170112_1408'), + ] + + operations = [ + migrations.CreateModel( + name='StudentsGroup', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200, 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')), + ('create_date', models.DateTimeField(auto_now_add=True, verbose_name='Create Date')), + ('last_update', models.DateTimeField(auto_now=True, verbose_name='Last Update')), + ('participants', models.ManyToManyField(blank=True, related_name='group_participants', to=settings.AUTH_USER_MODEL, verbose_name='Participants')), + ('subject', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='group_subject', to='subjects.Subject', verbose_name='Subject')), + ], + options={ + 'verbose_name': 'Students Group', + 'verbose_name_plural': 'Students Groups', + }, + ), + ] diff --git a/students_group/migrations/__init__.py b/students_group/migrations/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/students_group/migrations/__init__.py diff --git a/students_group/models.py b/students_group/models.py new file mode 100644 index 0000000..9a650db --- /dev/null +++ b/students_group/models.py @@ -0,0 +1,22 @@ +from django.db import models +from autoslug.fields import AutoSlugField +from django.utils.translation import ugettext_lazy as _ + +from subjects.models import Subject +from users.models import User + +class StudentsGroup(models.Model): + name = models.CharField(_('Name'), max_length = 200) + slug = AutoSlugField(_("Slug"), populate_from = 'name', unique = True) + description = models.TextField(_('Description'), blank = True) + subject = models.ForeignKey(Subject, verbose_name = _('Subject'), related_name = 'group_subject', null = True) + participants = models.ManyToManyField(User, verbose_name = _('Participants'), related_name = 'group_participants', blank = True) + create_date = models.DateTimeField(_('Create Date'), auto_now_add = True) + last_update = models.DateTimeField(_('Last Update'), auto_now = True) + + class Meta: + verbose_name = _('Students Group') + verbose_name_plural = _('Students Groups') + + def __str__(self): + return self.name \ No newline at end of file diff --git a/students_group/templates/groups/create.html b/students_group/templates/groups/create.html new file mode 100644 index 0000000..26c297a --- /dev/null +++ b/students_group/templates/groups/create.html @@ -0,0 +1,21 @@ +{% extends 'groups/index.html' %} + +{% load i18n django_bootstrap_breadcrumbs %} + +{% block breadcrumbs %} + {{ block.super }} + + {% trans 'Create Group' as bread %} + {% breadcrumb bread 'groups:create' subject.slug %} +{% endblock %} + +{% block content %} +