gm-80: complete
This commit is contained in:
parent
38ba443b47
commit
09450a1ae5
|
|
@ -1,48 +0,0 @@
|
||||||
# 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'),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
43
apps/timetable/migrations/0002_auto_20190919_1124.py
Normal file
43
apps/timetable/migrations/0002_auto_20190919_1124.py
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
# Generated by Django 2.2.4 on 2019-09-19 11:24
|
||||||
|
|
||||||
|
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(null=True, verbose_name='Closed time'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='timetable',
|
||||||
|
name='opening_at',
|
||||||
|
field=models.TimeField(null=True, verbose_name='Opening time'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='timetable',
|
||||||
|
name='dinner_end',
|
||||||
|
field=models.TimeField(null=True, verbose_name='Dinner end time'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='timetable',
|
||||||
|
name='dinner_start',
|
||||||
|
field=models.TimeField(null=True, verbose_name='Dinner start time'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='timetable',
|
||||||
|
name='lunch_end',
|
||||||
|
field=models.TimeField(null=True, verbose_name='Lunch end time'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='timetable',
|
||||||
|
name='lunch_start',
|
||||||
|
field=models.TimeField(null=True, verbose_name='Lunch start time'),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -23,22 +23,13 @@ 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'))
|
||||||
continuous_opening = models.BooleanField(verbose_name=_('Continuous opening'), default=False)
|
|
||||||
|
|
||||||
lunch_start = models.TimeField(verbose_name=_('Lunch start time'),
|
lunch_start = models.TimeField(verbose_name=_('Lunch start time'), null=True)
|
||||||
blank=True, null=True, default=None)
|
lunch_end = models.TimeField(verbose_name=_('Lunch end time'), null=True)
|
||||||
lunch_end = models.TimeField(verbose_name=_('Lunch end time'),
|
dinner_start = models.TimeField(verbose_name=_('Dinner start time'), null=True)
|
||||||
blank=True, null=True, default=None)
|
dinner_end = models.TimeField(verbose_name=_('Dinner end time'), null=True)
|
||||||
dinner_start = models.TimeField(verbose_name=_('Dinner start time'),
|
opening_at = models.TimeField(verbose_name=_('Opening time'), null=True)
|
||||||
blank=True, null=True, default=None)
|
closed_at = models.TimeField(verbose_name=_('Closed time'), null=True)
|
||||||
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."""
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,25 @@
|
||||||
"""Serializer for app timetable"""
|
"""Serializer for app timetable"""
|
||||||
from rest_framework import serializers
|
|
||||||
from timetable.models import Timetable
|
|
||||||
from establishment.models import Establishment
|
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
from rest_framework import serializers
|
||||||
|
|
||||||
|
from establishment.models import Establishment
|
||||||
|
from timetable.models import Timetable
|
||||||
|
|
||||||
|
|
||||||
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)
|
lunch_start = serializers.TimeField(required=False)
|
||||||
dinner_start = serializers.TimeField(required=False, allow_null=True)
|
lunch_end = serializers.TimeField(required=False)
|
||||||
dinner_end = serializers.TimeField(required=False, allow_null=True)
|
dinner_start = serializers.TimeField(required=False)
|
||||||
opening_at = serializers.TimeField(required=False, allow_null=True)
|
dinner_end = serializers.TimeField(required=False)
|
||||||
closed_at = serializers.TimeField(required=False, allow_null=True)
|
opening_at = serializers.TimeField(required=False)
|
||||||
|
closed_at = serializers.TimeField(required=False)
|
||||||
|
|
||||||
|
NULLABLE_FIELDS = ['lunch_start', 'lunch_end', 'dinner_start',
|
||||||
|
'dinner_end', 'opening_at', 'closed_at']
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
"""Meta class."""
|
"""Meta class."""
|
||||||
|
|
@ -28,9 +33,27 @@ class ScheduleRUDSerializer(serializers.ModelSerializer):
|
||||||
'dinner_end',
|
'dinner_end',
|
||||||
'opening_at',
|
'opening_at',
|
||||||
'closed_at',
|
'closed_at',
|
||||||
'continuous_opening',
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def validate(self, attrs):
|
||||||
|
"""Override validate method"""
|
||||||
|
establishment_pk = self.context.get('request')\
|
||||||
|
.parser_context.get('view')\
|
||||||
|
.kwargs.get('pk')
|
||||||
|
|
||||||
|
# Check if establishment exists.
|
||||||
|
establishment_qs = Establishment.objects.filter(pk=establishment_pk)
|
||||||
|
if not establishment_qs.exists():
|
||||||
|
raise serializers.ValidationError({'detail': _('Establishment not found.')})
|
||||||
|
attrs['establishment'] = establishment_qs.first()
|
||||||
|
|
||||||
|
# If fields not in request data then put it in attrs with None value.
|
||||||
|
if not self.partial:
|
||||||
|
for field in self.NULLABLE_FIELDS:
|
||||||
|
if field not in attrs:
|
||||||
|
attrs.setdefault(field, None)
|
||||||
|
return attrs
|
||||||
|
|
||||||
|
|
||||||
class ScheduleCreateSerializer(ScheduleRUDSerializer):
|
class ScheduleCreateSerializer(ScheduleRUDSerializer):
|
||||||
"""Serializer for Establishment model."""
|
"""Serializer for Establishment model."""
|
||||||
|
|
@ -43,39 +66,11 @@ class ScheduleCreateSerializer(ScheduleRUDSerializer):
|
||||||
'weekday',
|
'weekday',
|
||||||
]
|
]
|
||||||
|
|
||||||
def validate(self, attrs):
|
|
||||||
"""Override validate method"""
|
|
||||||
# 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.')})
|
|
||||||
|
|
||||||
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():
|
|
||||||
raise serializers.ValidationError({'detail': _('Establishment not found.')})
|
|
||||||
attrs['establishment'] = establishment_qs.first()
|
|
||||||
return attrs
|
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
"""Override create method"""
|
"""Override create method"""
|
||||||
establishment = validated_data.pop('establishment')
|
establishment = validated_data.pop('establishment')
|
||||||
weekday = validated_data.get('weekday')
|
weekday = validated_data.get('weekday')
|
||||||
|
|
||||||
instance = super().create(validated_data)
|
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():
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user