public static string RecommendRequest(RecommendRequestObj data) { using (var context = new SalesReturndbEntities()) { string RequestProcessType = "recommended"; var RequestDetail = context.tblRequestDtls.Where(x => x.RequestHeaderId == data.Request_Id && x.IsActive == true).ToList(); var approvalHeader = context.TblApproverHeaders.Where(x => x.Request_Id == data.Request_Id && x.IsActive == true).FirstOrDefault(); var ReqHdrDetail = context.SP_GetRequestDetail(data.Request_Id).FirstOrDefault(); var RequestHdr = context.TblRequestHeaders.Where(x => x.RequestHeaderId == data.Request_Id && x.IsActive == true).FirstOrDefault(); var UserDetail = context.SP_LFGDetails(approvalHeader.CreatedBy).FirstOrDefault(); var Reqfuturestatus = context.TblFutureStatus.Where(x => x.IsActive == true && x.Request_ID == ReqHdrDetail.RequestHeaderId).OrderByDescending(y => y.FutStatus_ID).FirstOrDefault(); string AssignedTo = ""; string Message = ""; var CurrStatus = 0; var FutStatus = 0; var Active_role = 0; var Requested_role = 0; decimal? TotalSRV_Value = 0; DateTime date = DateTime.Now; double InvoiceAge = 0; //int FutureStatus_Id = 0; foreach (var pt in RequestDetail) { TotalSRV_Value = TotalSRV_Value + pt.SRVValue; // getting invoice age from the oldest invoice date. double InvoiceDateAge = DateTime.Now.Subtract(pt.InvoiceDate.Value).Days / (365.25 / 12); if (InvoiceAge <= InvoiceDateAge) { InvoiceAge = InvoiceDateAge; } } //var ApprovalMatrixData = context.TblApprovalMatrices.Where(x => x.RequestType == data.RequestType_Id && x.Country.Equals(data.Country) && x.BUType.Equals(UserDetail.SBU_Name) && x.Division.Equals(UserDetail.Dept_name) && x.IsActive == true).FirstOrDefault(); var FlowMatrixValue = context.TblFlowMatrices.Where(x => x.RequestType == data.RequestType_Id && x.Options.Equals("Value") && x.IsActive == true).FirstOrDefault(); var FlowMatrixPeriod = context.TblFlowMatrices.Where(x => x.RequestType == data.RequestType_Id && x.Options.Equals("Period") && x.IsActive == true).FirstOrDefault(); var EmployeeMatrixData = context.TblEmployeeMasters.Where(x => x.IsActive == true && x.DepotName == ReqHdrDetail.DepotName).FirstOrDefault(); if (FlowMatrixValue != null && FlowMatrixPeriod != null && EmployeeMatrixData != null) { if (approvalHeader.Status_Id == 1) { if (data.RequestType_Id == 1) { if (EmployeeMatrixData.ComplaintManager != null || EmployeeMatrixData.ComplaintManager != "") { if (TotalSRV_Value <= FlowMatrixValue.ComplaintHandler && InvoiceAge <= FlowMatrixPeriod.ComplaintHandler) { AssignedTo = EmployeeMatrixData.ComplaintManager; } else { AssignedTo = UserDetail.President_Code; data.Requested_Role = 6; data.FutureStatus_Id = 9; } if (data.EmployeeCode.Equals(AssignedTo)) { //auto approval code here. ApproverDAL.UpdateRequestStatus(false, Convert.ToInt32(data.Request_Id), data.EmployeeCode, AssignedTo, data.Active_Role, data.Requested_Role, data.CurrentStatus_Id, data.FutureStatus_Id, data.Remarks); if (TotalSRV_Value <= FlowMatrixValue.ComplaintHandler && InvoiceAge <= FlowMatrixPeriod.ComplaintHandler) { //Recommeneded complaint manager. CurrStatus = 12; FutStatus = 9; Active_role = 3; Requested_role = 6; } else { //Approve complaint manager. CurrStatus = 16; FutStatus = 0; Active_role = 3; Requested_role = 0; } data.Active_Role = Active_role; data.Requested_Role = Requested_role; data.CurrentStatus_Id = CurrStatus; data.FutureStatus_Id = FutStatus; } } else { return("Error : Complaint Manager is not defined in Approval Matrix"); } } else if (data.RequestType_Id == 2) { if (EmployeeMatrixData.ISC != null || EmployeeMatrixData.ISC != "") { if (TotalSRV_Value <= FlowMatrixValue.LogisticsHead && InvoiceAge <= FlowMatrixPeriod.LogisticsHead) { AssignedTo = EmployeeMatrixData.ISC; } else { AssignedTo = UserDetail.President_Code; data.Requested_Role = 6; data.FutureStatus_Id = 9; } //AssignedTo = EmployeeMatrixData.LogisticsHead; if (data.EmployeeCode.Equals(AssignedTo)) { //auto approval code here. ApproverDAL.UpdateRequestStatus(false, Convert.ToInt32(data.Request_Id), data.EmployeeCode, AssignedTo, data.Active_Role, data.Requested_Role, data.CurrentStatus_Id, data.FutureStatus_Id, data.Remarks); if (TotalSRV_Value <= FlowMatrixValue.LogisticsHead && InvoiceAge <= FlowMatrixPeriod.LogisticsHead) { //Recommeneded Logictic Head/ VP. CurrStatus = 13; FutStatus = 9; Active_role = 5; Requested_role = 6; } else { //Approve Logictic Head/ VP. CurrStatus = 16; FutStatus = 0; Active_role = 5; Requested_role = 0; } data.Active_Role = Active_role; data.Requested_Role = Requested_role; data.CurrentStatus_Id = CurrStatus; data.FutureStatus_Id = FutStatus; } } else { return("Error : Logistic Head is not set in Approval Matrix"); } } else if (data.RequestType_Id == 3) { var ReqHdr = context.TblRequestHeaders.Where(x => x.RequestHeaderId == data.Request_Id && x.IsActive == true).FirstOrDefault(); if (ReqHdr.RequestTypeOption == "D") { //In D type request we will refer VP/SH/President of RM not of requester var RM_Trail = context.SP_LFGDetails(data.EmployeeCode).FirstOrDefault(); if (TotalSRV_Value <= FlowMatrixValue.VP && InvoiceAge <= FlowMatrixPeriod.VP) { if (RM_Trail.VPHead != "NA" && RM_Trail.VPHead != "" && RM_Trail.VPHead != null) { AssignedTo = UserDetail.VPHead; data.FutureStatus_Id = 8; //Pending Sales Director / VP Head; data.Requested_Role = 9; if (data.EmployeeCode.Equals(AssignedTo)) { //auto approval code here. ApproverDAL.UpdateRequestStatus(false, Convert.ToInt32(data.Request_Id), data.EmployeeCode, AssignedTo, data.Active_Role, data.Requested_Role, data.CurrentStatus_Id, data.FutureStatus_Id, data.Remarks); data.Active_Role = 9; data.Requested_Role = 0; data.CurrentStatus_Id = 16; data.FutureStatus_Id = 0; } } else { return("Error : Sales Director/VP Head is not Defined."); } } else { if (RM_Trail.President_Code != "NA" && RM_Trail.President_Code != "" && RM_Trail.President_Code != null) { AssignedTo = UserDetail.President_Code; data.FutureStatus_Id = 9;//Pending President data.Requested_Role = 6; if (data.EmployeeCode.Equals(AssignedTo)) { //auto approval code here. ApproverDAL.UpdateRequestStatus(false, Convert.ToInt32(data.Request_Id), data.EmployeeCode, AssignedTo, data.Active_Role, data.Requested_Role, data.CurrentStatus_Id, data.FutureStatus_Id, data.Remarks); data.Active_Role = 6; data.Requested_Role = 0; data.CurrentStatus_Id = 16; data.FutureStatus_Id = 0; } } else { return("Error : President code is not in LFG."); } } } else { if (TotalSRV_Value <= FlowMatrixValue.SegmentHead && InvoiceAge <= FlowMatrixPeriod.SegmentHead) { var DealerDtl = context.sp_GetDealerDtlBy_DealerRepositoryId(ReqHdr.DealerId).FirstOrDefault(); // if (DealerDtl!=null) if (UserDetail.segmentHead != "NA" && UserDetail.segmentHead != "" && UserDetail.segmentHead != null) { //AssignedTo = context.SP_LFGDetailsBasedOnName(DealerDtl.Segment).FirstOrDefault().EMP_CODE; if (UserDetail.segmentHead != "NA" && UserDetail.segmentHead != "" && UserDetail.segmentHead != null) { AssignedTo = UserDetail.segmentHead; } else { return("Error : Segment Head is not in LFG."); if (DealerDtl != null) { AssignedTo = context.SP_LFGDetailsBasedOnName(DealerDtl.Segment).FirstOrDefault().EMP_CODE; } } data.FutureStatus_Id = 7; //Pending Segment Head; data.Requested_Role = 8; if (data.EmployeeCode.Equals(AssignedTo)) { //auto approval code here. ApproverDAL.UpdateRequestStatus(false, Convert.ToInt32(data.Request_Id), data.EmployeeCode, AssignedTo, data.Active_Role, data.Requested_Role, data.CurrentStatus_Id, data.FutureStatus_Id, data.Remarks); data.Active_Role = 8; data.Requested_Role = 0; data.CurrentStatus_Id = 16; data.FutureStatus_Id = 0; } } else { return("Error : Segment head is not defined in PMS."); } } else if (TotalSRV_Value <= FlowMatrixValue.VP && InvoiceAge <= FlowMatrixPeriod.VP) { var DealerDtl = context.sp_GetDealerDtlBy_DealerRepositoryId(ReqHdr.DealerId).FirstOrDefault(); //if (DealerDtl!=null) if (UserDetail.VPHead != "NA" && UserDetail.VPHead != "" && UserDetail.VPHead != null) { // AssignedTo = context.SP_LFGDetailsBasedOnName(DealerDtl.Segment).FirstOrDefault().VPHead; if (UserDetail.VPHead != "NA" && UserDetail.VPHead != "" && UserDetail.VPHead != null) { AssignedTo = UserDetail.VPHead; } else { return("Error : VP Head is not in LFG."); if (DealerDtl != null) { AssignedTo = context.SP_LFGDetailsBasedOnName(DealerDtl.Segment).FirstOrDefault().VPHead; } } data.FutureStatus_Id = 8; //Pending Sales Director / VP Head; data.Requested_Role = 9; if (data.EmployeeCode.Equals(AssignedTo)) { //auto approval code here. ApproverDAL.UpdateRequestStatus(false, Convert.ToInt32(data.Request_Id), data.EmployeeCode, AssignedTo, data.Active_Role, data.Requested_Role, data.CurrentStatus_Id, data.FutureStatus_Id, data.Remarks); data.Active_Role = 9; data.Requested_Role = 0; data.CurrentStatus_Id = 16; data.FutureStatus_Id = 0; } } else { return("Error : Sales Director/VP Head is not Defined."); } } else { var DealerDtl = context.sp_GetDealerDtlBy_DealerRepositoryId(ReqHdr.DealerId).FirstOrDefault(); //if (DealerDtl!=null) if (UserDetail.President_Code != "NA" && UserDetail.President_Code != "" && UserDetail.President_Code != null) { // AssignedTo = context.SP_LFGDetailsBasedOnName(DealerDtl.Segment).FirstOrDefault().President_Code; if (UserDetail.President_Code != "NA" && UserDetail.President_Code != "" && UserDetail.President_Code != null) { AssignedTo = UserDetail.President_Code; } else { return("Error : President code is not in LFG."); if (DealerDtl != null) { AssignedTo = context.SP_LFGDetailsBasedOnName(DealerDtl.Segment).FirstOrDefault().President_Code; } } data.FutureStatus_Id = 9;//Pending President data.Requested_Role = 6; if (data.EmployeeCode.Equals(AssignedTo)) { //auto approval code here. ApproverDAL.UpdateRequestStatus(false, Convert.ToInt32(data.Request_Id), data.EmployeeCode, AssignedTo, data.Active_Role, data.Requested_Role, data.CurrentStatus_Id, data.FutureStatus_Id, data.Remarks); data.Active_Role = 6; data.Requested_Role = 0; data.CurrentStatus_Id = 16; data.FutureStatus_Id = 0; } } else { return("Error : President code is not in LFG."); } } } } } else if (approvalHeader.Status_Id == 10 || approvalHeader.Status_Id == 11) { if (UserDetail.President_Code.ToUpper().Trim() != "NA" && UserDetail.President_Code.Trim() != "" && UserDetail.President_Code != null) { AssignedTo = UserDetail.President_Code;//context.SP_LFGDetails(approvalHeader.CreatedBy).FirstOrDefault().President_Code; if (data.EmployeeCode.Equals(AssignedTo)) { //auto approval code here. ApproverDAL.UpdateRequestStatus(false, Convert.ToInt32(data.Request_Id), data.EmployeeCode, AssignedTo, data.Active_Role, data.Requested_Role, data.CurrentStatus_Id, data.FutureStatus_Id, data.Remarks); data.Active_Role = 6; data.Requested_Role = 0; data.CurrentStatus_Id = 16; data.FutureStatus_Id = 0; } } else { return("Error : President code is not in LFG."); } } ApproverDAL.UpdateRequestStatus(false, Convert.ToInt32(data.Request_Id), data.EmployeeCode, AssignedTo, data.Active_Role, data.Requested_Role, data.CurrentStatus_Id, data.FutureStatus_Id, data.Remarks); SendMail(approvalHeader, data, RequestProcessType, AssignedTo); Message = "Success : " + RequestHdr.RequestTypeOption + "-" + data.Request_Id + " Request has been Updated."; } else { Message = "Error : Approval matrix is not Defined. Please contact admin."; } return(Message); } }