public Book(string title, string author, int price, eCoverType coverType) { this._title = title; this._author = author; this._price = price; this._coverType = coverType; }
public QuoteLogic CalculatePremium(int vehicleUsageId, decimal sumInsured, eCoverType coverType, eExcessType excessType, decimal excess, int PaymentTermid, decimal?AddThirdPartyAmount, int NumberofPersons, Boolean Addthirdparty, Boolean PassengerAccidentCover, Boolean ExcessBuyBack, Boolean RoadsideAssistance, Boolean MedicalExpenses, decimal?RadioLicenseCost, Boolean IncludeRadioLicenseCost, Boolean isVehicleRegisteredonICEcash, string BasicPremiumICEcash, string StampDutyICEcash, string ZTSCLevyICEcash, int ProductId = 0, string vehicleStartDate = "", string vehicleEndDate = "", string manufacturerYear = "", bool isAgentStaff = false) { var vehicleUsage = InsuranceContext.VehicleUsages.Single(vehicleUsageId); var Setting = InsuranceContext.Settings.All(); var DiscountOnRenewalSettings = Setting.Where(x => x.keyname == "Discount On Renewal").FirstOrDefault(); decimal ratingPremium = 0; var additionalchargeatp = 0.0m; var additionalchargepac = 0.0m; var additionalchargeebb = 0.0m; var additionalchargersa = 0.0m; var additionalchargeme = 0.0m; float? InsuranceRate = 0; decimal?InsuranceMinAmount = 0; this.AnnualRiskPremium = 0.00m; this.QuaterlyRiskPremium = 0.00m; this.TermlyRiskPremium = 0.00m; this.Discount = 0.00m; if (coverType == eCoverType.Comprehensive) { InsuranceRate = vehicleUsage.ComprehensiveRate; InsuranceMinAmount = vehicleUsage.MinCompAmount; } else if (coverType == eCoverType.ThirdParty) { InsuranceRate = vehicleUsage.AnnualTPAmount == null ? 0 : (float)vehicleUsage.AnnualTPAmount; InsuranceMinAmount = vehicleUsage.MinThirdAmount; } else if (coverType == eCoverType.FullThirdParty) { InsuranceRate = (float)vehicleUsage.FTPAmount; InsuranceMinAmount = vehicleUsage.FTPAmount; } var premium = 0.00m; if (coverType == eCoverType.ThirdParty) { premium = (decimal)InsuranceRate; } else if (coverType == eCoverType.FullThirdParty) { premium = (decimal)InsuranceRate; } else { premium = (sumInsured * Convert.ToDecimal(InsuranceRate)) / 100; } // For ratinglist for AgentMotor // Session["CustomerDataModal"] if (isAgentStaff == true && coverType == eCoverType.Comprehensive && vehicleStartDate != "" && vehicleEndDate != "" && manufacturerYear != "") { if (System.Web.HttpContext.Current.Session["CustomerDataModal"] != null) { var customer = (CustomerModel)System.Web.HttpContext.Current.Session["CustomerDataModal"]; // var customerAge = (DateTime.Now - customer.DateOfBirth); var customerAge = CalculateInYear(customer.DateOfBirth.Value, DateTime.Now); // var AgeOfLicense = DateTime.Now - Convert.ToDateTime(manufacturerYear); // var AgeOfLicense = DateTime.Now - Convert.ToDateTime(manufacturerYear); if (manufacturerYear == "") { manufacturerYear = DateTime.Now.ToShortDateString(); } var AgeOfLicense = CalculateInYear(Convert.ToDateTime(manufacturerYear), DateTime.Now); // var AgeOfVehicle = Convert.ToDateTime(vehicleEndDate) - Convert.ToDateTime(vehicleStartDate); var AgeOfVehicle = CalculateInYear(Convert.ToDateTime(vehicleStartDate), Convert.ToDateTime(vehicleEndDate)); ratingPremium = RatingListCalcualation(premium, ProductId, customer.Gender, customerAge, AgeOfLicense, AgeOfVehicle); } } if (premium < InsuranceMinAmount && coverType == eCoverType.Comprehensive) { Status = false; //premium = premium + InsuranceMinAmount.Value; premium = InsuranceMinAmount.Value; this.Message = "Insurance minimum amount $" + InsuranceMinAmount + " Charge is applicable."; } var settingAddThirdparty = Convert.ToDecimal(Setting.Where(x => x.keyname == "Addthirdparty").Select(x => x.value).FirstOrDefault()); if (Addthirdparty) { var AddThirdPartyAmountADD = AddThirdPartyAmount; if (AddThirdPartyAmountADD > 10000) { var Amount = AddThirdPartyAmountADD - 10000; premium += Convert.ToDecimal((Amount * settingAddThirdparty) / 100); } } int day = 0; double calulateTerm = 0; switch (PaymentTermid) { case 3: premium = premium / 4; break; case 4: premium = premium / 3; break; case 5: day = 5 * 30; premium = Math.Round(Convert.ToDecimal((double)day / 365) * premium, 2); break; case 6: day = 6 * 30; premium = Math.Round(Convert.ToDecimal((double)day / 365) * premium, 2); break; case 7: day = 7 * 30; premium = Math.Round(Convert.ToDecimal((double)day / 365) * premium, 2); break; case 8: day = 8 * 30; premium = Math.Round(Convert.ToDecimal((double)day / 365) * premium, 2); break; case 9: day = 9 * 30; premium = Math.Round(Convert.ToDecimal((double)day / 365) * premium, 2); break; case 10: day = 10 * 30; premium = Math.Round(Convert.ToDecimal((double)day / 365) * premium, 2); break; case 11: day = 11 * 30; premium = Math.Round(Convert.ToDecimal((double)day / 365) * premium, 2); break; } decimal PassengerAccidentCoverAmountPerPerson = Convert.ToInt32(Setting.Where(x => x.keyname == "PassengerAccidentCover").Select(x => x.value).FirstOrDefault()); decimal ExcessBuyBackPercentage = Convert.ToInt32(Setting.Where(x => x.keyname == "ExcessBuyBack").Select(x => x.value).FirstOrDefault()); decimal RoadsideAssistancePercentage = Convert.ToDecimal(Setting.Where(x => x.keyname == "RoadsideAssistance").Select(x => x.value).FirstOrDefault()); decimal MedicalExpensesPercentage = Convert.ToDecimal(Setting.Where(x => x.keyname == "MedicalExpenses").Select(x => x.value).FirstOrDefault()); var StampDutySetting = Setting.Where(x => x.keyname == "Stamp Duty").FirstOrDefault(); var ZTSCLevySetting = Setting.Where(x => x.keyname == "ZTSC Levy").FirstOrDefault(); if (PassengerAccidentCover) { int totalAdditionalPACcharge = NumberofPersons * Convert.ToInt32(PassengerAccidentCoverAmountPerPerson); additionalchargepac = totalAdditionalPACcharge; } if (ExcessBuyBack) { additionalchargeebb = (sumInsured * ExcessBuyBackPercentage) / 100; } if (RoadsideAssistance) { if ((coverType == eCoverType.ThirdParty || coverType == eCoverType.FullThirdParty) && ProductId == 1) // for private car { var roadsideAssistanceDetails = Setting.Where(x => x.keyname == "third party private cars roadside assistance").FirstOrDefault(); if (roadsideAssistanceDetails != null) { additionalchargersa = Math.Round(Convert.ToDecimal(roadsideAssistanceDetails.value), 2); } } else if ((coverType == eCoverType.ThirdParty || coverType == eCoverType.FullThirdParty) && (ProductId == 3 || ProductId == 11)) // Commercial vehicles { var roadsideAssistanceDetails = Setting.Where(x => x.keyname == "third party commercial vehicle roadside assistance").FirstOrDefault(); if (roadsideAssistanceDetails != null) { additionalchargersa = Math.Round(Convert.ToDecimal(roadsideAssistanceDetails.value), 2); } } else { additionalchargersa = (sumInsured * RoadsideAssistancePercentage) / 100; //switch (PaymentTermid) //{ // case 3: // additionalchargersa = 4.5m / 4; // break; // case 4: // additionalchargersa = 4.5m / 3; // break; // case 5: // additionalchargersa = 4.5m / 5; // break; // case 6: // additionalchargersa = 4.5m / 6; // break; // case 7: // additionalchargersa = 4.5m / 7; // break; // case 8: // additionalchargersa = 4.5m / 8; // break; // case 9: // additionalchargersa = 4.5m / 9; // break; // case 10: // additionalchargersa = 4.5m / 10; // break; // case 11: // additionalchargersa = 4.5m / 11; // break; // case 1: // additionalchargersa = 4.5m; // break; //} } } if (MedicalExpenses) { additionalchargeme = (sumInsured * MedicalExpensesPercentage) / 100; } if (excessType == eExcessType.FixedAmount && excess > 0) { this.ExcessAmount = excess; } // this.Premium = premium;// 04_sep_2019 if (!isVehicleRegisteredonICEcash && coverType != eCoverType.Comprehensive) { this.Premium = premium * 5; } else { this.Premium = premium; } this.PassengerAccidentCoverAmount = Math.Round(additionalchargepac, 2); this.PassengerAccidentCoverAmountPerPerson = Math.Round(PassengerAccidentCoverAmountPerPerson, 2); this.RoadsideAssistanceAmount = Math.Round(additionalchargersa, 2); this.RoadsideAssistancePercentage = Math.Round(RoadsideAssistancePercentage, 2); this.MedicalExpensesAmount = Math.Round(additionalchargeme, 2); this.MedicalExpensesPercentage = Math.Round(MedicalExpensesPercentage, 2); this.ExcessBuyBackAmount = Math.Round(additionalchargeebb, 2); this.ExcessBuyBackPercentage = Math.Round(ExcessBuyBackPercentage, 2); //premium = premium + stampDuty + ztscLevy; //premium = premium + additionalchargeebb + additionalchargeme + additionalchargepac + additionalchargersa + (IncludeRadioLicenseCost ? Convert.ToDecimal(RadioLicenseCost) : 0.00m );// + Convert.ToDecimal(AgentCommission); //if (excessType == eExcessType.Percentage && excess > 0) //{ // InsuranceRate = InsuranceRate + float.Parse(excess.ToString()); //} if (excessType == eExcessType.Percentage && excess > 0) { this.ExcessAmount = (sumInsured * excess) / 100; } //decimal totalPremium = 0; //decimal calCulatePremiumWithOptional = 0; //if (coverType == eCoverType.Comprehensive) //{ // calCulatePremiumWithOptional = this.Premium + this.PassengerAccidentCoverAmount + this.RoadsideAssistanceAmount + this.MedicalExpensesAmount + this.ExcessBuyBackAmount + this.ExcessAmount; //} //else //{ // calCulatePremiumWithOptional = (isVehicleRegisteredonICEcash ? Convert.ToDecimal(BasicPremiumICEcash) : this.Premium) + this.PassengerAccidentCoverAmount + this.RoadsideAssistanceAmount + this.MedicalExpensesAmount + this.ExcessBuyBackAmount + this.ExcessAmount; //} //switch (PaymentTermid) //{ // case 3: // premium = calCulatePremiumWithOptional / 4; // break; // case 4: // premium = calCulatePremiumWithOptional / 3; // break; //} var discountField = this.PassengerAccidentCoverAmount + this.RoadsideAssistanceAmount + this.MedicalExpensesAmount + this.ExcessBuyBackAmount + this.ExcessAmount; switch (PaymentTermid) { case 3: discountField = discountField / 4; break; case 4: discountField = discountField / 3; break; case 5: day = 5 * 30; discountField = Math.Round(Convert.ToDecimal((double)day / 365) * discountField, 2); break; case 6: day = 6 * 30; discountField = Math.Round(Convert.ToDecimal((double)day / 365) * discountField, 2); break; case 7: day = 7 * 30; discountField = Math.Round(Convert.ToDecimal((double)day / 365) * discountField, 2); break; case 8: day = 8 * 30; discountField = Math.Round(Convert.ToDecimal((double)day / 365) * discountField, 2); break; case 9: day = 9 * 30; discountField = Math.Round(Convert.ToDecimal((double)day / 365) * discountField, 2); break; case 10: day = 10 * 30; discountField = Math.Round(Convert.ToDecimal((double)day / 365) * discountField, 2); break; case 11: day = 11 * 30; discountField = Math.Round(Convert.ToDecimal((double)day / 365) * discountField, 2); break; } switch (PaymentTermid) { case 1: this.AnnualRiskPremium = premium + discountField; if (isVehicleRegisteredonICEcash && !(coverType == eCoverType.Comprehensive)) { this.AnnualRiskPremium = Convert.ToDecimal(BasicPremiumICEcash); } if (DiscountOnRenewalSettings.ValueType == Convert.ToInt32(eSettingValueType.percentage)) { this.Discount = Math.Round(((this.AnnualRiskPremium * Convert.ToDecimal(DiscountOnRenewalSettings.value)) / 100), 2); } if (DiscountOnRenewalSettings.ValueType == Convert.ToInt32(eSettingValueType.amount)) { this.Discount = Math.Round(Convert.ToDecimal(DiscountOnRenewalSettings.value), 2); } break; case 3: this.QuaterlyRiskPremium = premium + discountField; if (isVehicleRegisteredonICEcash && !(coverType == eCoverType.Comprehensive)) { this.QuaterlyRiskPremium = Convert.ToDecimal(BasicPremiumICEcash); } if (DiscountOnRenewalSettings.ValueType == Convert.ToInt32(eSettingValueType.percentage)) { this.Discount = Math.Round(((this.QuaterlyRiskPremium * Convert.ToDecimal(DiscountOnRenewalSettings.value)) / 100), 2); } if (DiscountOnRenewalSettings.ValueType == Convert.ToInt32(eSettingValueType.amount)) { this.Discount = Math.Round(Convert.ToDecimal(DiscountOnRenewalSettings.value), 2); } break; case 4: this.TermlyRiskPremium = premium + discountField; if (isVehicleRegisteredonICEcash && !(coverType == eCoverType.Comprehensive)) { this.TermlyRiskPremium = BasicPremiumICEcash == "" ? 0 : Convert.ToDecimal(BasicPremiumICEcash); } if (DiscountOnRenewalSettings.ValueType == Convert.ToInt32(eSettingValueType.percentage)) { this.Discount = Math.Round(((this.TermlyRiskPremium * Convert.ToDecimal(DiscountOnRenewalSettings.value)) / 100), 2); } if (DiscountOnRenewalSettings.ValueType == Convert.ToInt32(eSettingValueType.amount)) { this.Discount = Math.Round(Convert.ToDecimal(DiscountOnRenewalSettings.value), 2); } break; case 5: case 6: case 7: case 8: case 9: case 10: case 11: this.AnnualRiskPremium = premium + discountField; if (isVehicleRegisteredonICEcash && !(coverType == eCoverType.Comprehensive)) { this.AnnualRiskPremium = Convert.ToDecimal(BasicPremiumICEcash); } if (DiscountOnRenewalSettings.ValueType == Convert.ToInt32(eSettingValueType.percentage)) { this.Discount = Math.Round(((this.AnnualRiskPremium * Convert.ToDecimal(DiscountOnRenewalSettings.value)) / 100), 2); } if (DiscountOnRenewalSettings.ValueType == Convert.ToInt32(eSettingValueType.amount)) { this.Discount = Math.Round(Convert.ToDecimal(DiscountOnRenewalSettings.value), 2); } break; } if (!isVehicleRegisteredonICEcash && coverType != eCoverType.Comprehensive) { this.Discount = this.Discount * 5; } // totalPremium = premium - this.Discount; decimal totalPremium = 0; if (coverType == eCoverType.Comprehensive) { totalPremium = (this.Premium + discountField) - this.Discount; } else { totalPremium = ((isVehicleRegisteredonICEcash ? Convert.ToDecimal(BasicPremiumICEcash) : this.Premium) + discountField) - this.Discount; } // premium = (decimal)totalPremium; this.Premium = Math.Round(totalPremium, 2); var stampDuty = 0.00m; if (StampDutySetting.ValueType == Convert.ToInt32(eSettingValueType.percentage)) { stampDuty = (totalPremium * Convert.ToDecimal(StampDutySetting.value)) / 100; } else { stampDuty = totalPremium + Convert.ToDecimal(StampDutySetting.value); } //if (stampDuty > 2000000) //{ // Status = false; // this.Message = "Stamp Duty must not exceed $2,000,000"; //} var ztscLevy = 0.00m; decimal totalPremiumForZtscLevy = 0; //if (isVehicleRegisteredonICEcash && !(coverType == eCoverType.Comprehensive)) //{ // totalPremiumForZtscLevy = (isVehicleRegisteredonICEcash ? Convert.ToDecimal(BasicPremiumICEcash) : this.Premium) + this.PassengerAccidentCoverAmount + this.RoadsideAssistanceAmount + this.MedicalExpensesAmount + this.ExcessBuyBackAmount + this.ExcessAmount; //} //else //{ // totalPremiumForZtscLevy = (this.Premium) + this.PassengerAccidentCoverAmount + this.RoadsideAssistanceAmount + this.MedicalExpensesAmount + this.ExcessBuyBackAmount + this.ExcessAmount; //} if (coverType == eCoverType.Comprehensive) { // totalPremiumForZtscLevy = (this.Premium + discountField); totalPremiumForZtscLevy = (this.Premium + discountField + this.Discount); } else { // totalPremiumForZtscLevy = (isVehicleRegisteredonICEcash ? Convert.ToDecimal(BasicPremiumICEcash) : this.Premium) + discountField; totalPremiumForZtscLevy = (isVehicleRegisteredonICEcash ? Convert.ToDecimal(BasicPremiumICEcash) : this.Premium) + discountField + this.Discount; // need to discuss BasicPremiumICEcash with Client } if (ZTSCLevySetting.ValueType == Convert.ToInt32(eSettingValueType.percentage)) { // ztscLevy = (totalPremium * Convert.ToDecimal(ZTSCLevySetting.value)) / 100; ztscLevy = (totalPremiumForZtscLevy * Convert.ToDecimal(ZTSCLevySetting.value)) / 100; } else { // ztscLevy = totalPremium + Convert.ToDecimal(ZTSCLevySetting.value); ztscLevy = totalPremiumForZtscLevy + Convert.ToDecimal(ZTSCLevySetting.value); } this.StamDuty = Math.Round(stampDuty, 2); this.ZtscLevy = Math.Round(ztscLevy, 2); // if (isVehicleRegisteredonICEcash && !(coverType == eCoverType.Comprehensive) && totalPremium == Convert.ToDecimal(BasicPremiumICEcash)) // by ash 11 apr 2019 if (StampDutyICEcash == "") // if iceCash is not working { this.StamDuty = Math.Round(stampDuty, 2); StampDutyICEcash = Math.Round(stampDuty, 2).ToString(); } if (isVehicleRegisteredonICEcash && !(coverType == eCoverType.Comprehensive)) { this.StamDuty = Math.Round(Convert.ToDecimal(StampDutyICEcash), 2); this.ZtscLevy = Math.Round(Convert.ToDecimal(ZTSCLevyICEcash), 2); } else { // double maxZTSC = 10.80 ; // default ProductId=1; double maxZTSC = 10.80 * 5; // default ProductId=1; // ztsc new calucation will be also aply for comprehensive if (ProductId == 3 || ProductId == 11) // Commercial Commuter Omnibus and Commercial Vehicle { // maxZTSC = 22.00; maxZTSC = 22.00 * 5; } switch (PaymentTermid) { case 1: if (Convert.ToDouble(this.ZtscLevy) > maxZTSC) { this.ZtscLevy = Math.Round(Convert.ToDecimal(maxZTSC), 2); } break; case 3: maxZTSC = maxZTSC * 4 / 12; if (Convert.ToDouble(this.ZtscLevy) > maxZTSC) { this.ZtscLevy = Math.Round(Convert.ToDecimal(maxZTSC), 2); } break; case 4: maxZTSC = maxZTSC / 3; if (Convert.ToDouble(this.ZtscLevy) > maxZTSC) { this.ZtscLevy = Math.Round(Convert.ToDecimal(maxZTSC), 2); } break; case 5: maxZTSC = maxZTSC * 5 / 12; if (Convert.ToDouble(this.ZtscLevy) > maxZTSC) { this.ZtscLevy = Math.Round(Convert.ToDecimal(maxZTSC), 2); } break; case 6: maxZTSC = maxZTSC * 6 / 12; if (Convert.ToDouble(this.ZtscLevy) > maxZTSC) { this.ZtscLevy = Math.Round(Convert.ToDecimal(maxZTSC), 2); } break; case 7: maxZTSC = maxZTSC * 7 / 12; if (Convert.ToDouble(this.ZtscLevy) > maxZTSC) { this.ZtscLevy = Math.Round(Convert.ToDecimal(maxZTSC), 2); } break; case 8: maxZTSC = maxZTSC * 8 / 12; if (Convert.ToDouble(this.ZtscLevy) > maxZTSC) { this.ZtscLevy = Math.Round(Convert.ToDecimal(maxZTSC), 2); } break; case 9: maxZTSC = maxZTSC * 9 / 12; if (Convert.ToDouble(this.ZtscLevy) > maxZTSC) { this.ZtscLevy = Math.Round(Convert.ToDecimal(maxZTSC), 2); } break; case 10: maxZTSC = maxZTSC * 10 / 12; if (Convert.ToDouble(this.ZtscLevy) > maxZTSC) { this.ZtscLevy = Math.Round(Convert.ToDecimal(maxZTSC), 2); } break; case 11: maxZTSC = maxZTSC * 11 / 12; if (Convert.ToDouble(this.ZtscLevy) > maxZTSC) { this.ZtscLevy = Math.Round(Convert.ToDecimal(maxZTSC), 2); } break; } } if (!string.IsNullOrEmpty(StampDutyICEcash) && Convert.ToDecimal(StampDutyICEcash) > 100000) { this.StamDuty = 100000; } else if (coverType != eCoverType.Comprehensive && Convert.ToDecimal(StampDutyICEcash) < Convert.ToDecimal(7.50)) // minimum stamp duty { this.StamDuty = Convert.ToDecimal(7.50); } //else if (Convert.ToDecimal(StampDutyICEcash) < 2) // minimum stamp duty //{ // this.StamDuty = 2; //} this.Premium = this.Premium + ratingPremium; return(this); }
public QuoteLogic CalculatePremium(int vehicleUsageId, decimal sumInsured, eCoverType coverType, eExcessType excessType, decimal excess, int PaymentTermid, decimal?AddThirdPartyAmount, int NumberofPersons, Boolean Addthirdparty, Boolean PassengerAccidentCover, Boolean ExcessBuyBack, Boolean RoadsideAssistance, Boolean MedicalExpenses, decimal?RadioLicenseCost, Boolean IncludeRadioLicenseCost, Boolean isVehicleRegisteredonICEcash, string BasicPremiumICEcash, string StampDutyICEcash, string ZTSCLevyICEcash, int ProductId = 0) { var vehicleUsage = InsuranceContext.VehicleUsages.Single(vehicleUsageId); var Setting = InsuranceContext.Settings.All(); var DiscountOnRenewalSettings = Setting.Where(x => x.keyname == "Discount On Renewal").FirstOrDefault(); var additionalchargeatp = 0.0m; var additionalchargepac = 0.0m; var additionalchargeebb = 0.0m; var additionalchargersa = 0.0m; var additionalchargeme = 0.0m; float? InsuranceRate = 0; decimal?InsuranceMinAmount = 0; this.AnnualRiskPremium = 0.00m; this.QuaterlyRiskPremium = 0.00m; this.TermlyRiskPremium = 0.00m; this.Discount = 0.00m; if (coverType == eCoverType.Comprehensive) { InsuranceRate = vehicleUsage.ComprehensiveRate; InsuranceMinAmount = vehicleUsage.MinCompAmount; } else if (coverType == eCoverType.ThirdParty) { InsuranceRate = vehicleUsage.AnnualTPAmount == null ? 0 : (float)vehicleUsage.AnnualTPAmount; InsuranceMinAmount = vehicleUsage.MinThirdAmount; } else if (coverType == eCoverType.FullThirdParty) { InsuranceRate = (float)vehicleUsage.FTPAmount; InsuranceMinAmount = vehicleUsage.FTPAmount; } var premium = 0.00m; if (coverType == eCoverType.ThirdParty) { premium = (decimal)InsuranceRate; } else if (coverType == eCoverType.FullThirdParty) { premium = (decimal)InsuranceRate; } else { premium = (sumInsured * Convert.ToDecimal(InsuranceRate)) / 100; } if (premium < InsuranceMinAmount && coverType == eCoverType.Comprehensive) { Status = false; //premium = premium + InsuranceMinAmount.Value; premium = InsuranceMinAmount.Value; this.Message = "Insurance minimum amount $" + InsuranceMinAmount + " Charge is applicable."; } var settingAddThirdparty = Convert.ToDecimal(Setting.Where(x => x.keyname == "Addthirdparty").Select(x => x.value).FirstOrDefault(), System.Globalization.CultureInfo.InvariantCulture); if (Addthirdparty) { var AddThirdPartyAmountADD = AddThirdPartyAmount; if (AddThirdPartyAmountADD > 10000) { var Amount = AddThirdPartyAmountADD - 10000; premium += Convert.ToDecimal((Amount * settingAddThirdparty) / 100); } } int day = 0; double calulateTerm = 0; switch (PaymentTermid) { case 3: premium = premium / 4; break; case 4: premium = premium / 3; break; case 5: day = 5 * 30; premium = Math.Round(Convert.ToDecimal((double)day / 365) * premium, 2); break; case 6: day = 6 * 30; premium = Math.Round(Convert.ToDecimal((double)day / 365) * premium, 2); break; case 7: day = 7 * 30; premium = Math.Round(Convert.ToDecimal((double)day / 365) * premium, 2); break; case 8: day = 8 * 30; premium = Math.Round(Convert.ToDecimal((double)day / 365) * premium, 2); break; case 9: day = 9 * 30; premium = Math.Round(Convert.ToDecimal((double)day / 365) * premium, 2); break; case 10: day = 10 * 30; premium = Math.Round(Convert.ToDecimal((double)day / 365) * premium, 2); break; case 11: day = 11 * 30; premium = Math.Round(Convert.ToDecimal((double)day / 365) * premium, 2); break; } decimal PassengerAccidentCoverAmountPerPerson = Convert.ToInt32(Setting.Where(x => x.keyname == "PassengerAccidentCover").Select(x => x.value).FirstOrDefault()); decimal ExcessBuyBackPercentage = Convert.ToInt32(Setting.Where(x => x.keyname == "ExcessBuyBack").Select(x => x.value).FirstOrDefault()); decimal RoadsideAssistancePercentage = Convert.ToDecimal(Setting.Where(x => x.keyname == "RoadsideAssistance").Select(x => x.value).FirstOrDefault(), System.Globalization.CultureInfo.InvariantCulture); decimal MedicalExpensesPercentage = Convert.ToDecimal(Setting.Where(x => x.keyname == "MedicalExpenses").Select(x => x.value).FirstOrDefault()); var StampDutySetting = Setting.Where(x => x.keyname == "Stamp Duty").FirstOrDefault(); var ZTSCLevySetting = Setting.Where(x => x.keyname == "ZTSC Levy").FirstOrDefault(); if (PassengerAccidentCover) { int totalAdditionalPACcharge = NumberofPersons * Convert.ToInt32(PassengerAccidentCoverAmountPerPerson); additionalchargepac = totalAdditionalPACcharge; } if (ExcessBuyBack) { additionalchargeebb = (sumInsured * ExcessBuyBackPercentage) / 100; } if (RoadsideAssistance) { if ((coverType == eCoverType.ThirdParty || coverType == eCoverType.FullThirdParty) && ProductId == 1) // for private car { var roadsideAssistanceDetails = Setting.Where(x => x.keyname == "third party private cars roadside assistance").FirstOrDefault(); if (roadsideAssistanceDetails != null) { additionalchargersa = Math.Round(Convert.ToDecimal(roadsideAssistanceDetails.value, System.Globalization.CultureInfo.InvariantCulture), 2); } } else if ((coverType == eCoverType.ThirdParty || coverType == eCoverType.FullThirdParty) && ProductId == 3) // Commercial vehicles { var roadsideAssistanceDetails = Setting.Where(x => x.keyname == "third party commercial vehicle roadside assistance").FirstOrDefault(); if (roadsideAssistanceDetails != null) { additionalchargersa = Math.Round(Convert.ToDecimal(roadsideAssistanceDetails.value, System.Globalization.CultureInfo.InvariantCulture), 2); } } else { // it's for compresnsive additionalchargersa = (sumInsured * RoadsideAssistancePercentage) / 100; } } if (MedicalExpenses) { additionalchargeme = (sumInsured * MedicalExpensesPercentage) / 100; } if (excessType == eExcessType.FixedAmount && excess > 0) { this.ExcessAmount = excess; } // this.Premium = premium; // this.Premium = premium*5; if (!isVehicleRegisteredonICEcash && coverType != eCoverType.Comprehensive) { this.Premium = premium * 5; } else { this.Premium = premium; } this.PassengerAccidentCoverAmount = Math.Round(additionalchargepac, 2); this.PassengerAccidentCoverAmountPerPerson = Math.Round(PassengerAccidentCoverAmountPerPerson, 2); this.RoadsideAssistanceAmount = Math.Round(additionalchargersa, 2); this.RoadsideAssistancePercentage = Math.Round(RoadsideAssistancePercentage, 2); this.MedicalExpensesAmount = Math.Round(additionalchargeme, 2); this.MedicalExpensesPercentage = Math.Round(MedicalExpensesPercentage, 2); this.ExcessBuyBackAmount = Math.Round(additionalchargeebb, 2); this.ExcessBuyBackPercentage = Math.Round(ExcessBuyBackPercentage, 2); if (excessType == eExcessType.Percentage && excess > 0) { this.ExcessAmount = (sumInsured * excess) / 100; } var discountField = this.PassengerAccidentCoverAmount + this.RoadsideAssistanceAmount + this.MedicalExpensesAmount + this.ExcessBuyBackAmount + this.ExcessAmount; switch (PaymentTermid) { case 3: discountField = discountField / 4; break; case 4: discountField = discountField / 3; break; case 5: day = 5 * 30; discountField = Math.Round(Convert.ToDecimal((double)day / 365) * discountField, 2); break; case 6: day = 6 * 30; discountField = Math.Round(Convert.ToDecimal((double)day / 365) * discountField, 2); break; case 7: day = 7 * 30; discountField = Math.Round(Convert.ToDecimal((double)day / 365) * discountField, 2); break; case 8: day = 8 * 30; discountField = Math.Round(Convert.ToDecimal((double)day / 365) * discountField, 2); break; case 9: day = 9 * 30; discountField = Math.Round(Convert.ToDecimal((double)day / 365) * discountField, 2); break; case 10: day = 10 * 30; discountField = Math.Round(Convert.ToDecimal((double)day / 365) * discountField, 2); break; case 11: day = 11 * 30; discountField = Math.Round(Convert.ToDecimal((double)day / 365) * discountField, 2); break; } if (coverType != eCoverType.ThirdParty && coverType != eCoverType.FullThirdParty && coverType != eCoverType.Comprehensive) // discount will not apply for third party and full third party and comprensive { switch (PaymentTermid) { case 1: this.AnnualRiskPremium = premium + discountField; if (isVehicleRegisteredonICEcash && !(coverType == eCoverType.Comprehensive)) { this.AnnualRiskPremium = Convert.ToDecimal(BasicPremiumICEcash, System.Globalization.CultureInfo.InvariantCulture); } if (DiscountOnRenewalSettings.ValueType == Convert.ToInt32(eSettingValueType.percentage)) { this.Discount = ((this.AnnualRiskPremium * Convert.ToDecimal(DiscountOnRenewalSettings.value, System.Globalization.CultureInfo.InvariantCulture)) / 100); } if (DiscountOnRenewalSettings.ValueType == Convert.ToInt32(eSettingValueType.amount)) { this.Discount = Convert.ToDecimal(DiscountOnRenewalSettings.value, System.Globalization.CultureInfo.InvariantCulture); } break; case 3: this.QuaterlyRiskPremium = premium + discountField; if (isVehicleRegisteredonICEcash && !(coverType == eCoverType.Comprehensive)) { this.QuaterlyRiskPremium = Convert.ToDecimal(BasicPremiumICEcash, System.Globalization.CultureInfo.InvariantCulture); } if (DiscountOnRenewalSettings.ValueType == Convert.ToInt32(eSettingValueType.percentage)) { this.Discount = ((this.QuaterlyRiskPremium * Convert.ToDecimal(DiscountOnRenewalSettings.value, System.Globalization.CultureInfo.InvariantCulture)) / 100); } if (DiscountOnRenewalSettings.ValueType == Convert.ToInt32(eSettingValueType.amount)) { this.Discount = Convert.ToDecimal(DiscountOnRenewalSettings.value, System.Globalization.CultureInfo.InvariantCulture); } break; case 4: this.TermlyRiskPremium = premium + discountField; if (isVehicleRegisteredonICEcash && !(coverType == eCoverType.Comprehensive)) { this.TermlyRiskPremium = Convert.ToDecimal(BasicPremiumICEcash, System.Globalization.CultureInfo.InvariantCulture); } if (DiscountOnRenewalSettings.ValueType == Convert.ToInt32(eSettingValueType.percentage)) { this.Discount = ((this.TermlyRiskPremium * Convert.ToDecimal(DiscountOnRenewalSettings.value, System.Globalization.CultureInfo.InvariantCulture)) / 100); } if (DiscountOnRenewalSettings.ValueType == Convert.ToInt32(eSettingValueType.amount)) { this.Discount = Convert.ToDecimal(DiscountOnRenewalSettings.value, System.Globalization.CultureInfo.InvariantCulture); } break; case 5: case 6: case 7: case 8: case 9: case 10: case 11: this.AnnualRiskPremium = premium + discountField; if (isVehicleRegisteredonICEcash && !(coverType == eCoverType.Comprehensive)) { this.AnnualRiskPremium = Convert.ToDecimal(BasicPremiumICEcash, System.Globalization.CultureInfo.InvariantCulture); } if (DiscountOnRenewalSettings.ValueType == Convert.ToInt32(eSettingValueType.percentage)) { this.Discount = ((this.AnnualRiskPremium * Convert.ToDecimal(DiscountOnRenewalSettings.value, System.Globalization.CultureInfo.InvariantCulture)) / 100); } if (DiscountOnRenewalSettings.ValueType == Convert.ToInt32(eSettingValueType.amount)) { this.Discount = Convert.ToDecimal(DiscountOnRenewalSettings.value, System.Globalization.CultureInfo.InvariantCulture); } break; } } // discount is not applicable in window application decimal totalPremium = 0; if (coverType == eCoverType.Comprehensive) { totalPremium = (this.Premium + discountField) - this.Discount; } else { totalPremium = ((isVehicleRegisteredonICEcash ? Convert.ToDecimal(BasicPremiumICEcash, System.Globalization.CultureInfo.InvariantCulture) : this.Premium) + discountField) - this.Discount; } this.Premium = Math.Round(totalPremium, 2); var stampDuty = 0.00m; if (StampDutySetting.ValueType == Convert.ToInt32(eSettingValueType.percentage)) { stampDuty = (totalPremium * Convert.ToDecimal(StampDutySetting.value, System.Globalization.CultureInfo.InvariantCulture)) / 100; } else { stampDuty = totalPremium + Convert.ToDecimal(StampDutySetting.value, System.Globalization.CultureInfo.InvariantCulture); } var ztscLevy = 0.00m; decimal totalPremiumForZtscLevy = 0; if (coverType == eCoverType.Comprehensive) { totalPremiumForZtscLevy = (this.Premium + discountField); } else { totalPremiumForZtscLevy = (isVehicleRegisteredonICEcash ? Convert.ToDecimal(BasicPremiumICEcash, System.Globalization.CultureInfo.InvariantCulture) : this.Premium) + discountField; } if (ZTSCLevySetting.ValueType == Convert.ToInt32(eSettingValueType.percentage)) { // ztscLevy = (totalPremium * Convert.ToDecimal(ZTSCLevySetting.value)) / 100; ztscLevy = (totalPremiumForZtscLevy * Convert.ToDecimal(ZTSCLevySetting.value, System.Globalization.CultureInfo.InvariantCulture)) / 100; } else { // ztscLevy = totalPremium + Convert.ToDecimal(ZTSCLevySetting.value); ztscLevy = totalPremiumForZtscLevy + Convert.ToDecimal(ZTSCLevySetting.value, System.Globalization.CultureInfo.InvariantCulture); } this.StamDuty = Math.Round(stampDuty, 2); this.ZtscLevy = Math.Round(ztscLevy, 2); if (!string.IsNullOrEmpty(StampDutyICEcash) && Convert.ToDecimal(StampDutyICEcash, System.Globalization.CultureInfo.InvariantCulture) > 100000) { this.StamDuty = 100000; } if (StampDutyICEcash == "") // if iceCash is not working { this.StamDuty = Math.Round(stampDuty, 2); StampDutyICEcash = Math.Round(stampDuty, 2).ToString(); } //if (isVehicleRegisteredonICEcash && !(coverType == eCoverType.Comprehensive) && totalPremium == Convert.ToDecimal(BasicPremiumICEcash)) if (isVehicleRegisteredonICEcash && !(coverType == eCoverType.Comprehensive)) { this.StamDuty = Math.Round(Convert.ToDecimal(StampDutyICEcash, System.Globalization.CultureInfo.InvariantCulture), 2); this.ZtscLevy = Math.Round(Convert.ToDecimal(ZTSCLevyICEcash, System.Globalization.CultureInfo.InvariantCulture), 2); } else { // double maxZTSC = 10.80; // default ProductId=1; double maxZTSC = 10.80 * (5 * 2); // default ProductId=1; if (ProductId == 3 || ProductId == 11) // Commercial Commuter Omnibus and Commercial Vehicle { // maxZTSC = 22.00; maxZTSC = 22.00 * (5 * 2); } switch (PaymentTermid) { case 1: if (Convert.ToDouble(this.ZtscLevy) > maxZTSC) { this.ZtscLevy = Math.Round(Convert.ToDecimal(maxZTSC, System.Globalization.CultureInfo.InvariantCulture), 2); } break; case 3: maxZTSC = maxZTSC * 4 / 12;; if (Convert.ToDouble(this.ZtscLevy) > maxZTSC) { this.ZtscLevy = Math.Round(Convert.ToDecimal(maxZTSC, System.Globalization.CultureInfo.InvariantCulture), 2); } break; case 4: maxZTSC = maxZTSC / 3; if (Convert.ToDouble(this.ZtscLevy) > maxZTSC) { this.ZtscLevy = Math.Round(Convert.ToDecimal(maxZTSC, System.Globalization.CultureInfo.InvariantCulture), 2); } break; case 5: maxZTSC = maxZTSC * 5 / 12; if (Convert.ToDouble(this.ZtscLevy) > maxZTSC) { this.ZtscLevy = Math.Round(Convert.ToDecimal(maxZTSC, System.Globalization.CultureInfo.InvariantCulture), 2); } break; case 6: maxZTSC = maxZTSC * 6 / 12; if (Convert.ToDouble(this.ZtscLevy) > maxZTSC) { this.ZtscLevy = Math.Round(Convert.ToDecimal(maxZTSC, System.Globalization.CultureInfo.InvariantCulture), 2); } break; case 7: maxZTSC = maxZTSC * 7 / 12; if (Convert.ToDouble(this.ZtscLevy) > maxZTSC) { this.ZtscLevy = Math.Round(Convert.ToDecimal(maxZTSC, System.Globalization.CultureInfo.InvariantCulture), 2); } break; case 8: maxZTSC = maxZTSC * 8 / 12; if (Convert.ToDouble(this.ZtscLevy) > maxZTSC) { this.ZtscLevy = Math.Round(Convert.ToDecimal(maxZTSC, System.Globalization.CultureInfo.InvariantCulture), 2); } break; case 9: maxZTSC = maxZTSC * 9 / 12; if (Convert.ToDouble(this.ZtscLevy) > maxZTSC) { this.ZtscLevy = Math.Round(Convert.ToDecimal(maxZTSC, System.Globalization.CultureInfo.InvariantCulture), 2); } break; case 10: maxZTSC = maxZTSC * 10 / 12; if (Convert.ToDouble(this.ZtscLevy) > maxZTSC) { this.ZtscLevy = Math.Round(Convert.ToDecimal(maxZTSC, System.Globalization.CultureInfo.InvariantCulture), 2); } break; case 11: maxZTSC = maxZTSC * 11 / 12; if (Convert.ToDouble(this.ZtscLevy) > maxZTSC) { this.ZtscLevy = Math.Round(Convert.ToDecimal(maxZTSC, System.Globalization.CultureInfo.InvariantCulture), 2); } break; } } if (!string.IsNullOrEmpty(StampDutyICEcash) && Convert.ToDecimal(StampDutyICEcash) > 100000) { this.StamDuty = 100000 * 2; } else if (coverType != eCoverType.Comprehensive && Convert.ToDecimal(StampDutyICEcash) < Convert.ToDecimal(7.50 * 2)) // minimum stamp duty { this.StamDuty = Convert.ToDecimal(7.50 * 2); } return(this); }