Commit 7522fcafc2eb15a5fbeca6237ba09e1127173c51

Authored by Matheus Lins
2 parents 36d375c3 b869409b

conflit

app/migrations/0001_initial.py
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 -# Generated by Django 1.10 on 2016-11-17 03:09 2 +
  3 +# Generated by Django 1.10 on 2016-11-15 22:36
3 from __future__ import unicode_literals 4 from __future__ import unicode_literals
4 5
5 from django.db import migrations, models 6 from django.db import migrations, models
@@ -23,7 +24,7 @@ class Migration(migrations.Migration): @@ -23,7 +24,7 @@ class Migration(migrations.Migration):
23 ('username', models.CharField(max_length=30, verbose_name='Email host username')), 24 ('username', models.CharField(max_length=30, verbose_name='Email host username')),
24 ('password', models.CharField(blank=True, max_length=30, verbose_name='Email host password')), 25 ('password', models.CharField(blank=True, max_length=30, verbose_name='Email host password')),
25 ('safe_conection', models.IntegerField(choices=[(0, 'No'), (1, 'TLS, if available'), (2, 'TLS'), (3, 'SSL')], default=0, verbose_name='Use safe conection')), 26 ('safe_conection', models.IntegerField(choices=[(0, 'No'), (1, 'TLS, if available'), (2, 'TLS'), (3, 'SSL')], default=0, verbose_name='Use safe conection')),
26 - ('default_from_email', models.EmailField(max_length=254, verbose_name='Default from email')), 27 + ('default_from_email', models.EmailField(blank=True, max_length=254, verbose_name='Default from email')),
27 ], 28 ],
28 options={ 29 options={
29 'verbose_name': 'Amadeus SMTP setting', 30 'verbose_name': 'Amadeus SMTP setting',
app/migrations/0002_auto_20161115_2054.py 0 → 100644
@@ -0,0 +1,20 @@ @@ -0,0 +1,20 @@
  1 +# -*- coding: utf-8 -*-
  2 +# Generated by Django 1.10 on 2016-11-15 23:54
  3 +from __future__ import unicode_literals
  4 +
  5 +from django.db import migrations, models
  6 +
  7 +
  8 +class Migration(migrations.Migration):
  9 +
  10 + dependencies = [
  11 + ('app', '0001_initial'),
  12 + ]
  13 +
  14 + operations = [
  15 + migrations.AlterField(
  16 + model_name='emailbackend',
  17 + name='default_from_email',
  18 + field=models.EmailField(max_length=254, verbose_name='Default from email'),
  19 + ),
  20 + ]
core/migrations/0001_initial.py
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 -# Generated by Django 1.10 on 2016-11-17 03:09 2 +
  3 +# Generated by Django 1.10 on 2016-11-15 22:36
3 from __future__ import unicode_literals 4 from __future__ import unicode_literals
4 5
5 import autoslug.fields 6 import autoslug.fields
core/migrations/0002_auto_20161115_1936.py 0 → 100644
@@ -0,0 +1,50 @@ @@ -0,0 +1,50 @@
  1 +# -*- coding: utf-8 -*-
  2 +# Generated by Django 1.10 on 2016-11-15 22:36
  3 +from __future__ import unicode_literals
  4 +
  5 +from django.conf import settings
  6 +from django.db import migrations, models
  7 +import django.db.models.deletion
  8 +
  9 +
  10 +class Migration(migrations.Migration):
  11 +
  12 + initial = True
  13 +
  14 + dependencies = [
  15 + migrations.swappable_dependency(settings.AUTH_USER_MODEL),
  16 + ('core', '0001_initial'),
  17 + ]
  18 +
  19 + operations = [
  20 + migrations.AddField(
  21 + model_name='notification',
  22 + name='actor',
  23 + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='notification_Performer', to=settings.AUTH_USER_MODEL, verbose_name='Performer'),
  24 + ),
  25 + migrations.AddField(
  26 + model_name='notification',
  27 + name='user',
  28 + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notification_Actor', to=settings.AUTH_USER_MODEL, verbose_name='User'),
  29 + ),
  30 + migrations.AddField(
  31 + model_name='log',
  32 + name='action_resource',
  33 + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Action_Resource', verbose_name='Action_Resource'),
  34 + ),
  35 + migrations.AddField(
  36 + model_name='log',
  37 + name='user',
  38 + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Actor'),
  39 + ),
  40 + migrations.AddField(
  41 + model_name='action_resource',
  42 + name='action',
  43 + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Action', verbose_name='Action_Applied'),
  44 + ),
  45 + migrations.AddField(
  46 + model_name='action_resource',
  47 + name='resource',
  48 + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Resource', verbose_name='Resource'),
  49 + ),
  50 + ]
courses/context_processors.py
@@ -8,9 +8,6 @@ def courses(request): @@ -8,9 +8,6 @@ def courses(request):
8 if request.user.is_staff: 8 if request.user.is_staff:
9 context['courses_list'] = Course.objects.all() 9 context['courses_list'] = Course.objects.all()
10 else: 10 else:
11 - #context['courses_list'] =  
12 - context['courses_list'] = Course.objects.all()  
13 -  
14 - #context['courses_list'] = Course.objects.filter(professors__in = [request.user]) 11 + context['courses_list'] = Course.objects.filter(professors__in = [request.user])
15 return context 12 return context
16 return context 13 return context
courses/forms.py
@@ -18,30 +18,64 @@ class CategoryCourseForm(forms.ModelForm): @@ -18,30 +18,64 @@ class CategoryCourseForm(forms.ModelForm):
18 18
19 19
20 class CourseForm(forms.ModelForm): 20 class CourseForm(forms.ModelForm):
21 - 21 + def clean_end_register_date(self):
  22 + init_register_date = self.cleaned_data['init_register_date']
  23 + end_register_date = self.cleaned_data['end_register_date']
  24 +
  25 + if init_register_date and end_register_date and end_register_date < init_register_date:
  26 + raise forms.ValidationError(_('The end date may not be before the start date.'))
  27 + return end_register_date
  28 +
  29 + def clean_init_date(self):
  30 + end_register_date = self.cleaned_data['end_register_date']
  31 + init_date = self.cleaned_data['init_date']
  32 +
  33 + if end_register_date and init_date and init_date <= end_register_date:
  34 + raise forms.ValidationError(_('The course start date must be after the end of registration.'))
  35 + return init_date
  36 +
  37 + def clean_end_date(self):
  38 + init_date = self.cleaned_data['init_date']
  39 + end_date = self.cleaned_data['end_date']
  40 +
  41 + if init_date and end_date and end_date < init_date:
  42 + raise forms.ValidationError(_('The end date may not be before the start date.'))
  43 + return end_date
22 44
23 45
24 class Meta: 46 class Meta:
25 model = Course 47 model = Course
26 - fields = ('name', 'description',  
27 - 'category', 'coordenator','public') 48 + fields = ('name', 'objectivies', 'content', 'max_students', 'init_register_date', 'end_register_date',
  49 + 'init_date', 'end_date', 'category', 'coordenator','public')
28 labels = { 50 labels = {
29 'name': _('Name'), 51 'name': _('Name'),
  52 + 'objectivies': _('Objectives'),
30 'content': _('Content'), 53 'content': _('Content'),
  54 + 'max_students': _('Number of studets maximum'),
  55 + 'init_register_date': _('Course registration start date'),
  56 + 'end_register_date': _('Course registration end date'),
  57 + 'init_date': _('Course start date'),
  58 + 'end_date': _('Course end date'),
31 'category': _('Category'), 59 'category': _('Category'),
32 'coordenator': _('Coordenator'), 60 'coordenator': _('Coordenator'),
33 'public':_('Public'), 61 'public':_('Public'),
34 } 62 }
35 help_texts = { 63 help_texts = {
36 'name': _('Course name'), 64 'name': _('Course name'),
  65 + 'objectivies': _('Course objective'),
37 'content': _('Course modules'), 66 'content': _('Course modules'),
  67 + 'max_students': _('Max number of students that a class can have'),
  68 + 'init_register_date': _('Date that starts the registration period of the course (dd/mm/yyyy)'),
  69 + 'end_register_date': _('Date that ends the registration period of the course (dd/mm/yyyy)'),
  70 + 'init_date': _('Date that the course starts (dd/mm/yyyy)'),
  71 + 'end_date': _('Date that the course ends (dd/mm/yyyy)'),
38 'category': _('CourseCategory which the course belongs'), 72 'category': _('CourseCategory which the course belongs'),
39 'coordenator': _('Course Coordenator'), 73 'coordenator': _('Course Coordenator'),
40 'public':_('To define if the course can be accessed by people not registered'), 74 'public':_('To define if the course can be accessed by people not registered'),
41 } 75 }
42 76
43 widgets = { 77 widgets = {
44 - 'category': forms.Select(), 78 + 'ategoy': forms.Select(),
45 'coordenator': forms.Select(), 79 'coordenator': forms.Select(),
46 'content': SummernoteWidget(), 80 'content': SummernoteWidget(),
47 'objectivies': SummernoteWidget(), 81 'objectivies': SummernoteWidget(),
@@ -49,31 +83,70 @@ class CourseForm(forms.ModelForm): @@ -49,31 +83,70 @@ class CourseForm(forms.ModelForm):
49 83
50 class UpdateCourseForm(CourseForm): 84 class UpdateCourseForm(CourseForm):
51 85
  86 + def clean_end_register_date(self):
  87 + init_register_date = self.cleaned_data['init_register_date']
  88 + end_register_date = self.cleaned_data['end_register_date']
  89 +
  90 + if init_register_date and end_register_date and end_register_date < init_register_date:
  91 + raise forms.ValidationError(_('The end date may not be before the start date.'))
  92 + return end_register_date
  93 +
  94 + def clean_init_date(self):
  95 + end_register_date = self.cleaned_data['end_register_date']
  96 + init_date = self.cleaned_data['init_date']
  97 +
  98 + if end_register_date and init_date and init_date <= end_register_date:
  99 + raise forms.ValidationError(_('The course start date must be after the end of registration.'))
  100 + return init_date
  101 +
  102 + def clean_end_date(self):
  103 + init_date = self.cleaned_data['init_date']
  104 + end_date = self.cleaned_data['end_date']
  105 +
  106 + if init_date and end_date and end_date < init_date:
  107 + raise forms.ValidationError(_('The end date may not be before the start date.'))
  108 + return end_date
  109 +
52 def __init__(self, *args, **kwargs): 110 def __init__(self, *args, **kwargs):
53 super(UpdateCourseForm, self).__init__(*args, **kwargs) 111 super(UpdateCourseForm, self).__init__(*args, **kwargs)
  112 + self.fields["students"].required = False
54 113
55 class Meta: 114 class Meta:
56 model = Course 115 model = Course
57 - fields = ('name', 'description',  
58 - 'category', 'coordenator','public') 116 + fields = ('name', 'objectivies', 'content', 'max_students', 'init_register_date', 'end_register_date',
  117 + 'init_date', 'end_date', 'category','students', 'coordenator','public')
59 labels = { 118 labels = {
60 'name': _('Name'), 119 'name': _('Name'),
61 - 'description': _('Description'), 120 + 'objectivies': _('Objectives'),
  121 + 'content': _('Content'),
  122 + 'max_students': _('Number of studets maximum'),
  123 + 'init_register_date': _('Course registration start date'),
  124 + 'end_register_date': _('Course registration end date'),
  125 + 'init_date': _('Course start date'),
  126 + 'end_date': _('Course end date'),
62 'category': _('Category'), 127 'category': _('Category'),
63 'coordenator': _('Coordenator'), 128 'coordenator': _('Coordenator'),
  129 + 'students': _('Student'),
64 'public':_('Public'), 130 'public':_('Public'),
65 } 131 }
66 help_texts = { 132 help_texts = {
67 'name': _('Course name'), 133 'name': _('Course name'),
68 - 'description': _('Description about the course'), 134 + 'objectivies': _('Course objective'),
  135 + 'content': _('Course modules'),
  136 + 'max_students': _('Max number of students that a class can have'),
  137 + 'init_register_date': _('Date that starts the registration period of the course (dd/mm/yyyy)'),
  138 + 'end_register_date': _('Date that ends the registration period of the course (dd/mm/yyyy)'),
  139 + 'init_date': _('Date that the course starts (dd/mm/yyyy)'),
  140 + 'end_date': _('Date that the course ends (dd/mm/yyyy)'),
69 'category': _('CourseCategory which the course belongs'), 141 'category': _('CourseCategory which the course belongs'),
70 'coordenator': _('Course Coordenator'), 142 'coordenator': _('Course Coordenator'),
  143 + 'students': _("Course's Students"),
71 'public':_('To define if the course can be accessed by people not registered'), 144 'public':_('To define if the course can be accessed by people not registered'),
72 } 145 }
73 widgets = { 146 widgets = {
74 - 'category': forms.Select(), 147 + 'categoy': forms.Select(),
75 'coordenator': forms.Select(), 148 'coordenator': forms.Select(),
76 - 'description': SummernoteWidget(), 149 + 'content': SummernoteWidget(),
77 'objectivies': SummernoteWidget(), 150 'objectivies': SummernoteWidget(),
78 } 151 }
79 152
courses/migrations/0001_initial.py
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 -# Generated by Django 1.10 on 2016-11-17 03:09 2 +
  3 +# Generated by Django 1.10 on 2016-11-15 22:36
3 from __future__ import unicode_literals 4 from __future__ import unicode_literals
4 5
5 import autoslug.fields 6 import autoslug.fields
@@ -57,13 +58,20 @@ class Migration(migrations.Migration): @@ -57,13 +58,20 @@ class Migration(migrations.Migration):
57 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 58 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
58 ('name', models.CharField(max_length=100, verbose_name='Name')), 59 ('name', models.CharField(max_length=100, verbose_name='Name')),
59 ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='name', unique=True, verbose_name='Slug')), 60 ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='name', unique=True, verbose_name='Slug')),
60 - ('description', models.TextField(blank=True, verbose_name='Content')), 61 + ('objectivies', models.TextField(blank=True, verbose_name='Objectivies')),
  62 + ('content', models.TextField(blank=True, verbose_name='Content')),
  63 + ('max_students', models.PositiveIntegerField(blank=True, verbose_name='Maximum Students')),
  64 + ('create_date', models.DateTimeField(auto_now_add=True, verbose_name='Creation Date')),
  65 + ('init_register_date', models.DateField(verbose_name='Register Date (Begin)')),
  66 + ('end_register_date', models.DateField(verbose_name='Register Date (End)')),
  67 + ('init_date', models.DateField(verbose_name='Begin of Course Date')),
  68 + ('end_date', models.DateField(verbose_name='End of Course Date')),
