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_yd = models.PositiveIntegerField('圆度', default=0)
|
||||||
count_n_txd = models.PositiveIntegerField('同心度', default=0)
|
count_n_txd = models.PositiveIntegerField('同心度', default=0)
|
||||||
count_n_hd = models.PositiveIntegerField('厚度', default=0)
|
count_n_hd = models.PositiveIntegerField('厚度', default=0)
|
||||||
|
|
||||||
|
|
||||||
count_n_qt = models.PositiveIntegerField('其他', default=0)
|
count_n_qt = models.PositiveIntegerField('其他', default=0)
|
||||||
|
|
||||||
handle_date = models.DateField('操作日期', null=True, blank=True)
|
handle_date = models.DateField('操作日期', null=True, blank=True)
|
||||||
|
@ -214,6 +212,10 @@ class Mlog(CommonADModel):
|
||||||
submit_user = models.ForeignKey(
|
submit_user = models.ForeignKey(
|
||||||
User, verbose_name='提交人', on_delete=models.CASCADE, null=True, blank=True, related_name='mlog_submit_user')
|
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
|
@property
|
||||||
def mlogb(self):
|
def mlogb(self):
|
||||||
return Mlogb.objects.filter(mlog=self).exclude(material_out=None)
|
return Mlogb.objects.filter(mlog=self).exclude(material_out=None)
|
||||||
|
|
|
@ -368,7 +368,7 @@ class MlogInitSerializer(CustomModelSerializer):
|
||||||
class MlogChangeSerializer(CustomModelSerializer):
|
class MlogChangeSerializer(CustomModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Mlog
|
model = Mlog
|
||||||
fields = ['id', 'work_end_time', 'handle_user', 'note']
|
fields = ['id', 'work_end_time', 'handle_user', 'note', 'oinfo_json']
|
||||||
|
|
||||||
def validate(self, attrs):
|
def validate(self, attrs):
|
||||||
if attrs.get('work_end_time', None):
|
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.db.models import Sum
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from typing import Union
|
from typing import Union
|
||||||
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
|
|
||||||
|
|
||||||
from rest_framework.exceptions import ParseError
|
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.pm.models import Mtask
|
||||||
from apps.mtm.models import Mgroup, Shift, Material, Route, RoutePack
|
from apps.mtm.models import Mgroup, Shift, Material, Route, RoutePack
|
||||||
|
|
||||||
from .models import SfLog, SfLogExp, WMaterial, Mlog, Mlogb, Handover
|
from .models import SfLog, WMaterial, Mlog, Mlogb, Handover
|
||||||
from apps.mtm.models import Process
|
|
||||||
from apps.mtm.services import cal_material_count
|
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):
|
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_user = user
|
||||||
handover.submit_time = now
|
handover.submit_time = now
|
||||||
handover.save()
|
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 .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.utils.thread import MyThread
|
||||||
from apps.monitor.services import create_auditlog, delete_auditlog
|
from apps.monitor.services import create_auditlog, delete_auditlog
|
||||||
|
from apps.wpm.services import mlog_submit_validate
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
|
|
||||||
|
|
||||||
|
@ -204,17 +205,13 @@ class MlogViewSet(CustomModelViewSet):
|
||||||
ins: Mlog = self.get_object()
|
ins: Mlog = self.get_object()
|
||||||
vdata_old = MlogSerializer(ins).data
|
vdata_old = MlogSerializer(ins).data
|
||||||
now = timezone.now()
|
now = timezone.now()
|
||||||
if ins.submit_time:
|
if ins.ticket:
|
||||||
raise ParseError('该日志已提交!')
|
raise ParseError('该日志存在审批!')
|
||||||
if ins.mtask and ins.mtask.state == Mtask.MTASK_STOP:
|
else:
|
||||||
raise ParseError('该任务已停止!')
|
p: Process = ins.mgroup.process
|
||||||
if ins.fill_way == Mlog.MLOG_STEP:
|
if p.mlog_need_ticket:
|
||||||
if not Mlogb.objects.filter(material_out__isnull=False, mlog=ins).exists():
|
raise ParseError('该日志需要审批!')
|
||||||
raise ParseError('该日志未指定产出!')
|
mlog_submit_validate(ins)
|
||||||
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!')
|
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
mlog_submit(ins, self.request.user, now)
|
mlog_submit(ins, self.request.user, now)
|
||||||
vdata_new = MlogSerializer(ins).data
|
vdata_new = MlogSerializer(ins).data
|
||||||
|
|
Loading…
Reference in New Issue