forked from erp-dev/erp
feat: added plate order clone
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
from django.contrib import admin
|
||||
from django.contrib.admin import action
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.forms import BaseInlineFormSet
|
||||
from django.utils.html import format_html
|
||||
from . import models
|
||||
@@ -195,6 +196,7 @@ class PrintingOrderAdmin(admin.ModelAdmin):
|
||||
# 为所有新创建且没有 business_object 的 job 创建 BusinessObject
|
||||
if isinstance(formset.model, type) and issubclass(formset.model, models.PrintingJob):
|
||||
order = form.instance
|
||||
ct = ContentType.objects.get_for_model(models.PrintingJob)
|
||||
for job in order.printing_jobs.all():
|
||||
if not job.business_object and order.process:
|
||||
from stateflow.models import BusinessObject
|
||||
@@ -202,6 +204,8 @@ class PrintingOrderAdmin(admin.ModelAdmin):
|
||||
name=f"PrintingJob-{job.id}",
|
||||
process=order.process,
|
||||
description=f"印染任务 {job.id} 的流程实例",
|
||||
content_type=ct,
|
||||
object_id=job.id,
|
||||
)
|
||||
job.business_object = business_object
|
||||
job.save(update_fields=['business_object'])
|
||||
|
||||
76
printing/migrations/0024_printingjobbatchadvancerecord.py
Normal file
76
printing/migrations/0024_printingjobbatchadvancerecord.py
Normal file
@@ -0,0 +1,76 @@
|
||||
# Generated by Django 5.2.7 on 2025-12-12
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('stateflow', '0021_statelogparameterrecord'),
|
||||
('printing', '0023_alter_printingjob_work_state'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='PrintingJobBatchAdvanceRecord',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
(
|
||||
'parameters',
|
||||
models.JSONField(
|
||||
blank=True,
|
||||
default=dict,
|
||||
help_text='批量推进时提交的参数(与单条推进一致)',
|
||||
verbose_name='工艺参数',
|
||||
),
|
||||
),
|
||||
(
|
||||
'created_by',
|
||||
models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.SET_NULL,
|
||||
related_name='printing_job_batch_advance_records',
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
verbose_name='创建人',
|
||||
),
|
||||
),
|
||||
(
|
||||
'printing_order',
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.PROTECT,
|
||||
related_name='batch_advance_records',
|
||||
to='printing.printingorder',
|
||||
verbose_name='印染订单',
|
||||
),
|
||||
),
|
||||
(
|
||||
'state',
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.PROTECT,
|
||||
related_name='printing_job_batch_advance_records',
|
||||
to='stateflow.state',
|
||||
verbose_name='完成的流程节点',
|
||||
),
|
||||
),
|
||||
(
|
||||
'printing_jobs',
|
||||
models.ManyToManyField(
|
||||
related_name='batch_advance_records',
|
||||
to='printing.printingjob',
|
||||
verbose_name='印染明细',
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '印染任务批量推进记录',
|
||||
'verbose_name_plural': '印染任务批量推进记录',
|
||||
},
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
from decimal import Decimal
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.db import models
|
||||
from flower.common import ModelBase
|
||||
from basic_info import models as basic_models
|
||||
@@ -139,7 +140,11 @@ class PlateOrder(ModelBase):
|
||||
|
||||
# 创建 BusinessObject
|
||||
business_object = stateflow_models.BusinessObject.objects.create(
|
||||
process=process_obj
|
||||
name=f"PlateOrder-{self.id}",
|
||||
process=process_obj,
|
||||
description=f"开版订单 {self.id} 的流程实例",
|
||||
content_type=ContentType.objects.get_for_model(PlateOrder),
|
||||
object_id=self.id,
|
||||
)
|
||||
self.business_object = business_object
|
||||
# 再次保存以更新 business_object 字段
|
||||
@@ -403,3 +408,52 @@ class PrintingJob(ModelBase):
|
||||
class Meta:
|
||||
verbose_name = '印染款式明细'
|
||||
verbose_name_plural = '印染款式明细'
|
||||
|
||||
|
||||
class PrintingJobBatchAdvanceRecord(ModelBase):
|
||||
"""
|
||||
印染任务批量推进记录(审计)
|
||||
|
||||
记录一次“对多个 PrintingJob 用同一组参数推进同一步流程节点”的行为:
|
||||
- created_by/created_at:谁在何时做了批量推进
|
||||
- parameters:本次推进提交的工艺参数(JSON)
|
||||
- state:本次被“完成”的流程节点(即推进时的 next_pending_state)
|
||||
- printing_jobs:本次批量推进涉及的所有明细
|
||||
"""
|
||||
|
||||
printing_order = models.ForeignKey(
|
||||
PrintingOrder,
|
||||
on_delete=models.PROTECT,
|
||||
related_name='batch_advance_records',
|
||||
verbose_name='印染订单',
|
||||
)
|
||||
state = models.ForeignKey(
|
||||
stateflow_models.State,
|
||||
on_delete=models.PROTECT,
|
||||
related_name='printing_job_batch_advance_records',
|
||||
verbose_name='完成的流程节点',
|
||||
)
|
||||
created_by = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
related_name='printing_job_batch_advance_records',
|
||||
verbose_name='创建人',
|
||||
)
|
||||
parameters = models.JSONField(
|
||||
default=dict,
|
||||
blank=True,
|
||||
verbose_name='工艺参数',
|
||||
help_text='批量推进时提交的参数(与单条推进一致)',
|
||||
)
|
||||
printing_jobs = models.ManyToManyField(
|
||||
PrintingJob,
|
||||
related_name='batch_advance_records',
|
||||
verbose_name='印染明细',
|
||||
blank=False,
|
||||
)
|
||||
|
||||
class Meta:
|
||||
verbose_name = '印染任务批量推进记录'
|
||||
verbose_name_plural = '印染任务批量推进记录'
|
||||
|
||||
Reference in New Issue
Block a user