diff --git a/api_v1/views/business/pre_sales/views.py b/api_v1/views/business/pre_sales/views.py index 397b09e..c96c91a 100644 --- a/api_v1/views/business/pre_sales/views.py +++ b/api_v1/views/business/pre_sales/views.py @@ -10,10 +10,12 @@ from api_v1.views.stock_change_views.mixins import StockChangeViewMixin from business import models as business_models from business import pre_order_services from business import allocation_services +from stock import models as stock_models class AllocationRecordSerializer(serializers.ModelSerializer): stock_ids = serializers.SerializerMethodField(read_only=True) + stock_details = serializers.SerializerMethodField(read_only=True) scanned_by_name = serializers.CharField(source='scanned_by.name', read_only=True) class Meta: @@ -22,6 +24,7 @@ class AllocationRecordSerializer(serializers.ModelSerializer): 'id', 'pre_sales_order_item', 'stock_ids', + 'stock_details', 'quantity', 'unit', 'status', @@ -43,6 +46,33 @@ class AllocationRecordSerializer(serializers.ModelSerializer): def get_stock_ids(self, obj: business_models.AllocationRecord): return obj.stock_id_list + def get_stock_details(self, obj: business_models.AllocationRecord): + stock_ids = obj.stock_id_list + if not stock_ids: + return [] + details_by_id = stock_models.StockChangeDetail.objects.select_related( + 'product' + ).in_bulk(stock_ids) + return [ + StockChangeDetailShortcutSerializer(details_by_id[stock_id]).data + for stock_id in stock_ids + if stock_id in details_by_id + ] + + +class StockChangeDetailShortcutSerializer(serializers.ModelSerializer): + product_id = serializers.IntegerField(source='product_id', read_only=True) + product_name = serializers.CharField(source='product.name', read_only=True) + + class Meta: + model = stock_models.StockChangeDetail + fields = [ + 'product_id', + 'product_name', + 'quantity', + ] + read_only_fields = fields + class PreSalesOrderItemSerializer(serializers.ModelSerializer): allocated_quantity = serializers.SerializerMethodField(read_only=True)