Exemplo n.º 1
0
        //[Authorize]
        public HttpResponseMessage CalculatePlans(string ZipCode, string CountyName, decimal Income, bool SubsidyStatus, int UsageCode, long IssuerId, int PlanTypeID, long EmployerId, string JobNumber, string BusinessYear, bool Welness, int TierIntention, JObject jObject, DateTime?DedBalAvailDate, decimal HSAPercentage = 0, decimal TaxRate = 0, bool IsAmericanIndian = false, bool ResultStatus = false, decimal DedBalAvailToRollOver = 0)
        {
            Response oResponse = new Response();
            Dictionary <string, object> res = new Dictionary <string, object>();

            try
            {
                string UserDatail = jObject["data"].ToString();
                string UsesDetail = jObject["UsesDetail"].ToString();
                List <FamilyMemberUsesList> lstFamilyMemberUses = (List <FamilyMemberUsesList>)JsonConvert.DeserializeObject(UsesDetail, (typeof(List <FamilyMemberUsesList>)));

                List <FamilyMemberList> fmlMemberList = (List <FamilyMemberList>)JsonConvert.DeserializeObject(UserDatail, (typeof(List <FamilyMemberList>)));  // new List<FamilyMemberList>();

                var objOptionSheet = new OptionSheetCalculation();


                string  SecondLowestPlanId = "", StateCode = "";
                decimal HSALimit = 0, MaxEEHSA = 0;
                decimal IndividualSubsidy = 0, ShopSubsidy = 0, FPL = 0;
                int     ACAPlanIdSub = 0, MemberRemoveChipEligibility = 0, MemberRemoveMedicaidEligibility = 0;
                long    RatingAreaId         = 0;
                var     OrgionalFamilyMember = fmlMemberList.ToList();
                string  ProgID = Welness ? "B" : "A";

                //List<CasePlanResult> data;
                new StateandRatingArea().GetStateCodeandRatingArea(ZipCode, CountyName, out RatingAreaId, out StateCode);
                MaxEEHSA = new HSACalculation().CalculateAnnualHSA(UsageCode, fmlMemberList.First().Age, (decimal)HSAPercentage, BusinessYear, out HSALimit);

                if (EmployerId == 99999)
                {
                    IndividualSubsidy = new SubsidyCal().CalculateSubsidy(BusinessYear, Income, IsAmericanIndian, RatingAreaId, StateCode, fmlMemberList, SubsidyStatus, "Indi", out ACAPlanIdSub, out MemberRemoveMedicaidEligibility, out MemberRemoveChipEligibility, out FPL, out SecondLowestPlanId);
                }
                if (EmployerId == 100000)
                {
                    ShopSubsidy = new SubsidyCal().CalculateSubsidy(BusinessYear, Income, IsAmericanIndian, RatingAreaId, StateCode, fmlMemberList, SubsidyStatus, "SHOP", out ACAPlanIdSub, out MemberRemoveMedicaidEligibility, out MemberRemoveChipEligibility, out FPL, out SecondLowestPlanId);
                }

                var data = objOptionSheet.CalculateOptionsNew(fmlMemberList, lstFamilyMemberUses, JobNumber, Income, SubsidyStatus, UsageCode, Welness, HSAPercentage, TaxRate, (decimal)MaxEEHSA, IsAmericanIndian, ResultStatus, IndividualSubsidy, ShopSubsidy, RatingAreaId, ProgID, HSALimit, StateCode, ACAPlanIdSub, PlanTypeID, IssuerId, TierIntention, 0);
                if (data.Count > 4)
                {
                    data.ForEach(r => r.PlanName = r.PlanName.Length > 34 ? r.PlanName.Substring(0, 34) : r.PlanName);
                }
                res.Add("HSALimit", HSALimit);
                res.Add("HSAAmount", Convert.ToInt64(MaxEEHSA));

                if (data.Count() > 0)
                {
                    res.Add("Status", "true");
                    res.Add("Message", "Success");
                    res.Add("Plans", data);
                    res.Add("ChipEligibilityCount", MemberRemoveChipEligibility);
                    res.Add("MedicaidEligibilityCount", MemberRemoveMedicaidEligibility);
                    //res.Add("SubsidyAmount", decimal.Round(Subsidy));
                    res.Add("FPL", FPL);
                    res.Add("SecondLowestPlanId", SecondLowestPlanId);
                    HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, res);
                    return(response);
                }
                else
                {
                    res.Add("Status", false);
                    res.Add("Message", "No plan found matching the selected criteria.");
                    HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, res);
                    return(response);
                }
            }
            catch (Exception ex)
            {
                oResponse.Status  = false;
                oResponse.Message = ex.InnerException != null ? ex.InnerException.Message : ex.Message;

                string ExceptionString = "Api : CalculatePlans" + Environment.NewLine;
                ExceptionString += "Request :  " + " ZipCode " + ZipCode + " ,CountyName " + CountyName + " ,Income " + Income + " ,SubsidyStatus " + SubsidyStatus + " ,UsageCode " + UsageCode + " ,IssuerId " + IssuerId + " ,PlanTypeID " + PlanTypeID + " ,EmployerId " + EmployerId + " ,JobNumber " + JobNumber + " ,BusinessYear " + BusinessYear + " ,Welness " + Welness + " ,TierIntention " + TierIntention + " ,jObject " + JsonConvert.SerializeObject(jObject) + " ,DedBalAvailDate " + DedBalAvailDate + " ,HSAPercentage " + HSAPercentage + " ,TaxRate " + TaxRate + " ,IsAmericanIndian " + IsAmericanIndian + " ,ResultStatus " + ResultStatus + " ,DedBalAvailToRollOver " + DedBalAvailToRollOver + Environment.NewLine;
                ExceptionString += "Exception : " + JsonConvert.SerializeObject(oResponse) + Environment.NewLine;
                var fileName = "CalculatePlans - " + System.DateTime.Now.ToString("MM-dd-yyyy hh-mm-ss");

                Helpers.Service.LogError(fileName, ExceptionString);
                HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, oResponse);
                return(response);
            }
        }
        //public HttpResponseMessage GenerateResult(string ZipCode, string CountyName, decimal Income, bool SubsidyStatus, int UsageCode, long IssuerId, int PlanID, long EmployerId, string JobNumber, int InsuranceTypeId, string BusinessYear, bool Welness, long ModifiedBy, JObject jObject, decimal HSAPercentage = 0, decimal TaxRate = 0, bool IsAmericanIndian = false, bool ResultStatus = false)
        public HttpResponseMessage GenerateResult(string ZipCode, string CountyName, decimal Income, bool SubsidyStatus, int UsageCode, long IssuerId, int PlanTypeID, long EmployerId, string JobNumber, string BusinessYear, bool Welness, int TierIntention, JObject jObject, DateTime?DedBalAvailDate, long ModifiedBy, decimal HSAPercentage = 0, decimal TaxRate = 0, bool IsAmericanIndian = false, bool ResultStatus = false, decimal DedBalAvailToRollOver = 0)
        {
            Response oResponse = new Response();
            string   strCase   = jObject["oCase"].ToString();
            Case     oCase     = (Case)JsonConvert.DeserializeObject(strCase, (typeof(Case)));

            using (var DB = new MHMDal.Models.MHM())
            {
                try
                {
                    //string UserDatail = jObject["data"].ToString();
                    //string UsesDetail = jObject["UsesDetail"].ToString();
                    //List<FamilyMemberUsesList> lstFamilyMemberUses = (List<FamilyMemberUsesList>)JsonConvert.DeserializeObject(UsesDetail, (typeof(List<FamilyMemberUsesList>)));

                    //List<FamilyMemberList> fmlMemberList = (List<FamilyMemberList>)JsonConvert.DeserializeObject(UserDatail, (typeof(List<FamilyMemberList>)));  // new List<FamilyMemberList>();

                    List <FamilyMemberUsesList> lstFamilyMemberUses = new List <FamilyMemberUsesList>();
                    List <FamilyMemberList>     fmlMemberList       = new List <FamilyMemberList>();

                    int i = 1;
                    foreach (var item in oCase.Families)
                    {
                        fmlMemberList.Add(new FamilyMemberList()
                        {
                            Age = Convert.ToInt32(item.Age), SmokingStatus = Convert.ToBoolean(item.Smoking)
                        });
                        List <BenefitDetails> BenefitUses = new List <BenefitDetails>();
                        foreach (var BenefitUserDetail in item.BenefitUserDetails)
                        {
                            BenefitUses.Add(new BenefitDetails()
                            {
                                BenefitId = BenefitUserDetail.MHMMappingBenefitId, UsageCost = Convert.ToDecimal(BenefitUserDetail.UsageCost) * Convert.ToInt32(BenefitUserDetail.UsageQty), UsageQty = Convert.ToInt32(BenefitUserDetail.UsageQty)
                            });
                        }

                        lstFamilyMemberUses.Add(new FamilyMemberUsesList()
                        {
                            FamilyMemberNumber = i, BenefitUses = BenefitUses
                        });
                        i++;
                    }


                    var objOptionSheet = new OptionSheetCalculation();


                    string  SecondLowestPlanId = "", StateCode = "";
                    decimal HSALimit = 0, MaxEEHSA = 0;
                    decimal IndividualSubsidy = 0, ShopSubsidy = 0, FPL = 0;
                    int     ACAPlanIdSub = 0, MemberRemoveChipEligibility = 0, MemberRemoveMedicaidEligibility = 0;
                    long    RatingAreaId         = 0;
                    var     OrgionalFamilyMember = fmlMemberList.ToList();
                    string  ProgID = Welness ? "B" : "A";

                    //List<CasePlanResult> data;

                    //if (String.IsNullOrEmpty(CountyName) || CountyName == "null")
                    //{
                    //    var Countylst = DB.qryZipCodeToRatingAreas.Where(m => m.Zip == ZipCode).Select(r => new { r.CountyName, r.RatingAreaID, r.StateCode, r.StateId, r.StateName, r.City });
                    //    if (Countylst.Count() > 0)
                    //    {
                    //        CountyName = Countylst.First().CountyName;
                    //    }
                    //}

                    new StateandRatingArea().GetStateCodeandRatingArea(ZipCode, CountyName, out RatingAreaId, out StateCode);
                    if (fmlMemberList.Count() > 0)
                    {
                        MaxEEHSA = new HSACalculation().CalculateAnnualHSA(UsageCode, fmlMemberList.First().Age, (decimal)HSAPercentage, BusinessYear, out HSALimit);
                    }

                    if (EmployerId == 99999)
                    {
                        IndividualSubsidy    = new SubsidyCal().CalculateSubsidy(BusinessYear, Income, IsAmericanIndian, RatingAreaId, StateCode, fmlMemberList, SubsidyStatus, "Indi", out ACAPlanIdSub, out MemberRemoveMedicaidEligibility, out MemberRemoveChipEligibility, out FPL, out SecondLowestPlanId);
                        oCase.MonthlySubsidy = IndividualSubsidy;
                    }
                    if (EmployerId == 100000)
                    {
                        ShopSubsidy          = new SubsidyCal().CalculateSubsidy(BusinessYear, Income, IsAmericanIndian, RatingAreaId, StateCode, fmlMemberList, SubsidyStatus, "SHOP", out ACAPlanIdSub, out MemberRemoveMedicaidEligibility, out MemberRemoveChipEligibility, out FPL, out SecondLowestPlanId);
                        oCase.MonthlySubsidy = ShopSubsidy;
                    }

                    var data = objOptionSheet.CalculateOptionsNew(fmlMemberList, lstFamilyMemberUses, JobNumber, Income, SubsidyStatus, UsageCode, Welness, HSAPercentage, TaxRate, (decimal)MaxEEHSA, IsAmericanIndian, ResultStatus, IndividualSubsidy, ShopSubsidy, RatingAreaId, ProgID, HSALimit, StateCode, ACAPlanIdSub, PlanTypeID, IssuerId, TierIntention, 0);


                    bool caseStatus = UpdateCaseResults(oCase.CaseID, data);

                    if (caseStatus)
                    {
                        oCase = DB.Cases.Where(r => r.CaseID == oCase.CaseID).FirstOrDefault();
                        oCase.CaseJobRunStatus = Convert.ToString(MHM.Api.Models.EnumStatusModel.CaseJobRunStatus.GeneratedOnly);
                        oCase.CaseJobRunDt     = DateTime.Now;
                        oCase.CaseJobRunUserID = ModifiedBy;
                        oCase.HSALimit         = HSALimit;
                        oCase.HSAAmount        = Convert.ToInt64(MaxEEHSA);
                        oCase.FPL = FPL;
                        DB.SaveChanges();

                        var Job = DB.JobMasters.Where(r => r.JobNumber == oCase.JobNumber).FirstOrDefault();
                        Job.LastJobRunDt     = DateTime.Now;
                        Job.LastJubRunUserID = ModifiedBy;
                        Job.LastJobRunStatus = Job.JobRunStatus;
                        if (Job.JobRunStatus != Convert.ToString(MHM.Api.Models.EnumStatusModel.JobRunStatus.GenErrors) && Job.JobRunStatus != Convert.ToString(MHM.Api.Models.EnumStatusModel.JobRunStatus.SendErrors))
                        {
                            Job.JobRunStatus = Convert.ToString(MHM.Api.Models.EnumStatusModel.JobRunStatus.AllGenerated);
                        }
                        DB.SaveChanges();

                        Dictionary <string, object> res = new Dictionary <string, object>();
                        res.Add("Status", "true");
                        res.Add("Message", "Success");
                        res.Add("Plans", data.Take(4));
                        HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, res);
                        return(response);
                    }
                    else
                    {
                        oResponse.Status  = false;
                        oResponse.Message = "failed to generate result";
                        HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, oResponse);
                        return(response);
                    }
                }
                catch (Exception ex)
                {
                    oCase = DB.Cases.Where(r => r.CaseID == oCase.CaseID).FirstOrDefault();
                    oCase.CaseJobRunStatus = Convert.ToString(MHM.Api.Models.EnumStatusModel.CaseJobRunStatus.GenError);
                    oCase.CaseJobRunDt     = DateTime.Now;
                    oCase.CaseJobRunMsg    = ex.InnerException != null ? ex.InnerException.Message : ex.Message;
                    oCase.CaseJobRunUserID = ModifiedBy;
                    DB.SaveChanges();

                    var Job = DB.JobMasters.Where(r => r.JobNumber == oCase.JobNumber).FirstOrDefault();
                    Job.LastJobRunDt     = DateTime.Now;
                    Job.LastJubRunUserID = ModifiedBy;
                    Job.LastJobRunStatus = Job.JobRunStatus;
                    if (Job.JobRunStatus != Convert.ToString(MHM.Api.Models.EnumStatusModel.JobRunStatus.GenErrors) && Job.JobRunStatus != Convert.ToString(MHM.Api.Models.EnumStatusModel.JobRunStatus.SendErrors))
                    {
                        Job.JobRunStatus = Convert.ToString(MHM.Api.Models.EnumStatusModel.JobRunStatus.GenErrors);
                    }
                    DB.SaveChanges();

                    oResponse.Status  = false;
                    oResponse.Message = ex.InnerException != null ? ex.InnerException.Message : ex.Message;
                    HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, oResponse);
                    return(response);
                }
            }
        }