Files
crmApi/apps/shop/selectors/order.py
T
2025-06-28 15:12:07 +03:30

151 lines
6.3 KiB
Python

from apps.shop.models import Order as OrderModel, OrderItem as OrderItemModel
from apps.customer.models import CustomerResponsible as CustomerResponsibleModel
from apps.cuser.models import CuserRole as CuserRoleModel
from rest_framework import exceptions
from utils.custom_permissions import workspace_admin_up
from utils.get_user_workspace import get_user_workspace_uuid, get_user_workspace
from utils.get_cuser_role import get_cuser_role, get_cuser_role_uuid
from apps.customer.models import Customer as CustomerModel
from django.http import HttpResponse
import pandas as pd
from django.utils import timezone
def retrieve_order(cuser_role_uuid: str, order_id: int, workspace_uuid: str) -> OrderModel:
try:
cuser_role = CuserRoleModel.objects.select_related('role_type').get
role_type = cuser_role.role_type
if role_type.role_name_en == 'workspace_customer':
customer = CustomerModel.objects.get(cuser_role=cuser_role)
order_obj = OrderModel.objects.get(id=order_id, sys_ws__uuid=workspace_uuid, customer=customer)
return order_obj
if role_type.role_name_en in ('workspace_owner', 'workspace_operator', 'workspace_admin'):
order_obj = OrderModel.objects.get(id=order_id, sys_ws__uuid=workspace_uuid)
return order_obj
except Exception as exp:
message = f'Error Retrieve Order: {exp}'
raise exceptions.ValidationError({'error': message})
def list_order(cuser_role_uuid: str, workspace_uuid: str) -> OrderModel:
try:
cuser_role = CuserRoleModel.objects.select_related('role_type').get(uuid=cuser_role_uuid)
role_type = cuser_role.role_type
if role_type.role_name_en == 'workspace_customer':
customer = CustomerModel.objects.get(cuser_role=cuser_role)
orders_obj = OrderModel.objects.filter(sys_ws__uuid=workspace_uuid, customer=customer).order_by('-created_at')
return orders_obj
if role_type.role_name_en in ('workspace_owner', 'workspace_operator', 'workspace_admin'):
orders_obj = OrderModel.objects.filter(sys_ws__uuid=workspace_uuid).order_by('-created_at')
return orders_obj
except Exception as exp:
message = f'Error Fetching List Order: {exp}'
raise exceptions.ValidationError({'error': message})
def list_order_operators(request) -> OrderModel:
try:
workspace_uuid = get_user_workspace_uuid(request)
cuser_role_uuid = get_cuser_role_uuid(request)
cuser_role = get_cuser_role(request)
customer_responsibles = CustomerResponsibleModel.objects.filter(cuser_role__uuid=cuser_role_uuid, sys_ws__uuid=workspace_uuid)
responsible_group_ids = customer_responsibles.values_list('responsible_group__id', flat=True)
base_filter = {
'sys_ws__uuid': workspace_uuid,
}
#if not cuser_role.is_admin:
# base_filter['responsible_group_id__in'] = responsible_group_ids
orders = OrderModel.objects.filter(**base_filter).order_by('-created_at')[:50]
return orders
except Exception as exp:
message = f'Error Fetching List Order: {exp}'
raise exceptions.ValidationError({'error': message})
def retrieve_order_operators(request, order_id) -> OrderModel:
try:
workspace_uuid = get_user_workspace_uuid(request)
cuser_role_uuid = get_cuser_role_uuid(request)
cuser_role = get_cuser_role(request)
customer_responsibles = CustomerResponsibleModel.objects.filter(cuser_role__uuid=cuser_role_uuid, sys_ws__uuid=workspace_uuid)
responsible_group_ids = customer_responsibles.values_list('responsible_group__id', flat=True)
base_filter = {
'sys_ws__uuid': workspace_uuid,
'id': order_id,
}
#if not cuser_role.is_admin:
# base_filter['responsible_group_id__in'] = responsible_group_ids
order = OrderModel.objects.get(**base_filter)
if not cuser_role.is_admin:
order.view_at = timezone.now()
order.save()
return order
except Exception as exp:
message = f'Error Retrive Order: {exp}'
raise exceptions.ValidationError({'error': message})
def retrieve_order_item_excel(request, order_id):
try:
workspace_uuid = get_user_workspace_uuid(request)
cuser_role_uuid = get_cuser_role_uuid(request)
customer_responsibles = CustomerResponsibleModel.objects.filter(cuser_role__uuid=cuser_role_uuid,
sys_ws__uuid=workspace_uuid)
responsible_group_ids = customer_responsibles.values_list('responsible_group__id', flat=True)
order_items = OrderItemModel.objects.filter(order_id=order_id,
order__responsible_group_id__in=responsible_group_ids)
df = pd.DataFrame(list(order_items.values('product__acc_code', 'product__category__name', 'product_name', 'amount', 'product__attr__acc_vahed')))
#df['واحد سنجش'] = ''
df['عامل کنترل موجودی اول'] = ''
df['عامل کنترل موجودی دوم'] = ''
df['عامل کنترل موجودی سوم'] = ''
df['عامل کنترل موجودی سوم'] = ''
df['عامل کنترل موجودی چهارم'] = ''
df['عامل کنترل موجودی پنجم'] = ''
df['محصول'] = df['product__category__name'] + df['product_name']
df = df.drop(columns=['product__category__name', 'product_name'])
df.rename(columns={
'product__acc_code': ' کد محصول',
'amount': 'مقدار',
'product__attr__acc_vahed': 'واحد سنجش'
}, inplace=True)
df = df[['محصول',
' کد محصول',
'واحد سنجش',
'عامل کنترل موجودی اول',
'عامل کنترل موجودی دوم',
'عامل کنترل موجودی سوم',
'عامل کنترل موجودی چهارم',
'عامل کنترل موجودی پنجم',
'مقدار',
]]
return df
except Exception as exp:
message = f'Error Retrive Order Items for excel: {exp}'
raise exceptions.ValidationError({'error': message})