1
0
forked from erp-dev/erp

feat: payment order and receipt order

This commit is contained in:
2025-11-30 21:52:36 +08:00
parent ce1954ad58
commit 9006a530d1
12 changed files with 900 additions and 12 deletions

View File

@@ -316,3 +316,107 @@ class SalesOrderItem(ModelBase):
def total_amount(self):
return round(self.price * self.real_quantity(), 2)
class PaymentOrderStatusEnum(models.IntegerChoices):
PENDING = 1, '审批中'
APPROVED = 2, '审批通过'
CANCELLED = 3, '作废'
class PaymentOrder(OrderDirectionMixin, OrderCounterpartyMixin, ModelBase):
id = models.BigAutoField(primary_key=True)
merchant = models.ForeignKey(
basic_info_models.Merchant,
on_delete=models.PROTECT,
related_name='payment_orders',
verbose_name='所属商户',
)
supplier = models.ForeignKey(
basic_info_models.Supplier,
on_delete=models.PROTECT,
related_name='payment_orders',
verbose_name='供应商',
)
payment_date = models.DateField(verbose_name='付款日期')
amount = models.DecimalField(max_digits=15, decimal_places=2, verbose_name='金额')
operator = models.ForeignKey(
basic_info_models.Employee,
on_delete=models.PROTECT,
related_name='payment_orders',
verbose_name='经办人',
)
status = models.IntegerField(
choices=PaymentOrderStatusEnum.choices,
default=PaymentOrderStatusEnum.PENDING,
verbose_name='状态',
)
remarks = models.TextField(blank=True, null=True, verbose_name='备注')
class Meta:
verbose_name = '付款单'
verbose_name_plural = '付款单'
def __str__(self):
return f'付款单 {self.id} - {self.supplier.name}'
def get_total_amount(self) -> Decimal:
return self.amount
def get_direction(self) -> int:
return -1
def get_counterparty_field_name(self) -> str:
return 'supplier'
class ReceiptOrderStatusEnum(models.IntegerChoices):
PENDING = 1, '审批中'
APPROVED = 2, '审批通过'
CANCELLED = 3, '作废'
class ReceiptOrder(OrderDirectionMixin, OrderCounterpartyMixin, ModelBase):
id = models.BigAutoField(primary_key=True)
merchant = models.ForeignKey(
basic_info_models.Merchant,
on_delete=models.PROTECT,
related_name='receipt_orders',
verbose_name='所属商户',
)
customer = models.ForeignKey(
basic_info_models.Customer,
on_delete=models.PROTECT,
related_name='receipt_orders',
verbose_name='客户',
)
receipt_date = models.DateField(verbose_name='收款日期')
amount = models.DecimalField(max_digits=15, decimal_places=2, verbose_name='金额')
operator = models.ForeignKey(
basic_info_models.Employee,
on_delete=models.PROTECT,
related_name='receipt_orders',
verbose_name='经办人',
)
status = models.IntegerField(
choices=ReceiptOrderStatusEnum.choices,
default=ReceiptOrderStatusEnum.PENDING,
verbose_name='状态',
)
remarks = models.TextField(blank=True, null=True, verbose_name='备注')
class Meta:
verbose_name = '收款单'
verbose_name_plural = '收款单'
def __str__(self):
return f'收款单 {self.id} - {self.customer.name}'
def get_total_amount(self) -> Decimal:
return self.amount
def get_direction(self) -> int:
return -1
def get_counterparty_field_name(self) -> str:
return 'customer'