1
0
forked from erp-dev/erp

fix: added new field into purchase and stock cancelled or red flush

This commit is contained in:
2026-02-04 17:51:30 +08:00
parent d0379d615c
commit 21f1d1ba27
5 changed files with 98 additions and 1 deletions

View File

@@ -121,7 +121,8 @@ class StockChangeRecordResponseSerializer(serializers.ModelSerializer):
model = stock_models.StockChangeRecord
fields = [
'id', 'type', 'warehouse', 'source_type', 'source_id',
'is_finished', 'finished_at', 'created_at', 'updated_at'
'is_finished', 'finished_at', 'cancelled', 'is_offset', 'is_reversed',
'created_at', 'updated_at'
]

View File

@@ -58,6 +58,9 @@ class StockChangeViewMixin:
'source_id': record.source_id,
'is_finished': record.is_finished,
'finished_at': record.finished_at,
'cancelled': record.cancelled,
'is_offset': record.is_offset,
'is_reversed': record.is_reversed,
'created_at': record.created_at,
'created_by': record.created_by.username if record.created_by else None,
'remarks': record.remarks,

View File

@@ -4,6 +4,7 @@ import logging
import unittest
from django.contrib.auth import get_user_model
from django.utils import timezone
from django.test import TestCase
from rest_framework import status
from rest_framework.test import APIClient
@@ -139,6 +140,7 @@ class CreateStockChangeAPITestCase(TestCase):
logging.disable(logging.NOTSET)
self.addCleanup(logging.disable, logging.CRITICAL)
with self.assertLogs('api_v1.views.stock_change_views.mixins', level='ERROR') as cm:
response = self.client.post('/api/v1/stock-change/', payload, format='json')
@@ -146,6 +148,70 @@ class CreateStockChangeAPITestCase(TestCase):
self.assertEqual(response.data['error'], '无权限访问')
self.assertTrue(any('无员工信息' in msg for msg in cm.output))
def test_get_stock_change_includes_offset_status_fields(self):
record = stock_models.StockChangeRecord.objects.create(
merchant=self.merchant,
type=stock_models.StockChangeTypeEnum.ADD,
warehouse=self.warehouse,
source_type=stock_models.StockChangeSourceEnum.PURCHASE,
created_by=self.user,
)
detail = stock_models.StockChangeDetail.objects.create(
merchant=self.merchant,
stock_change_record=record,
product=self.product,
quantity='10',
unit=self.product.unit,
)
snapshot = stock_models.StockSnapshot.objects.create(
merchant=self.merchant,
product=self.product,
warehouse=self.warehouse,
delta='10',
quantity_before='0',
quantity_after='10',
stock_change_record=record,
unit=self.product.unit,
num_of_rolls=1,
cancelled=True,
cancelled_at=timezone.now(),
offset_id=1,
)
offset_record = stock_models.StockChangeRecord.objects.create(
merchant=self.merchant,
type=stock_models.StockChangeTypeEnum.ADD,
warehouse=self.warehouse,
source_type=stock_models.StockChangeSourceEnum.OFFSET,
created_by=self.user,
)
stock_models.StockSnapshot.objects.create(
merchant=self.merchant,
product=self.product,
warehouse=self.warehouse,
delta='-10',
quantity_before='10',
quantity_after='0',
stock_change_record=offset_record,
unit=self.product.unit,
num_of_rolls=1,
offset_to=snapshot.id,
offset_at=timezone.now(),
)
response = self.client.get(f'/api/v1/stock-change/{record.id}/')
self.assertEqual(response.status_code, status.HTTP_200_OK)
record_data = response.data['stock_change_record']
self.assertTrue(record_data['cancelled'])
self.assertTrue(record_data['is_reversed'])
self.assertFalse(record_data['is_offset'])
offset_response = self.client.get(f'/api/v1/stock-change/{offset_record.id}/')
self.assertEqual(offset_response.status_code, status.HTTP_200_OK)
offset_data = offset_response.data['stock_change_record']
self.assertTrue(offset_data['is_offset'])
self.assertFalse(offset_data['is_reversed'])
class CreateStockChangeRelaxedAPITestCase(TestCase):
"""测试宽松模式库存变动创建 API"""