/// <summary> /// Calculate Charge For Service Item for RA Billing /// </summary> public RaServiceItem CalculateCharge(DateTime raCreatedDate, DateTime startDtTime, DateTime endDtTime, long serviceItemId, int quantity, Int64 operationId, List <TariffType> oTariffTypeList) { Helpers.PricingStrategy objPs = PricingStrategyFactory.GetPricingStrategy(raCreatedDate, startDtTime, endDtTime, operationId, oTariffTypeList); if (objPs == null) { throw new CaresException(Resources.RentalAgreement.RentalAgreement.TariffTypeNotDefinedForServiceItem, null); } List <ServiceRt> serviceRts = serviceRtRepository.GetForRaBilling(objPs.TariffType.TariffTypeCode, serviceItemId, raCreatedDate).ToList(); if (serviceRts.Count == 0) { throw new CaresException(Resources.RentalAgreement.RentalAgreement.ServiceRateNotDefinedForServiceItem); } ServiceRt oServiceRate = serviceRts[0]; return(objPs.CalculateRAServiceItemCharge(startDtTime, endDtTime, quantity, oServiceRate)); }
public override RaServiceItem CalculateRAServiceItemCharge(DateTime StartDate, DateTime EndDate, Int32 ItemQuantity, ServiceRt ServiceItemRate) { RaServiceItem oRASICharge = null; //calculate total rental duration as a time span object TimeSpan dtSpan = EndDate - StartDate; //convert rental duration to minutes for standardization float SIDurationInMinutes = 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 oRASICharge = new RaServiceItem(); oRASICharge.TariffType = this.TariffType.TariffTypeCode; if (SIDurationInMinutes >= TariffDurationFrom && SIDurationInMinutes <= TariffDurationTo) { oRASICharge.ServiceRate = ServiceItemRate.ServiceRate; oRASICharge.ServiceCharge = ServiceItemRate.ServiceRate * ItemQuantity; oRASICharge.ChargedDay = dtSpan.Days; oRASICharge.ChargedHour = dtSpan.Hours; oRASICharge.ChargedMinute = dtSpan.Minutes; } else { float ChargeDuration = GetDurationInMinutes(dtSpan, Convert.ToInt32(TariffType.MeasurementUnitId)); oRASICharge.ServiceCharge = (float)Math.Round((ChargeDuration / TariffDurationTo) * ServiceItemRate.ServiceRate * ItemQuantity, base.DecimalRounding, MidpointRounding.AwayFromZero); oRASICharge.ServiceRate = ServiceItemRate.ServiceRate; //excess milage charge for edit case oRASICharge.ChargedDay = dtSpan.Days; oRASICharge.ChargedHour = dtSpan.Hours; oRASICharge.ChargedMinute = dtSpan.Minutes; } return(oRASICharge); }
/// <summary> /// Add/Edit Service Rate /// </summary> /// <param name="serviceRtMain"></param> /// <returns></returns> public ServiceRtMainContent SaveServiceRate(ServiceRtMain serviceRtMain) { TariffType tariffType = tariffTypeRepository.Find(long.Parse(serviceRtMain.TariffTypeCode)); serviceRtMain.TariffTypeCode = tariffType.TariffTypeCode; ServiceRtMain serviceRtMainDbVersion = serviceRtMainRepository.Find(serviceRtMain.ServiceRtMainId); #region Add if (serviceRtMainDbVersion == null) { ValidateServiceRt(serviceRtMain, true); serviceRtMain.UserDomainKey = serviceRtMainRepository.UserDomainKey; serviceRtMain.IsActive = true; serviceRtMain.IsDeleted = false; serviceRtMain.IsPrivate = false; serviceRtMain.IsReadOnly = false; serviceRtMain.RecCreatedDt = DateTime.Now; serviceRtMain.RecLastUpdatedDt = DateTime.Now; serviceRtMain.RecCreatedBy = serviceRtMainRepository.LoggedInUserIdentity; serviceRtMain.RecLastUpdatedBy = serviceRtMainRepository.LoggedInUserIdentity; serviceRtMain.RowVersion = 0; //set child (Service Rate in Service Rate Main) properties #region Service Rate in Service Rate Main if (serviceRtMain.ServiceRts != null) { // set properties foreach (ServiceRt item in serviceRtMain.ServiceRts) { item.IsActive = true; item.IsDeleted = false; item.IsPrivate = false; item.IsReadOnly = false; item.RecCreatedDt = DateTime.Now; item.RecLastUpdatedDt = DateTime.Now; item.RecCreatedBy = serviceRtMainRepository.LoggedInUserIdentity; item.RecLastUpdatedBy = serviceRtMainRepository.LoggedInUserIdentity; item.UserDomainKey = serviceRtMainRepository.UserDomainKey; } } #endregion serviceRtMainRepository.Add(serviceRtMain); serviceRtMainRepository.SaveChanges(); } #endregion #region Edit else { ValidateServiceRt(serviceRtMain, false); serviceRtMainDbVersion.RecLastUpdatedDt = DateTime.Now; serviceRtMainDbVersion.RecLastUpdatedBy = serviceRtMainRepository.LoggedInUserIdentity; serviceRtMainDbVersion.StartDt = serviceRtMain.StartDt; //add new Insurance Rate items if (serviceRtMain.ServiceRts != null) { foreach (ServiceRt serviceRt in serviceRtMain.ServiceRts) { if ( serviceRtMainDbVersion.ServiceRts.All( x => x.ServiceRtId != serviceRt.ServiceRtId) || serviceRt.ServiceRtId == 0) { // set properties serviceRt.IsActive = true; serviceRt.IsDeleted = false; serviceRt.IsPrivate = false; serviceRt.IsReadOnly = false; serviceRt.RecCreatedDt = DateTime.Now; serviceRt.RecLastUpdatedDt = DateTime.Now; serviceRt.RecCreatedBy = serviceRtMainRepository.LoggedInUserIdentity; serviceRt.RecLastUpdatedBy = serviceRtMainRepository.LoggedInUserIdentity; serviceRt.UserDomainKey = serviceRtMainRepository.UserDomainKey; serviceRt.ServiceRtMainId = serviceRtMain.ServiceRtMainId; serviceRtMainDbVersion.ServiceRts.Add(serviceRt); } else { serviceRt.IsActive = true; serviceRt.IsDeleted = false; serviceRt.IsPrivate = false; serviceRt.IsReadOnly = false; serviceRt.RecCreatedDt = DateTime.Now; serviceRt.RecLastUpdatedDt = DateTime.Now; serviceRt.RecCreatedBy = serviceRtMainRepository.LoggedInUserIdentity; serviceRt.RecLastUpdatedBy = serviceRtMainRepository.LoggedInUserIdentity; serviceRt.UserDomainKey = serviceRtMainRepository.UserDomainKey; serviceRt.ServiceRtMainId = serviceRtMain.ServiceRtMainId; long oldRecordId = serviceRt.ServiceRtId; serviceRt.ServiceRtId = 0; serviceRt.RevisionNumber = serviceRt.RevisionNumber + 1; serviceRtRepository.Add(serviceRt); serviceRtRepository.SaveChanges(); ServiceRt oldServiceRt = serviceRtRepository.Find(oldRecordId); oldServiceRt.ChildServiceRtId = serviceRt.ServiceRtId; serviceRtRepository.SaveChanges(); } } } } serviceRtMainRepository.SaveChanges(); #endregion return(new ServiceRtMainContent { TariffTypeCodeName = tariffType.TariffTypeCode + " - " + tariffType.TariffTypeName, TariffTypeId = tariffType.TariffTypeId, OperationId = tariffType.Operation.OperationId, OperationCodeName = tariffType.Operation.OperationCode + " - " + tariffType.Operation.OperationName, ServiceRtMainId = serviceRtMain.ServiceRtMainId, ServiceRtMainCode = serviceRtMain.ServiceRtMainCode, ServiceRtMainName = serviceRtMain.ServiceRtMainName, ServiceRtMainDescription = serviceRtMain.ServiceRtMainDescription, StartDt = serviceRtMain.StartDt }); }
public abstract RaServiceItem CalculateRAServiceItemCharge(DateTime StartDate, DateTime EndDate, Int32 ItemQuantity, ServiceRt ServiceItemRate);