Ticket #34589: trip.py

File trip.py, 1.7 KB (added by ftamy9, 2 years ago)
Line 
1from common.db.basic import Logged
2from django.core.exceptions import ValidationError
3from django.core.validators import MaxValueValidator
4from django.db import models
5from django.utils.translation import gettext_lazy as _
6
7from shipment.models.method import ShippingMethod, ShippingChoice
8
9
10class Trip(Logged):
11 trip_id = models.CharField(verbose_name=_('trip id'), max_length=400, null=True, blank=True)
12 method = models.ForeignKey(ShippingMethod, on_delete=models.PROTECT, verbose_name=_('method'))
13 source = models.JSONField(verbose_name=_('source address'))
14 trip_cost = models.PositiveIntegerField(verbose_name=_('trip cost'), null=True, blank=True, default=0)
15 driver_info = models.JSONField(verbose_name=_('driver info'), null=True, blank=True, )
16 driver = models.PositiveBigIntegerField(
17 verbose_name=_("driver national code"), validators=[MaxValueValidator(9999999999)], null=True, blank=True
18 )
19
20 class Meta:
21 verbose_name = _('Trip')
22 verbose_name_plural = _("Trips")
23 unique_together = ('trip_id', 'method')
24 index_together = ('trip_id', 'method')
25
26 @property
27 def handler(self):
28 return self.method.handler
29
30 def __str__(self):
31 return str(self.trip_id)
32
33 def cancel(self):
34 for shipment in self.shipments.all():
35 shipment.set_as_cancelled()
36
37 def clean(self):
38 if self.method.title == ShippingChoice.ORGANIZATION:
39 if self.driver is None:
40 raise ValidationError({'driver': _('driver is empty')})
41 else:
42 if self.trip_id is None:
43 raise ValidationError({'trip_id': _('trip_id is empty')})
44 super(Trip, self).clean()
Back to Top