Files
simple-travel-backend/core/apps/tickets/models/tickets.py
2025-09-19 15:19:32 +05:00

323 lines
11 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.utils.translation import gettext_lazy as _
from django_core.models import AbstractBaseModel
from core.apps.accounts.models import User
from core.apps.accounts.models.participant import ParticipantModel
from .tariff import TariffModel
from django.utils.text import slugify
class TicketsModel(AbstractBaseModel):
"""Chiptalar haqidagi asosiy malumotlarni saqlaydi."""
title = models.CharField(verbose_name=_("title"), max_length=255)
price = models.BigIntegerField(verbose_name=_("price"))
departure_date = models.DateField(verbose_name=_("departure date"))
departure = models.CharField(verbose_name=_("departure"), max_length=255)
destination = models.CharField(verbose_name=_("destination"), max_length=255)
#############
# Bu ikkisi aniq bo'lgandan keyin yo olib tashlanadi yoki qoladi !
departure_time = models.DateTimeField(verbose_name=_("departure time"))
travel_time = models.DateTimeField(verbose_name=_("travel time"))
##############
passenger_count = models.IntegerField(verbose_name=_("passenger count"))
languages = models.CharField(verbose_name=_("languages"), max_length=255)
rating = models.FloatField(verbose_name=_("rating"))
hotel_info = models.TextField(verbose_name=_("hotel info"))
duration_days = models.IntegerField(verbose_name=_("duration days"))
hotel_meals = models.TextField(verbose_name=_("hotel meals"), null=True, blank=True)
tariff = models.ManyToManyField(TariffModel, related_name="ticket_tariffs", verbose_name=_("tariff"))
slug = models.SlugField(verbose_name=_("slug"), max_length=255, unique=True)
created_at = models.DateTimeField(verbose_name=_("created at"), auto_now_add=True)
updated_at = models.DateTimeField(verbose_name=_("updated at"), auto_now=True)
def __str__(self):
return str(self.pk)
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title)
super().save(*args, **kwargs)
@classmethod
def _create_fake(self):
return self.objects.create(
name="mock",
price=150000,
departure_date="2025-10-01",
destination="mock",
departure="mock",
passenger_count=4,
rating=4.5,
hotel_info="mock",
duration_days=15,
)
class Meta:
db_table = "tickets"
verbose_name = _("TicketsModel")
verbose_name_plural = _("TicketsModels")
class TicketsImagesModel(AbstractBaseModel):
"""Chipta bilan bogliq rasmlarni saqlaydi."""
image = models.ImageField(verbose_name=_("image"), upload_to="ticket-images/")
ticket = models.ForeignKey(
TicketsModel, verbose_name=_("ticket"), related_name="ticket_images", on_delete=models.CASCADE
)
def __str__(self):
return str(self.pk)
@classmethod
def _create_fake(self):
return self.objects.create(
image="resources/static/images/logo.png",
ticket=TicketsModel._create_fake(),
)
class Meta:
db_table = "tickets_images"
verbose_name = _("TicketsImagesModel")
verbose_name_plural = _("TicketsImagesModel")
class TicketsAmenitiesModel(AbstractBaseModel):
"""Chipta ichidagi qulayliklarni saqlaydi."""
name = models.CharField(verbose_name=_("name"), max_length=255)
ticket = models.ForeignKey(
TicketsModel, verbose_name=_("ticket"), related_name="ticket_amenities", on_delete=models.CASCADE
)
def __str__(self):
return str(self.pk)
@classmethod
def _create_fake(self):
return self.objects.create(
name="mock",
ticket=TicketsModel._create_fake(),
)
class Meta:
db_table = "tickets_amenities"
verbose_name = _("TicketsAmenitiesModel")
verbose_name_plural = _("TicketsAmenitiesModel")
class TicketsIncludedServicesModel(AbstractBaseModel):
"""Chipta narxiga kiradigan xizmatlarni saqlaydi."""
image = models.ImageField(verbose_name=_("image"), upload_to="ticket-included-services-images/")
title = models.CharField(verbose_name=_("title"), max_length=255)
desc = models.TextField(verbose_name=_("description"))
ticket = models.ForeignKey(
TicketsModel, verbose_name=_("ticket"), related_name="ticket_included_services", on_delete=models.CASCADE
)
def __str__(self):
return str(self.pk)
@classmethod
def _create_fake(self):
return self.objects.create(
image="resources/static/images/logo.png",
title="mock",
desc="mock",
ticket=TicketsModel._create_fake(),
)
class Meta:
db_table = "tickets_included_services"
verbose_name = _("TicketsIncludedServicesModel")
verbose_name_plural = _("TicketsIncludedServicesModel")
class TicketsItineraryModel(AbstractBaseModel):
"""Chipta boyicha safar rejasini saqlaydi."""
title = models.CharField(verbose_name=_("title"), max_length=255)
duration = models.IntegerField(verbose_name=_("duration"))
ticket = models.ForeignKey(
TicketsModel, verbose_name=_("ticket"), related_name="ticket_itinerary", on_delete=models.CASCADE
)
def __str__(self):
return str(self.pk)
@classmethod
def _create_fake(self):
return self.objects.create(
title="mock",
duration=4,
ticket=TicketsModel._create_fake(),
)
class Meta:
db_table = "tickets_itinerary"
verbose_name = _("TicketsItineraryModel")
verbose_name_plural = _("TicketsItineraryModel")
class TicketsItineraryImagesModel(AbstractBaseModel):
"""Safar rejasiga oid rasmlarni saqlaydi."""
image = models.ImageField(verbose_name=_("image"), upload_to="ticket-included-services-images/")
tickets_itinerary = models.ForeignKey(
TicketsItineraryModel,
verbose_name=_("tickets_itinerary"),
related_name="ticket_itinerary_image",
on_delete=models.CASCADE,
)
def __str__(self):
return str(self.pk)
@classmethod
def _create_fake(self):
return self.objects.create(
image="resources/static/images/logo.png",
tickets_itinerary=TicketsItineraryModel._create_fake(),
)
class Meta:
db_table = "tickets_itinerary_images"
verbose_name = _("TicketsItineraryImagesModel")
verbose_name_plural = _("TicketsItineraryImagesModel")
class TicketsItineraryDestinationsModel(AbstractBaseModel):
"""Safar davomida boriladigan manzillarni saqlaydi."""
name = models.CharField(verbose_name=_("name"), max_length=255)
tickets_itinerary = models.ForeignKey(
TicketsItineraryModel,
verbose_name=_("tickets_itinerary"),
related_name="ticket_itinerary_destinations",
on_delete=models.CASCADE,
)
def __str__(self):
return str(self.pk)
@classmethod
def _create_fake(self):
return self.objects.create(
name="mock",
tickets_itinerary=TicketsItineraryModel._create_fake(),
)
class Meta:
db_table = "tickets_itinerary_destinations"
verbose_name = _("TicketsItineraryDestinationsModel")
verbose_name_plural = _("TicketsItineraryDestinationsModel")
class TicketsHotelMealsModel(AbstractBaseModel):
"""Mehmonxonada beriladigan taomlarni saqlaydi."""
image = models.ImageField(verbose_name=_("image"), upload_to="ticket-hotel-meals/")
name = models.CharField(verbose_name=_("name"), max_length=255)
desc = models.TextField(verbose_name=_("description"))
ticket = models.ForeignKey(
TicketsModel, verbose_name=_("ticket"), related_name="ticket_hotel_meals", on_delete=models.CASCADE
)
def __str__(self):
return str(self.pk)
@classmethod
def _create_fake(self):
return self.objects.create(
name="mock",
desc="mock",
ticket=TicketsModel._create_fake(),
)
class Meta:
db_table = "tickets_hotel_meals"
verbose_name = _("TicketsHotelMealsModel")
verbose_name_plural = _("TicketsHotelMealsModel")
class TicketsCommentsModel(AbstractBaseModel):
"""Chiptaga yozilgan sharh va baholarni saqlaydi."""
user = models.ForeignKey(User, verbose_name=_("user"), on_delete=models.CASCADE)
text = models.TextField(verbose_name=_("text"))
rating = models.FloatField(verbose_name=_("rating"))
ticket = models.ForeignKey(
TicketsModel, verbose_name=_("ticket"), related_name="ticket_comments", on_delete=models.CASCADE
)
created = models.DateTimeField(verbose_name=_("created"), auto_now_add=True)
def __str__(self):
return str(self.pk)
@classmethod
def _create_fake(self):
return self.objects.create(
user=User._create_fake(),
text="mock",
rating=4.5,
tickets_itinerary=TicketsModel._create_fake(),
)
class Meta:
db_table = "tickets_comments"
verbose_name = _("TicketsCommentsModel")
verbose_name_plural = _("TicketsCommentsModel")
class TicketorderModel(AbstractBaseModel):
STATUS_CHOICES = [
("pending_payment", "Pending Payment"),
("pending_confirmation", "Pending Confirmation"),
("cancelled", "Cancelled"),
("confirmed", "Confirmed"),
("completed", "Completed"),
]
user = models.ForeignKey(User, verbose_name=_("user"), on_delete=models.CASCADE)
departure = models.CharField(verbose_name=_("departure"), max_length=255)
destination = models.CharField(verbose_name=_("destination"), max_length=255)
departure_date = models.DateField(verbose_name=_("departure date"))
arrival_time = models.DateField(verbose_name=_("arrival time"))
participant = models.ManyToManyField(ParticipantModel, verbose_name=_("participant"), null=True, blank=True)
ticket = models.ForeignKey(TicketsModel, verbose_name=_("ticket"), on_delete=models.CASCADE)
tariff = models.CharField(verbose_name=_("tariff"), max_length=255)
transport = models.CharField(verbose_name=_("transport"), max_length=255)
extra_service = models.ManyToManyField("tickets.ExtraServicesModel", verbose_name=_("extra services"))
extra_paid_service = models.ManyToManyField("tickets.PaidServicesModel", verbose_name=_("extra paid services"))
order_status = models.CharField(verbose_name=_("order status"), max_length=255, choices=STATUS_CHOICES,
default="pending_payment")
total_price = models.BigIntegerField(verbose_name=_("total price"))
def __str__(self):
return str(self.pk)
@classmethod
def _create_fake(self):
return self.objects.create(
user=User._create_fake(),
departure="mock",
destination="mock",
departure_date="2025-12-01",
arrival_time="2025-12-01",
participant=ParticipantModel._create_fake(),
ticket=TicketsModel._create_fake(),
tariff="mock",
transport="mock",
extra_service=ExtraServicesModel._create_fake(),
extra_paid_service=PaidServicesModel._create_fake(),
total_price=40,
)
class Meta:
db_table = "ticketorder"
verbose_name = _("TicketorderModel")
verbose_name_plural = _("TicketorderModels")