forked from erp-dev/erp
feat: correct first
This commit is contained in:
@@ -981,6 +981,66 @@ class SalesReturnOrderItem(ModelBase):
|
||||
|
||||
def total_amount(self):
|
||||
return round(self.price * self.real_quantity(), 2)
|
||||
|
||||
|
||||
class ExternalCustomerStatementCategoryEnum(models.TextChoices):
|
||||
SALE = 'sale', '外部销售单'
|
||||
SALE_RETURN = 'sale_return', '外部销售退货单'
|
||||
|
||||
|
||||
class ExternalCustomerStatementOrder(ModelBase):
|
||||
"""仅用于对账单计算的外部业务来源单据。"""
|
||||
|
||||
id = models.BigAutoField(primary_key=True)
|
||||
merchant = models.ForeignKey(
|
||||
basic_info_models.Merchant,
|
||||
on_delete=models.PROTECT,
|
||||
related_name='external_customer_statement_orders',
|
||||
verbose_name='所属商户',
|
||||
)
|
||||
customer = models.ForeignKey(
|
||||
basic_info_models.Customer,
|
||||
on_delete=models.PROTECT,
|
||||
related_name='external_statement_orders',
|
||||
verbose_name='客户',
|
||||
)
|
||||
category = models.CharField(
|
||||
max_length=20,
|
||||
choices=ExternalCustomerStatementCategoryEnum.choices,
|
||||
verbose_name='外部业务分类',
|
||||
)
|
||||
external_customer_id = models.CharField(max_length=100, blank=True, default='', verbose_name='外部客户ID')
|
||||
external_source_id = models.CharField(max_length=100, db_index=True, verbose_name='外部单号')
|
||||
occurred_at = models.DateField(verbose_name='业务日期')
|
||||
recorded_at = models.DateTimeField(blank=True, null=True, verbose_name='录单时间')
|
||||
settlement_method = models.CharField(max_length=100, blank=True, default='', verbose_name='结算方式')
|
||||
total_amount = models.DecimalField(max_digits=15, decimal_places=2, default=Decimal('0'), verbose_name='总金额')
|
||||
sf_amount = models.DecimalField(
|
||||
max_digits=15, decimal_places=2, default=Decimal('0'),
|
||||
verbose_name='现场收款金额',
|
||||
help_text='销售单上的现场收款(SfJinE)合计,仅 sale 类型有值',
|
||||
)
|
||||
zk_amount = models.DecimalField(
|
||||
max_digits=15, decimal_places=2, default=Decimal('0'),
|
||||
verbose_name='折扣金额',
|
||||
help_text='该单据的折扣(ZkJinE)合计',
|
||||
)
|
||||
remarks = models.TextField(blank=True, null=True, verbose_name='备注')
|
||||
items_payload = models.JSONField(default=list, blank=True, verbose_name='明细快照')
|
||||
extra_payload = models.JSONField(default=dict, blank=True, verbose_name='扩展数据')
|
||||
|
||||
class Meta:
|
||||
verbose_name = '外部客户对账来源单'
|
||||
verbose_name_plural = '外部客户对账来源单'
|
||||
constraints = [
|
||||
models.UniqueConstraint(
|
||||
fields=['merchant', 'category', 'external_source_id'],
|
||||
name='uniq_external_customer_statement_order_source',
|
||||
)
|
||||
]
|
||||
|
||||
def __str__(self):
|
||||
return f'外部对账来源 {self.external_source_id} ({self.category})'
|
||||
|
||||
def split_quantity_of_rolls(self) -> List[int]:
|
||||
if self.quantity_of_rolls:
|
||||
@@ -1036,6 +1096,17 @@ class PaymentOrder(OrderDirectionMixin, OrderCounterpartyMixin, ModelBase):
|
||||
default=PaymentOrderStatusEnum.PENDING,
|
||||
verbose_name='状态',
|
||||
)
|
||||
is_external_source = models.BooleanField(
|
||||
default=False,
|
||||
verbose_name='是否外部来源',
|
||||
)
|
||||
external_source_id = models.CharField(
|
||||
max_length=100,
|
||||
null=True,
|
||||
blank=True,
|
||||
db_index=True,
|
||||
verbose_name='外部来源ID',
|
||||
)
|
||||
remarks = models.TextField(blank=True, null=True, verbose_name='备注')
|
||||
|
||||
class Meta:
|
||||
@@ -1108,6 +1179,17 @@ class ReceiptOrder(OrderDirectionMixin, OrderCounterpartyMixin, ModelBase):
|
||||
default=ReceiptOrderStatusEnum.PENDING,
|
||||
verbose_name='状态',
|
||||
)
|
||||
is_external_source = models.BooleanField(
|
||||
default=False,
|
||||
verbose_name='是否外部来源',
|
||||
)
|
||||
external_source_id = models.CharField(
|
||||
max_length=100,
|
||||
null=True,
|
||||
blank=True,
|
||||
db_index=True,
|
||||
verbose_name='外部来源ID',
|
||||
)
|
||||
remarks = models.TextField(blank=True, null=True, verbose_name='备注')
|
||||
|
||||
class Meta:
|
||||
|
||||
Reference in New Issue
Block a user