61 ('public', models.BooleanField(default=False, verbose_name='Public')), 69 ('public', models.BooleanField(default=False, verbose_name='Public')),
62 ], 70 ],
63 options={ 71 options={
64 'verbose_name': 'Course', 72 'verbose_name': 'Course',
65 - 'ordering': ('name',),  
66 'verbose_name_plural': 'Courses', 73 'verbose_name_plural': 'Courses',
  74 + 'ordering': ('create_date', 'name'),
67 }, 75 },
68 ), 76 ),
69 migrations.CreateModel( 77 migrations.CreateModel(
@@ -121,8 +129,8 @@ class Migration(migrations.Migration): @@ -121,8 +129,8 @@ class Migration(migrations.Migration):
121 ], 129 ],
122 options={ 130 options={
123 'verbose_name': 'Subject', 131 'verbose_name': 'Subject',
124 - 'ordering': ('create_date', 'name'),  
125 'verbose_name_plural': 'Subjects', 132 'verbose_name_plural': 'Subjects',
  133 + 'ordering': ('create_date', 'name'),
126 }, 134 },
127 ), 135 ),
128 migrations.CreateModel( 136 migrations.CreateModel(
@@ -153,8 +161,8 @@ class Migration(migrations.Migration): @@ -153,8 +161,8 @@ class Migration(migrations.Migration):
153 ], 161 ],
154 options={ 162 options={
155 'verbose_name': 'Topic', 163 'verbose_name': 'Topic',
156 - 'ordering': ('create_date', 'name'),  
157 'verbose_name_plural': 'Topics', 164 'verbose_name_plural': 'Topics',
  165 + 'ordering': ('create_date', 'name'),
158 }, 166 },
159 ), 167 ),
160 ] 168 ]
courses/migrations/0002_auto_20161115_1936.py 0 → 100644
@@ -0,0 +1,85 @@ @@ -0,0 +1,85 @@
  1 +# -*- coding: utf-8 -*-
  2 +# Generated by Django 1.10 on 2016-11-15 22:36
  3 +from __future__ import unicode_literals
  4 +
  5 +from django.conf import settings
  6 +from django.db import migrations, models
  7 +import django.db.models.deletion
  8 +
  9 +
  10 +class Migration(migrations.Migration):
  11 +
  12 + initial = True
  13 +
  14 + dependencies = [
  15 + ('courses', '0001_initial'),
  16 + migrations.swappable_dependency(settings.AUTH_USER_MODEL),
  17 + ]
  18 +
  19 + operations = [
  20 + migrations.AddField(
  21 + model_name='subject',
  22 + name='professors',
  23 + field=models.ManyToManyField(related_name='professors_subjects', to=settings.AUTH_USER_MODEL, verbose_name='Professors'),
  24 + ),
  25 + migrations.AddField(
  26 + model_name='subject',
  27 + name='students',
  28 + field=models.ManyToManyField(blank=True, related_name='subject_student', to=settings.AUTH_USER_MODEL, verbose_name='Students'),
  29 + ),
  30 + migrations.AddField(
  31 + model_name='material',
  32 + name='students',
  33 + field=models.ManyToManyField(related_name='materials', to=settings.AUTH_USER_MODEL, verbose_name='Students'),
  34 + ),
  35 + migrations.AddField(
  36 + model_name='material',
  37 + name='topic',
  38 + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='materials', to='courses.Topic', verbose_name='Topic'),
  39 + ),
  40 + migrations.AddField(
  41 + model_name='linkmaterial',
  42 + name='material',
  43 + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='material_link', to='courses.Material', verbose_name='Material'),
  44 + ),
  45 + migrations.AddField(
  46 + model_name='filematerial',
  47 + name='material',
  48 + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='material_file', to='courses.Material', verbose_name='Material'),
  49 + ),
  50 + migrations.AddField(
  51 + model_name='course',
  52 + name='category',
  53 + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='course_category', to='courses.CourseCategory', verbose_name='Category'),
  54 + ),
  55 + migrations.AddField(
  56 + model_name='course',
  57 + name='coordenator',
  58 + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='course_coordenator', to=settings.AUTH_USER_MODEL, verbose_name='Coordenator'),
  59 + ),
  60 + migrations.AddField(
  61 + model_name='course',
  62 + name='professors',
  63 + field=models.ManyToManyField(related_name='courses_professors', to=settings.AUTH_USER_MODEL, verbose_name='Professors'),
  64 + ),
  65 + migrations.AddField(
  66 + model_name='course',
  67 + name='students',
  68 + field=models.ManyToManyField(blank=True, related_name='courses_student', to=settings.AUTH_USER_MODEL, verbose_name='Students'),
  69 + ),
  70 + migrations.AddField(
  71 + model_name='activityfile',
  72 + name='diet',
  73 + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='files', to='courses.Activity'),
  74 + ),
  75 + migrations.AddField(
  76 + model_name='activity',
  77 + name='students',
  78 + field=models.ManyToManyField(related_name='activities', to=settings.AUTH_USER_MODEL, verbose_name='Students'),
  79 + ),
  80 + migrations.AddField(
  81 + model_name='activity',
  82 + name='topic',
  83 + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='activities', to='courses.Topic', verbose_name='Topic'),
  84 + ),
  85 + ]
