1
0
forked from erp-dev/erp

feat: added some filed to shipment serializers

This commit is contained in:
2026-04-23 17:51:48 +08:00
parent 35a03218d8
commit d4fbb2c7fe
11 changed files with 287 additions and 1 deletions

View File

@@ -101,6 +101,8 @@ class AgentSalesItemSerializer(serializers.ModelSerializer):
class AgentShipmentListSerializer(serializers.ModelSerializer):
customer_name = serializers.CharField(source="customer.name", read_only=True)
status_display = serializers.CharField(source="get_status_display", read_only=True)
fabric = serializers.SerializerMethodField()
order_description = serializers.SerializerMethodField()
delivery_id = serializers.IntegerField(read_only=True, allow_null=True)
sales_items = serializers.SerializerMethodField()
@@ -111,6 +113,8 @@ class AgentShipmentListSerializer(serializers.ModelSerializer):
"merchant_id",
"customer",
"customer_name",
"fabric",
"order_description",
"shipment_date",
"address",
"contact_name",
@@ -128,6 +132,46 @@ class AgentShipmentListSerializer(serializers.ModelSerializer):
"updated_at",
]
def get_fabric(self, obj):
rel = getattr(obj, "items", None)
if rel is None:
return None
first_item = next((item for item in obj.items.all() if item.delete_at is None), None)
if first_item is None or not first_item.printing_job_id:
return None
from printing.models import PrintingJob
printing_job = (
PrintingJob.objects.filter(id=first_item.printing_job_id)
.select_related("printing_order")
.first()
)
if printing_job is None or printing_job.printing_order is None:
return None
return printing_job.printing_order.fabric
def get_order_description(self, obj):
rel = getattr(obj, "items", None)
if rel is None:
return None
first_item = next((item for item in obj.items.all() if item.delete_at is None), None)
if first_item is None or not first_item.printing_job_id:
return None
from printing.models import PrintingJob
printing_job = (
PrintingJob.objects.filter(id=first_item.printing_job_id)
.select_related("printing_order")
.first()
)
if printing_job is None or printing_job.printing_order is None:
return None
return printing_job.printing_order.description
def get_sales_items(self, obj):
items = [i for i in obj.items.all() if i.delete_at is None]
return AgentSalesItemSerializer(items, many=True, context=self.context).data