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',
|
schedule = models.ManyToManyField(to='timetable.Timetable',
|
||||||
verbose_name=_('Establishment schedule'),
|
verbose_name=_('Establishment schedule'),
|
||||||
related_name='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')
|
awards = generic.GenericRelation(to='main.Award')
|
||||||
tags = generic.GenericRelation(to='main.MetaDataContent')
|
tags = generic.GenericRelation(to='main.MetaDataContent')
|
||||||
reviews = generic.GenericRelation(to='review.Review')
|
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')))
|
(SUNDAY, _('Sunday')))
|
||||||
|
|
||||||
weekday = models.PositiveSmallIntegerField(choices=WEEKDAYS_CHOICES, verbose_name=_('Week day'))
|
weekday = models.PositiveSmallIntegerField(choices=WEEKDAYS_CHOICES, verbose_name=_('Week day'))
|
||||||
lunch_start = models.TimeField(verbose_name=_('Lunch start time'))
|
continuous_opening = models.BooleanField(verbose_name=_('Continuous opening'), default=False)
|
||||||
lunch_end = models.TimeField(verbose_name=_('Lunch end time'))
|
|
||||||
dinner_start = models.TimeField(verbose_name=_('Dinner start time'))
|
lunch_start = models.TimeField(verbose_name=_('Lunch start time'),
|
||||||
dinner_end = models.TimeField(verbose_name=_('Dinner end 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:
|
class Meta:
|
||||||
"""Meta class."""
|
"""Meta class."""
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,19 @@
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from timetable.models import Timetable
|
from timetable.models import Timetable
|
||||||
from establishment.models import Establishment
|
from establishment.models import Establishment
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class ScheduleRUDSerializer(serializers.ModelSerializer):
|
class ScheduleRUDSerializer(serializers.ModelSerializer):
|
||||||
"""Serializer for Establishment model."""
|
"""Serializer for Establishment model."""
|
||||||
weekday_display = serializers.CharField(source='get_weekday_display',
|
weekday_display = serializers.CharField(source='get_weekday_display',
|
||||||
read_only=True)
|
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:
|
class Meta:
|
||||||
"""Meta class."""
|
"""Meta class."""
|
||||||
|
|
@ -19,6 +26,9 @@ class ScheduleRUDSerializer(serializers.ModelSerializer):
|
||||||
'lunch_end',
|
'lunch_end',
|
||||||
'dinner_start',
|
'dinner_start',
|
||||||
'dinner_end',
|
'dinner_end',
|
||||||
|
'opening_at',
|
||||||
|
'closed_at',
|
||||||
|
'continuous_opening',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -35,22 +45,38 @@ class ScheduleCreateSerializer(ScheduleRUDSerializer):
|
||||||
|
|
||||||
def validate(self, attrs):
|
def validate(self, attrs):
|
||||||
"""Override validate method"""
|
"""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')\
|
establishment_pk = self.context.get('request')\
|
||||||
.parser_context.get('view')\
|
.parser_context.get('view')\
|
||||||
.kwargs.get('pk')
|
.kwargs.get('pk')
|
||||||
|
|
||||||
|
# Check if exists establishment.
|
||||||
establishment_qs = Establishment.objects.filter(pk=establishment_pk)
|
establishment_qs = Establishment.objects.filter(pk=establishment_pk)
|
||||||
if not establishment_qs.exists():
|
if not establishment_qs.exists():
|
||||||
# todo: replace on appropriate exception
|
raise serializers.ValidationError({'detail': _('Establishment not found.')})
|
||||||
raise serializers.ValidationError()
|
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)
|
schedule_qs = establishment.schedule.filter(weekday=weekday)
|
||||||
if schedule_qs.exists():
|
if schedule_qs.exists():
|
||||||
schedule_qs.delete()
|
schedule_qs.delete()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user