courses/models.py
@@ -38,13 +38,22 @@ class Course(models.Model): @@ -38,13 +38,22 @@ class Course(models.Model):
38 38
39 name = models.CharField(_('Name'), max_length = 100) 39 name = models.CharField(_('Name'), max_length = 100)
40 slug = AutoSlugField(_("Slug"),populate_from='name',unique=True) 40 slug = AutoSlugField(_("Slug"),populate_from='name',unique=True)
41 - description = models.TextField(_('Content'), blank = True) 41 + objectivies = models.TextField(_('Objectivies'), blank = True)
  42 + content = models.TextField(_('Content'), blank = True)
  43 + max_students = models.PositiveIntegerField(_('Maximum Students'), blank = True)
  44 + create_date = models.DateTimeField(_('Creation Date'), auto_now_add = True)
  45 + init_register_date = models.DateField(_('Register Date (Begin)'))
  46 + end_register_date = models.DateField(_('Register Date (End)'))
  47 + init_date = models.DateField(_('Begin of Course Date'))
  48 + end_date = models.DateField(_('End of Course Date'))
42 category = models.ForeignKey(CourseCategory, verbose_name = _('Category'), related_name='course_category') 49 category = models.ForeignKey(CourseCategory, verbose_name = _('Category'), related_name='course_category')
43 coordenator = models.ForeignKey(User, verbose_name = _('Coordenator'), related_name ='course_coordenator', null = True) 50 coordenator = models.ForeignKey(User, verbose_name = _('Coordenator'), related_name ='course_coordenator', null = True)
  51 + professors = models.ManyToManyField(User,verbose_name=_('Professors'), related_name='courses_professors')
  52 + students = models.ManyToManyField(User,verbose_name=_('Students'), related_name='courses_student', blank = True)
