shippingservice/shipping/models.py
vignesh b8ba39c3f8
All checks were successful
Deploy Beta (NATIVE) / deploy (push) Successful in 39s
feat: implement shipping views, carrier allocation, models, and pickup scheduling architecture
2026-10-13 19:23:16 +05:30

84 lines
3.6 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
class ActivityLog(models.Model):
SERVICE_CHOICES = [
('FORWARD', 'Forward Logistics'),
('REVERSE', 'Reverse Logistics'),
('WEBHOOK', 'Webhook Event'),
]
STATUS_CHOICES = [
('SUCCESS', 'Success (2xx)'),
('ERROR', 'Error (4xx/5xx)'),
('WARNING', 'Warning'),
]
service_type = models.CharField(max_length=20, choices=SERVICE_CHOICES, default='FORWARD')
action_name = models.CharField(max_length=100)
endpoint_url = models.CharField(max_length=500)
http_method = models.CharField(max_length=10, default='POST')
request_headers = models.TextField(blank=True, default='')
request_body = models.TextField(blank=True, default='')
response_status_code = models.IntegerField(default=200)
response_body = models.TextField(blank=True, default='')
execution_time_ms = models.FloatField(default=0.0)
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='SUCCESS')
timestamp = models.DateTimeField(auto_now_add=True)
notes = models.TextField(blank=True, default='')
class Meta:
ordering = ['-timestamp']
def __str__(self):
return f"[{self.service_type}] {self.action_name} - {self.response_status_code} ({self.timestamp.strftime('%H:%M:%S')})"
class RiderAssignment(models.Model):
awb_number = models.CharField(max_length=100, db_index=True)
client_order_id = models.CharField(max_length=100, blank=True, default='')
rider_name = models.CharField(max_length=150)
rider_phone = models.CharField(max_length=30)
status = models.CharField(max_length=50, default='out_for_delivery')
latitude = models.FloatField(blank=True, null=True)
longitude = models.FloatField(blank=True, null=True)
raw_webhook_payload = models.TextField(blank=True, default='')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
ordering = ['-updated_at']
def __str__(self):
return f"Rider {self.rider_name} ({self.rider_phone}) - AWB: {self.awb_number} [{self.status}]"
class PickupSchedule(models.Model):
STATUS_CHOICES = [
('SCHEDULED', 'Pickup Scheduled'),
('CONFIRMED', 'Confirmed by Carrier'),
('IN_TRANSIT', 'Picked Up / In Transit'),
('CANCELLED', 'Cancelled'),
]
tracking_id = models.CharField(max_length=100, db_index=True)
client_order_id = models.CharField(max_length=100, blank=True, default='', db_index=True)
carrier = models.CharField(max_length=50, default='DELHIVERY', db_index=True)
carrier_display = models.CharField(max_length=100, default='Delhivery Logistics')
pickup_id = models.CharField(max_length=100, blank=True, default='', db_index=True)
pickup_date = models.CharField(max_length=20) # YYYY-MM-DD
pickup_time = models.CharField(max_length=50, default='14:00:00')
pickup_slot = models.CharField(max_length=100, blank=True, default='') # e.g. Afternoon Slot (2:00 PM – 5:00 PM)
pickup_location = models.CharField(max_length=150, blank=True, default='')
status = models.CharField(max_length=50, choices=STATUS_CHOICES, default='SCHEDULED')
expected_package_count = models.IntegerField(default=1)
notes = models.TextField(blank=True, default='')
raw_response = models.JSONField(default=dict, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
ordering = ['-updated_at']
def __str__(self):
return f"[{self.carrier}] Pickup {self.pickup_id or 'Pending'} - AWB: {self.tracking_id} on {self.pickup_date} ({self.pickup_time})"