gm-80: complete
This commit is contained in:
parent
540a819f94
commit
38ba443b47
19
apps/establishment/migrations/0022_establishment_schedule.py
Normal file
19
apps/establishment/migrations/0022_establishment_schedule.py
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Generated by Django 2.2.4 on 2019-09-18 14:37
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('timetable', '0001_initial'),
|
||||
('establishment', '0021_delete_establishmentschedule'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='establishment',
|
||||
name='schedule',
|
||||
field=models.ManyToManyField(related_name='schedule', to='timetable.Timetable', verbose_name='Establishment schedule'),
|
||||
),
|
||||
]
|
||||
|
|
@ -265,6 +265,10 @@ class Establishment(ProjectBaseMixin, ImageMixin, TranslatedFieldsMixin):
|
|||
schedule = models.ManyToManyField(to='timetable.Timetable',
|
||||
verbose_name=_('Establishment schedule'),
|
||||
related_name='schedule')
|
||||
# holidays_from = models.DateTimeField(verbose_name=_('Holidays from'),
|
||||
# help_text=_('Holidays closing date from'))
|
||||
# holidays_to = models.DateTimeField(verbose_name=_('Holidays to'),
|
||||
# help_text=_('Holidays closing date to'))
|
||||
awards = generic.GenericRelation(to='main.Award')
|
||||
tags = generic.GenericRelation(to='main.MetaDataContent')
|
||||
reviews = generic.GenericRelation(to='review.Review')
|
||||
|
|
|
|||
48
apps/timetable/migrations/0002_auto_20190919_0741.py
Normal file
48
apps/timetable/migrations/0002_auto_20190919_0741.py
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
# Generated by Django 2.2.4 on 2019-09-19 07:41
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('timetable', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='timetable',
|
||||
name='closed_at',
|
||||
field=models.TimeField(blank=True, default=None, null=True, verbose_name='Closed time'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='timetable',
|
||||
name='continuous_opening',
|
||||
field=models.BooleanField(default=False, verbose_name='Continuous opening'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='timetable',
|
||||
name='opening_at',
|
||||
field=models.TimeField(blank=True, default=None, null=True, verbose_name='Opening time'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='timetable',
|
||||
name='dinner_end',
|
||||
field=models.TimeField(blank=True, default=None, null=True, verbose_name='Dinner end time'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='timetable',
|
||||
name='dinner_start',
|
||||
field=models.TimeField(blank=True, default=None, null=True, verbose_name='Dinner start time'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='timetable',
|
||||
name='lunch_end',
|
||||
field=models.TimeField(blank=True, default=None, null=True, verbose_name='Lunch end time'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='timetable',
|
||||
name='lunch_start',
|
||||
field=models.TimeField(blank=True, default=None, null=True, verbose_name='Lunch start time'),
|
||||
),
|
||||
]
|
||||
|
|
@ -23,10 +23,22 @@ class Timetable(ProjectBaseMixin):
|
|||
(SUNDAY, _('Sunday')))
|
||||
|
||||
weekday = models.PositiveSmallIntegerField(choices=WEEKDAYS_CHOICES, verbose_name=_('Week day'))
|
||||
lunch_start = models.TimeField(verbose_name=_('Lunch start time'))
|
||||
lunch_end = models.TimeField(verbose_name=_('Lunch end time'))
|
||||
dinner_start = models.TimeField(verbose_name=_('Dinner start time'))
|
||||
dinner_end = models.TimeField(verbose_name=_('Dinner end time'))
|
||||
continuous_opening = models.BooleanField(verbose_name=_('Continuous opening'), default=False)
|
||||
|
||||
lunch_start = models.TimeField(verbose_name=_('Lunch start time'),
|
||||
blank=True, null=True, default=None)
|
||||
lunch_end = models.TimeField(verbose_name=_('Lunch end time'),
|
||||
blank=True, null=True, default=None)
|
||||
dinner_start = models.TimeField(verbose_name=_('Dinner start time'),
|
||||
blank=True, null=True, default=None)
|
||||
dinner_end = models.TimeField(verbose_name=_('Dinner end time'),
|
||||
blank=True, null=True, default=None)
|
||||
|
||||
# If continuous opening
|
||||
opening_at = models.TimeField(verbose_name=_('Opening time'),
|
||||
blank=True, null=True, default=None)
|
||||
closed_at = models.TimeField(verbose_name=_('Closed time'),
|
||||
blank=True, null=True, default=None)
|
||||
|
||||
class Meta:
|
||||
"""Meta class."""
|
||||
|
|
|
|||
|
|
@ -2,12 +2,19 @@
|
|||
from rest_framework import serializers
|
||||
from timetable.models import Timetable
|
||||
from establishment.models import Establishment
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class ScheduleRUDSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for Establishment model."""
|
||||
weekday_display = serializers.CharField(source='get_weekday_display',
|
||||
read_only=True)
|
||||
lunch_start = serializers.TimeField(required=False, allow_null=True)
|
||||
lunch_end = serializers.TimeField(required=False, allow_null=True)
|
||||
dinner_start = serializers.TimeField(required=False, allow_null=True)
|
||||
dinner_end = serializers.TimeField(required=False, allow_null=True)
|
||||
opening_at = serializers.TimeField(required=False, allow_null=True)
|
||||
closed_at = serializers.TimeField(required=False, allow_null=True)
|
||||
|
||||
class Meta:
|
||||
"""Meta class."""
|
||||
|
|
@ -19,6 +26,9 @@ class ScheduleRUDSerializer(serializers.ModelSerializer):
|
|||
'lunch_end',
|
||||
'dinner_start',
|
||||
'dinner_end',
|
||||
'opening_at',
|
||||
'closed_at',
|
||||
'continuous_opening',
|
||||
]
|
||||
|
||||
|
||||
|
|
@ -35,22 +45,38 @@ class ScheduleCreateSerializer(ScheduleRUDSerializer):
|
|||
|
||||
def validate(self, attrs):
|
||||
"""Override validate method"""
|
||||
return attrs
|
||||
# Validate by continuous_opening
|
||||
if attrs.get('continuous_opening'):
|
||||
for attr in attrs:
|
||||
if attr.startswith('lunch') or attr.startswith('dinner'):
|
||||
raise serializers.ValidationError(
|
||||
{'detail': _('Lunch or Dinner times should not be '
|
||||
'in request data with continuous opening.')})
|
||||
if not ('opening_at' in attrs) and ('closed_at' in attrs):
|
||||
raise serializers.ValidationError(
|
||||
{'detail': _('Opening or Closed times not in request data.')})
|
||||
else:
|
||||
if not (('lunch_start' in attrs) and ('lunch_end' in attrs) and
|
||||
('dinner_start' in attrs) and ('dinner_end' in attrs)):
|
||||
raise serializers.ValidationError(
|
||||
{'detail': _('Lunch or dinner times not in request data.')})
|
||||
|
||||
def create(self, validated_data):
|
||||
"""Override create method"""
|
||||
instance = super().create(validated_data)
|
||||
weekday = validated_data.get('weekday')
|
||||
establishment_pk = self.context.get('request')\
|
||||
.parser_context.get('view')\
|
||||
.kwargs.get('pk')
|
||||
|
||||
# Check if exists establishment.
|
||||
establishment_qs = Establishment.objects.filter(pk=establishment_pk)
|
||||
if not establishment_qs.exists():
|
||||
# todo: replace on appropriate exception
|
||||
raise serializers.ValidationError()
|
||||
raise serializers.ValidationError({'detail': _('Establishment not found.')})
|
||||
attrs['establishment'] = establishment_qs.first()
|
||||
return attrs
|
||||
|
||||
establishment = establishment_qs.first()
|
||||
def create(self, validated_data):
|
||||
"""Override create method"""
|
||||
establishment = validated_data.pop('establishment')
|
||||
weekday = validated_data.get('weekday')
|
||||
instance = super().create(validated_data)
|
||||
schedule_qs = establishment.schedule.filter(weekday=weekday)
|
||||
if schedule_qs.exists():
|
||||
schedule_qs.delete()
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user