44 public = models.BooleanField(_('Public'), default=False) 53 public = models.BooleanField(_('Public'), default=False)
45 54
46 class Meta: 55 class Meta:
47 - ordering = ('name',) 56 + ordering = ('create_date','name')
48 verbose_name = _('Course') 57 verbose_name = _('Course')
49 verbose_name_plural = _('Courses') 58 verbose_name_plural = _('Courses')
50 59
courses/permissions.py
@@ -6,10 +6,10 @@ def view_topic(role, user, topic): @@ -6,10 +6,10 @@ def view_topic(role, user, topic):
6 if (role == SystemAdmin): 6 if (role == SystemAdmin):
7 return True 7 return True
8 8
9 - if user in topic.subject.professors.all(): 9 + if (user in topic.subject.course.professors.all() and user in topic.subject.professors.all()):
10 return True 10 return True
11 11
12 - if user in topic.subject.students.all(): 12 + if (user in topic.subject.course.students.all() and user in topic.subject.students.all()):
13 return True 13 return True
14 14
15 return False 15 return False
@@ -29,10 +29,10 @@ def view_subject(role, user, subject): @@ -29,10 +29,10 @@ def view_subject(role, user, subject):
29 if (role == SystemAdmin): 29 if (role == SystemAdmin):
30 return True 30 return True
31 31
32 - if user in subject.professors.all(): 32 + if (user in subject.course.professors.all() and user in subject.professors.all()):
33 return True 33 return True
34 34
35 - if user in subject.students.all(): 35 + if (user in subject.course.students.all() and user in subject.students.all()):
36 return True 36 return True
37 37
38 return False 38 return False
courses/templates/course/course_card.html
@@ -35,14 +35,21 @@ @@ -35,14 +35,21 @@
35 <div class="panel-body"> 35 <div class="panel-body">
36 <p><b>{% trans 'Course Name' %}: </b>{{course.name}}</p> 36 <p><b>{% trans 'Course Name' %}: </b>{{course.name}}</p>
37 <p><b>{% trans 'Coordenator' %}: </b>{{course.coordenator}}</p> 37 <p><b>{% trans 'Coordenator' %}: </b>{{course.coordenator}}</p>
38 - 38 + <p><b>{% trans 'Professor' %}: </b>{{course.professors.all.0}}</p>
39 <p> 39 <p>
40 <b>{% trans 'Description' %}:</b> 40 <b>{% trans 'Description' %}:</b>
41 <i> 41 <i>
42 - {{course.description | safe }} 42 + {{course.content | safe }}
43 </i> 43 </i>
44 </p> 44 </p>
45 - 45 + <div class="row">
  46 + <div class="col-xs-6 col-md-6 data_register_course">
  47 + <p><b>{% trans 'Init register' %}: </b>{{course.init_register_date}}</p>
  48 + </div>
  49 + <div class="col-xs-6 col-md-6 data_register_course">
  50 + <p><b>{% trans 'End register' %}: </b>{{course.end_register_date}}</p>
  51 + </div>
  52 + </div>
