added table EstablishmentSchedule, added application timetable, added table Timetable

This commit is contained in:
Anatoly 2019-08-29 17:59:09 +03:00
parent c9fdf9074e
commit 3aa1e92046
15 changed files with 201 additions and 1 deletions

View File

@ -24,3 +24,8 @@ class AwardInline(GenericTabularInline):
class EstablishmentAdmin(admin.ModelAdmin): class EstablishmentAdmin(admin.ModelAdmin):
"""Establishment admin.""" """Establishment admin."""
inlines = [AwardInline, ] inlines = [AwardInline, ]
@admin.register(models.EstablishmentSchedule)
class EstablishmentSchedule(admin.ModelAdmin):
"""Establishment schedule"""

View File

@ -0,0 +1,34 @@
# Generated by Django 2.2.4 on 2019-08-29 14:46
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('timetable', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('establishment', '0004_auto_20190828_1156'),
]
operations = [
migrations.CreateModel(
name='EstablishmentSchedule',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(default=django.utils.timezone.now, editable=False, verbose_name='Date created')),
('modified', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='establishmentschedule_records_created', to=settings.AUTH_USER_MODEL, verbose_name='created by')),
('establishment', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='schedule', to='establishment.Establishment', verbose_name='Establishment')),
('modified_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='establishmentschedule_records_modified', to=settings.AUTH_USER_MODEL, verbose_name='modified by')),
('schedule', models.ManyToManyField(to='timetable.Timetable', verbose_name='Establishment schedule')),
],
options={
'verbose_name': 'Establishment schedule',
'verbose_name_plural': 'Establishment schedules',
},
),
]

View File

@ -3,7 +3,8 @@ from django.core.exceptions import ValidationError
from django.db import models from django.db import models
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from location.models import Address from location.models import Address
from utils.models import ProjectBaseMixin, ImageMixin, TJSONField, TraslatedFieldsMixin from utils.models import (ProjectBaseMixin, ImageMixin, TJSONField,
TraslatedFieldsMixin, BaseAttributes)
from django.contrib.contenttypes import fields as generic from django.contrib.contenttypes import fields as generic
@ -123,3 +124,24 @@ class Establishment(ProjectBaseMixin, ImageMixin, TraslatedFieldsMixin):
if establishment_subtype.establishment_type != self.establishment_type: if establishment_subtype.establishment_type != self.establishment_type:
raise ValidationError('Establishment type of subtype does not match') raise ValidationError('Establishment type of subtype does not match')
self.establishment_subtypes.add(establishment_subtype) self.establishment_subtypes.add(establishment_subtype)
class EstablishmentScheduleQuerySet(models.QuerySet):
"""QuerySet for model EstablishmentSchedule"""
class EstablishmentSchedule(BaseAttributes):
"""Establishment schedule model."""
establishment = models.OneToOneField(Establishment,
related_name='schedule',
on_delete=models.CASCADE,
verbose_name=_('Establishment'))
schedule = models.ManyToManyField(to='timetable.Timetable',
verbose_name=_('Establishment schedule'))
objects = EstablishmentScheduleQuerySet.as_manager()
class Meta:
"""Meta class"""
verbose_name = _('Establishment schedule')
verbose_name_plural = _('Establishment schedules')

View File

@ -1,6 +1,7 @@
"""Establishment serializers.""" """Establishment serializers."""
from rest_framework import serializers from rest_framework import serializers
from establishment import models from establishment import models
from timetable import models as timetable_models
from location.serializers import AddressSerializer from location.serializers import AddressSerializer
@ -28,6 +29,22 @@ class EstablishmentSubTypeSerializer(serializers.ModelSerializer):
fields = ('id', 'name_translated') fields = ('id', 'name_translated')
class EstablishmentScheduleSerializer(serializers.ModelSerializer):
"""Serializer for Establishment model."""
weekday = serializers.CharField(source='get_weekday_display')
class Meta:
"""Meta class."""
model = timetable_models.Timetable
fields = (
'weekday',
'lunch_start',
'lunch_end',
'dinner_start',
'dinner_end',
)
class EstablishmentSerializer(serializers.ModelSerializer): class EstablishmentSerializer(serializers.ModelSerializer):
"""Serializer for Establishment model.""" """Serializer for Establishment model."""
@ -36,6 +53,9 @@ class EstablishmentSerializer(serializers.ModelSerializer):
type = EstablishmentTypeSerializer(source='establishment_type') type = EstablishmentTypeSerializer(source='establishment_type')
subtypes = EstablishmentSubTypeSerializer(many=True) subtypes = EstablishmentSubTypeSerializer(many=True)
address = AddressSerializer() address = AddressSerializer()
schedule = EstablishmentScheduleSerializer(source='schedule.schedule',
many=True,
allow_null=True)
class Meta: class Meta:
"""Meta class.""" """Meta class."""
@ -53,4 +73,5 @@ class EstablishmentSerializer(serializers.ModelSerializer):
'subtypes', 'subtypes',
'image', 'image',
'address', 'address',
'schedule'
) )

