forked from erp-dev/erp
feat: support pre_sales_order convert to sales_order api
This commit is contained in:
@@ -181,5 +181,11 @@ class AllocationServicesTestCase(TestCase):
|
||||
unit='米',
|
||||
scanned_by=self.employee,
|
||||
)
|
||||
updated = allocation_services.cancel_allocation_record(record=record)
|
||||
updated = allocation_services.cancel_allocation_record_with_unfreeze(
|
||||
record=record,
|
||||
cancelled_by=self.user,
|
||||
reason='测试撤销',
|
||||
)
|
||||
self.assertEqual(updated.status, business_models.AllocationRecordStatusEnum.CANCELLED)
|
||||
freeze = stock_models.StockFreeze.objects.get(stock_detail=self.stock_detail)
|
||||
self.assertEqual(freeze.status, stock_models.StockFreezeStatusEnum.CANCELLED)
|
||||
|
||||
@@ -6,6 +6,8 @@ from django.db import transaction
|
||||
from basic_info import models as basic_models
|
||||
from business import models as business_models
|
||||
from business import pre_order_services
|
||||
from business import allocation_services
|
||||
from stock import models as stock_models
|
||||
|
||||
from .fixtures import create_sales_fixtures
|
||||
|
||||
@@ -123,6 +125,74 @@ class PreSalesOrderServiceTestCase(TestCase):
|
||||
pre_order_services.delete_pre_sales_order(pre_sales_order=pre_sales_order)
|
||||
self.assertFalse(business_models.PreSalesOrder.objects.filter(id=order_id).exists())
|
||||
|
||||
def test_convert_pre_sales_order_to_sales_order_rejects_non_strict_out(self):
|
||||
pre_sales_order = pre_order_services.create_pre_sales_order(
|
||||
merchant=self.merchant,
|
||||
customer_id=self.customer.id,
|
||||
warehouse_id=self.warehouse_relaxed.id,
|
||||
created_by=self.user,
|
||||
operator=self.operator,
|
||||
items=[{'product_id': self.product.id, 'quantity': '10', 'unit': '米'}],
|
||||
)
|
||||
|
||||
with self.assertRaises(PermissionError):
|
||||
pre_order_services.convert_pre_sales_order_to_sales_order(
|
||||
merchant=self.merchant,
|
||||
pre_sales_order_id=pre_sales_order.id,
|
||||
operator=self.operator,
|
||||
created_by=self.user,
|
||||
)
|
||||
|
||||
def test_convert_pre_sales_order_to_sales_order_success(self):
|
||||
pre_sales_order = pre_order_services.create_pre_sales_order(
|
||||
merchant=self.merchant,
|
||||
customer_id=self.customer.id,
|
||||
warehouse_id=self.warehouse_strict_out.id,
|
||||
created_by=self.user,
|
||||
operator=self.operator,
|
||||
items=[{'product_id': self.product.id, 'quantity': '10', 'unit': '米'}],
|
||||
)
|
||||
item = pre_sales_order.items.first()
|
||||
|
||||
stock_record = stock_models.StockChangeRecord.objects.create(
|
||||
merchant=self.merchant,
|
||||
type=stock_models.StockChangeTypeEnum.ADD,
|
||||
warehouse=self.warehouse_strict_out,
|
||||
source_type=stock_models.StockChangeSourceEnum.PURCHASE,
|
||||
created_by=self.user,
|
||||
)
|
||||
stock_detail = stock_models.StockChangeDetail.objects.create(
|
||||
merchant=self.merchant,
|
||||
product=self.product,
|
||||
unit=basic_models.ProductUnitEnum.METER,
|
||||
stock_change_record=stock_record,
|
||||
quantity='10',
|
||||
)
|
||||
|
||||
allocation_services.create_allocation_record(
|
||||
item=item,
|
||||
stock_ids=[stock_detail.id],
|
||||
quantity='10',
|
||||
unit='米',
|
||||
scanned_by=self.operator,
|
||||
)
|
||||
|
||||
sales_order = pre_order_services.convert_pre_sales_order_to_sales_order(
|
||||
merchant=self.merchant,
|
||||
pre_sales_order_id=pre_sales_order.id,
|
||||
operator=self.operator,
|
||||
created_by=self.user,
|
||||
)
|
||||
|
||||
self.assertEqual(sales_order.customer_id, self.customer.id)
|
||||
self.assertEqual(sales_order.warehouse_id, self.warehouse_strict_out.id)
|
||||
self.assertEqual(sales_order.from_pre_sales_order_id, pre_sales_order.id)
|
||||
self.assertEqual(sales_order.status, business_models.SalesOrderStatusEnum.PENDING)
|
||||
self.assertEqual(sales_order.items.count(), 1)
|
||||
sales_item = sales_order.items.first()
|
||||
self.assertEqual(sales_item.product_id, self.product.id)
|
||||
self.assertEqual(sales_item.consume_detail_ids, str(stock_detail.id))
|
||||
|
||||
|
||||
class PreSalesOrderSignalTestCase(TransactionTestCase):
|
||||
def setUp(self):
|
||||
|
||||
Reference in New Issue
Block a user