1
0
forked from erp-dev/erp

feat: human_id for all objects in business module

This commit is contained in:
2026-06-25 13:41:17 +08:00
parent 70b3a0d246
commit e8bf4b5e49
14 changed files with 305 additions and 22 deletions

View File

@@ -9,6 +9,13 @@ from flower.common import ModelBase
from basic_info import models as basic_info_models
def build_business_human_id(prefix: str, created_at, object_id) -> str:
"""生成业务单据的人类可读编号(虚拟编号,不落库)。"""
if object_id is None or created_at is None:
return ''
return f"{prefix}{created_at.year}{created_at.month:02d}{created_at.day:02d}{object_id:06d}"
class PurchaseOrderKindEnum(models.IntegerChoices):
"""采购单类型"""
WHOLESALE = 1, '大货'
@@ -154,9 +161,7 @@ class PurchaseOrder(OrderItemsAggregationMixin, OrderDirectionMixin, OrderCounte
规则与 SalesOrder.human_id 保持一致CG + YYYYMMDD{6位id}
"""
if self.id is None or self.created_at is None:
return ""
return f"CG{self.created_at.year}{self.created_at.month:02d}{self.created_at.day:02d}{self.id:06d}"
return build_business_human_id('CG', self.created_at, self.id)
class Meta:
verbose_name = '采购单'
@@ -309,9 +314,7 @@ class SalesOrder(OrderItemsAggregationMixin, OrderDirectionMixin, OrderCounterpa
规则XS + YYYYMMDD{6位id}
"""
if self.id is None or self.created_at is None:
return ""
return f"XS{self.created_at.year}{self.created_at.month:02d}{self.created_at.day:02d}{self.id:06d}"
return build_business_human_id('XS', self.created_at, self.id)
class Meta:
verbose_name = '销售单'
@@ -505,9 +508,7 @@ class PreSalesOrder(ModelBase):
规则YS + YYYYMMDD{6位id}
"""
if self.id is None or self.created_at is None:
return ""
return f"YS{self.created_at.year}{self.created_at.month:02d}{self.created_at.day:02d}{self.id:06d}"
return build_business_human_id('YS', self.created_at, self.id)
class Meta:
verbose_name = '预销售单'
@@ -710,9 +711,7 @@ class PrePurchaseOrder(ModelBase):
规则YC + YYYYMMDD{6位id}
"""
if self.id is None or self.created_at is None:
return ''
return f"YC{self.created_at.year}{self.created_at.month:02d}{self.created_at.day:02d}{self.id:06d}"
return build_business_human_id('YC', self.created_at, self.id)
class Meta:
verbose_name = '预采购单'
@@ -823,9 +822,7 @@ class PurchaseReturnOrder(OrderItemsAggregationMixin, OrderDirectionMixin, Order
规则与 SalesOrder.human_id 保持一致CT + YYYYMMDD{6位id}
"""
if self.id is None or self.created_at is None:
return ""
return f"CT{self.created_at.year}{self.created_at.month:02d}{self.created_at.day:02d}{self.id:06d}"
return build_business_human_id('CT', self.created_at, self.id)
def get_direction(self) -> int:
return -1
@@ -955,9 +952,7 @@ class SalesReturnOrder(OrderItemsAggregationMixin, OrderDirectionMixin, OrderCou
规则与 SalesOrder.human_id 保持一致XT + YYYYMMDD{6位id}
"""
if self.id is None or self.created_at is None:
return ""
return f"XT{self.created_at.year}{self.created_at.month:02d}{self.created_at.day:02d}{self.id:06d}"
return build_business_human_id('XT', self.created_at, self.id)
def get_direction(self) -> int:
return 1
@@ -1149,6 +1144,11 @@ class PaymentOrder(OrderDirectionMixin, OrderCounterpartyMixin, ModelBase):
def __str__(self):
return f'付款单 {self.id} - {self.supplier.name}'
@property
def human_id(self) -> str:
"""人类可读编号虚拟编号不落库FK + YYYYMMDD{6位id}"""
return build_business_human_id('FK', self.created_at, self.id)
@property
def settlement_amount(self) -> Decimal:
discount = self.discount_amount or Decimal('0')
@@ -1235,6 +1235,11 @@ class ReceiptOrder(OrderDirectionMixin, OrderCounterpartyMixin, ModelBase):
def __str__(self):
return f'收款单 {self.id} - {self.customer.name}'
@property
def human_id(self) -> str:
"""人类可读编号虚拟编号不落库SK + YYYYMMDD{6位id}"""
return build_business_human_id('SK', self.created_at, self.id)
@property
def settlement_amount(self) -> Decimal:
discount = self.discount_amount or Decimal('0')