from apps.lead.models import Lead as LeadModel, LeadType as LeadTypeModel,\ LeadSource as LeadSourceModel, LeadStep as LeadStepModel, LeadEvent as LeadEventModel from apps.shop.models import ProductType as ProductTypeModel from apps.workspace.models import City as CityModel from utils.get_user_workspace import get_user_workspace_uuid from utils.get_cuser_role import get_cuser_role_uuid, get_cuser_role from rest_framework import exceptions def list_leads(request) -> LeadModel: try: workspace_uuid = get_user_workspace_uuid(request) cuser_role_uuid = get_cuser_role_uuid(request) cuser_role = get_cuser_role(request) base_filter = { 'sys_ws__uuid': workspace_uuid, } if not cuser_role.is_admin: base_filter['cuser_role__uuid'] = cuser_role_uuid leads = LeadModel.objects.filter(**base_filter).order_by('-created_at') return leads except Exception as exp: message = f'Error Fetching List Leads: {exp}' raise exceptions.ValidationError({'error': message}) def retrieve_lead(request, id: int) -> LeadModel: try: workspace_uuid = get_user_workspace_uuid(request) cuser_role_uuid = get_cuser_role_uuid(request) cuser_role = get_cuser_role(request) base_filter = { 'sys_ws__uuid': workspace_uuid, } if not cuser_role.is_admin: base_filter['cuser_role__uuid'] = cuser_role_uuid lead = LeadModel.objects.get(id=id, **base_filter) return lead except Exception as exp: message = f'Error retrieve Leads: {exp}' raise exceptions.ValidationError({'error': message}) def retrieve_summary_lead(request) -> LeadModel: try: workspace_uuid = get_user_workspace_uuid(request) cuser_role_uuid = get_cuser_role_uuid(request) mozakere = LeadModel.objects.filter(step_id=2, status__in=('UN', ''), sys_ws__uuid=workspace_uuid, cuser_role__uuid=cuser_role_uuid)[:20] pish = LeadModel.objects.filter(step_id=3, status__in=('UN', ''), sys_ws__uuid=workspace_uuid, cuser_role__uuid=cuser_role_uuid)[:20] kharid = LeadModel.objects.filter(step_id=4, status__in=('UN', ''), sys_ws__uuid=workspace_uuid, cuser_role__uuid=cuser_role_uuid)[:20] leads = { 'mozakere': mozakere, 'pishfactor': pish, 'kharid': kharid, } return leads except Exception as exp: message = f'Error retrieve summary Leads: {exp}' raise exceptions.ValidationError({'error': message}) def fields_new_lead_form(request): workspace_uuid = get_user_workspace_uuid(request) lead_type = LeadTypeModel.objects.filter(sys_ws__uuid=workspace_uuid) product_types = ProductTypeModel.objects.filter(sys_ws__uuid=workspace_uuid) lead_source = LeadSourceModel.objects.filter(sys_ws__uuid=workspace_uuid) lead_step = LeadStepModel.objects.filter(sys_ws__uuid=workspace_uuid) lead_event = LeadEventModel.objects.filter(sys_ws__uuid=workspace_uuid) shahr = CityModel.objects.filter() data = { 'product_types': product_types, 'lead_types': lead_type, 'lead_source': lead_source, 'lead_steps': lead_step, 'lead_event': lead_event, 'shahr': shahr, } return data