fix order
This commit is contained in:
1 parent
ae4dbab3cc
commit
4dc6d98abf
3 files changed
+38
-3
No files matched your search
@@ -418,6 +418,39 @@ class OrderingRegressionTests(RegressionFixtures):
|
|||||||
self.assertIsNone(response.data['category_img'])
|
self.assertIsNone(response.data['category_img'])
|
||||||
self.assertEqual([row['name'] for row in response.data['products']], ['B', 'A'])
|
self.assertEqual([row['name'] for row in response.data['products']], ['B', 'A'])
|
||||||
|
|
||||||
|
def test_catalog_order_changes_follow_database_and_zero_precedes_null(self):
|
||||||
|
Product.objects.create(name='Unordered product', category=self.unordered, sys_ws=self.workspace, price=1)
|
||||||
|
self.use_role()
|
||||||
|
ProductCategory.objects.filter(pk=self.second.pk).update(order_cat=0)
|
||||||
|
response = self.client.get('/shop/v2/product-category/list/')
|
||||||
|
self.assertEqual([row['name'] for row in response.data], ['Second', 'First', 'Unordered'])
|
||||||
|
Product.objects.filter(pk=self.a.pk).update(order_prd=0)
|
||||||
|
Product.objects.filter(pk=self.b.pk).update(order_prd=None)
|
||||||
|
response = self.client.get(f'/shop/product/list/{self.first.pk}/')
|
||||||
|
self.assertEqual([row['name'] for row in response.data['products']], ['A', 'B'])
|
||||||
|
Product.objects.create(name='Custom later', category=self.first, sys_ws=self.workspace, price=1, view_only=True, order_prd=None)
|
||||||
|
Product.objects.create(name='Custom first', category=self.first, sys_ws=self.workspace, price=1, view_only=True, order_prd=0)
|
||||||
|
response = self.client.get(f'/shop/product/list/{self.first.pk}/')
|
||||||
|
self.assertEqual([row['name'] for row in response.data['view_only_products']], ['Custom first', 'Custom later'])
|
||||||
|
|
||||||
|
def test_order_excel_uses_current_database_order_independently_of_insertion(self):
|
||||||
|
order = Order.objects.create(customer=self.customer, total_price=60, factor_type=1, sys_ws=self.workspace)
|
||||||
|
for product in [self.c, self.b, self.a]:
|
||||||
|
OrderItem.objects.create(order=order, product=product, product_name=product.name, price=product.price, amount=1)
|
||||||
|
self.use_role(self.operator)
|
||||||
|
ProductCategory.objects.filter(pk=self.first.pk).update(excel_order=0)
|
||||||
|
Product.objects.filter(pk=self.b.pk).update(excel_order=0)
|
||||||
|
response = self.client.get(f'/shop/order/{order.pk}/operator/excel/')
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
sheet = load_workbook(BytesIO(response.content)).active
|
||||||
|
self.assertEqual([row[0] for row in list(sheet.values)[1:]], ['FirstB', 'FirstA', 'SecondC'])
|
||||||
|
ProductCategory.objects.update(excel_order=None)
|
||||||
|
Product.objects.update(excel_order=None)
|
||||||
|
ProductCategory.objects.filter(pk=self.second.pk).update(order_cat=0)
|
||||||
|
response = self.client.get(f'/shop/order/{order.pk}/operator/excel/')
|
||||||
|
sheet = load_workbook(BytesIO(response.content)).active
|
||||||
|
self.assertEqual([row[0] for row in list(sheet.values)[1:]], ['SecondC', 'FirstB', 'FirstA'])
|
||||||
|
|
||||||
def test_order_excel_matches_independent_order_and_handles_empty_order(self):
|
def test_order_excel_matches_independent_order_and_handles_empty_order(self):
|
||||||
order = Order.objects.create(customer=self.customer, total_price=60, factor_type=1, sys_ws=self.workspace)
|
order = Order.objects.create(customer=self.customer, total_price=60, factor_type=1, sys_ws=self.workspace)
|
||||||
for product in [self.b, self.a, self.c]:
|
for product in [self.b, self.a, self.c]:
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
from apps.shop.models import Product as ProductModel
|
from apps.shop.models import Product as ProductModel
|
||||||
from rest_framework import exceptions
|
from rest_framework import exceptions
|
||||||
|
from apps.shop.ordering import product_ordering
|
||||||
|
|
||||||
|
|
||||||
def retrieve_product(product_id: int, workspace_uuid: str) -> ProductModel:
|
def retrieve_product(product_id: int, workspace_uuid: str) -> ProductModel:
|
||||||
@@ -23,7 +24,7 @@ def list_product(workspace_uuid: str) -> ProductModel:
|
|||||||
def list_product_by_category(workspace_uuid: str, category_id: int) -> ProductModel:
|
def list_product_by_category(workspace_uuid: str, category_id: int) -> ProductModel:
|
||||||
try:
|
try:
|
||||||
product_category_obj = ProductModel.objects.filter(sys_ws__uuid=workspace_uuid, category_id=category_id,
|
product_category_obj = ProductModel.objects.filter(sys_ws__uuid=workspace_uuid, category_id=category_id,
|
||||||
view_only=False)
|
view_only=False).order_by(*product_ordering())
|
||||||
return product_category_obj
|
return product_category_obj
|
||||||
except Exception as exp:
|
except Exception as exp:
|
||||||
message = f'Error Fetching List Product by category: {exp}'
|
message = f'Error Fetching List Product by category: {exp}'
|
||||||
@@ -33,7 +34,7 @@ def list_product_by_category(workspace_uuid: str, category_id: int) -> ProductMo
|
|||||||
def list_view_only_product_by_category(workspace_uuid: str, category_id: int) -> ProductModel:
|
def list_view_only_product_by_category(workspace_uuid: str, category_id: int) -> ProductModel:
|
||||||
try:
|
try:
|
||||||
view_only_product_category_obj = ProductModel.objects.filter(sys_ws__uuid=workspace_uuid, category_id=category_id,
|
view_only_product_category_obj = ProductModel.objects.filter(sys_ws__uuid=workspace_uuid, category_id=category_id,
|
||||||
view_only=True)
|
view_only=True).order_by(*product_ordering())
|
||||||
return view_only_product_category_obj
|
return view_only_product_category_obj
|
||||||
except Exception as exp:
|
except Exception as exp:
|
||||||
message = f'Error Fetching View Only List Product by category: {exp}'
|
message = f'Error Fetching View Only List Product by category: {exp}'
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ from apps.shop.selectors import *
|
|||||||
from rest_framework import generics
|
from rest_framework import generics
|
||||||
from rest_framework.permissions import IsAuthenticated
|
from rest_framework.permissions import IsAuthenticated
|
||||||
from django.db.models import Count
|
from django.db.models import Count
|
||||||
|
from apps.shop.ordering import category_ordering
|
||||||
from utils.tools import inline_serializer
|
from utils.tools import inline_serializer
|
||||||
from utils import custom_permissions
|
from utils import custom_permissions
|
||||||
|
|
||||||
@@ -164,7 +165,7 @@ class ProductsCategoryApi(APIView):
|
|||||||
|
|
||||||
p_cate = ProductCategoryModel.objects.filter(
|
p_cate = ProductCategoryModel.objects.filter(
|
||||||
sys_ws__uuid=get_user_workspace_uuid(request),
|
sys_ws__uuid=get_user_workspace_uuid(request),
|
||||||
).annotate(product_count=Count('product')).filter(product_count__gte=1)
|
).annotate(product_count=Count('product')).filter(product_count__gte=1).order_by(*category_ordering())
|
||||||
output = self.OutputSerializer(p_cate, many=True)
|
output = self.OutputSerializer(p_cate, many=True)
|
||||||
|
|
||||||
return Response(data=output.data, status=status.HTTP_200_OK)
|
return Response(data=output.data, status=status.HTTP_200_OK)
|
||||||
Reference in new issue
Block a user