1
0
forked from erp-dev/erp

feat: added plate order clone

This commit is contained in:
2025-12-16 08:42:53 +08:00
parent 4c9b8e6a42
commit 0638dd1ad3
25 changed files with 46174 additions and 8 deletions

View File

@@ -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'])

View 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': '印染任务批量推进记录',
},
),
]

View File

@@ -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 = '印染任务批量推进记录'