feat: mlog经审批后提交
This commit is contained in:
parent
2a8254b581
commit
6a573dd4dd
|
@ -0,0 +1,25 @@
|
|||
# Generated by Django 3.2.12 on 2024-09-03 01:04
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('wf', '0002_alter_state_filter_dept'),
|
||||
('wpm', '0064_auto_20240902_1411'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='mlog',
|
||||
name='oinfo_json',
|
||||
field=models.JSONField(blank=True, default=dict, verbose_name='其他信息'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='mlog',
|
||||
name='ticket',
|
||||
field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='mlog_ticket', to='wf.ticket', verbose_name='关联工单'),
|
||||
),
|
||||
]
|
|
@ -193,8 +193,6 @@ class Mlog(CommonADModel):
|
|||
count_n_yd = models.PositiveIntegerField('圆度', default=0)
|
||||
count_n_txd = models.PositiveIntegerField('同心度', default=0)
|
||||
count_n_hd = models.PositiveIntegerField('厚度', default=0)
|
||||
|
||||
|
||||
count_n_qt = models.PositiveIntegerField('其他', default=0)
|
||||
|
||||
handle_date = models.DateField('操作日期', null=True, blank=True)
|
||||
|
@ -214,6 +212,10 @@ class Mlog(CommonADModel):
|
|||
submit_user = models.ForeignKey(
|
||||
User, verbose_name='提交人', on_delete=models.CASCADE, null=True, blank=True, related_name='mlog_submit_user')
|
||||
|
||||
oinfo_json = models.JSONField('其他信息', default=dict, blank=True)
|
||||
ticket = models.ForeignKey('wf.ticket', verbose_name='关联工单',
|
||||
on_delete=models.SET_NULL, related_name='mlog_ticket', null=True, blank=True, db_constraint=False)
|
||||
|
||||
@property
|
||||
def mlogb(self):
|
||||
return Mlogb.objects.filter(mlog=self).exclude(material_out=None)
|
||||
|
|
|
@ -368,7 +368,7 @@ class MlogInitSerializer(CustomModelSerializer):
|
|||
class MlogChangeSerializer(CustomModelSerializer):
|
||||
class Meta:
|
||||
model = Mlog
|
||||
fields = ['id', 'work_end_time', 'handle_user', 'note']
|
||||
fields = ['id', 'work_end_time', 'handle_user', 'note', 'oinfo_json']
|
||||
|
||||
def validate(self, attrs):
|
||||
if attrs.get('work_end_time', None):
|
||||
|
|
|
@ -4,7 +4,6 @@ from django.core.cache import cache
|
|||
from django.db.models import Sum
|
||||
from django.utils import timezone
|
||||
from typing import Union
|
||||
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
|
||||
|
||||
from rest_framework.exceptions import ParseError
|
||||
|
||||
|
@ -13,9 +12,11 @@ from apps.inm.models import MIO, MIOItem, MIOItemA
|
|||
from apps.pm.models import Mtask
|
||||
from apps.mtm.models import Mgroup, Shift, Material, Route, RoutePack
|
||||
|
||||
from .models import SfLog, SfLogExp, WMaterial, Mlog, Mlogb, Handover
|
||||
from apps.mtm.models import Process
|
||||
from .models import SfLog, WMaterial, Mlog, Mlogb, Handover
|
||||
from apps.mtm.services import cal_material_count
|
||||
from apps.wf.models import Ticket
|
||||
from django.db import transaction
|
||||
from apps.utils.thread import MyThread
|
||||
|
||||
def find_material_can_change(material: Material, mgroup_to: Mgroup):
|
||||
"""
|
||||
|
@ -633,3 +634,38 @@ def handover_submit(handover: Handover, user: User, now: Union[datetime.datetime
|
|||
handover.submit_user = user
|
||||
handover.submit_time = now
|
||||
handover.save()
|
||||
|
||||
def mlog_submit_validate(ins: Mlog):
|
||||
if ins.submit_time:
|
||||
raise ParseError('该日志已提交!')
|
||||
if ins.mtask and ins.mtask.state == Mtask.MTASK_STOP:
|
||||
raise ParseError('该任务已停止!')
|
||||
if ins.fill_way == Mlog.MLOG_STEP:
|
||||
if not Mlogb.objects.filter(material_out__isnull=False, mlog=ins).exists():
|
||||
raise ParseError('该日志未指定产出!')
|
||||
if not Mlogb.objects.filter(material_in__isnull=False, mlog=ins).exists():
|
||||
raise ParseError('该日志未指定消耗!')
|
||||
if Mlogb.objects.filter(material_out__isnull=False, count_real=0, mlog=ins).exists():
|
||||
raise ParseError('产出数量不能为0!')
|
||||
|
||||
def bind_mlog(ticket: Ticket, transition, new_ticket_data: dict):
|
||||
ins = Mlog.objects.get(id=new_ticket_data['t_id'])
|
||||
mlog_submit_validate(ins) # 校验是否可submit
|
||||
ticket_data = ticket.ticket_data
|
||||
ticket_data.update({
|
||||
't_model': 'mlog',
|
||||
't_id': ins.id,
|
||||
})
|
||||
ticket.ticket_data = ticket_data
|
||||
ticket.create_by = ins.create_by
|
||||
ticket.save()
|
||||
if ins.ticket is None:
|
||||
ins.ticket = ticket
|
||||
ins.save()
|
||||
|
||||
def mlog_audit_end(ticket: Ticket):
|
||||
now = timezone.now()
|
||||
ins = Mlog.objects.get(id=ticket.ticket_data['t_id'])
|
||||
mlog_submit(ins, ticket.create_by, now)
|
||||
MyThread(target=cal_mtask_progress_from_mlog,args=(ins,)).start()
|
||||
MyThread(target=cal_material_count_from_mlog,args=(ins,)).start()
|
||||
|
|
|
@ -25,6 +25,7 @@ from .serializers import (SflogExpSerializer, SfLogSerializer, StLogSerializer,
|
|||
from .services import mlog_submit, update_mtask, handover_submit, mlog_revert, cal_material_count_from_mlog, cal_mtask_progress_from_mlog
|
||||
from apps.utils.thread import MyThread
|
||||
from apps.monitor.services import create_auditlog, delete_auditlog
|
||||
from apps.wpm.services import mlog_submit_validate
|
||||
# Create your views here.
|
||||
|
||||
|
||||
|
@ -204,17 +205,13 @@ class MlogViewSet(CustomModelViewSet):
|
|||
ins: Mlog = self.get_object()
|
||||
vdata_old = MlogSerializer(ins).data
|
||||
now = timezone.now()
|
||||
if ins.submit_time:
|
||||
raise ParseError('该日志已提交!')
|
||||
if ins.mtask and ins.mtask.state == Mtask.MTASK_STOP:
|
||||
raise ParseError('该任务已停止!')
|
||||
if ins.fill_way == Mlog.MLOG_STEP:
|
||||
if not Mlogb.objects.filter(material_out__isnull=False, mlog=ins).exists():
|
||||
raise ParseError('该日志未指定产出!')
|
||||
if not Mlogb.objects.filter(material_in__isnull=False, mlog=ins).exists():
|
||||
raise ParseError('该日志未指定消耗!')
|
||||
if Mlogb.objects.filter(material_out__isnull=False, count_real=0, mlog=ins).exists():
|
||||
raise ParseError('产出数量不能为0!')
|
||||
if ins.ticket:
|
||||
raise ParseError('该日志存在审批!')
|
||||
else:
|
||||
p: Process = ins.mgroup.process
|
||||
if p.mlog_need_ticket:
|
||||
raise ParseError('该日志需要审批!')
|
||||
mlog_submit_validate(ins)
|
||||
with transaction.atomic():
|
||||
mlog_submit(ins, self.request.user, now)
|
||||
vdata_new = MlogSerializer(ins).data
|
||||
|
|
Loading…
Reference in New Issue