85 lines
3.4 KiB
Python
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')})"
|