gm-80: complete

This commit is contained in:
Anatoly 2019-09-19 14:30:32 +03:00
parent 38ba443b47
commit 09450a1ae5
4 changed files with 83 additions and 102 deletions

View File

@ -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'),
),
]

View 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'),
),
]

View File

@ -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."""

View File

@ -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():