diff --git a/chrono/agendas/migrations/0154_partial_booking_fields.py b/chrono/agendas/migrations/0154_partial_booking_fields.py new file mode 100644 index 00000000..1babac7c --- /dev/null +++ b/chrono/agendas/migrations/0154_partial_booking_fields.py @@ -0,0 +1,32 @@ +# Generated by Django 3.2.18 on 2023-05-31 08:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('agendas', '0153_event_index'), + ] + + operations = [ + migrations.AddField( + model_name='agenda', + name='partial_bookings', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='booking', + name='end_time', + field=models.TimeField(null=True), + ), + migrations.AddField( + model_name='booking', + name='start_time', + field=models.TimeField(null=True), + ), + migrations.AddField( + model_name='event', + name='end_time', + field=models.TimeField(null=True, verbose_name='End time'), + ), + ] diff --git a/chrono/agendas/models.py b/chrono/agendas/models.py index 4d7217ef..1edb3451 100644 --- a/chrono/agendas/models.py +++ b/chrono/agendas/models.py @@ -289,6 +289,7 @@ class Agenda(models.Model): null=True, blank=True, ) + partial_bookings = models.BooleanField(default=False) class Meta: ordering = ['label'] @@ -1934,6 +1935,7 @@ class Event(models.Model): agenda = models.ForeignKey(Agenda, on_delete=models.CASCADE) start_datetime = models.DateTimeField(_('Date/time')) + end_time = models.TimeField(_('End time'), null=True) recurrence_days = ArrayField( models.IntegerField(choices=WEEKDAY_CHOICES), verbose_name=_('Recurrence days'), @@ -2429,6 +2431,7 @@ class Event(models.Model): agenda=self.agenda, primary_event=self, slug=self.slug, + end_time=self.end_time, duration=self.duration, places=self.places, waiting_list_places=self.waiting_list_places, @@ -2665,6 +2668,9 @@ class Booking(models.Model): absence_callback_url = models.URLField(blank=True) color = models.ForeignKey(BookingColor, null=True, on_delete=models.SET_NULL, related_name='bookings') + start_time = models.TimeField(null=True) + end_time = models.TimeField(null=True) + @property def user_name(self): return ('%s %s' % (self.user_first_name, self.user_last_name)).strip() diff --git a/chrono/manager/forms.py b/chrono/manager/forms.py index dc078413..340f1156 100644 --- a/chrono/manager/forms.py +++ b/chrono/manager/forms.py @@ -1245,7 +1245,7 @@ class ImportEventsForm(forms.Form): raise ValidationError(_('Invalid file format. (duration, {event_no} event)'), i) try: - event.full_clean(exclude=['desk', 'meeting_type', 'primary_event']) + event.full_clean(exclude=['desk', 'meeting_type', 'primary_event', 'end_time']) except ValidationError as e: errors = [_('Invalid file format:\n')] for label, field_errors in e.message_dict.items():