feat: mlog增加submit_time/submit_user及相应逻辑

This commit is contained in:
caoqianming 2023-11-01 13:28:07 +08:00
parent 03d7fbece8
commit 1a640d9a70
7 changed files with 62 additions and 10 deletions

View File

@ -1,9 +1,10 @@
from apps.system.models import Dept
from apps.system.models import Dept, User
from apps.sam.models import OrderItem
from apps.mtm.models import Route, Material, Mgroup
from rest_framework.exceptions import ParseError
from apps.pm.models import Mtask, Utask
from django.db.models.query import QuerySet
from django.utils import timezone
from datetime import date, timedelta
import math
from typing import List, Union
@ -243,18 +244,19 @@ class PmService:
change_order_state_when_schedue(orderitemIds)
@classmethod
def mtasks_submit(cls, mtasks: QuerySet[Mtask]):
def mtasks_submit(cls, mtasks: QuerySet[Mtask], user: User):
"""
锁定生产任务
"""
from apps.wpm.models import Mlog
from apps.wpm.services import mlog_confirm, update_mtask
from apps.wpm.services import mlog_submit, update_mtask
now = timezone.now()
for mtask in mtasks:
mlogs = Mlog.objects.filter(mtask=mtask)
if mlogs.count() == 0:
raise ParseError(f'{mtask.mgroup.name}_未填写日志')
for mlog in mlogs:
mlog_confirm(mlog)
mlog_submit(mlog, user, now)
update_mtask(mtask)
mtask.state = Mtask.MTASK_DONE
mtask.save()

View File

@ -165,9 +165,10 @@ class MtaskViewSet(CustomModelViewSet):
提交任务后不可更新日志
"""
ids = request.data.get('ids', [])
user = request.user
mtasks = Mtask.objects.filter(
id__in=ids, state=Mtask.MTASK_ASSGINED)
PmService.mtasks_submit(mtasks)
PmService.mtasks_submit(mtasks, user)
return Response()
@action(methods=['post'], detail=True, perms_map={'post': 'mtask.submit'}, serializer_class=Serializer)

View File

@ -59,5 +59,6 @@ class MlogFilter(filters.FilterSet):
"batch": ["exact"],
"handle_date": ["exact"],
"handle_user": ["exact"],
"mtask__mgroup__belong_dept__name": ["exact"]
"mtask__mgroup__belong_dept__name": ["exact"],
"submit_time": ["isnull"]
}

View File

@ -0,0 +1,31 @@
# Generated by Django 3.2.12 on 2023-11-01 05:25
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('wpm', '0023_auto_20231031_1847'),
]
operations = [
migrations.AddField(
model_name='handover',
name='wm',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='handover_wm', to='wpm.wmaterial', verbose_name='关联车间库存'),
),
migrations.AddField(
model_name='mlog',
name='submit_time',
field=models.DateTimeField(blank=True, null=True, verbose_name='提交时间'),
),
migrations.AddField(
model_name='mlog',
name='submit_user',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='mlog_submit_user', to=settings.AUTH_USER_MODEL, verbose_name='提交人'),
),
]

View File

@ -128,6 +128,10 @@ class Mlog(CommonADModel):
material_outs = models.ManyToManyField(
Material, verbose_name='多个产出', blank=True, through='wpm.mlogb', related_name='mlog_material_outs')
submit_time = models.DateTimeField('提交时间', null=True, blank=True)
submit_user = models.ForeignKey(
User, verbose_name='提交人', on_delete=models.CASCADE, null=True, blank=True, related_name='mlog_submit_user')
class Mlogb(BaseModel):
mlog = models.ForeignKey(Mlog, verbose_name='关联日志',
@ -155,6 +159,8 @@ class Handover(CommonADModel):
Dept, verbose_name='接收部门', on_delete=models.CASCADE, related_name='handover_recive_dept')
recive_user = models.ForeignKey(
User, verbose_name='接收人', on_delete=models.CASCADE, related_name='handover_recive_user')
wm = models.ForeignKey(WMaterial, verbose_name='关联车间库存', on_delete=models.SET_NULL,
null=True, blank=True, related_name='handover_wm')
mlog = models.ForeignKey(Mlog, verbose_name='关联日志记录',
on_delete=models.SET_NULL, null=True, blank=True, related_name='handover_mlog')
doin_date = models.DateField('加料日期', null=True, blank=True)

View File

@ -117,7 +117,7 @@ class MlogSerializer(CustomModelSerializer):
class Meta:
model = Mlog
fields = '__all__'
read_only_fields = EXCLUDE_FIELDS
read_only_fields = EXCLUDE_FIELDS + ['submit_time', 'submit_user']
def create(self, validated_data):
mtask = validated_data.get('mtask', None)

View File

@ -2,11 +2,14 @@ import datetime
from django.core.cache import cache
from django.db.models import Sum
from django.utils.timezone import localtime
from datetime import datetime
from django.utils import timezone
from typing import Union
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
from rest_framework.exceptions import ParseError
from apps.system.models import User
from apps.inm.models import MIO, MIOItem, MIOItemA
from apps.pm.models import Mtask
from apps.mtm.models import Mgroup, Shift, Material
@ -116,10 +119,14 @@ def do_in(mio: MIO):
raise ParseError('车间物料不足')
def mlog_confirm(mlog: Mlog):
def mlog_submit(mlog: Mlog, user: User, now: Union[datetime, None]):
"""
生产日志创建后需要执行的操作
生产日志提交后需要执行的操作
"""
if mlog.submit_time is not None: # 说明已经做过操作了
return
if now is None:
now = timezone.now()
mtask = mlog.mtask
belong_dept = mtask.mgroup.belong_dept
material_out = mtask.material_out
@ -141,6 +148,7 @@ def mlog_confirm(mlog: Mlog):
material_has.count = material_has.count - mlog.count_use
material_has.save()
if material_out.is_hidden is False: # 需要入车间库存
# 有多个产物的情况
if material_out.brothers and Mlogb.objects.filter(mlog=mlog).exists():
for item in Mlogb.objects.filter(mlog=mlog):
wmaterial, _ = WMaterial.objects.get_or_create(batch=mlog.batch, material=item.material_out, belong_dept=belong_dept, defaults={
@ -154,6 +162,9 @@ def mlog_confirm(mlog: Mlog):
})
wmaterial.count = wmaterial.count + mlog.count_ok
wmaterial.save()
mlog.submit_time = now
mlog.submit_user = user
mlog.save()
def update_mtask(mtask: Mtask):