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):
"""Establishment admin."""
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.utils.translation import gettext_lazy as _
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
@ -123,3 +124,24 @@ class Establishment(ProjectBaseMixin, ImageMixin, TraslatedFieldsMixin):
if establishment_subtype.establishment_type != self.establishment_type:
raise ValidationError('Establishment type of subtype does not match')
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."""
from rest_framework import serializers
from establishment import models
from timetable import models as timetable_models
from location.serializers import AddressSerializer
@ -28,6 +29,22 @@ class EstablishmentSubTypeSerializer(serializers.ModelSerializer):
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):
"""Serializer for Establishment model."""
@ -36,6 +53,9 @@ class EstablishmentSerializer(serializers.ModelSerializer):
type = EstablishmentTypeSerializer(source='establishment_type')
subtypes = EstablishmentSubTypeSerializer(many=True)
address = AddressSerializer()
schedule = EstablishmentScheduleSerializer(source='schedule.schedule',
many=True,
allow_null=True)
class Meta:
"""Meta class."""
@ -53,4 +73,5 @@ class EstablishmentSerializer(serializers.ModelSerializer):
'subtypes',
'image',
'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',
'translation.apps.TranslationConfig',
'configuration.apps.ConfigurationConfig',
'timetable.apps.TimetableConfig',
]
EXTERNAL_APPS = [