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')))
|
||||
|
||||
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'),
|
||||
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)
|
||||
lunch_start = models.TimeField(verbose_name=_('Lunch start time'), null=True)
|
||||
lunch_end = models.TimeField(verbose_name=_('Lunch end time'), null=True)
|
||||
dinner_start = models.TimeField(verbose_name=_('Dinner start time'), null=True)
|
||||
dinner_end = models.TimeField(verbose_name=_('Dinner end time'), null=True)
|
||||
opening_at = models.TimeField(verbose_name=_('Opening time'), null=True)
|
||||
closed_at = models.TimeField(verbose_name=_('Closed time'), null=True)
|
||||
|
||||
class Meta:
|
||||
"""Meta class."""
|
||||
|
|
|
|||
|
|
@ -1,20 +1,25 @@
|
|||
"""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 rest_framework import serializers
|
||||
|
||||
from establishment.models import Establishment
|
||||
from timetable.models import Timetable
|
||||
|
||||
|
||||
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)
|
||||
|
||||
lunch_start = serializers.TimeField(required=False)
|
||||
lunch_end = serializers.TimeField(required=False)
|
||||
dinner_start = serializers.TimeField(required=False)
|
||||
dinner_end = serializers.TimeField(required=False)
|
||||
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:
|
||||
"""Meta class."""
|
||||
|
|
@ -28,9 +33,27 @@ class ScheduleRUDSerializer(serializers.ModelSerializer):
|
|||
'dinner_end',
|
||||
'opening_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):
|
||||
"""Serializer for Establishment model."""
|
||||
|
|
@ -43,39 +66,11 @@ class ScheduleCreateSerializer(ScheduleRUDSerializer):
|
|||
'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):
|
||||
"""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():
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user