forked from erp-dev/erp
feat: statement for supplier and customer
This commit is contained in:
@@ -3,6 +3,7 @@ import shutil
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
from unittest.mock import patch
|
||||
from decimal import Decimal
|
||||
|
||||
from django.test import TestCase, override_settings
|
||||
from django.contrib.auth.models import User, Permission
|
||||
@@ -24,6 +25,7 @@ from basic_info.models import (
|
||||
)
|
||||
from business import models as business_models, services
|
||||
from stock import models as stock_models
|
||||
from stock import services as stock_services
|
||||
from api_v1 import tasks
|
||||
|
||||
|
||||
@@ -689,6 +691,81 @@ class SalesReturnOrderAPITestCase(TestCase):
|
||||
self.assertEqual(order.status, business_models.SalesReturnStatusEnum.PENDING)
|
||||
|
||||
|
||||
@override_settings(
|
||||
CELERY_TASK_ALWAYS_EAGER=True,
|
||||
CELERY_TASK_EAGER_PROPAGATES=True,
|
||||
)
|
||||
class StockChangeOffsetAPITestCase(TestCase):
|
||||
def setUp(self):
|
||||
self.merchant = Merchant.objects.create(name='库存商户', type=MerchantTypeEnum.FACTORY)
|
||||
self.user = User.objects.create_user(username='stock_user', password='pass123')
|
||||
self.employee = Employee.objects.create(
|
||||
merchant=self.merchant,
|
||||
sys_user=self.user,
|
||||
name='库存员',
|
||||
)
|
||||
self.client = APIClient()
|
||||
self.client.force_authenticate(user=self.user)
|
||||
|
||||
self.warehouse = WareHouse.objects.create(
|
||||
merchant=self.merchant,
|
||||
name='库存仓',
|
||||
mode=WareHouseModeEnum.RESTRICT_IN,
|
||||
)
|
||||
category = ProductCategory.objects.create(
|
||||
merchant=self.merchant,
|
||||
name='库存品类',
|
||||
product_prefix='STK',
|
||||
)
|
||||
self.product = Product.objects.create(
|
||||
merchant=self.merchant,
|
||||
category=category,
|
||||
name='库存产品',
|
||||
human_id='STK-001',
|
||||
unit=ProductUnitEnum.METER,
|
||||
)
|
||||
|
||||
self.stock_record, _, _ = stock_services.create_stock_change_record_with_details(
|
||||
merchant=self.merchant,
|
||||
created_by=None,
|
||||
type=stock_models.StockChangeTypeEnum.ADD,
|
||||
warehouse_id=self.warehouse.id,
|
||||
source_type=stock_models.StockChangeSourceEnum.PURCHASE,
|
||||
source_id=5001,
|
||||
products=[{'product': self.product.id, 'quantity': [Decimal('12')]}],
|
||||
)
|
||||
stock_services.make_stock_change_completed(self.stock_record)
|
||||
|
||||
def test_offset_stock_change_success(self):
|
||||
response = self.client.post(
|
||||
f'/api/v1/stock-change/{self.stock_record.id}/offset/',
|
||||
{'reason': '数据修正'},
|
||||
format='json',
|
||||
)
|
||||
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
||||
self.assertEqual(response.data['status'], 'success')
|
||||
self.assertEqual(
|
||||
stock_models.StockSnapshot.objects.filter(
|
||||
stock_change_record=self.stock_record,
|
||||
cancelled=True,
|
||||
).count(),
|
||||
1,
|
||||
)
|
||||
|
||||
def test_offset_stock_change_duplicate(self):
|
||||
self.client.post(
|
||||
f'/api/v1/stock-change/{self.stock_record.id}/offset/',
|
||||
{'reason': '首次'},
|
||||
format='json',
|
||||
)
|
||||
response = self.client.post(
|
||||
f'/api/v1/stock-change/{self.stock_record.id}/offset/',
|
||||
{'reason': '再次'},
|
||||
format='json',
|
||||
)
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
self.assertIn('已执行红冲', response.data['error'])
|
||||
|
||||
class PaymentOrderAPITestCase(TestCase):
|
||||
def setUp(self):
|
||||
self.merchant = Merchant.objects.create(name='付款商户', type=MerchantTypeEnum.FACTORY)
|
||||
@@ -879,6 +956,26 @@ class CustomerBalanceAPITestCase(TestCase):
|
||||
)
|
||||
response = self.client.get(f'/api/v1/customers/{self.customer.id}/balance/')
|
||||
self.assertEqual(response.data['balance'], '30.00')
|
||||
|
||||
|
||||
class SupplierBalanceAPITestCase(TestCase):
|
||||
def setUp(self):
|
||||
self.merchant = Merchant.objects.create(name='供应商余额商户', type=MerchantTypeEnum.FACTORY)
|
||||
self.supplier = Supplier.objects.create(merchant=self.merchant, name='供应商余额')
|
||||
self.user = User.objects.create_user(username='supplier-balance', password='pass123')
|
||||
self.employee = Employee.objects.create(
|
||||
merchant=self.merchant,
|
||||
sys_user=self.user,
|
||||
name='供应商财务',
|
||||
status=EmployeeStatusEnum.ACTIVE,
|
||||
)
|
||||
self.client = APIClient()
|
||||
self.client.force_authenticate(user=self.user)
|
||||
|
||||
def test_supplier_balance_api(self):
|
||||
response = self.client.get(f'/api/v1/suppliers/{self.supplier.id}/balance/')
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data['supplier'], self.supplier.id)
|
||||
@override_settings(
|
||||
CELERY_TASK_ALWAYS_EAGER=True,
|
||||
CELERY_TASK_EAGER_PROPAGATES=True,
|
||||
|
||||
Reference in New Issue
Block a user