fix agencie share on pos device - fix validation bug of free product pos

This commit is contained in:
2025-10-05 17:01:21 +03:30
parent f36d767e1c
commit c3f745f5d0
11 changed files with 263 additions and 62 deletions

View File

@@ -259,3 +259,15 @@ class QuotaLiveStockAgeLimitationSerializer(serializers.ModelSerializer):
instance.save()
return instance
class QuotaPriceCalculationPriceItemsSerializer(serializers.ModelSerializer):
class Meta:
model = product_models.QuotaPriceCalculationItems
fields = '__all__'
class QuotaFinalPriceTypeSerializer(serializers.ModelSerializer):
class Meta:
model = product_models.QuotaFinalPriceTypes
fields = '__all__'

View File

@@ -17,6 +17,8 @@ router.register(r'incentive_plan', product_api.IncentivePlanViewSet, basename='i
router.register(r'rancher_incentive_plan', product_api.IncentivePlanRancherViewSet, basename='rancher_incentive_plan')
router.register(r'stats', product_api.ProductStatsViewSet, basename='stats')
router.register(r'quota', quota_api.QuotaViewSet, basename='quota')
router.register(r'quota_pricing_items', quota_api.QuotaPriceCalculationItemsViewSet, basename='quota_pricing_items')
router.register(r'quota_final_price_type', quota_api.QuotaFinalPriceTypeViewSet, basename='quota_final_price_type')
router.register(r'quota_distribution', distribution_apis.QuotaDistributionViewSet, basename='quota_distribution')
urlpatterns = [

View File

@@ -128,13 +128,26 @@ class QuotaViewSet(SoftDeleteMixin, viewsets.ModelViewSet, DynamicSearchMixin):
)
livestock_age_limits.append(age_limit_creation_object)
# create quota price calculation items for final price types
price_calculation_items = []
if 'price_calculation_items' in request.data.keys():
for price_item in request.data['price_calculation_items']:
price_item.update({'quota': quota.id})
price_item_creation_object = CustomOperations().custom_create(
request=request,
view=QuotaPriceCalculationItemsViewSet(),
data=price_item
)
price_calculation_items.append(price_item_creation_object)
data = {
'quota': serializer.data,
'incentive_plan': plans_list, # noqa
'attribute_values': attributes_value_list,
'broker_values': broker_data_list,
'live_stock_allocations': allocations_list,
'livestock_age_limitations': livestock_age_limits
'livestock_age_limitations': livestock_age_limits,
'price_calculation_items': price_calculation_items
}
# call save method to generate id & calculate quota final price
@@ -241,13 +254,30 @@ class QuotaViewSet(SoftDeleteMixin, viewsets.ModelViewSet, DynamicSearchMixin):
)
livestock_age_limits.append(age_limit_creation_object)
# create quota price calculation items for final price types
price_calculation_items = []
if 'price_calculation_items' in request.data.keys():
# remove live stock age limit relations
quota.pricing_items.all().delete()
for price_item in request.data['price_calculation_items']:
price_item.update({'quota': quota.id})
price_item_creation_object = CustomOperations().custom_create(
request=request,
view=QuotaPriceCalculationItemsViewSet(),
data=price_item
)
price_calculation_items.append(price_item_creation_object)
data = {
'quota': serializer.data,
'incentive_plan': plans_list, # noqa
'attribute_values': attributes_value_list,
'broker_values': broker_data_list,
'live_stock_allocations': allocations_list,
'livestock_age_limitations': livestock_age_limits
'livestock_age_limitations': livestock_age_limits,
'price_calculation_items': price_calculation_items
}
# call save method to generate id & calculate quota final price
@@ -602,3 +632,13 @@ class QuotaLiveStockAgeLimitation(SoftDeleteMixin, viewsets.ModelViewSet):
return Response(status=status.HTTP_200_OK)
except APIException as e:
return Response(e, status=status.HTTP_204_NO_CONTENT)
class QuotaPriceCalculationItemsViewSet(viewsets.ModelViewSet):
queryset = product_models.QuotaPriceCalculationItems.objects.all().select_related('quota', 'pricing_type')
serializer_class = quota_serializers.QuotaPriceCalculationPriceItemsSerializer
class QuotaFinalPriceTypeViewSet(viewsets.ModelViewSet):
queryset = product_models.QuotaFinalPriceTypes.objects.all()
serializer_class = quota_serializers.QuotaFinalPriceTypeSerializer