46 </div> 53 </div>
47 </div> 54 </div>
48 </div> 55 </div>
@@ -52,7 +59,7 @@ @@ -52,7 +59,7 @@
52 <div class="modal-dialog" role="document"> 59 <div class="modal-dialog" role="document">
53 <div class="modal-content"> 60 <div class="modal-content">
54 <div class="modal-header"> 61 <div class="modal-header">
55 - <h4 class="modal-title">{% trans 'Replicate Course' %}</h4> 62 + <h4 class="modal-title">{% trans 'Repicate Course' %}</h4>
56 </div> 63 </div>
57 <div class="modal-body"> 64 <div class="modal-body">
58 <section> 65 <section>
courses/templates/course/index.html
@@ -52,9 +52,9 @@ @@ -52,9 +52,9 @@
52 </div> 52 </div>
53 <div id="{{category.slug}}" class="panel-collapse collapse"> 53 <div id="{{category.slug}}" class="panel-collapse collapse">
54 {% for course in category.course_category %} 54 {% for course in category.course_category %}
55 -  
56 - {% include "course/course_card.html" %}  
57 - 55 + {# {% if user in course.students.all or user in course.professors.all or user|has_role:'system_admin' %}#}
  56 + {% include "course/course_card.html" %}
  57 + {# {% endif %}#}
58 {% endfor %} 58 {% endfor %}
59 </div> 59 </div>
60 </div> 60 </div>
courses/templates/course/view.html
@@ -48,13 +48,21 @@ @@ -48,13 +48,21 @@
48 </div> 48 </div>
49 <div class="panel-body"> 49 <div class="panel-body">
50 <p><b>{% trans 'Coordinator' %}: </b>{{course.coordenator}}</p> 50 <p><b>{% trans 'Coordinator' %}: </b>{{course.coordenator}}</p>
  51 + <p><b>{% trans 'Teacher' %}: </b>{{course.professors.all.0}}</p>
51 <p> 52 <p>
52 <b>{% trans 'Description' %}:</b> 53 <b>{% trans 'Description' %}:</b>
53 <i> 54 <i>
54 - {{ course.description |safe }} 55 + {{ course.objectivies |safe }}
55 </i> 56 </i>
56 </p> 57 </p>
57 - 58 + <div class="row">
  59 + <div class="col-xs-6 col-md-6 data_register_course">
  60 + <p><b>{% trans 'Begin of Course Date' %}: </b>{{course.init_date}}</p>
  61 + </div>
  62 + <div class="col-xs-6 col-md-6 data_register_course">
  63 + <p><b>{% trans 'End of Course Date' %}: </b>{{course.end_date}}</p>
  64 + </div>
  65 + </div>
58 </div> 66 </div>
59 </div> 67 </div>
60 68
courses/templatetags/course_value_field.py
@@ -11,12 +11,28 @@ def value_field(course, field): @@ -11,12 +11,28 @@ def value_field(course, field):
11 value = "" 11 value = ""
12 if field == 'name': 12 if field == 'name':
13 value = course.name 13 value = course.name
  14 + elif field == 'objectivies':
  15 + value = course.objectivies
14 elif field == 'content': 16 elif field == 'content':
15 value = course.content 17 value = course.content
  18 + elif field == 'max_students':
  19 + value = course.max_students
  20 + elif field == 'init_register_date':
  21 + value = course.init_register_date
  22 + elif field == 'end_register_date':
  23 + value = course.end_register_date
  24 + elif field == 'init_date':
  25 + value = course.init_date
  26 + elif field == 'end_date':
  27 + value = course.end_date
16 elif field == 'coordenator': 28 elif field == 'coordenator':
17 value = course.coordenator 29 value = course.coordenator
18 elif field == 'category': 30 elif field == 'category':
19 value = course.category 31 value = course.category
  32 + elif field == 'professors':
  33 + value = course.professors.all()
  34 + elif field == 'students':
  35 + value = course.students.all()
20 elif field == 'public': 36 elif field == 'public':
21 value = course.public 37 value = course.public
22 38
courses/templatetags/custom_filters.py
@@ -8,8 +8,9 @@ def hide_subscribe_view_btn(user, subject): @@ -8,8 +8,9 @@ def hide_subscribe_view_btn(user, subject):
8 if not user is None: 8 if not user is None:
9 if user.is_authenticated: 9 if user.is_authenticated:
10 if has_role(user, 'student') and not user.is_staff: 10 if has_role(user, 'student') and not user.is_staff:
11 - if user in subject.students.all():  
12 - return True 11 + if user in subject.course.students.all():
  12 + if not user in subject.students.all():
  13 + return True
13 else: 14 else:
14 return True 15 return True
15 16
@@ -20,7 +21,7 @@ def show_subject_subscribe(user, subject): @@ -20,7 +21,7 @@ def show_subject_subscribe(user, subject):
20 if not user is None: 21 if not user is None:
21 if user.is_authenticated: 22 if user.is_authenticated:
22 if has_role(user, 'student') and not user.is_staff: 23 if has_role(user, 'student') and not user.is_staff:
23 - if not user in subject.students.all() and subject.show_subscribe: 24 + if not user in subject.students.all() and user in subject.course.students.all() and subject.show_subscribe:
24 return True 25 return True
25 26
26 return False 27 return False
courses/views.py
@@ -56,7 +56,7 @@ def course_category(list_courses): @@ -56,7 +56,7 @@ def course_category(list_courses):
56 if (cat): 56 if (cat):
57 categorys_courses.append(cat) 57 categorys_courses.append(cat)
58 58
59 - return categorys_courses 59 + return sorted(list(categorys_courses),key = lambda x:x.name)
60 60
61 class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): 61 class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView):
62 62
@@ -91,9 +91,13 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): @@ -91,9 +91,13 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView):
91 list_courses = None 91 list_courses = None
92 if has_role(self.request.user,'system_admin'): 92 if has_role(self.request.user,'system_admin'):
93 list_courses = self.get_queryset().order_by('name') 93 list_courses = self.get_queryset().order_by('name')
94 - else:  
95 - list_courses = self.get_queryset().all()  
96 - 94 + # categorys_courses = CourseCategory.objects.all()
  95 + elif has_role(self.request.user,'professor'):
  96 + list_courses = self.get_queryset().filter(professors__in = [self.request.user]).order_by('name')
  97 + # categorys_courses = CourseCategory.objects.filter(course_category__professors__name = self.request.user.name).distinct()
  98 + elif has_role(self.request.user, 'student'):
  99 + list_courses = self.get_queryset().filter(students__in = [self.request.user]).order_by('name')
  100 +
