73 lines
2.8 KiB
Python
73 lines
2.8 KiB
Python
# Create your tasks here
|
|
from __future__ import absolute_import, unicode_literals
|
|
from apps.utils.tasks import CustomTask
|
|
from celery import shared_task
|
|
from apps.utils.sql import DbConnection
|
|
from server.settings import get_sysconfig
|
|
from django.core.cache import cache
|
|
from apps.fim.models import PriceSet, FeeSet
|
|
from apps.mtm.models import Mgroup
|
|
|
|
|
|
|
|
@shared_task(base=CustomTask)
|
|
def cal_enstat_when_priceset_change(pricesetId):
|
|
from apps.enm.models import EnStat
|
|
priceset = PriceSet.objects.get(id=pricesetId)
|
|
# 影响物料成本的计算
|
|
price_unit = priceset.price_unit
|
|
material = priceset.material
|
|
materialId = material.id
|
|
# 受影响的工段
|
|
mgroups = Mgroup.objects.filter(input_materials__contains=material.id)
|
|
enstats = EnStat.objects.filter(mgroup__in=mgroups)
|
|
for enstat in enstats:
|
|
old_cost_unit = 0
|
|
new_cost_unit = 0
|
|
imaterial_data = enstat.imaterial_data
|
|
for idata in imaterial_data:
|
|
old_cost_unit = old_cost_unit + idata['cost_unit']
|
|
if idata['material'] == materialId:
|
|
idata['price_unit'] = price_unit
|
|
idata['cost'] = idata['price_unit'] * idata['amount_consume']
|
|
try:
|
|
idata['cost_unit'] = idata['cost']/enstat.total_production
|
|
except:
|
|
idata['cost_unit'] = 0
|
|
new_cost_unit = new_cost_unit + idata['cost_unit']
|
|
|
|
# 更新一些数据
|
|
enstat.imaterial_data = imaterial_data
|
|
enstat.production_cost_unit = enstat.production_cost_unit - old_cost_unit + new_cost_unit
|
|
enstat.save(update_fields=['imaterial_data', 'production_cost_unit'])
|
|
if material.code in ['bulk_cement', 'bag_cement', 'clinker']: # 需要更新enstat2
|
|
from apps.enm.tasks import cal_enstat2
|
|
cal_enstat2(priceset.year, priceset.month)
|
|
|
|
|
|
@shared_task(base=CustomTask)
|
|
def cal_enstat_when_feeset_change(feesetId):
|
|
from apps.enm.models import EnStat
|
|
feeset = FeeSet.objects.get(id=feesetId)
|
|
# 影响物料成本的计算
|
|
cost_unit = feeset.price_unit
|
|
mgroup = feeset.mgroup
|
|
fee = feeset.fee
|
|
feeId = fee.id
|
|
# 受影响的工段
|
|
enstats = EnStat.objects.filter(mgroup=mgroup)
|
|
for enstat in enstats:
|
|
old_cost_unit = 0
|
|
new_cost_unit = 0
|
|
other_cost_data = enstat.other_cost_data
|
|
for idata in other_cost_data:
|
|
old_cost_unit = old_cost_unit + idata['cost_unit']
|
|
if idata['id'] == feeId:
|
|
idata['cost_unit'] = cost_unit
|
|
new_cost_unit = new_cost_unit + idata['cost_unit']
|
|
|
|
# 更新一些数据
|
|
enstat.other_cost_data = other_cost_data
|
|
enstat.production_cost_unit = enstat.production_cost_unit - old_cost_unit + new_cost_unit
|
|
enstat.save(update_fields=['other_cost_data', 'production_cost_unit'])
|