/// <summary> /// Calculate Insurance Charge for Ra Billing /// </summary> public RaHireGroupInsurance CalculateCharge(DateTime raRecCreatedDate, DateTime stDate, DateTime eDate, long operationId, long hireGroupDetailId, short insuranceTypeId, List <TariffType> oTariffTypeList) { Helpers.PricingStrategy objPs = PricingStrategyFactory.GetPricingStrategy(raRecCreatedDate, stDate, eDate, operationId, oTariffTypeList); if (objPs == null) { throw new CaresException(Resources.RentalAgreement.RentalAgreement.TariffTypeNotDefinedForHireGroupInsurance, null); } List <InsuranceRt> insuranceRts = insuranceRtRepository. GetForRaBilling(objPs.TariffType.TariffTypeCode, hireGroupDetailId, insuranceTypeId, raRecCreatedDate).ToList(); if (insuranceRts.Count == 0) { throw new CaresException(Resources.RentalAgreement.RentalAgreement.InsuranceRateNotDefinedForHireGroupInsurance); } InsuranceRt oInsRate = insuranceRts[0]; return(objPs.CalculateInsuranceCharge(stDate, eDate, oInsRate)); }
public override RaHireGroupInsurance CalculateInsuranceCharge(DateTime StartDate, DateTime EndDate, InsuranceRt InsRate) { RaHireGroupInsurance oInsuranceCharge = null; //calculate total rental duration as a time span object TimeSpan dtSpan = EndDate - StartDate; //convert rental duration to minutes for standardization float InsDurationInMinutes = GetDurationInMinutes(dtSpan, Convert.ToInt32(TariffType.MeasurementUnitId)); //convert tariff type FromDuration to Minute for standardization float TariffDurationFrom = GetDurationInMinutes(TariffType.DurationFrom, Convert.ToInt32(TariffType.MeasurementUnitId)); //convert tariff type ToDuration to Minute for standardization float TariffDurationTo = GetDurationInMinutes(TariffType.DurationTo, Convert.ToInt32(TariffType.MeasurementUnitId)); //convert tariff type GracePeriod to Minute for standardization float TariffGracePeriod = GetDurationInMinutes((float)TariffType.GracePeriod, Convert.ToInt32(TariffType.MeasurementUnitId)); //set rental charge object common parameters oInsuranceCharge = new RaHireGroupInsurance(); oInsuranceCharge.TariffType = this.TariffType.TariffTypeCode; if (InsDurationInMinutes >= TariffDurationFrom && InsDurationInMinutes <= TariffDurationTo) { oInsuranceCharge.InsuranceRate = InsRate.InsuranceRate; oInsuranceCharge.InsuranceCharge = InsRate.InsuranceRate; oInsuranceCharge.ChargedDay = dtSpan.Days; oInsuranceCharge.ChargedHour = dtSpan.Hours; oInsuranceCharge.ChargedMinute = dtSpan.Minutes; } else { float ChargeDuration = GetDurationInMinutes(dtSpan, Convert.ToInt32(TariffType.MeasurementUnitId)); oInsuranceCharge.InsuranceCharge = (float)Math.Round((ChargeDuration / TariffDurationTo) * InsRate.InsuranceRate, base.DecimalRounding, MidpointRounding.AwayFromZero); oInsuranceCharge.InsuranceRate = InsRate.InsuranceRate; //excess milage charge for edit case oInsuranceCharge.ChargedDay = dtSpan.Days; oInsuranceCharge.ChargedHour = dtSpan.Hours; oInsuranceCharge.ChargedMinute = dtSpan.Minutes; } return(oInsuranceCharge); }
/// <summary> /// Add/Edit Insurance Rate /// </summary> /// <param name="insuranceRtMain"></param> /// <returns></returns> public InsuranceRtMainContent SaveInsuranceRate(InsuranceRtMain insuranceRtMain) { TariffType tariffType = tariffTypeRepository.Find(long.Parse(insuranceRtMain.TariffTypeCode)); insuranceRtMain.TariffTypeCode = tariffType.TariffTypeCode; InsuranceRtMain insuranceRtMainDbVersion = insuranceRtMainRepository.Find(insuranceRtMain.InsuranceRtMainId); #region Add if (insuranceRtMainDbVersion == null) { ValidateInsuranceRate(insuranceRtMain, true); insuranceRtMain.UserDomainKey = insuranceRtMainRepository.UserDomainKey; insuranceRtMain.IsActive = true; insuranceRtMain.IsDeleted = false; insuranceRtMain.IsPrivate = false; insuranceRtMain.IsReadOnly = false; insuranceRtMain.RecCreatedDt = DateTime.Now; insuranceRtMain.RecLastUpdatedDt = DateTime.Now; insuranceRtMain.RecCreatedBy = insuranceRtMainRepository.LoggedInUserIdentity; insuranceRtMain.RecLastUpdatedBy = insuranceRtMainRepository.LoggedInUserIdentity; insuranceRtMain.RowVersion = 0; //insuranceRtMainRepository.Add(insuranceRtMain); //set child (Insurance Rate in Insurance Rate Main) properties #region Insurance Rate in Insurance Rate Main if (insuranceRtMain.InsuranceRates != null) { // set properties foreach (InsuranceRt item in insuranceRtMain.InsuranceRates) { item.IsActive = true; item.IsDeleted = false; item.IsPrivate = false; item.IsReadOnly = false; item.RecCreatedDt = DateTime.Now; item.RecLastUpdatedDt = DateTime.Now; item.RecCreatedBy = insuranceRtMainRepository.LoggedInUserIdentity; item.RecLastUpdatedBy = insuranceRtMainRepository.LoggedInUserIdentity; item.UserDomainKey = insuranceRtMainRepository.UserDomainKey; } } #endregion insuranceRtMainRepository.Add(insuranceRtMain); insuranceRtMainRepository.SaveChanges(); } #endregion #region Edit else { ValidateInsuranceRate(insuranceRtMain, false); insuranceRtMainDbVersion.RecLastUpdatedDt = DateTime.Now; insuranceRtMainDbVersion.RecLastUpdatedBy = insuranceRtMainRepository.LoggedInUserIdentity; insuranceRtMainDbVersion.StartDt = insuranceRtMain.StartDt; //add new Insurance Rate items if (insuranceRtMain.InsuranceRates != null) { foreach (InsuranceRt insuranceRt in insuranceRtMain.InsuranceRates) { if ( insuranceRtMainDbVersion.InsuranceRates.All( x => x.InsuranceRtId != insuranceRt.InsuranceRtId) || insuranceRt.InsuranceRtId == 0) { // set properties insuranceRt.IsActive = true; insuranceRt.IsDeleted = false; insuranceRt.IsPrivate = false; insuranceRt.IsReadOnly = false; insuranceRt.RecCreatedDt = DateTime.Now; insuranceRt.RecLastUpdatedDt = DateTime.Now; insuranceRt.RecCreatedBy = insuranceRtMainRepository.LoggedInUserIdentity; insuranceRt.RecLastUpdatedBy = insuranceRtMainRepository.LoggedInUserIdentity; insuranceRt.UserDomainKey = insuranceRtMainRepository.UserDomainKey; insuranceRt.InsuranceRtMainId = insuranceRtMain.InsuranceRtMainId; insuranceRtMainDbVersion.InsuranceRates.Add(insuranceRt); } else { insuranceRt.IsActive = true; insuranceRt.IsDeleted = false; insuranceRt.IsPrivate = false; insuranceRt.IsReadOnly = false; insuranceRt.RecCreatedDt = DateTime.Now; insuranceRt.RecLastUpdatedDt = DateTime.Now; insuranceRt.RecCreatedBy = insuranceRtMainRepository.LoggedInUserIdentity; insuranceRt.RecLastUpdatedBy = insuranceRtMainRepository.LoggedInUserIdentity; insuranceRt.UserDomainKey = insuranceRtMainRepository.UserDomainKey; insuranceRt.InsuranceRtMainId = insuranceRtMain.InsuranceRtMainId; long oldRecordId = insuranceRt.InsuranceRtId; insuranceRt.InsuranceRtId = 0; insuranceRt.RevisionNumber = insuranceRt.RevisionNumber + 1; insuranceRtRepository.Add(insuranceRt); insuranceRtRepository.SaveChanges(); InsuranceRt oldInsuranceRt = insuranceRtRepository.Find(oldRecordId); oldInsuranceRt.ChildInsuranceRtId = insuranceRt.InsuranceRtId; insuranceRtRepository.SaveChanges(); } } } } #endregion insuranceRtMainRepository.SaveChanges(); return(new InsuranceRtMainContent { TariffTypeCodeName = tariffType.TariffTypeCode + " - " + tariffType.TariffTypeName, TariffTypeId = tariffType.TariffTypeId, OperationId = tariffType.Operation.OperationId, OperationCodeName = tariffType.Operation.OperationCode + " - " + tariffType.Operation.OperationName, InsuranceRtMainId = insuranceRtMain.InsuranceRtMainId, InsuranceRtMainCode = insuranceRtMain.InsuranceRtMainCode, InsuranceRtName = insuranceRtMain.InsuranceRtMainCode, InsuranceRtMainDescription = insuranceRtMain.InsuranceRtMainDescription, StartDt = insuranceRtMain.StartDt }); }
public abstract RaHireGroupInsurance CalculateInsuranceCharge(DateTime StartDate, DateTime EndDate, InsuranceRt InsRate);