97 context['categorys_courses'] = course_category(list_courses) 101 context['categorys_courses'] = course_category(list_courses)
98 return context 102 return context
99 103
@@ -132,6 +136,7 @@ class AllCoursesView(LoginRequiredMixin, NotificationMixin, generic.ListView): @@ -132,6 +136,7 @@ class AllCoursesView(LoginRequiredMixin, NotificationMixin, generic.ListView):
132 list_courses = self.get_queryset() 136 list_courses = self.get_queryset()
133 137
134 context['categorys_courses'] = course_category(list_courses) 138 context['categorys_courses'] = course_category(list_courses)
  139 +
135 return context 140 return context
136 141
137 class CreateCourseView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMixin, generic.edit.CreateView): 142 class CreateCourseView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMixin, generic.edit.CreateView):
@@ -357,6 +362,10 @@ class CourseView(LogMixin, NotificationMixin, generic.DetailView): @@ -357,6 +362,10 @@ class CourseView(LogMixin, NotificationMixin, generic.DetailView):
357 362
358 if has_role(self.request.user,'system_admin'): 363 if has_role(self.request.user,'system_admin'):
359 courses = Course.objects.all() 364 courses = Course.objects.all()
  365 + elif has_role(self.request.user,'professor'):
  366 + courses = self.request.user.courses_professors.all()
  367 + elif has_role(self.request.user, 'student'):
  368 + courses = self.request.user.courses_student.all()
