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 from apps.shop.ordering import product_ordering 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) OrderModel.objects.get(pk=order_id, sys_ws__uuid=workspace_uuid) order_items = OrderItemModel.objects.filter(order_id=order_id).order_by( *product_ordering(prefix='product__', excel=True), 'pk', ) columns = ['product__acc_code', 'product__category__name', 'product_name', 'amount', 'product__attr__acc_vahed'] df = pd.DataFrame.from_records(list(order_items.values(*columns)), columns=columns) #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})