add - full import pricing features on every distribution

This commit is contained in:
2025-12-02 14:01:13 +03:30
parent ea063c66a6
commit 8f2d321064
9 changed files with 100 additions and 13 deletions

View File

@@ -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