360 else: 369 else:
361 courses = Course.objects.filter(public = True) 370 courses = Course.objects.filter(public = True)
362 371
@@ -673,7 +682,7 @@ class CreateTopicView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMi @@ -673,7 +682,7 @@ class CreateTopicView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMi
673 action = super(CreateTopicView, self).createorRetrieveAction("create Topic") 682 action = super(CreateTopicView, self).createorRetrieveAction("create Topic")
674 super(CreateTopicView, self).createNotification("Topic "+ self.object.name + " was created", 683 super(CreateTopicView, self).createNotification("Topic "+ self.object.name + " was created",
675 resource_name=self.object.name, resource_link= reverse('course:view_topic',args=[self.object.slug]), 684 resource_name=self.object.name, resource_link= reverse('course:view_topic',args=[self.object.slug]),
676 - actor=self.request.user, users = self.object.subject.students.all() ) 685 + actor=self.request.user, users = self.object.subject.course.students.all() )
677 686
678 self.log_context['topic_id'] = self.object.id 687 self.log_context['topic_id'] = self.object.id
679 self.log_context['topic_name'] = self.object.name 688 self.log_context['topic_name'] = self.object.name
@@ -777,7 +786,7 @@ class CreateSubjectView(LoginRequiredMixin, HasRoleMixin, LogMixin, Notification @@ -777,7 +786,7 @@ class CreateSubjectView(LoginRequiredMixin, HasRoleMixin, LogMixin, Notification
777 self.object.professors.add(self.request.user) 786 self.object.professors.add(self.request.user)
778 if self.object.visible: 787 if self.object.visible:
779 super(CreateSubjectView, self).createNotification( " created subject " + self.object.name, resource_name=self.object.name, 788 super(CreateSubjectView, self).createNotification( " created subject " + self.object.name, resource_name=self.object.name,
780 - resource_slug = self.object.slug, actor=self.request.user, 789 + resource_slug = self.object.slug, actor=self.request.user, users= self.object.course.students.all(),
781 resource_link = reverse('course:view_subject', args=[self.object.slug])) 790 resource_link = reverse('course:view_subject', args=[self.object.slug]))
782 791
783 self.log_context['subject_id'] = self.object.id 792 self.log_context['subject_id'] = self.object.id
@@ -890,7 +899,7 @@ class DeleteSubjectView(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.Dele @@ -890,7 +899,7 @@ class DeleteSubjectView(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.Dele
890 def subscribe_subject(request, slug): 899 def subscribe_subject(request, slug):
891 subject = get_object_or_404(Subject, slug = slug) 900 subject = get_object_or_404(Subject, slug = slug)
892 901
893 - if request.user not in subject.students.all(): 902 + if request.user in subject.course.students.all():
894 subject.students.add(request.user) 903 subject.students.add(request.user)
895 904
896 if request.user in subject.students.all(): 905 if request.user in subject.students.all():
@@ -1017,7 +1026,7 @@ class ReplicateTopicView (LoginRequiredMixin, HasRoleMixin, LogMixin, Notificati @@ -1017,7 +1026,7 @@ class ReplicateTopicView (LoginRequiredMixin, HasRoleMixin, LogMixin, Notificati
1017 action = super(ReplicateTopicView, self).createorRetrieveAction("create Topic") 1026 action = super(ReplicateTopicView, self).createorRetrieveAction("create Topic")
1018 super(ReplicateTopicView, self).createNotification("Topic "+ self.object.name + " was created", 1027 super(ReplicateTopicView, self).createNotification("Topic "+ self.object.name + " was created",
1019 resource_name=self.object.name, resource_link= reverse('course:view_topic',args=[self.object.slug]), 1028 resource_name=self.object.name, resource_link= reverse('course:view_topic',args=[self.object.slug]),
1020 - actor=self.request.user, users = self.object.subject.students.all() ) 1029 + actor=self.request.user, users = self.object.subject.course.students.all() )
1021 1030
1022 self.log_context['topic_id'] = self.object.id 1031 self.log_context['topic_id'] = self.object.id
1023 self.log_context['topic_name'] = self.object.name 1032 self.log_context['topic_name'] = self.object.name
@@ -1071,7 +1080,7 @@ class ReplicateSubjectView(LoginRequiredMixin, HasRoleMixin, LogMixin, Notificat @@ -1071,7 +1080,7 @@ class ReplicateSubjectView(LoginRequiredMixin, HasRoleMixin, LogMixin, Notificat
1071 self.object.professors.add(self.request.user) 1080 self.object.professors.add(self.request.user)
1072 if self.object.visible: 1081 if self.object.visible:
1073 super(ReplicateSubjectView, self).createNotification( " created subject " + self.object.name, resource_name=self.object.name, 1082 super(ReplicateSubjectView, self).createNotification( " created subject " + self.object.name, resource_name=self.object.name,
1074 - resource_slug = self.object.slug, actor=self.request.user, users= self.object.students.all(), 1083 + resource_slug = self.object.slug, actor=self.request.user, users= self.object.course.students.all(),
1075 resource_link = reverse('course:view_subject', args=[self.object.slug])) 1084 resource_link = reverse('course:view_subject', args=[self.object.slug]))
1076 1085
1077 self.log_context['subject_id'] = self.object.id 1086 self.log_context['subject_id'] = self.object.id
exam/migrations/0001_initial.py
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 -# Generated by Django 1.10 on 2016-11-17 03:09 2 +
  3 +# Generated by Django 1.10 on 2016-11-15 22:36
3 from __future__ import unicode_literals 4 from __future__ import unicode_literals
4 5
5 from django.db import migrations, models 6 from django.db import migrations, models
@@ -26,6 +27,7 @@ class Migration(migrations.Migration): @@ -26,6 +27,7 @@ class Migration(migrations.Migration):
26 'verbose_name': 'Answer', 27 'verbose_name': 'Answer',
27 'ordering': ('order',), 28 'ordering': ('order',),
28 'verbose_name_plural': 'Answers', 29 'verbose_name_plural': 'Answers',
  30 + 'ordering': ('order',),
29 }, 31 },
30 ), 32 ),
31 migrations.CreateModel( 33 migrations.CreateModel(
exam/migrations/0002_auto_20161115_1936.py 0 → 100644
@@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
  1 +# -*- coding: utf-8 -*-
  2 +# Generated by Django 1.10 on 2016-11-15 22:36
  3 +from __future__ import unicode_literals
  4 +
  5 +from django.conf import settings
  6 +from django.db import migrations, models
  7 +import django.db.models.deletion
  8 +
  9 +
  10 +class Migration(migrations.Migration):
  11 +
  12 + initial = True
  13 +
  14 + dependencies = [
  15 + migrations.swappable_dependency(settings.AUTH_USER_MODEL),
  16 + ('exam', '0001_initial'),
  17 + ]
  18 +
  19 + operations = [
  20 + migrations.AddField(
  21 + model_name='answersstudent',
  22 + name='student',
  23 + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='student', to=settings.AUTH_USER_MODEL, verbose_name='Student'),
  24 + ),
  25 + migrations.AddField(
  26 + model_name='answer',
  27 + name='exam',
  28 + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers', to='exam.Exam', verbose_name='Answers'),
  29 + ),
  30 + ]
exercise/migrations/0001_initial.py
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
  2 +<<<<<<< HEAD
2 # Generated by Django 1.10 on 2016-11-17 04:25 3 # Generated by Django 1.10 on 2016-11-17 04:25
  4 +=======
  5 +
  6 +# Generated by Django 1.10 on 2016-11-15 22:36
  7 +>>>>>>> b869409bd7972f90e6cd67f9456afc8a04b9fce3
3 from __future__ import unicode_literals 8 from __future__ import unicode_literals
4 9
5 from decimal import Decimal 10 from decimal import Decimal
files/migrations/0001_initial.py
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 -# Generated by Django 1.10 on 2016-11-17 03:09 2 +# Generated by Django 1.10 on 2016-11-15 22:36
3 from __future__ import unicode_literals 3 from __future__ import unicode_literals
4 4
5 from django.db import migrations, models 5 from django.db import migrations, models
@@ -27,8 +27,9 @@ class Migration(migrations.Migration): @@ -27,8 +27,9 @@ class Migration(migrations.Migration):
27 ], 27 ],
28 options={ 28 options={
29 'verbose_name': 'File', 29 'verbose_name': 'File',
30 - 'ordering': ('-id',), 30 +
31 'verbose_name_plural': 'Files', 31 'verbose_name_plural': 'Files',
  32 + 'ordering': ('-id',),
32 }, 33 },
33 bases=('courses.material',), 34 bases=('courses.material',),
34 ), 35 ),
files/migrations/0002_topicfile_professor.py
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 -# Generated by Django 1.10 on 2016-11-17 03:09 2 +
  3 +# Generated by Django 1.10 on 2016-11-15 22:36
3 from __future__ import unicode_literals 4 from __future__ import unicode_literals
4 5
5 from django.conf import settings 6 from django.conf import settings
forum/migrations/0001_initial.py
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 -# Generated by Django 1.10 on 2016-11-17 03:09 2 +
  3 +# Generated by Django 1.10 on 2016-11-15 22:36
3 from __future__ import unicode_literals 4 from __future__ import unicode_literals
4 5
5 from django.db import migrations, models 6 from django.db import migrations, models
forum/migrations/0002_auto_20161115_1936.py 0 → 100644
@@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
  1 +# -*- coding: utf-8 -*-
  2 +# Generated by Django 1.10 on 2016-11-15 22:36
  3 +from __future__ import unicode_literals
  4 +
  5 +from django.conf import settings
  6 +from django.db import migrations, models
  7 +import django.db.models.deletion
  8 +
  9 +
  10 +class Migration(migrations.Migration):
  11 +
  12 + initial = True
  13 +
  14 + dependencies = [
  15 + ('forum', '0001_initial'),
  16 + migrations.swappable_dependency(settings.AUTH_USER_MODEL),
  17 + ]
  18 +
  19 + operations = [
  20 + migrations.AddField(
  21 + model_name='postanswer',
  22 + name='user',
  23 + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Autor'),
  24 + ),
  25 + migrations.AddField(
  26 + model_name='post',
  27 + name='forum',
  28 + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='forum.Forum', verbose_name='Forum'),
  29 + ),
  30 + migrations.AddField(
  31 + model_name='post',
  32 + name='user',
  33 + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Autor'),
  34 + ),
  35 + ]
links/migrations/0001_initial.py
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 -# Generated by Django 1.10 on 2016-11-17 03:09 2 +# Generated by Django 1.10 on 2016-11-15 22:36
3 from __future__ import unicode_literals 3 from __future__ import unicode_literals
4 4
5 from django.db import migrations, models 5 from django.db import migrations, models
poll/migrations/0001_initial.py
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 -# Generated by Django 1.10 on 2016-11-17 03:09 2 +
  3 +# Generated by Django 1.10 on 2016-11-15 22:36
