出入库详情带仓库

This commit is contained in:
caoqianming 2021-11-11 09:22:15 +08:00
parent 9b402fcaf3
commit 487c8fac28
7 changed files with 63 additions and 21 deletions

View File

@ -122,4 +122,4 @@ body .el-table th.gutter{
}
.el-dialog__footer{
padding: 6px 6px 6px;
}
}

View File

@ -0,0 +1,40 @@
# Generated by Django 3.2.6 on 2021-11-11 01:18
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('inm', '0013_alter_materialbatch_batch'),
]
operations = [
migrations.RemoveField(
model_name='fifo',
name='warehouse',
),
migrations.AddField(
model_name='fifoitem',
name='warehouse',
field=models.ForeignKey(default=2, on_delete=django.db.models.deletion.CASCADE, to='inm.warehouse', verbose_name='仓库'),
preserve_default=False,
),
migrations.AlterField(
model_name='fifoitem',
name='count',
field=models.IntegerField(default=0, validators=[django.core.validators.MinValueValidator(0)], verbose_name='数量'),
),
migrations.AlterField(
model_name='inventory',
name='count',
field=models.IntegerField(default=0, validators=[django.core.validators.MinValueValidator(0)], verbose_name='仓库物料存量'),
),
migrations.AlterField(
model_name='materialbatch',
name='count',
field=models.IntegerField(default=0, validators=[django.core.validators.MinValueValidator(0)], verbose_name='存量'),
),
]

View File

