first commit

This commit is contained in:
2025-09-19 15:19:32 +05:00
commit d160410cd9
305 changed files with 9509 additions and 0 deletions

View 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 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")