3 from __future__ import unicode_literals 4 from __future__ import unicode_literals
4 5
5 from django.db import migrations, models 6 from django.db import migrations, models
poll/migrations/0002_auto_20161115_1936.py 0 → 100644
@@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
  1 +# -*- coding: utf-8 -*-
  2 +# Generated by Django 1.10 on 2016-11-15 22:36
  3 +from __future__ import unicode_literals
  4 +
  5 +from django.conf import settings
  6 +from django.db import migrations, models
  7 +import django.db.models.deletion
  8 +
  9 +
  10 +class Migration(migrations.Migration):
  11 +
  12 + initial = True
  13 +
  14 + dependencies = [
  15 + migrations.swappable_dependency(settings.AUTH_USER_MODEL),
  16 + ('poll', '0001_initial'),
  17 + ]
  18 +
  19 + operations = [
  20 + migrations.AddField(
  21 + model_name='answersstudent',
  22 + name='student',
  23 + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers_stundent', to=settings.AUTH_USER_MODEL, verbose_name='Student'),
  24 + ),
  25 + migrations.AddField(
  26 + model_name='answer',
  27 + name='poll',
  28 + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers', to='poll.Poll', verbose_name='Answers'),
  29 + ),
  30 + ]
users/migrations/0001_initial.py
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 -# Generated by Django 1.10 on 2016-11-17 03:09 2 +
  3 +# Generated by Django 1.10 on 2016-11-15 22:36
3 from __future__ import unicode_literals 4 from __future__ import unicode_literals
4 5
5 import django.contrib.auth.models 6 import django.contrib.auth.models
@@ -30,14 +31,14 @@ class Migration(migrations.Migration): @@ -30,14 +31,14 @@ class Migration(migrations.Migration):
30 ('city', models.CharField(blank=True, max_length=90, verbose_name='City')), 31 ('city', models.CharField(blank=True, max_length=90, verbose_name='City')),
31 ('state', models.CharField(blank=True, max_length=30, verbose_name='State')), 32 ('state', models.CharField(blank=True, max_length=30, verbose_name='State')),
32 ('gender', models.CharField(choices=[('M', 'Male'), ('F', 'Female')], max_length=1, verbose_name='Gender')), 33 ('gender', models.CharField(choices=[('M', 'Male'), ('F', 'Female')], max_length=1, verbose_name='Gender')),
33 - ('image', models.ImageField(blank=True, null=True, upload_to='users/', verbose_name='Photo')),  
34 - ('birth_date', models.DateField(null=True, verbose_name='Birth Date')), 34 + ('image', models.ImageField(blank=True, null=True, upload_to='users/', verbose_name='Image')),
  35 + ('birth_date', models.DateField(verbose_name='Birth Date')),
35 ('phone', models.CharField(blank=True, max_length=30, verbose_name='Phone')), 36 ('phone', models.CharField(blank=True, max_length=30, verbose_name='Phone')),
36 - ('cpf', models.CharField(blank=True, max_length=15, null=True, verbose_name='CPF')), 37 + ('cpf', models.CharField(max_length=15, verbose_name='Cpf')),
37 ('type_profile', models.IntegerField(blank=True, choices=[(1, 'Professor'), (2, 'Student')], default=2, null=True, verbose_name='Type')), 38 ('type_profile', models.IntegerField(blank=True, choices=[(1, 'Professor'), (2, 'Student')], default=2, null=True, verbose_name='Type')),
38 ('titration', models.CharField(blank=True, max_length=50, null=True, verbose_name='Titration')), 39 ('titration', models.CharField(blank=True, max_length=50, null=True, verbose_name='Titration')),
39 ('year_titration', models.CharField(blank=True, max_length=4, null=True, verbose_name='Year of titration')), 40 ('year_titration', models.CharField(blank=True, max_length=4, null=True, verbose_name='Year of titration')),
40 - ('institution', models.CharField(blank=True, max_length=50, null=True, verbose_name='Institution')), 41 + ('institution', models.CharField(blank=True, max_length=50, null=True, verbose_name='Institution where he had titration')),
41 ('curriculum', models.FileField(blank=True, null=True, upload_to='users/curriculum/', verbose_name='Curriculum')), 42 ('curriculum', models.FileField(blank=True, null=True, upload_to='users/curriculum/', verbose_name='Curriculum')),
42 ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Create Date')), 43 ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Create Date')),
43 ('is_staff', models.BooleanField(default=False, verbose_name='Administrador')), 44 ('is_staff', models.BooleanField(default=False, verbose_name='Administrador')),
users/migrations/0002_auto_20161115_1941.py 0 → 100644
@@ -0,0 +1,20 @@ @@ -0,0 +1,20 @@
  1 +# -*- coding: utf-8 -*-
  2 +# Generated by Django 1.10 on 2016-11-15 22:41
  3 +from __future__ import unicode_literals
  4 +
  5 +from django.db import migrations, models
  6 +
  7 +
  8 +class Migration(migrations.Migration):
  9 +
  10 + dependencies = [
  11 + ('users', '0001_initial'),
  12 + ]
  13 +
  14 + operations = [
  15 + migrations.AlterField(
  16 + model_name='user',
  17 + name='birth_date',
  18 + field=models.DateField(null=True, verbose_name='Birth Date'),
  19 + ),
  20 + ]
users/migrations/0003_auto_20161115_2054.py 0 → 100644
@@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
  1 +# -*- coding: utf-8 -*-
  2 +# Generated by Django 1.10 on 2016-11-15 23:54
  3 +from __future__ import unicode_literals
  4 +
  5 +from django.db import migrations, models
  6 +
  7 +
  8 +class Migration(migrations.Migration):
  9 +
  10 + dependencies = [
  11 + ('users', '0002_auto_20161115_1941'),
  12 + ]
  13 +
  14 + operations = [
  15 + migrations.AlterField(
  16 + model_name='user',
  17 + name='cpf',
  18 + field=models.CharField(blank=True, max_length=15, null=True, verbose_name='CPF'),
  19 + ),
  20 + migrations.AlterField(
  21 + model_name='user',
  22 + name='image',
  23 + field=models.ImageField(blank=True, null=True, upload_to='users/', verbose_name='Photo'),
  24 + ),
  25 + migrations.AlterField(
  26 + model_name='user',
  27 + name='institution',
  28 + field=models.CharField(blank=True, max_length=50, null=True, verbose_name='Institution'),
  29 + ),
  30 + ]