added table EstablishmentSchedule, added application timetable, added table Timetable
This commit is contained in:
parent
c9fdf9074e
commit
3aa1e92046
|
|
@ -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"""
|
||||
|
|
|
|||
34
apps/establishment/migrations/0005_establishmentschedule.py
Normal file
34
apps/establishment/migrations/0005_establishmentschedule.py
Normal 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',
|
||||
},
|
||||
),
|
||||
]
|
||||
|
|
@ -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')
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
)
|
||||
|
|
|
|||
0
apps/timetable/__init__.py
Normal file
0
apps/timetable/__init__.py
Normal file
7
apps/timetable/admin.py
Normal file
7
apps/timetable/admin.py
Normal 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
7
apps/timetable/apps.py
Normal 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')
|
||||
32
apps/timetable/migrations/0001_initial.py
Normal file
32
apps/timetable/migrations/0001_initial.py
Normal 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',
|
||||
},
|
||||
),
|
||||
]
|
||||
0
apps/timetable/migrations/__init__.py
Normal file
0
apps/timetable/migrations/__init__.py
Normal file
34
apps/timetable/models.py
Normal file
34
apps/timetable/models.py
Normal 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')
|
||||
16
apps/timetable/serialziers.py
Normal file
16
apps/timetable/serialziers.py
Normal 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
3
apps/timetable/tests.py
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
10
apps/timetable/urls.py
Normal file
10
apps/timetable/urls.py
Normal 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
8
apps/timetable/views.py
Normal 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()
|
||||
|
|
@ -64,6 +64,7 @@ PROJECT_APPS = [
|
|||
'partner.apps.PartnerConfig',
|
||||
'translation.apps.TranslationConfig',
|
||||
'configuration.apps.ConfigurationConfig',
|
||||
'timetable.apps.TimetableConfig',
|
||||
]
|
||||
|
||||
EXTERNAL_APPS = [
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user