@ -7,6 +7,7 @@ from utils.model import SoftModel, BaseModel
from simple_history.models import HistoricalRecords
from apps.mtm.models import Material
from apps.pm.models import SubProductionPlan
from django.core.validators import MinValueValidator, MaxValueValidator
class WareHouse(CommonAModel):
@ -28,7 +29,7 @@ class Inventory(BaseModel):
库存物料
"""
material = models.ForeignKey(Material, on_delete=models.CASCADE, verbose_name='物料信息')
count = models.IntegerField('仓库物料存量', default=0)
count = models.IntegerField('仓库物料存量', default=0, validators=[MinValueValidator(0)])
warehouse = models.ForeignKey(WareHouse, on_delete=models.CASCADE, verbose_name='所在仓库')
class Meta:
verbose_name = '库存表'
@ -40,7 +41,7 @@ class MaterialBatch(BaseModel):
"""
material = models.ForeignKey(Material, on_delete=models.CASCADE, verbose_name='物料信息')
warehouse = models.ForeignKey(WareHouse, on_delete=models.CASCADE, verbose_name='所在仓库')
count = models.IntegerField('存量', default=0)
count = models.IntegerField('存量', default=0, validators=[MinValueValidator(0)])
batch = models.CharField('批次号', max_length=100, default='')
expiration_date = models.DateField('有效期', null=True, blank=True)
class Meta:
@ -65,7 +66,6 @@ class FIFO(CommonAModel):
)
type = models.IntegerField('出入库类型', default=1)
is_audited = models.BooleanField('是否审核', default=False)
warehouse = models.ForeignKey(WareHouse, on_delete=models.CASCADE, verbose_name='仓库')
operator = models.ForeignKey(User, verbose_name='操作人', on_delete=models.CASCADE)
subproduction_plan = models.ForeignKey(SubProductionPlan, verbose_name='关联子生产计划', on_delete=models.DO_NOTHING, null=True, blank=True)
inout_date = models.DateField('出入库日期')
@ -78,8 +78,9 @@ class FIFOItem(BaseModel):
"""
is_tested = models.BooleanField('是否已检测', default=False)
is_testok = models.BooleanField('是否检测合格', default=False)
warehouse = models.ForeignKey(WareHouse, on_delete=models.CASCADE, verbose_name='仓库')
material = models.ForeignKey(Material, verbose_name='物料类型', on_delete=models.CASCADE)
count = models.IntegerField('数量', default=0)
count = models.IntegerField('数量', default=0, validators=[MinValueValidator(0)])
batch = models.CharField('批次号', max_length=100, default='')
fifo = models.ForeignKey(FIFO, verbose_name='关联出入库', on_delete=models.CASCADE)

View File

@ -37,13 +37,13 @@ class MaterialBatchSerializer(serializers. ModelSerializer):
fields = '__all__'
class FIFOListSerializer(serializers.ModelSerializer):
warehouse_ = WareHouseSimpleSerializer(source='warehouse', read_only=True)
operator_ = UserSimpleSerializer(source='operator', read_only=True)
class Meta:
model=FIFO
fields = '__all__'
class FIFOItemSerializer(serializers.ModelSerializer):
warehouse_ = WareHouseSimpleSerializer(source='warehouse', read_only=True)
material_= MaterialSimpleSerializer(source='material', read_only=True)
class Meta:
model= FIFOItem
@ -58,7 +58,7 @@ class FIFODetailInPurSerializer(serializers.ModelSerializer):
details = IProductInPurSerializer(many=True, required=False)
class Meta:
model = FIFOItem
fields = ['material', 'count', 'batch', 'details']
fields = ['material', 'count', 'batch', 'details', 'warehouse']
class MaterialBatchQuerySerializer(serializers.Serializer):
warehouse = serializers.IntegerField(label="仓库ID", required=False)
@ -72,7 +72,7 @@ class FIFOInPurSerializer(serializers.ModelSerializer):
details = FIFODetailInPurSerializer(many=True)
class Meta:
model = FIFO
fields = ['warehouse', 'operator', 'details', 'inout_date']
fields = ['operator', 'details', 'inout_date']
def create(self, validated_data):
details = validated_data.pop('details')
@ -80,16 +80,16 @@ class FIFOInPurSerializer(serializers.ModelSerializer):
pass
else:
raise serializers.ValidationError('没有入库内容')
for i in details:
# 校验批次
try:
if i['batch']:
obj = MaterialBatch.objects.get(batch=i['batch'], material=i['material'])
if obj.warehouse != validated_data['warehouse']:
raise serializers.ValidationError('批次号{}在其他仓库已存在'.format(i['batch']))
except:
pass
# for i in details:
# # 校验批次
# try:
# if i['batch']:
# obj = MaterialBatch.objects.get(batch=i['batch'], material=i['material'])
# if obj.warehouse != validated_data['warehouse']:
# raise serializers.ValidationError('批次号{}在其他仓库已存在'.format(i['batch']))
# except:
# pass
# 创建采购入库
with transaction.atomic():

View File

@ -8,11 +8,11 @@ def update_inm(instance:FIFO, type:int=1):
"""
更新库存(正反)
"""
warehouse = instance.warehouse
if instance.type in [FIFO.FIFO_TYPE_PUR_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
@ -27,6 +27,7 @@ def update_inm(instance:FIFO, type:int=1):
# 更新相关表
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()

View File

@ -171,7 +171,7 @@ class SubProductionPlanViewSet(CreateUpdateModelAMixin, ListModelMixin, UpdateMo
materials = []
for i in need:
materials.append(i['material'])
objs = MaterialBatch.objects.filter(warehouse=request.data['warehouse'], material__id__in=materials)
objs = MaterialBatch.objects.filter(material__id__in=materials)
have = MaterialBatchSerializer(instance=objs, many=True).data
return Response({'need':need, 'have':have})

View File

@ -15,11 +15,11 @@ from django.db import transaction
class PickDetailSerializer(serializers.Serializer):
material = serializers.PrimaryKeyRelatedField(queryset=Material.objects.all(), label="物料ID")
batch = serializers.CharField(label='物料批次', allow_blank=True)
warehouse = serializers.PrimaryKeyRelatedField(queryset=WareHouse.objects.all(), label="仓库ID")
pick_count = serializers.IntegerField(label="领料数量")
class PickSerializer(serializers.Serializer):
subproduction_plan=serializers.PrimaryKeyRelatedField(queryset=SubProductionPlan.objects.all(), label="子计划ID")
warehouse = serializers.PrimaryKeyRelatedField(queryset=WareHouse.objects.all(), label="仓库ID")
picks = PickDetailSerializer(many=True)
def create(self, validated_data):