diff --git a/apps/qm/migrations/0027_ftestwork_ticket.py b/apps/qm/migrations/0027_ftestwork_ticket.py new file mode 100644 index 00000000..00062147 --- /dev/null +++ b/apps/qm/migrations/0027_ftestwork_ticket.py @@ -0,0 +1,20 @@ +# Generated by Django 3.2.12 on 2024-12-12 06:39 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('wf', '0002_alter_state_filter_dept'), + ('qm', '0026_auto_20241121_1044'), + ] + + operations = [ + migrations.AddField( + model_name='ftestwork', + name='ticket', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ftestwork_ticket', to='wf.ticket', verbose_name='关联工单'), + ), + ] diff --git a/apps/qm/models.py b/apps/qm/models.py index 823e5c51..7be55065 100644 --- a/apps/qm/models.py +++ b/apps/qm/models.py @@ -152,6 +152,9 @@ class FtestWork(CommonBDModel): submit_user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='提交人', null=True, blank=True) note = models.TextField('备注', null=True, blank=True) equipment = models.ForeignKey(Equipment, verbose_name='所属检验设备', on_delete=models.SET_NULL, null=True, blank=True) + ticket = models.ForeignKey('wf.ticket', verbose_name='关联工单', + on_delete=models.SET_NULL, related_name='ftestwork_ticket', null=True, blank=True, + db_constraint=False) @classmethod def count_fields(cls): diff --git a/apps/qm/services.py b/apps/qm/services.py index 18f6426b..53855959 100644 --- a/apps/qm/services.py +++ b/apps/qm/services.py @@ -6,6 +6,18 @@ from django.utils import timezone from apps.wf.models import Ticket from apps.qm.models import NotOkOption +def ftestwork_submit_validate(ins: FtestWork): + wm:WMaterial = ins.wm + if ins.need_update_wm: + if wm.state == WMaterial.WM_TEST: + xcount = wm.count - ins.count + if xcount < 0: + raise ParseError("超过待检数量") + else: + xcount = wm.count - ins.count_notok + if xcount < 0: + raise ParseError("不合格数不可大于批次数量") + def ftestwork_submit(ins:FtestWork, user: User): wm:WMaterial = ins.wm @@ -83,4 +95,22 @@ def ftestwork_submit(ins:FtestWork, user: User): ins.save() def bind_ftestwork(ticket: Ticket, transition, new_ticket_data: dict): - pass \ No newline at end of file + ins = FtestWork.objects.get(id=new_ticket_data['t_id']) + if ins.submit_time is not None: + raise ParseError('该检验工作不可提交审批') + ftestwork_submit_validate(ins) + ticket_data = ticket.ticket_data + ticket_data.update({ + 't_model': 'ftestwork', + '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 ftestwork_audit_end(ticket: Ticket): + ins = FtestWork.objects.get(id=ticket.ticket_data['t_id']) + ftestwork_submit(ins, ticket.create_by) \ No newline at end of file