1
0
forked from erp-dev/erp

feat: added printing module

This commit is contained in:
2025-11-12 17:08:20 +08:00
parent 9898d71a7e
commit 808e5699f9
28 changed files with 1110 additions and 31 deletions

73
printing/models.py Normal file
View File

@@ -0,0 +1,73 @@
from django.db import models
from flower.common import ModelBase
from basic_info import models as basic_models
class PrintingOrder(ModelBase):
"""PrintingOrder model representing a printing order."""
customer = models.ForeignKey(
basic_models.Customer,
on_delete=models.PROTECT,
related_name='printing_orders',
verbose_name='客户',
)
fabric = models.CharField(max_length=100, verbose_name='面料')
width = models.CharField(max_length=100, verbose_name='幅宽')
is_urgent = models.BooleanField(default=False, verbose_name='紧急')
area = models.CharField(max_length=100, null=True, blank=True, verbose_name='地区')
address = models.CharField(max_length=200, null=True, blank=True, verbose_name='地址')
fabric_source = models.CharField(max_length=100, null=True, blank=True, verbose_name='布料来源')
is_fabric_received = models.BooleanField(default=False, verbose_name='布料是否已收')
craft = models.CharField(max_length=100, null=True, blank=True, verbose_name='工艺')
description = models.TextField(blank=True, null=True, verbose_name='订单描述')
outgoing_date = models.DateField(null=True, blank=True, verbose_name='出货日期')
curve = models.CharField(max_length=100, blank=True, null=True, verbose_name='曲线')
new_curve = models.CharField(max_length=100, blank=True, null=True, verbose_name='新加曲线')
position = models.TextField(blank=True, null=True, verbose_name='位置')
printing_warn = models.TextField(blank=True, null=True, verbose_name='打印注意事项')
rolling_warn = models.TextField(blank=True, null=True, verbose_name='滚筒注意事项')
production_warn = models.TextField(blank=True, null=True, verbose_name='生产注意事项')
is_invalid = models.BooleanField(default=False, verbose_name='是否作废')
def __str__(self):
return self.human_id
class Meta:
verbose_name = '印染订单'
verbose_name_plural = '印染订单'
permissions = [
('can_invalidate_printingorder', '可以作废印染订单'),
('can_activate_printingorder', '可以恢复印染订单'),
]
@property
def human_id(self) -> str:
return f"{self.created_at.year}{self.created_at.month:02d}{self.created_at.day:02d}{self.id:06d}"
class PrintingJob(ModelBase):
"""PrintingJob model representing a printing job associated with an order."""
printing_order = models.ForeignKey(
PrintingOrder,
on_delete=models.CASCADE,
related_name='printing_jobs',
verbose_name='主订单',
)
product = models.ForeignKey(
basic_models.Product,
on_delete=models.PROTECT,
related_name='printing_jobs',
verbose_name='产品',
)
quantity = models.PositiveIntegerField(verbose_name='数量')
unit = models.CharField(max_length=50, verbose_name='单位')
size = models.CharField(max_length=100, verbose_name='一段尺寸')
pieces = models.PositiveIntegerField(verbose_name='件数')
description = models.TextField(blank=True, verbose_name='备注')
def __str__(self):
return self.printing_order.human_id
class Meta:
verbose_name = '印染款式明细'
verbose_name_plural = '印染款式明细'