View File

7
apps/timetable/admin.py Normal file
View File

@ -0,0 +1,7 @@
from django.contrib import admin
from timetable import models
@admin.register(models.Timetable)
class TimetableModelAdmin(admin.ModelAdmin):
"""Timetable model admin"""

7
apps/timetable/apps.py Normal file
View File

@ -0,0 +1,7 @@
from django.apps import AppConfig
from django.utils.translation import gettext_lazy as _
class TimetableConfig(AppConfig):
name = 'timetable'
verbose_name = _('timetable')

View File

@ -0,0 +1,32 @@
# Generated by Django 2.2.4 on 2019-08-29 14:46
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Timetable',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(default=django.utils.timezone.now, editable=False, verbose_name='Date created')),
('modified', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
('weekday', models.PositiveSmallIntegerField(choices=[(0, 'Monday'), (1, 'Tuesday'), (2, 'Wednesday'), (3, 'Thursday'), (4, 'Friday'), (5, 'Saturday'), (6, 'Sunday')], 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')),
],
options={
'verbose_name': 'Timetable',
'verbose_name_plural': 'Timetables',
},
),
]

View File

34
apps/timetable/models.py Normal file
View File

@ -0,0 +1,34 @@
from django.db import models
from django.utils.translation import gettext_lazy as _
from utils.models import ProjectBaseMixin
class Timetable(ProjectBaseMixin):
"""Timetable model."""
MONDAY = 0
TUESDAY = 1
WEDNESDAY = 2
THURSDAY = 3
FRIDAY = 4
SATURDAY = 5
SUNDAY = 6
WEEKDAYS_CHOICES = (
(MONDAY, _('Monday')),
(TUESDAY, _('Tuesday')),
(WEDNESDAY, _('Wednesday')),
(THURSDAY, _('Thursday')),
(FRIDAY, _('Friday')),
(SATURDAY, _('Saturday')),
(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'))
class Meta:
"""Meta class."""
verbose_name = _('Timetable')
verbose_name_plural = _('Timetables')

View File

@ -0,0 +1,16 @@
"""Serializer for app timetable"""
from rest_framework import serializers
from timetable import models
class TimetableSerializer(serializers.ModelSerializer):
"""Serializer for model Timetable"""
class Meta:
"""Meta class."""
model = models.Timetable
fields = (
'weekday',
'start',
'end',
)

3
apps/timetable/tests.py Normal file
View File

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

10
apps/timetable/urls.py Normal file
View File

@ -0,0 +1,10 @@
"""Timetable app common urlconf."""
from django.urls import path
from timetable import views
app_name = 'timetable'
urlpatterns = [
path('', views.TimetableListView.as_view(), name='list')
]

8
apps/timetable/views.py Normal file
View File

@ -0,0 +1,8 @@
from rest_framework import generics
from timetable import serialziers, models
class TimetableListView(generics.ListAPIView):
"""Method to get timetables"""
serializer_class = serialziers.TimetableSerializer
queryset = models.Timetable.objects.all()

View File

@ -64,6 +64,7 @@ PROJECT_APPS = [
'partner.apps.PartnerConfig', 'partner.apps.PartnerConfig',
'translation.apps.TranslationConfig', 'translation.apps.TranslationConfig',
'configuration.apps.ConfigurationConfig', 'configuration.apps.ConfigurationConfig',
'timetable.apps.TimetableConfig',
] ]
EXTERNAL_APPS = [ EXTERNAL_APPS = [