1
0
forked from erp-dev/erp

fix: frozen excluded from stock api

This commit is contained in:
2026-02-02 19:09:06 +08:00
parent 1c630606c8
commit dee1c814b9
4 changed files with 130 additions and 0 deletions

View File

@@ -194,6 +194,88 @@ class SalesOrderServiceTestCase(TestCase):
self.assertEqual(item.consume_detail_ids, ','.join(consume_ids))
self.assertEqual(item.quantity_of_rolls, '6,4')
def test_review_sales_order_unfreezes_consumed_stock(self):
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,
)
detail_1 = stock_models.StockChangeDetail.objects.create(
merchant=self.merchant,
product=self.product,
unit=self.product.unit,
stock_change_record=stock_record,
quantity='6',
)
detail_2 = stock_models.StockChangeDetail.objects.create(
merchant=self.merchant,
product=self.product,
unit=self.product.unit,
stock_change_record=stock_record,
quantity='4',
)
stock_models.StockFreeze.objects.create(
merchant=self.merchant,
product=self.product,
warehouse=self.warehouse_strict_out,
stock_detail=detail_1,
quantity=detail_1.quantity,
unit=detail_1.unit,
status=stock_models.StockFreezeStatusEnum.FROZEN,
frozen_by=self.user,
frozen_with=1,
)
stock_models.StockFreeze.objects.create(
merchant=self.merchant,
product=self.product,
warehouse=self.warehouse_strict_out,
stock_detail=detail_2,
quantity=detail_2.quantity,
unit=detail_2.unit,
status=stock_models.StockFreezeStatusEnum.FROZEN,
frozen_by=self.user,
frozen_with=2,
)
sales_order = services.create_sales_order(
merchant=self.merchant,
customer=self.customer,
order_date=timezone.now().date(),
warehouse=self.warehouse_strict_out,
operator=self.operator,
items=[
{
'product_id': self.product.id,
'consume_detail_ids': [detail_1.id, detail_2.id],
'quantity': 10,
'price': '32.0',
'unit': '',
}
],
created_by=self.user,
)
with patch('business.services.create_sales_order_stock_entries.delay') as mock_delay:
reviewed = services.review_sales_order(
sales_order=sales_order,
target_status=business_models.SalesOrderStatusEnum.APPROVED,
reviewed_by=self.user,
)
self.assertEqual(reviewed.status, business_models.SalesOrderStatusEnum.APPROVED)
mock_delay.assert_called_once()
statuses = list(
stock_models.StockFreeze.objects.filter(
stock_detail_id__in=[detail_1.id, detail_2.id]
).values_list('status', flat=True)
)
self.assertEqual(
set(statuses),
{stock_models.StockFreezeStatusEnum.COMPLETED},
)
def test_sales_order_outgoing_missing_consume_ids_raises(self):
payload = [
{