from apps.lead.models import Lead as LeadModel,\ LeadType as LeadTypeModel, LeadStep as LeadStepModel, LeadSource as LeadSourceModel, LeadComment as LeadCommentModel from apps.shop.models import ProductType as ProductTypeModel from utils.get_user_workspace import get_user_workspace from utils.get_cuser_role import get_cuser_role from utils.validations import ObjectValidationById from apps.customer.models import Customer as CustomerModel from apps.workspace.models import City as CityModel from rest_framework import exceptions def create_new_lead(request, title: str, customer_id: str, desc: str, product_type_id: int, lead_type_id: int, lead_source_id: int, city_id: int, lead_step_id: int) -> LeadModel: try: sys_ws = get_user_workspace(request=request) cuser_role = get_cuser_role(request=request) customer = ObjectValidationById(object_model=CustomerModel, request=request).is_valid(int(customer_id)) lead_type = ObjectValidationById(object_model=LeadTypeModel, request=request).is_valid(lead_type_id) lead_step = ObjectValidationById(object_model=LeadStepModel, request=request).is_valid(lead_step_id) lead_source = ObjectValidationById(object_model=LeadSourceModel, request=request).is_valid(lead_source_id) product_type = ObjectValidationById(object_model=ProductTypeModel, request=request).is_valid(product_type_id) city = ObjectValidationById(object_model=CityModel, request=request).is_valid(city_id) new_lead = LeadModel() new_lead.title = title new_lead.customer = customer new_lead.desc = desc new_lead.type = lead_type new_lead.step = lead_step new_lead.source = lead_source new_lead.product_type = product_type new_lead.city = city new_lead.sys_ws = sys_ws new_lead.cuser_role = cuser_role new_lead.save() return new_lead except Exception as exp: print("error creae lead") message = f'Error Create New Lead: {exp}' raise exceptions.ValidationError({'error': message}) def update_lead(request, lead_id: int, title: str, customer_id: str, desc: str, product_type_id: int, lead_type_id: int, lead_source_id: int, city_id: int, lead_step_id: int) -> LeadModel: try: sys_ws = get_user_workspace(request=request) cuser_role = get_cuser_role(request=request) customer = ObjectValidationById(object_model=CustomerModel, request=request).is_valid(int(customer_id)) lead_type = ObjectValidationById(object_model=LeadTypeModel, request=request).is_valid(lead_type_id) lead_step = ObjectValidationById(object_model=LeadStepModel, request=request).is_valid(lead_step_id) lead_source = ObjectValidationById(object_model=LeadSourceModel, request=request).is_valid(lead_source_id) product_type = ObjectValidationById(object_model=ProductTypeModel, request=request).is_valid(product_type_id) city = ObjectValidationById(object_model=CityModel, request=request).is_valid(city_id) lead = LeadModel.objects.get(id=lead_id, sys_ws=sys_ws, cuser_role=cuser_role) lead.title = title lead.customer = customer lead.desc = desc lead.type = lead_type lead.step = lead_step lead.source = lead_source lead.product_type = product_type lead.city = city lead.save() return lead except Exception as exp: message = f'Error Update Lead: {exp}' raise exceptions.ValidationError({'error': message}) def update_lead_status(request, lead_id: int, status: str) -> LeadModel: try: sys_ws = get_user_workspace(request=request) cuser_role = get_cuser_role(request=request) lead = LeadModel.objects.get(id=lead_id, sys_ws=sys_ws, cuser_role=cuser_role) lead.status = status lead.save() return lead except Exception as exp: message = f'Error Update Lead Status: {exp}' raise exceptions.ValidationError({'error': message}) def update_lead_comment(request, lead_comment_id: int, desc: str) -> LeadModel: try: sys_ws = get_user_workspace(request=request) cuser_role = get_cuser_role(request=request) lead_comment = LeadCommentModel.objects.get(id=lead_comment_id, sys_ws=sys_ws, cuser_role=cuser_role) lead_comment.desc = desc lead_comment.save() return lead_comment except Exception as exp: message = f'Error Update Lead_comment: {exp}' raise exceptions.ValidationError({'error': message}) def create_lead_comment(request, lead_id, desc: str) -> LeadCommentModel: try: sys_ws = get_user_workspace(request=request) cuser_role = get_cuser_role(request=request) lead_comment = LeadCommentModel() lead_comment.lead = LeadModel.objects.get(id=lead_id, sys_ws=sys_ws, cuser_role=cuser_role) lead_comment.sys_ws = sys_ws lead_comment.cuser_role = cuser_role lead_comment.desc = desc lead_comment.save() return lead_comment except Exception as exp: message = f'Error Create Lead comment: {exp}' raise exceptions.ValidationError({'error': message}) def delete_lead_comment(request, lead_comment_id: int) -> LeadModel: try: sys_ws = get_user_workspace(request=request) cuser_role = get_cuser_role(request=request) lead_comment = LeadCommentModel.objects.get(id=lead_comment_id, sys_ws=sys_ws, cuser_role=cuser_role) lead_comment.delete() return lead_comment except Exception as exp: message = f'Error Delete Lead_comment: {exp}' raise exceptions.ValidationError({'error': message})