add - full import pricing features on every distribution
This commit is contained in:
@@ -1,14 +1,51 @@
|
||||
from apps.product.models import QuotaDistribution, OrganizationQuotaStats
|
||||
import json
|
||||
|
||||
from apps.core.custom_middlewares.request_middleware import get_current_request_body
|
||||
from apps.product.models import QuotaDistribution, OrganizationQuotaStats, AttributeValue, Attribute, QuotaBrokerValue, \
|
||||
Broker
|
||||
from apps.product.validators.quota_stats_validator import QuotaStatsValidator
|
||||
from apps.warehouse.models import InventoryEntry
|
||||
|
||||
|
||||
def import_price_features(data, assigned_stat, quota):
|
||||
"""
|
||||
create price attributes data & broker pricing value for every distribution
|
||||
"""
|
||||
assigned_stat.attribute_values.all().delete()
|
||||
assigned_stat.broker_values.all().delete()
|
||||
|
||||
if 'price_attributes_data' and 'broker_data' in data.keys():
|
||||
attr_price_values = [AttributeValue(
|
||||
attribute=Attribute.objects.get(id=attr['attribute']),
|
||||
value=attr['value'],
|
||||
quota=quota,
|
||||
org_quota_stat=assigned_stat
|
||||
) for attr in data['price_attributes_data']]
|
||||
AttributeValue.objects.bulk_create(attr_price_values) # bulk create
|
||||
|
||||
broker_price_values = [
|
||||
QuotaBrokerValue(
|
||||
quota=quota,
|
||||
broker=Broker.objects.get(id=broker['broker']),
|
||||
value=broker['value'],
|
||||
org_quota_stat=assigned_stat
|
||||
) for broker in data['broker_data']
|
||||
]
|
||||
QuotaBrokerValue.objects.bulk_create(broker_price_values) # bulk create
|
||||
|
||||
quota.edited_pricing_features = True
|
||||
quota.save(update_fields=['edited_pricing_features'])
|
||||
|
||||
|
||||
class QuotaStatsService:
|
||||
@staticmethod
|
||||
def apply_distribution(distribution: QuotaDistribution):
|
||||
quota = distribution.quota
|
||||
# origin org
|
||||
assigner = distribution.assigner_organization
|
||||
if assigner.type.key == 'ADM':
|
||||
assigner = quota.registerer_organization
|
||||
|
||||
# destination org
|
||||
assigned = distribution.assigned_organization
|
||||
|
||||
@@ -23,12 +60,10 @@ class QuotaStatsService:
|
||||
organization=assigner,
|
||||
quota=quota,
|
||||
)
|
||||
print(assigner_stat.id)
|
||||
if created:
|
||||
assigner_stat.stat_type = 'distribution'
|
||||
assigner_stat.save()
|
||||
if assigner_stat.stat_type == 'distribution':
|
||||
print(assigner_stat.remaining_amount)
|
||||
assigner_stat.remaining_amount -= distribution.weight
|
||||
assigner_stat.total_distributed += distribution.weight
|
||||
assigner_stat.save()
|
||||
@@ -39,12 +74,15 @@ class QuotaStatsService:
|
||||
quota=quota,
|
||||
stat_type='distribution'
|
||||
)
|
||||
print(distribution._request) # noqa
|
||||
assigned_stat.total_amount += distribution.weight
|
||||
assigned_stat.remaining_amount += distribution.weight
|
||||
assigned_stat.distributions.add(distribution)
|
||||
assigned_stat.save()
|
||||
|
||||
# create pricing attributes and broker pricing data
|
||||
data = json.loads(get_current_request_body().decode())
|
||||
import_price_features(data, assigned_stat, quota)
|
||||
|
||||
@staticmethod
|
||||
def update_distribution(distribution: QuotaDistribution, old_weight: int):
|
||||
diff = distribution.weight - old_weight
|
||||
@@ -81,6 +119,10 @@ class QuotaStatsService:
|
||||
assigned_stat.remaining_amount += diff
|
||||
assigned_stat.save()
|
||||
|
||||
# create pricing attributes and broker pricing data
|
||||
data = json.loads(get_current_request_body().decode())
|
||||
import_price_features(data, assigned_stat, quota)
|
||||
|
||||
@staticmethod
|
||||
def delete_distribution(distribution: QuotaDistribution):
|
||||
quota = distribution.quota
|
||||
|
||||
Reference in New Issue
Block a user