151 lines
6.3 KiB
Python
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})
|