62 lines
2.6 KiB
Python
62 lines
2.6 KiB
Python
from django.db.models.signals import post_save
|
|
from django.dispatch import receiver
|
|
|
|
from apps.inm.models import FIFOItemProduct, IProduct, Inventory, MaterialBatch, FIFO, FIFOItem
|
|
|
|
|
|
def update_inm(instance:FIFO, type:int=1):
|
|
"""
|
|
更新库存(正反)
|
|
"""
|
|
if instance.type in [FIFO.FIFO_TYPE_PUR_IN, FIFO.FIFO_TYPE_DO_IN]: # 采购入库, 生产入库
|
|
# 更新相关表
|
|
for i in FIFOItem.objects.filter(fifo=instance):
|
|
material = i.material
|
|
warehouse = i.warehouse
|
|
o1, _ = Inventory.objects.get_or_create(material=material, warehouse=warehouse, \
|
|
defaults={'material':material, 'warehouse':warehouse, 'count':0})
|
|
o1.count = o1.count + i.count
|
|
o1.save()
|
|
o2, _ = MaterialBatch.objects.get_or_create(material=material, warehouse=warehouse, batch=i.batch,\
|
|
defaults={'material':material, 'warehouse':warehouse, 'count':0, 'batch':i.batch})
|
|
o2.count = o2.count + i.count
|
|
o2.save()
|
|
material.count = material.count + i.count
|
|
material.save()
|
|
|
|
# 创建IProduct
|
|
ips2 = []
|
|
for m in FIFOItemProduct.objects.filter(fifoitem=i):
|
|
ip = {}
|
|
ip['warehouse'] = warehouse
|
|
ip['batch'] = i.batch
|
|
wp = m.wproduct
|
|
ip['wproduct'] = wp
|
|
ip['number'] = m.number
|
|
ip['material'] = m.material
|
|
ip['is_mtested'] = wp.is_mtested
|
|
ip['is_mtestok'] = wp.is_mtestok
|
|
ip['remark_mtest'] = wp.remark_mtest
|
|
ips2.append(IProduct(**ip))
|
|
IProduct.objects.bulk_create(ips2)
|
|
|
|
elif instance.type in [FIFO.FIFO_TYPE_DO_OUT, FIFO.FIFO_TYPE_SALE_OUT]: # 生产领料 销售出库
|
|
# 更新相关表
|
|
for i in FIFOItem.objects.filter(fifo=instance):
|
|
material = i.material
|
|
warehouse = i.warehouse
|
|
o1 = Inventory.objects.get(material=material, warehouse=warehouse)
|
|
o1.count = o1.count - i.count
|
|
o1.save()
|
|
o2 = MaterialBatch.objects.get(material=material, warehouse=warehouse, batch=i.batch)
|
|
o2.count = o2.count - i.count
|
|
o2.save()
|
|
material.count = material.count - i.count
|
|
material.save()
|
|
|
|
# 删除IProduct
|
|
if instance.type == FIFO.FIFO_TYPE_DO_OUT:
|
|
numbers = FIFOItemProduct.objects.filter(fifoitem=i).values_list('number', flat=True)
|
|
IProduct.objects.filter(number__in=numbers).delete()
|
|
|