1
0
forked from erp-dev/erp

feat: added n-to-1 relation between sales_order_item and printing_job model

This commit is contained in:
2025-12-11 18:09:10 +08:00
parent 633031d7cb
commit 1a8c446365
30 changed files with 41736 additions and 40 deletions

View File

@@ -147,6 +147,7 @@ class PurchaseOrderServiceTestCase(TestCase):
self.assertEqual(purchase_order.items.count(), 1)
item = purchase_order.items.first()
self.assertEqual(item.quantity_of_rolls, '10,5')
self.assertEqual(item.split_quantity_of_rolls(), [10, 5])
mock_delay.assert_not_called()
def test_review_purchase_order_approval_triggers_task(self):
@@ -210,7 +211,9 @@ class PurchaseOrderServiceTestCase(TestCase):
items=self.relaxed_items,
created_by=self.user,
)
self.assertIsNone(purchase_order.items.first().quantity_of_rolls)
item = purchase_order.items.first()
self.assertIsNone(item.quantity_of_rolls)
self.assertEqual(item.split_quantity_of_rolls(), [])
cancelled = services.review_purchase_order(
purchase_order=purchase_order,
@@ -343,7 +346,9 @@ class SalesOrderServiceTestCase(TestCase):
self.assertIsInstance(sales_order, business_models.SalesOrder)
self.assertEqual(sales_order.status, business_models.SalesOrderStatusEnum.PENDING)
self.assertEqual(sales_order.items.count(), 1)
self.assertEqual(sales_order.items.first().quantity_of_rolls, '6,4')
item = sales_order.items.first()
self.assertEqual(item.quantity_of_rolls, '6,4')
self.assertEqual(item.split_quantity_of_rolls(), [6, 4])
mock_delay.assert_not_called()
def test_review_sales_order_triggers_task(self):
@@ -501,6 +506,9 @@ class PurchaseReturnServiceTestCase(TestCase):
)
self.assertEqual(order.status, business_models.PurchaseReturnStatusEnum.PENDING)
self.assertEqual(order.items.count(), 1)
item = order.items.first()
self.assertEqual(item.quantity_of_rolls, '4,2')
self.assertEqual(item.split_quantity_of_rolls(), [4, 2])
def test_review_purchase_return_order_triggers_task_and_balance(self):
order = services.create_purchase_return_order(
@@ -601,6 +609,8 @@ class SalesReturnServiceTestCase(TestCase):
items=[{'product_id': self.product.id, 'quantity': 50, 'num_of_rolls': 2, 'price': '19.5'}],
)
self.assertEqual(order.status, business_models.SalesReturnStatusEnum.PENDING)
item = order.items.first()
self.assertEqual(item.split_quantity_of_rolls(), [])
def test_review_sales_return_order_updates_balance(self):
order = services.create_sales_return_order(
@@ -612,6 +622,7 @@ class SalesReturnServiceTestCase(TestCase):
items=self.strict_items,
created_by=self.user,
)
self.assertEqual(order.items.first().split_quantity_of_rolls(), [6, 2])
with patch('business.services.create_sales_return_order_stock_entries.delay') as mock_delay:
reviewed = services.review_sales_return_order(
sales_return_order=order,
@@ -782,15 +793,15 @@ class PaymentReceiptServiceTestCase(TestCase):
).exists()
)
def test_payment_amount_must_be_positive(self):
with self.assertRaises(ValueError):
services.create_payment_order(
merchant=self.merchant,
supplier=self.supplier,
payment_date=timezone.now().date(),
amount='-1',
operator=self.operator,
)
def test_payment_amount_can_be_negative(self):
order = services.create_payment_order(
merchant=self.merchant,
supplier=self.supplier,
payment_date=timezone.now().date(),
amount='-25.50',
operator=self.operator,
)
self.assertEqual(order.amount, Decimal('-25.50'))
def test_payment_discount_can_exceed_amount(self):
order = services.create_payment_order(
@@ -814,6 +825,16 @@ class PaymentReceiptServiceTestCase(TestCase):
)
self.assertEqual(order.settlement_amount, Decimal('110'))
def test_receipt_amount_can_be_negative(self):
order = services.create_receipt_order(
merchant=self.merchant,
customer=self.customer,
receipt_date=timezone.now().date(),
amount='-40',
operator=self.operator,
)
self.assertEqual(order.amount, Decimal('-40'))
def test_payment_order_rejects_foreign_bank_account(self):
other_merchant = basic_models.Merchant.objects.create(
name='无关商户',