Files
tripwithbonus/backend/routes/models.py
2025-05-26 10:33:09 +03:00

144 lines
6.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from django.db import models
from django.contrib.auth.models import User
from routes.constants.routeChoices import owner_type_choices, type_transport_choices, cargo_type_choices
class Country(models.Model):
id = models.BigAutoField(primary_key=True)
international_name = models.CharField(max_length=250, verbose_name=('Международное название'), blank=True, null=True)
official_name = models.CharField(max_length=250, verbose_name=('Официальное название'), blank=True, null=True)
short_code = models.CharField(max_length=2, verbose_name=('Код страны по ISO3166-1:alpha2'))
code = models.CharField(max_length=3, verbose_name=('Код страны по ISO3166-1:alpha3'))
num_code = models.CharField(max_length=3, verbose_name=('Код страны по ISO3166-1:numeric'), blank=True, null=True)
flag_img_url = models.URLField(verbose_name=('Ссылка на изображение флага'), blank=True, null=True)
geo_lat = models.CharField(max_length=20, verbose_name=('GPS широта'), blank=True, null=True)
geo_lon = models.CharField(max_length=20, verbose_name=('GPS долгота'), blank=True, null=True)
timezone = models.CharField(max_length=250, verbose_name=('Часовая зона'), blank=True, null=True)
area_id = models.BigIntegerField(blank=True, null=True)
parsing_finished_DT = models.DateTimeField(verbose_name=('Дата и время завершения парсинга'), blank=True, null=True)
flag = models.ImageField(
upload_to='uploads/flags/', verbose_name=('Флаг'),
null=True, blank=True, help_text=u'')
def __str__(self) -> str:
if self.international_name:
return f'{self.international_name}'
elif self.official_name:
return f'{self.official_name}'
elif self.code:
return f'{self.code}'
return super().__str__()
class Meta:
verbose_name = ('Страна')
verbose_name_plural = ('Страны')
ordering = ('international_name', 'code')
class City(models.Model):
id = models.BigAutoField(primary_key=True)
country = models.ForeignKey(
Country, verbose_name=('Страна'), related_name='rel_cities_for_country', on_delete=models.CASCADE)
name = models.CharField(max_length=30, verbose_name=('Название города'), blank=True, null=True)
geo_lat = models.CharField(max_length=20, verbose_name=('GPS широта'), blank=True, null=True)
geo_lon = models.CharField(max_length=20, verbose_name=('GPS долгота'), blank=True, null=True)
area_id = models.BigIntegerField(blank=True, null=True)
timezone = models.CharField(max_length=250, verbose_name=('Часовая зона'), blank=True, null=True)
parsing_finished_DT = models.DateTimeField(verbose_name=('Дата и время завершения парсинга'), blank=True, null=True)
def __str__(self) -> str:
return f'{self.name}'
class Meta:
verbose_name = ('Город')
verbose_name_plural = ('Города')
ordering = ('name',)
class Route(models.Model):
id = models.BigAutoField(primary_key=True)
owner_type = models.CharField(
choices=owner_type_choices, default='customer', verbose_name=('Тип операции'))
type_transport = models.CharField(
choices=type_transport_choices, default='', verbose_name=('Выберите способ перевозки'),
blank=True
)
departure_DT = models.DateTimeField(
verbose_name=('Дата и время выезда'), null=True, blank=True
)
arrival_DT = models.DateTimeField(verbose_name=('Дата и время прибытия'))
from_city = models.ForeignKey(
City, verbose_name=('Город отправки'), related_name='rel_routes_for_cityFrom', on_delete=models.SET_NULL,
null=True, blank=True
)
to_city = models.ForeignKey(
City, verbose_name=('Город получения'), related_name='rel_routes_for_cityTo', on_delete=models.SET_NULL,
null=True, blank=True
)
cargo_type = models.CharField(
choices=cargo_type_choices, default='letter', verbose_name=('Могу перевезти')
)
receive_msg_by_email = models.BooleanField(default=False, verbose_name=('Получать уведомления по E-mail'))
owner = models.ForeignKey(User, verbose_name=('Владелец'), related_name='rel_routes_for_owner', on_delete=models.CASCADE)
comment = models.TextField(verbose_name='Примечания', null=True, blank=True)
rising_DT = models.DateTimeField(
verbose_name=('Дата и время последнего поднятия'),
blank=True, null=True
)
highlight_end_DT = models.DateTimeField(
verbose_name=('Дата и время окончания выделения'),
blank=True, null=True
)
status = models.CharField(
max_length=20,
choices=[
("actual", "Актуально"),
("canceled", "Отменено"),
("completed", "Завершено"),
],
default="actual",
)
created_at = models.DateTimeField(auto_now_add=True, null=True, blank=True)
def __str__(self) -> str:
from_city_name = self.from_city.name if self.from_city else 'Не указан'
to_city_name = self.to_city.name if self.to_city else 'Не указан'
return f"Маршрут #{self.id}: {from_city_name}{to_city_name}"
class Meta:
verbose_name = (u'Маршрут')
verbose_name_plural = (u'Маршруты')
ordering = ('id',)
class Leads(models.Model):
id = models.BigAutoField(primary_key=True)
route = models.ForeignKey(Route, verbose_name="Маршрут", on_delete=models.CASCADE)
moving_user = models.ForeignKey(User, verbose_name="Перевозчик", on_delete=models.CASCADE)
moving_price = models.DecimalField(max_digits=10, decimal_places=2)
moving_date = models.DateField()
comment = models.CharField(max_length=500, null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name = 'Заявка'
verbose_name_plural = 'Заявки'
ordering = ['-created_at']
def __str__(self) -> str:
return f"Заявка по маршруту {self.route}"