factory/apps/fim/tasks.py

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'])