shippingservice/delhivery/models.py
vignesh 6e3bbee5c8
All checks were successful
Deploy Beta (NATIVE) / deploy (push) Successful in 31s
feat: add Delhivery shipping service integration and API documentation
2026-10-10 19:39:18 +05:30

85 lines
3.4 KiB
Python

from django.db import models
from django.utils import timezone
class DelhiveryCredential(models.Model):
client_name = models.CharField(max_length=100, default='Default Delhivery Client')
api_token = models.CharField(max_length=255, help_text='Delhivery Production API Token Key')
base_url = models.URLField(default='https://track.delhivery.com')
is_active = models.BooleanField(default=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return f"Delhivery Credential ({self.client_name}) - {'Active' if self.is_active else 'Inactive'}"
class DelhiveryShipment(models.Model):
PAYMENT_MODE_CHOICES = [
('COD', 'Cash On Delivery'),
('Prepaid', 'Prepaid'),
('Pickup', 'Reverse Pickup'),
]
SERVICE_CHOICES = [
('Surface', 'Surface Logistics'),
('Express', 'Express Logistics'),
]
STATUS_CHOICES = [
('MANIFESTED', 'Manifested'),
('IN_TRANSIT', 'In Transit'),
('OUT_FOR_DELIVERY', 'Out For Delivery'),
('DELIVERED', 'Delivered'),
('CANCELLED', 'Cancelled'),
('RTO', 'Return To Origin'),
('NDR', 'Non-Delivery Exception'),
('FAILED', 'Failed'),
]
waybill = models.CharField(max_length=100, unique=True, db_index=True)
order_number = models.CharField(max_length=100, db_index=True)
vendor = models.CharField(max_length=50, default='DELHIVERY')
payment_mode = models.CharField(max_length=20, choices=PAYMENT_MODE_CHOICES, default='Prepaid')
shipping_mode = models.CharField(max_length=20, choices=SERVICE_CHOICES, default='Surface')
status = models.CharField(max_length=30, choices=STATUS_CHOICES, default='MANIFESTED')
current_tracking_status = models.CharField(max_length=100, blank=True, default='')
consignee_name = models.CharField(max_length=150)
consignee_phone = models.CharField(max_length=20)
consignee_pincode = models.CharField(max_length=10)
pickup_location_name = models.CharField(max_length=100, blank=True, default='')
raw_response = models.TextField(blank=True, default='')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
ordering = ['-created_at']
def __str__(self):
return f"Delhivery Shipment {self.waybill} (Order: {self.order_number}) - {self.status}"
class DelhiveryActivityLog(models.Model):
STATUS_CHOICES = [
('SUCCESS', 'Success (2xx)'),
('ERROR', 'Error (4xx/5xx)'),
('WARNING', 'Warning'),
]
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"[Delhivery] {self.action_name} - {self.response_status_code} ({self.timestamp.strftime('%H:%M:%S')})"