diff --git a/README.md b/README.md index 8e1a8c29..4d5bd94f 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,8 @@ main: - `create_drivers` - `create_places` - `create_users` + - `create_bus_shifts` + - `create_bus_stops` Par exemple: diff --git a/final_attempt.png b/final_attempt.png new file mode 100644 index 00000000..abd5ce74 Binary files /dev/null and b/final_attempt.png differ diff --git a/first_attempt.png b/first_attempt.png new file mode 100644 index 00000000..0ac7ade0 Binary files /dev/null and b/first_attempt.png differ diff --git a/padam_django/apps/fleet/admin.py b/padam_django/apps/fleet/admin.py index 3fba5023..e244b7bd 100644 --- a/padam_django/apps/fleet/admin.py +++ b/padam_django/apps/fleet/admin.py @@ -11,3 +11,11 @@ class BusAdmin(admin.ModelAdmin): @admin.register(models.Driver) class DriverAdmin(admin.ModelAdmin): pass + +@admin.register(models.BusShift) +class BusShiftAdmin(admin.ModelAdmin): + list_display = ('name', 'bus', 'driver') + +@admin.register(models.BusStop) +class BusStopAdmin(admin.ModelAdmin): + list_display = ('name', 'time', 'place', 'bus_shift') diff --git a/padam_django/apps/fleet/factories.py b/padam_django/apps/fleet/factories.py index c78c832e..dd388f78 100644 --- a/padam_django/apps/fleet/factories.py +++ b/padam_django/apps/fleet/factories.py @@ -2,7 +2,7 @@ from faker import Faker from . import models - +from datetime import datetime, timezone fake = Faker(['fr']) @@ -19,3 +19,23 @@ class BusFactory(factory.django.DjangoModelFactory): class Meta: model = models.Bus + +class BusShiftFactory(factory.django.DjangoModelFactory): + name = factory.LazyFunction(fake.name) + bus = factory.SubFactory(BusFactory) + driver = factory.SubFactory(DriverFactory) + + class Meta: + model = models.BusShift + +class BusStopFactory(factory.django.DjangoModelFactory): + name = factory.LazyFunction(fake.name) + time = fake.date_time_between_dates( + datetime(2024, 1, 1, 0, 0, 0, tzinfo=timezone.utc), + datetime(2024, 1, 1, 23, 59, 59, tzinfo=timezone.utc) + ) + place = factory.SubFactory('padam_django.apps.geography.factories.PlaceFactory') + bus_shift = factory.SubFactory(BusShiftFactory) + + class Meta: + model = models.BusStop diff --git a/padam_django/apps/fleet/management/commands/create_bus_shifts.py b/padam_django/apps/fleet/management/commands/create_bus_shifts.py new file mode 100644 index 00000000..c228fa1a --- /dev/null +++ b/padam_django/apps/fleet/management/commands/create_bus_shifts.py @@ -0,0 +1,13 @@ +from padam_django.apps.common.management.base import CreateDataBaseCommand + +from padam_django.apps.fleet.factories import BusShiftFactory + + +class Command(CreateDataBaseCommand): + + help = 'Create few bus shifts' + + def handle(self, *args, **options): + super().handle(*args, **options) + self.stdout.write(f'Creating {self.number} bus shifts ...') + BusShiftFactory.create_batch(size=self.number) diff --git a/padam_django/apps/fleet/management/commands/create_bus_stops.py b/padam_django/apps/fleet/management/commands/create_bus_stops.py new file mode 100644 index 00000000..fdd689d8 --- /dev/null +++ b/padam_django/apps/fleet/management/commands/create_bus_stops.py @@ -0,0 +1,13 @@ +from padam_django.apps.common.management.base import CreateDataBaseCommand + +from padam_django.apps.fleet.factories import BusStopFactory + + +class Command(CreateDataBaseCommand): + + help = 'Create few bus stops' + + def handle(self, *args, **options): + super().handle(*args, **options) + self.stdout.write(f'Creating {self.number} bus stops ...') + BusStopFactory.create_batch(size=self.number) diff --git a/padam_django/apps/fleet/migrations/0003_busshift_busstop.py b/padam_django/apps/fleet/migrations/0003_busshift_busstop.py new file mode 100644 index 00000000..6aec02b6 --- /dev/null +++ b/padam_django/apps/fleet/migrations/0003_busshift_busstop.py @@ -0,0 +1,34 @@ +# Generated by Django 3.2.5 on 2024-06-08 15:32 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('geography', '0001_initial'), + ('fleet', '0002_auto_20211109_1456'), + ] + + operations = [ + migrations.CreateModel( + name='BusShift', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100, verbose_name='Name of the bus shift')), + ('bus', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='fleet.bus')), + ('driver', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='fleet.driver')), + ], + ), + migrations.CreateModel( + name='BusStop', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100, verbose_name='Name of the bus stop')), + ('time', models.DateTimeField()), + ('bus_shift', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fleet.busshift')), + ('place', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='geography.place')), + ], + ), + ] diff --git a/padam_django/apps/fleet/models.py b/padam_django/apps/fleet/models.py index 4cd3f19d..8da199c7 100644 --- a/padam_django/apps/fleet/models.py +++ b/padam_django/apps/fleet/models.py @@ -16,3 +16,26 @@ class Meta: def __str__(self): return f"Bus: {self.licence_plate} (id: {self.pk})" + + +class BusShift(models.Model): + name = models.CharField('Name of the bus shift', max_length=100) + bus = models.OneToOneField(Bus, on_delete=models.CASCADE) + driver = models.OneToOneField(Driver, on_delete=models.CASCADE) + + def __str__(self): + return f"BusShift: {self.name} (id: {self.pk})" + + def clean(self): + print(self) + + +class BusStop(models.Model): + name = models.CharField('Name of the bus stop', max_length=100) + time = models.DateTimeField() + place = models.OneToOneField('geography.Place', on_delete=models.CASCADE) + bus_shift = models.ForeignKey(BusShift, on_delete=models.CASCADE) + + def __str__(self): + return f"BusStop: {self.name} (id: {self.pk})" +