1
0
forked from erp-dev/erp

feat: added put/patch api to main oobject of business module

This commit is contained in:
2025-12-12 14:45:51 +08:00
parent 1a8c446365
commit 9e1f994416
14 changed files with 11611 additions and 0 deletions

View File

@@ -279,6 +279,44 @@ class PurchaseOrderServiceTestCase(TestCase):
created_by_id=self.user.id,
)
def test_update_purchase_order_success(self):
purchase_order = services.create_purchase_order(
merchant=self.merchant,
supplier=self.supplier,
order_date=timezone.now().date(),
warehouse=self.warehouse_relaxed,
operator=self.operator,
items=self.relaxed_items,
created_by=self.user,
)
updated = services.update_purchase_order(
purchase_order=purchase_order,
warehouse=self.warehouse_strict,
items=self.strict_items,
remarks='updated',
)
self.assertEqual(updated.remarks, 'updated')
self.assertEqual(updated.items.count(), 1)
self.assertEqual(updated.items.first().split_quantity_of_rolls(), [10, 5])
def test_update_purchase_order_rejects_non_pending(self):
purchase_order = services.create_purchase_order(
merchant=self.merchant,
supplier=self.supplier,
order_date=timezone.now().date(),
warehouse=self.warehouse_relaxed,
operator=self.operator,
items=self.relaxed_items,
created_by=self.user,
)
purchase_order.status = business_models.PurchaseOrderStatusEnum.APPROVED
purchase_order.save(update_fields=['status'])
with self.assertRaises(ValueError):
services.update_purchase_order(
purchase_order=purchase_order,
items=self.relaxed_items,
)
def test_purchase_order_relaxed_mode_even_split(self):
purchase_order = services.create_purchase_order(
merchant=self.merchant,
@@ -463,6 +501,45 @@ class SalesOrderServiceTestCase(TestCase):
created_by=self.user,
)
def test_update_sales_order_success(self):
sales_order = services.create_sales_order(
merchant=self.merchant,
customer=self.customer,
order_date=timezone.now().date(),
warehouse=self.warehouse_strict,
operator=self.operator,
items=self.strict_items,
created_by=self.user,
)
updated = services.update_sales_order(
sales_order=sales_order,
warehouse=self.warehouse_relaxed,
items=self.relaxed_items,
remarks='updated',
)
self.assertEqual(updated.remarks, 'updated')
self.assertEqual(updated.items.count(), 1)
item = updated.items.first()
self.assertEqual(item.split_quantity_of_rolls(), [])
def test_update_sales_order_rejects_non_pending(self):
sales_order = services.create_sales_order(
merchant=self.merchant,
customer=self.customer,
order_date=timezone.now().date(),
warehouse=self.warehouse_strict,
operator=self.operator,
items=self.strict_items,
created_by=self.user,
)
sales_order.status = business_models.SalesOrderStatusEnum.APPROVED
sales_order.save(update_fields=['status'])
with self.assertRaises(ValueError):
services.update_sales_order(
sales_order=sales_order,
items=self.strict_items,
)
class PurchaseReturnServiceTestCase(TestCase):
def setUp(self):
@@ -581,6 +658,43 @@ class PurchaseReturnServiceTestCase(TestCase):
items=payload,
)
def test_update_purchase_return_order_success(self):
order = services.create_purchase_return_order(
merchant=self.merchant,
supplier=self.supplier,
return_date=timezone.now().date(),
warehouse=self.warehouse_strict,
operator=self.operator,
items=self.strict_items,
created_by=self.user,
)
updated = services.update_purchase_return_order(
purchase_return_order=order,
items=self.strict_items,
remarks='updated',
)
self.assertEqual(updated.remarks, 'updated')
self.assertEqual(updated.items.count(), 1)
self.assertEqual(updated.items.first().split_quantity_of_rolls(), [4, 2])
def test_update_purchase_return_order_rejects_non_pending(self):
order = services.create_purchase_return_order(
merchant=self.merchant,
supplier=self.supplier,
return_date=timezone.now().date(),
warehouse=self.warehouse_strict,
operator=self.operator,
items=self.strict_items,
created_by=self.user,
)
order.status = business_models.PurchaseReturnStatusEnum.APPROVED
order.save(update_fields=['status'])
with self.assertRaises(ValueError):
services.update_purchase_return_order(
purchase_return_order=order,
items=self.strict_items,
)
class SalesReturnServiceTestCase(TestCase):
def setUp(self):
@@ -699,6 +813,43 @@ class SalesReturnServiceTestCase(TestCase):
quantities = sorted([detail.quantity for detail in record.details.order_by('id')], reverse=True)
self.assertEqual(quantities, [Decimal('33.34'), Decimal('33.33'), Decimal('33.33')])
def test_update_sales_return_order_success(self):
order = services.create_sales_return_order(
merchant=self.merchant,
customer=self.customer,
return_date=timezone.now().date(),
warehouse=self.warehouse_strict,
operator=self.operator,
items=self.strict_items,
created_by=self.user,
)
updated = services.update_sales_return_order(
sales_return_order=order,
items=self.strict_items,
remarks='updated',
)
self.assertEqual(updated.remarks, 'updated')
self.assertEqual(updated.items.count(), 1)
self.assertEqual(updated.items.first().split_quantity_of_rolls(), [6, 2])
def test_update_sales_return_order_rejects_non_pending(self):
order = services.create_sales_return_order(
merchant=self.merchant,
customer=self.customer,
return_date=timezone.now().date(),
warehouse=self.warehouse_strict,
operator=self.operator,
items=self.strict_items,
created_by=self.user,
)
order.status = business_models.SalesReturnStatusEnum.APPROVED
order.save(update_fields=['status'])
with self.assertRaises(ValueError):
services.update_sales_return_order(
sales_return_order=order,
items=self.strict_items,
)
class PaymentReceiptServiceTestCase(TestCase):
def setUp(self):
(