first commit
This commit is contained in:
322
core/apps/tickets/models/tickets.py
Normal file
322
core/apps/tickets/models/tickets.py
Normal file
@@ -0,0 +1,322 @@
|
||||
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 ma’lumotlarni 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 bog‘liq 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 bo‘yicha 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")
|
||||
Reference in New Issue
Block a user