1 | from common.db.basic import Logged, Ordered
|
---|
2 | from django.db import models
|
---|
3 | from django.utils.translation import gettext_lazy as _
|
---|
4 |
|
---|
5 | from tehran_plus_common.models.base import StoreTypeChoices
|
---|
6 |
|
---|
7 |
|
---|
8 | class ShippingChoice(models.TextChoices):
|
---|
9 | MIARE = 'Miare', _('Miare')
|
---|
10 | ALOPEYK = 'Alopeyk', _('Alopeyk')
|
---|
11 | ORGANIZATION = 'Organization', _('Organization') # like motorbikes for grocery or MRF vehicles
|
---|
12 |
|
---|
13 |
|
---|
14 | class ShippingMethodQuerySet(models.QuerySet):
|
---|
15 | def actives(self, *args, **kwargs):
|
---|
16 | return super(ShippingMethodQuerySet, self).filter(*args, **kwargs).filter(is_active=True)
|
---|
17 |
|
---|
18 |
|
---|
19 | class ShippingMethodManager(models.Manager):
|
---|
20 | def get_queryset(self):
|
---|
21 | return ShippingMethodQuerySet(self.model, using=self._db)
|
---|
22 |
|
---|
23 | def actives(self, *args, **kwargs):
|
---|
24 | return self.get_queryset().actives(*args, **kwargs)
|
---|
25 |
|
---|
26 |
|
---|
27 | class ShippingMethod(Logged, Ordered):
|
---|
28 | title = models.CharField(verbose_name=_("title"), max_length=200, choices=ShippingChoice.choices, unique=True)
|
---|
29 | description = models.TextField(verbose_name=_("description"), blank=True, null=True)
|
---|
30 | is_active = models.BooleanField(verbose_name=_('is active'), default=True)
|
---|
31 | max_course_in_trip = models.PositiveIntegerField(verbose_name=_('max number of courses in one trip'))
|
---|
32 |
|
---|
33 | class Meta:
|
---|
34 | verbose_name = _('Shipping Method')
|
---|
35 | verbose_name_plural = _("Shipping Methods")
|
---|
36 |
|
---|
37 | def __str__(self):
|
---|
38 | return self.title
|
---|
39 |
|
---|
40 | @classmethod
|
---|
41 | def is_method(cls, title):
|
---|
42 | return cls.objects.filter(title=title).exists()
|
---|
43 |
|
---|
44 | @property
|
---|
45 | def handler(self):
|
---|
46 | from ..miare_controller import MiareShipmentHandler
|
---|
47 | from ..organization_controller import OrganizationShipmentHandler
|
---|
48 |
|
---|
49 | if self.title == ShippingChoice.MIARE.value:
|
---|
50 | return MiareShipmentHandler()
|
---|
51 | elif self.title == ShippingChoice.ORGANIZATION.value:
|
---|
52 | return OrganizationShipmentHandler()
|
---|
53 | return None # should never be returned!
|
---|
54 |
|
---|
55 | objects = ShippingMethodManager()
|
---|
56 |
|
---|
57 |
|
---|
58 | class ShippingMethodStoreType(models.Model):
|
---|
59 | store_type = models.PositiveSmallIntegerField(verbose_name=_("store type"), choices=StoreTypeChoices.choices)
|
---|
60 | shipping_method = models.ForeignKey(ShippingMethod, on_delete=models.CASCADE, verbose_name=_('shipping method'))
|
---|
61 | is_available = models.BooleanField(default=True, verbose_name=_('is_available'))
|
---|
62 |
|
---|
63 | class Meta:
|
---|
64 | verbose_name = _('Shipping Method Store Type')
|
---|
65 | verbose_name_plural = _("Shipping Methods Stores Types")
|
---|