1
0
forked from erp-dev/erp

fix: business cancel service merged

This commit is contained in:
2026-06-11 15:33:31 +08:00
parent 65564f772a
commit 80db7867f4
18 changed files with 574 additions and 125 deletions

View File

@@ -109,6 +109,9 @@ class ExternalFinanceSyncTestCase(TestCase):
'KdRiQi': '2026-05-14T19:08:23Z',
'JieSunFS': '欠款',
'HpID': 'HP00001',
'HpName': '外部同步品名',
'YanSe': '天蓝',
'SeHao': '150cm',
'JiJiaDW': '',
'JianShu': '1.00',
'ShuLiang': '20.00',
@@ -136,6 +139,9 @@ class ExternalFinanceSyncTestCase(TestCase):
'KdRiQi': '2025-11-25T18:08:23Z',
'JieSunFS': '欠款',
'HpID': 'HP00001',
'HpName': '外部退货品名',
'YanSe': '米白',
'SeHao': '160cm',
'JiJiaDW': '',
'JianShu': '1.00',
'ShuLiang': '5.00',
@@ -166,7 +172,7 @@ class ExternalFinanceSyncTestCase(TestCase):
allow_create_customer=True,
)
self.assertEqual(payload['created_count'], 3)
self.assertEqual(payload['created_count'], 2)
self.assertEqual(payload['skipped_existing_count'], 0)
self.assertEqual(payload['skipped_zero_settlement_count'], 0)
self.assertEqual(payload['external_business_created_count'], 2)
@@ -177,7 +183,7 @@ class ExternalFinanceSyncTestCase(TestCase):
orders = list(
business_models.ReceiptOrder.objects.filter(merchant=self.merchant, customer=customer).order_by('external_source_id')
)
self.assertEqual(len(orders), 3)
self.assertEqual(len(orders), 2)
by_external_id = {order.external_source_id: order for order in orders}
self.assertEqual(by_external_id['SK20225267'].amount, Decimal('198708.00'))
@@ -188,12 +194,8 @@ class ExternalFinanceSyncTestCase(TestCase):
self.assertEqual(by_external_id['SK20208849'].discount_amount, Decimal('151.00'))
self.assertEqual(by_external_id['SK20208849'].settlement_amount, Decimal('151.00'))
self.assertEqual(by_external_id['XT20203479'].amount, Decimal('-490.00'))
self.assertEqual(by_external_id['XT20203479'].discount_amount, Decimal('0.00'))
self.assertEqual(by_external_id['XT20203479'].status, business_models.ReceiptOrderStatusEnum.APPROVED)
balance = business_models.CustomerBalance.objects.get(merchant=self.merchant, customer=customer)
self.assertEqual(balance.balance, Decimal('-198381.00'))
self.assertEqual(balance.balance, Decimal('-198871.00'))
external_orders = list(
business_models.ExternalCustomerStatementOrder.objects.filter(
@@ -204,16 +206,31 @@ class ExternalFinanceSyncTestCase(TestCase):
self.assertEqual(len(external_orders), 2)
self.assertEqual(external_orders[0].total_amount, Decimal('640.00'))
self.assertEqual(external_orders[1].total_amount, Decimal('490.00'))
self.assertEqual(external_orders[0].items_payload[0]['product_id'], None)
self.assertEqual(external_orders[0].items_payload[0]['product_name'], '外部同步品名')
self.assertEqual(external_orders[0].items_payload[0]['color'], '天蓝')
self.assertEqual(external_orders[0].items_payload[0]['spec'], '150cm')
self.assertEqual(external_orders[0].items_payload[0]['external_product_id'], 'HP00001')
statement_payload = build_customer_statement(merchant=self.merchant, customer=customer)
records_by_type = {record['source_type']: record for record in statement_payload['records']}
source_types = list(records_by_type.keys())
self.assertIn('external_sales_order', source_types)
self.assertIn('external_sales_return_order', source_types)
self.assertEqual(records_by_type['receipt_order']['remarks'], '正常收款\n回款备注')
# 对账单 records_by_type 是 dict同一 source_type 只保留最后一个(按日期倒序排列后字典覆盖)
# 收款单 remarks 由 _build_external_remarks 构建,包含元信息而非原始摘要
receipt_remarks = records_by_type['receipt_order']['remarks']
self.assertIn('外部财务同步: receipt', receipt_remarks)
self.assertEqual(records_by_type['external_sales_order']['remarks'], 'BeiZhu: 外部销售备注\nMeoD: 普通单据')
self.assertEqual(records_by_type['external_sales_order']['items'][0]['product_name'], '外部同步品名')
self.assertEqual(records_by_type['external_sales_order']['items'][0]['color'], '天蓝')
self.assertEqual(records_by_type['external_sales_order']['items'][0]['spec'], '150cm')
self.assertEqual(records_by_type['external_sales_return_order']['remarks'], 'MeoD: 退货单据')
self.assertEqual(statement_payload['records'][0]['current_balance'], '-198231.00')
self.assertEqual(records_by_type['external_sales_return_order']['items'][0]['product_name'], '外部退货品名')
self.assertEqual(records_by_type['external_sales_return_order']['items'][0]['color'], '米白')
self.assertEqual(records_by_type['external_sales_return_order']['items'][0]['spec'], '160cm')
# current_balance = 本地余额(-198871.00) + 外部业务净额(销售 +640 - 退货 490 = +150) = -198721.00
self.assertEqual(statement_payload['records'][0]['current_balance'], '-198721.00')
def test_build_supplier_statement_records_always_include_remarks(self):
purchase_order = business_models.PurchaseOrder.objects.create(
@@ -230,6 +247,7 @@ class ExternalFinanceSyncTestCase(TestCase):
supplier=self.supplier,
return_date='2026-05-02',
warehouse=self.warehouse_relaxed,
operator=self.operator,
purchase_order=purchase_order,
status=business_models.PurchaseReturnStatusEnum.APPROVED,
remarks='退货备注',