fix: base 添加wpmw并支持出入库提交
This commit is contained in:
parent
73b1d58b8a
commit
def67ebac5
|
@ -1,4 +1,6 @@
|
|||
from apps.inm.models import MIO, MIOItem, MaterialBatch, MaterialBatchA, MIOItemA, WareHouse
|
||||
from apps.inm.models import (MIO, MIOItem,
|
||||
MaterialBatch, MaterialBatchA,
|
||||
MIOItemA, WareHouse, MIOItemw)
|
||||
from rest_framework.exceptions import ParseError
|
||||
from apps.mtm.models import Material, Process
|
||||
from apps.utils.tools import ranstr
|
||||
|
@ -6,6 +8,7 @@ from apps.utils.thread import MyThread
|
|||
from apps.mtm.services import cal_material_count
|
||||
from apps.wpm.models import WMaterial
|
||||
from apps.wpm.services_2 import get_alldata_with_batch_and_store
|
||||
from apps.wpmw.models import Wpr
|
||||
|
||||
def do_out(item: MIOItem):
|
||||
"""
|
||||
|
@ -254,9 +257,9 @@ class InmService:
|
|||
out = -1
|
||||
默认使用count字段做加减
|
||||
"""
|
||||
material = i.material
|
||||
material: Material = i.material
|
||||
warehouse = i.warehouse
|
||||
|
||||
tracking = material.tracking
|
||||
ddict = {"count": 0, "supplier": i.mio.supplier}
|
||||
if i.material.type in [Material.MA_TYPE_MAINSO]:
|
||||
ddict["batch_ofrom"] = i.batch
|
||||
|
@ -271,12 +274,25 @@ class InmService:
|
|||
if in_or_out == 1:
|
||||
mb.count = mb.count + getattr(i, field)
|
||||
mb.save()
|
||||
if tracking == Material.MA_TRACKING_SINGLE:
|
||||
mioitemws = MIOItemw.objects.filter(mioitem=i)
|
||||
if mioitemws.count() != mb.count:
|
||||
raise ParseError("出入库与明细数量不一致,操作失败")
|
||||
for mioitemw in mioitemws:
|
||||
Wpr.change_or_new(mioitemw.number, i.material, mb)
|
||||
|
||||
elif in_or_out == -1:
|
||||
mb.count = mb.count - getattr(i, field)
|
||||
if mb.count < 0:
|
||||
raise ParseError("批次库存不足,操作失败")
|
||||
else:
|
||||
mb.save()
|
||||
if tracking == Material.MA_TRACKING_SINGLE:
|
||||
mioitemws = MIOItemw.objects.filter(mioitem=i)
|
||||
if mioitemws.count() != mb.count:
|
||||
raise ParseError("出入库与明细数量不一致,操作失败")
|
||||
for mioitemw in mioitemws:
|
||||
Wpr.change_or_new(mioitemw.number, i.material, mb=None)
|
||||
else:
|
||||
raise ParseError("不支持的操作")
|
||||
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
# Generated by Django 3.2.12 on 2025-01-02 01:58
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('qm', '0032_defect_note'),
|
||||
('wpm', '0077_auto_20241206_1758'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='wmaterial',
|
||||
name='defect',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='qm.defect', verbose_name='缺陷'),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Mlogbw',
|
||||
fields=[
|
||||
('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')),
|
||||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('number', models.TextField(verbose_name='单个编号')),
|
||||
('test_json', models.JSONField(blank=True, default=dict, verbose_name='检验情况')),
|
||||
('defect_json', models.JSONField(blank=True, default=list, verbose_name='缺陷情况')),
|
||||
('note', models.TextField(blank=True, null=True, verbose_name='备注')),
|
||||
('mlogb', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='wpm.mlogb', verbose_name='生产记录')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Handoverbw',
|
||||
fields=[
|
||||
('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')),
|
||||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('number', models.TextField(verbose_name='单个编号')),
|
||||
('note', models.TextField(blank=True, null=True, verbose_name='备注')),
|
||||
('handoverb', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='wpm.handoverb', verbose_name='关联交接记录')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
|
@ -0,0 +1,57 @@
|
|||
# Generated by Django 3.2.12 on 2025-01-02 01:58
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('wpm', '0078_auto_20250102_0958'),
|
||||
('inm', '0023_auto_20250102_0858'),
|
||||
('mtm', '0048_auto_20241218_1431'),
|
||||
('qm', '0032_defect_note'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='WpDefect',
|
||||
fields=[
|
||||
('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')),
|
||||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('is_main', models.BooleanField(default=False, verbose_name='是否主要缺陷')),
|
||||
('defect', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='qm.defect', verbose_name='关联缺陷项')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Wpr',
|
||||
fields=[
|
||||
('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')),
|
||||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('number', models.CharField(blank=True, max_length=50, null=True, unique=True, verbose_name='编号')),
|
||||
('state', models.PositiveSmallIntegerField(choices=[(10, '合格'), (20, '不合格'), (30, '返修'), (40, '检验'), (50, '报废')], default=10, verbose_name='状态')),
|
||||
('defects', models.ManyToManyField(through='wpmw.WpDefect', to='qm.Defect', verbose_name='缺陷项')),
|
||||
('material', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='mtm.material', verbose_name='当前物料形态')),
|
||||
('mb', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='inm.materialbatch', verbose_name='仓库物料')),
|
||||
('wm', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='wpm.wmaterial', verbose_name='车间物料')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='wpdefect',
|
||||
name='wpr',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='wpmw.wpr', verbose_name='关联产物'),
|
||||
),
|
||||
]
|
|
@ -1,9 +1,10 @@
|
|||
from django.db import models
|
||||
from apps.utils.models import BaseModel
|
||||
from apps.mtm.models import Material
|
||||
from rest_framework.exceptions import ParseError
|
||||
|
||||
# Create your models here.
|
||||
class Wp(BaseModel):
|
||||
class Wpr(BaseModel):
|
||||
"""
|
||||
动态半成品表
|
||||
"""
|
||||
|
@ -17,7 +18,21 @@ class Wp(BaseModel):
|
|||
mb = models.ForeignKey("inm.materialbatch", verbose_name="仓库物料", on_delete=models.CASCADE, null=True, blank=True)
|
||||
wm = models.ForeignKey("wpm.wmaterial", verbose_name="车间物料", on_delete=models.CASCADE, null=True, blank=True)
|
||||
|
||||
|
||||
@classmethod
|
||||
def change_or_new(cls, number, material, mb=None, wm=None, state=10):
|
||||
ins = cls.objects.filter(number=number).first()
|
||||
if ins:
|
||||
ins.material = material
|
||||
else:
|
||||
ins = cls(number=number, material=material)
|
||||
ins.state = state
|
||||
ins.mb = mb
|
||||
ins.wm = wm
|
||||
ins.save()
|
||||
|
||||
|
||||
class WpDefect(BaseModel):
|
||||
wp = models.ForeignKey(Wp, verbose_name="关联产物", on_delete=models.CASCADE)
|
||||
wpr = models.ForeignKey(Wpr, verbose_name="关联产物", on_delete=models.CASCADE)
|
||||
defect = models.ForeignKey("qm.defect", verbose_name="关联缺陷项", on_delete=models.CASCADE)
|
||||
is_main = models.BooleanField("是否主要缺陷", default=False)
|
|
@ -80,7 +80,8 @@ INSTALLED_APPS = [
|
|||
'apps.edu',
|
||||
'apps.dpm',
|
||||
'apps.cm',
|
||||
'apps.cms'
|
||||
'apps.cms',
|
||||
'apps.wpmw'
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
|
|
Loading…
Reference in New Issue