出入库详情带仓库
This commit is contained in:
parent
9b402fcaf3
commit
487c8fac28
|
@ -122,4 +122,4 @@ body .el-table th.gutter{
|
|||
}
|
||||
.el-dialog__footer{
|
||||
padding: 6px 6px 6px;
|
||||
}
|
||||
}
|
|
@ -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='存量'),
|
||||
),
|
||||
]
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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():
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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})
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Reference in New Issue