rancher service & quota usage service
This commit is contained in:
@@ -6,6 +6,7 @@ from apps.product.services.services import (
|
||||
quota_attribute_value
|
||||
)
|
||||
from apps.pos_device.services.services import pos_organizations_sharing_information
|
||||
from apps.warehouse.services.quota_usage_services import QuotaUsageService
|
||||
from apps.pos_device.pos.api.v1.serializers.device import DeviceSerializer
|
||||
from apps.product.exceptions import DistributionWeightException
|
||||
from apps.pos_device.models import POSFreeProducts
|
||||
@@ -171,52 +172,12 @@ class InventoryQuotaSaleTransactionSerializer(serializers.ModelSerializer):
|
||||
# create pre sale for distribution
|
||||
create_pre_sale(transaction=transaction, sale_item=item)
|
||||
|
||||
# purchase quota usage of rancher
|
||||
if 'livestock_statistic' in item_data.keys():
|
||||
|
||||
# get list of livestock types object for transaction item
|
||||
livestock_types = {
|
||||
lt.en_name: lt
|
||||
for lt in LiveStockType.objects.filter(
|
||||
en_name__in=[i['name'] for i in item_data.get('livestock_statistic', [])]
|
||||
)
|
||||
}
|
||||
|
||||
# get list of incentive plans object for transaction item
|
||||
incentive_plans = {
|
||||
iplan.id: iplan
|
||||
for iplan in IncentivePlan.objects.all()
|
||||
}
|
||||
|
||||
for item in item_data['livestock_statistic']:
|
||||
# get livestock by en name
|
||||
livestock_type = livestock_types.get(item['name'])
|
||||
if not livestock_types:
|
||||
continue
|
||||
|
||||
# true or false
|
||||
is_incentive = item['id'] != 0
|
||||
|
||||
# get usage & calculate
|
||||
usage, created = QuotaUsage.objects.get_or_create(
|
||||
rancher=rancher,
|
||||
livestock_type=livestock_type,
|
||||
distribution=distribution,
|
||||
incentive_plan=incentive_plans.get(item['id']) if is_incentive else None,
|
||||
defaults={
|
||||
"count": item['count'],
|
||||
'usage_type': 'incentive' if is_incentive else 'base',
|
||||
'incentive_quota_used': item['total_weight'] if is_incentive else 0,
|
||||
'base_quota_used': item['total_weight'] if is_incentive else 0
|
||||
}
|
||||
)
|
||||
|
||||
if not created:
|
||||
if usage.usage_type == 'incentive':
|
||||
usage.incentive_quota_used += item['total_weight']
|
||||
else:
|
||||
usage.base_quota_used += item['total_weight']
|
||||
usage.save()
|
||||
# calculate quota usage of rancher
|
||||
usages = QuotaUsageService.allocate_usage(
|
||||
rancher=rancher,
|
||||
distribution=distribution,
|
||||
item_data=item_data
|
||||
)
|
||||
|
||||
transaction.transaction_price = total_price
|
||||
transaction.save()
|
||||
|
||||
Reference in New Issue
Block a user