From 6aab7167a36434909688219676baee29d5dbbb67 Mon Sep 17 00:00:00 2001 From: Yoan Le Clanche Date: Wed, 23 Sep 2020 16:34:44 +0200 Subject: [PATCH] BBB rooms are now stored in jury model --- ...d_bbb_room__add_field_student_restrict.py} | 30 +++++++++++++++++-- teleforma/models/appointment.py | 27 +++++++++-------- .../templates/teleforma/appointments.html | 4 +-- teleforma/templates/teleforma/courses.html | 2 +- teleforma/views/appointment.py | 2 +- 5 files changed, 47 insertions(+), 18 deletions(-) rename teleforma/migrations/{0128_auto__add_field_student_restricted.py => 0129_auto__del_field_appointmentperiod_bbb_room__add_field_student_restrict.py} (97%) diff --git a/teleforma/migrations/0128_auto__add_field_student_restricted.py b/teleforma/migrations/0129_auto__del_field_appointmentperiod_bbb_room__add_field_student_restrict.py similarity index 97% rename from teleforma/migrations/0128_auto__add_field_student_restricted.py rename to teleforma/migrations/0129_auto__del_field_appointmentperiod_bbb_room__add_field_student_restrict.py index e7e6ba9f..f3776179 100644 --- a/teleforma/migrations/0128_auto__add_field_student_restricted.py +++ b/teleforma/migrations/0129_auto__del_field_appointmentperiod_bbb_room__add_field_student_restrict.py @@ -8,16 +8,38 @@ from django.db import models class Migration(SchemaMigration): def forwards(self, orm): + # Deleting field 'AppointmentPeriod.bbb_room' + db.delete_column('teleforma_appointment_period', 'bbb_room') + # Adding field 'Student.restricted' db.add_column('teleforma_student', 'restricted', self.gf('django.db.models.fields.BooleanField')(default=False), keep_default=False) + # Adding field 'AppointmentJury.bbb_room' + db.add_column('teleforma_appointment_jury', 'bbb_room', + self.gf('django.db.models.fields.URLField')(max_length=200, null=True, blank=True), + keep_default=False) + + + # Changing field 'AppointmentJury.address' + db.alter_column('teleforma_appointment_jury', 'address', self.gf('django.db.models.fields.TextField')(null=True)) def backwards(self, orm): + # Adding field 'AppointmentPeriod.bbb_room' + db.add_column('teleforma_appointment_period', 'bbb_room', + self.gf('django.db.models.fields.URLField')(max_length=200, null=True, blank=True), + keep_default=False) + # Deleting field 'Student.restricted' db.delete_column('teleforma_student', 'restricted') + # Deleting field 'AppointmentJury.bbb_room' + db.delete_column('teleforma_appointment_jury', 'bbb_room') + + + # Changing field 'AppointmentJury.address' + db.alter_column('teleforma_appointment_jury', 'address', self.gf('django.db.models.fields.TextField')(default=' ')) models = { 'auth.group': { @@ -96,17 +118,20 @@ class Migration(SchemaMigration): }, 'teleforma.appointmentjury': { 'Meta': {'ordering': "('id',)", 'object_name': 'AppointmentJury', 'db_table': "'teleforma_appointment_jury'"}, - 'address': ('django.db.models.fields.TextField', [], {}), + 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'bbb_room': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), 'slot': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jurys'", 'null': 'True', 'to': "orm['teleforma.AppointmentSlot']"}) }, 'teleforma.appointmentperiod': { 'Meta': {'ordering': "('id',)", 'object_name': 'AppointmentPeriod', 'db_table': "'teleforma_appointment_period'"}, - 'appointment_mail_text': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'appointment_mail_text': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'appointment_mail_text_distance': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), 'appointment_slot_size': ('django.db.models.fields.IntegerField', [], {'default': '40'}), 'book_delay': ('django.db.models.fields.IntegerField', [], {'default': '2'}), 'cancel_delay': ('django.db.models.fields.IntegerField', [], {'default': '2'}), + 'course': ('django.db.models.fields.related.ForeignKey', [], {'default': '19', 'to': "orm['teleforma.Course']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'}), 'enable_appointment': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'end': ('django.db.models.fields.DateField', [], {}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), @@ -119,6 +144,7 @@ class Migration(SchemaMigration): 'appointment_period': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'slots'", 'null': 'True', 'to': "orm['teleforma.AppointmentPeriod']"}), 'date': ('django.db.models.fields.DateField', [], {'null': 'True'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mode': ('django.db.models.fields.CharField', [], {'default': "'presentiel'", 'max_length': '20'}), 'nb': ('django.db.models.fields.IntegerField', [], {}), 'start': ('django.db.models.fields.TimeField', [], {}) }, diff --git a/teleforma/models/appointment.py b/teleforma/models/appointment.py index a0cdbcb8..25f9eabb 100644 --- a/teleforma/models/appointment.py +++ b/teleforma/models/appointment.py @@ -47,7 +47,7 @@ class AppointmentPeriod(Model): blank=True, null=True) appointment_slot_size = models.IntegerField("écart entre les créneaux d'inscription (minutes)", default=40) - bbb_room = models.URLField("salon bbb", help_text='Lien vers le salon BBB pour les inscriptions à distance (ex: https://bbb.parisson.com/b/yoa-mtc-a2e). La salle doit avoir été au préalable créé par un membre du jury sur https://bbb.parisson.com.', null=True, blank=True, max_length=200) + # bbb_room = models.URLField("salon bbb", help_text='Lien vers le salon BBB pour les inscriptions à distance (ex: https://bbb.parisson.com/b/yoa-mtc-a2e). La salle doit avoir été au préalable créé par un membre du jury sur https://bbb.parisson.com.', null=True, blank=True, max_length=200) def __unicode__(self): return self.name @@ -75,7 +75,7 @@ class AppointmentPeriod(Model): for slot in AppointmentSlot.objects.filter(appointment_period=self).order_by('start'): cache_key = '%s_%s_%s-%s' % (CACHE_KEY, self.id, slot.date, slot.mode) dayData = cache.get(cache_key) - # dayData = None + dayData = None slot_key = str(slot.date) + "-" + slot.mode if not dayData: slotData = {'instance':slot, @@ -248,9 +248,12 @@ class AppointmentSlot(Model): for i in range(self.nb): arrival = datetime.datetime.combine(self.date, self.start) + datetime.timedelta(minutes=i * size) - start = arrival + datetime.timedelta(minutes=60) - end = start + datetime.timedelta(minutes=size) - + if self.mode == 'distance': + start = arrival + end = start + datetime.timedelta(minutes=size) + else: + start = arrival + datetime.timedelta(minutes=60) + end = start + datetime.timedelta(minutes=size) slot_info = { 'slot_nb': i, 'start': start, @@ -291,7 +294,8 @@ class AppointmentJury(Model): verbose_name='creneau', null=True, blank=False) name = models.CharField(_('name'), max_length=255) - address = models.TextField("adresse") + address = models.TextField("adresse", null=True, blank=True) + bbb_room = models.URLField("salon bbb", help_text='Lien vers le salon BBB pour les inscriptions à distance (ex: https://bbb.parisson.com/b/yoa-mtc-a2e). La salle doit avoir été au préalable créé par un membre du jury sur https://bbb.parisson.com.', null=True, blank=True, max_length=200) # account = models.ForeignKey(User, verbose_name=_("User"), on_delete=models.SET_NULL, blank=True, null=True) @@ -333,7 +337,9 @@ class Appointment(Model): @property def start(self): - dt = datetime.datetime.combine(datetime.date.today(), self.arrival) + datetime.timedelta(minutes=60) + base = dt = datetime.datetime.combine(datetime.date.today(), self.arrival) + if self.slot.mode != 'distance': + dt = base + datetime.timedelta(minutes=60) return datetime.time(dt.hour, dt.minute, 0) @property @@ -345,7 +351,7 @@ class Appointment(Model): @property def arrival(self): """ - arrival hour is only used for 'presentiel' mode + arrival hour """ start = self.slot.start delta = self.slot_nb * self.appointment_period.appointment_slot_size @@ -354,10 +360,7 @@ class Appointment(Model): @property def real_date(self): - if self.slot.mode == 'distance': - start = self.start - else: - start = self.arrival + start = self.arrival return datetime.datetime.combine(self.day, start) @property diff --git a/teleforma/templates/teleforma/appointments.html b/teleforma/templates/teleforma/appointments.html index a30204a4..abb25967 100644 --- a/teleforma/templates/teleforma/appointments.html +++ b/teleforma/templates/teleforma/appointments.html @@ -285,10 +285,10 @@ {% for slot in groupslot.slots %} - + {{ slot.arrival|date:'H:i' }} - + {{ slot.start|date:'H:i' }} diff --git a/teleforma/templates/teleforma/courses.html b/teleforma/templates/teleforma/courses.html index 1ef1fbe5..c132848d 100644 --- a/teleforma/templates/teleforma/courses.html +++ b/teleforma/templates/teleforma/courses.html @@ -84,7 +84,7 @@

Vous avez rendez-vous aujourd'hui à {{ current_appointement.real_date|date:"H:i" }}
- +

{% endif %} diff --git a/teleforma/views/appointment.py b/teleforma/views/appointment.py index afa9f845..7c971c21 100644 --- a/teleforma/views/appointment.py +++ b/teleforma/views/appointment.py @@ -131,7 +131,7 @@ class Appointments(View): 'date': ap.real_date, 'student': ap.student, 'mode': ap.slot.mode, - 'bbb': ap.appointment_period.bbb_room, + 'bbb': ap.jury.bbb_room, 'main_text': main_text } # DEBUG # data['mto'] = "yoanl@pilotsystems.net" -- 2.39.5