Added supervision bill for student EDE

This commit is contained in:
alazo 2018-04-26 07:54:29 +02:00 committed by Claude Paroz
parent 5d620a228a
commit 5fc33f9b44
4 changed files with 75 additions and 2 deletions

View file

@ -13,7 +13,7 @@ from django.utils.html import format_html
from .models import (
Teacher, Option, Student, Section, Level, Klass, Corporation,
CorpContact, Domain, Period, Availability, Training, Course,
LogBookReason, LogBook, ExamEDESession
LogBookReason, LogBook, ExamEDESession, SupervisionBill
)
from .pdf import ChargeSheetPDF
@ -106,6 +106,11 @@ class TeacherAdmin(admin.ModelAdmin):
inlines = [LogBookInline]
class SupervisionBillInline(admin.TabularInline):
model = SupervisionBill
extra = 0
class StudentAdmin(admin.ModelAdmin):
list_display = ('__str__', 'pcode', 'city', 'klass', 'archived')
ordering = ('last_name', 'first_name')
@ -139,6 +144,14 @@ class StudentAdmin(admin.ModelAdmin):
}),
)
actions = ['archive']
inlines = [SupervisionBillInline]
def get_inline_instances(self, request, obj=None):
# SupervisionBillInline is only adequate for EDE students
if obj is None or obj.klass.section.name != 'EDE':
return []
return super().get_inline_instances(request, obj=obj)
def archive(self, request, queryset):
for student in queryset:
# Save each item individually to allow for custom save() logic.

View file

@ -0,0 +1,26 @@
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('stages', '0013_renamed_title_to_civility'),
]
operations = [
migrations.CreateModel(
name='SupervisionBill',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('period', models.SmallIntegerField(default=0, verbose_name='période')),
('date', models.DateField()),
('student', models.ForeignKey(on_delete=models.deletion.CASCADE, to='stages.Student', verbose_name='étudiant')),
('supervisor', models.ForeignKey(on_delete=models.deletion.CASCADE, to='stages.CorpContact', verbose_name='superviseur')),
],
options={
'ordering': ['date'],
'verbose_name': 'Facture de supervision',
'verbose_name_plural': 'Factures de supervision',
},
),
]

View file

@ -566,3 +566,17 @@ class Course(models.Model):
return '{0} - {1} - {2} - {3}'.format(
self.teacher, self.public, self.subject, self.period
)
class SupervisionBill(models.Model):
student = models.ForeignKey(Student, verbose_name='étudiant', on_delete=models.CASCADE)
supervisor = models.ForeignKey(CorpContact, verbose_name='superviseur', on_delete=models.CASCADE)
period = models.SmallIntegerField('période', default=0)
date = models.DateField()
class Meta:
verbose_name = 'Facture de supervision'
verbose_name_plural = 'Factures de supervision'
ordering = ['date']
def __str__(self):
return '{0} : {1}'.format(self.student.full_name, self.supervisor.full_name)

View file

@ -81,7 +81,7 @@ class StagesTest(TestCase):
Training.objects.create(
availability=av3, student=Student.objects.get(first_name="André"), referent=ref1,
)
cls.admin = User.objects.create_user(
cls.admin = User.objects.create_superuser(
'me', 'me@example.org', 'mepassword', first_name='Jean', last_name='Valjean',
)
@ -103,6 +103,26 @@ class StagesTest(TestCase):
response = self.client.get(reverse('general-export'))
self.assertEqual(response.status_code, 200)
def test_student_change_view(self):
klass_ede = Klass.objects.create(
name="2EDEps",
section=Section.objects.get(name='EDE'),
level=Level.objects.get(name='2')
)
student_ede = Student.objects.create(
first_name="Claire", last_name="Fontaine", birth_date="2000-01-02",
pcode="2000", city="Neuchâtel", klass=klass_ede
)
response = self.client.get(
reverse("admin:stages_student_change", args=(student_ede.pk,))
)
self.assertContains(response, "Factures de supervision")
student_non_ede = Student.objects.exclude(klass__section__name='EDE').first()
response = self.client.get(
reverse("admin:stages_student_change", args=(student_non_ede.pk,))
)
self.assertNotContains(response, "Factures de supervision")
def test_attribution_view(self):
response = self.client.get(reverse('attribution'))
# Section select