forked from erp-dev/erp
fix: business cancel service merged
This commit is contained in:
@@ -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='退货备注',
|
||||
|
||||
Reference in New Issue
Block a user