/// <summary> /// Calculate Ra Driver Charge /// </summary> public RaDriver CalculateCharge(DateTime rACreatedDate, DateTime startDtTime, DateTime endDtTime, long desigGradeId, bool isChauffer, long operationId, List <TariffType> oTariffTypeList) { PricingStrategy objPs = PricingStrategyFactory.GetPricingStrategy(rACreatedDate, startDtTime, endDtTime, operationId, oTariffTypeList); if (objPs == null) { throw new CaresException(Resources.RentalAgreement.RentalAgreement.TariffTypeNotDefinedForRaDriver, null); } RaDriver tmp; if (isChauffer) { List <ChaufferCharge> chaufferCharges = chaufferChargeRepository. GetForRaBilling(objPs.TariffType.TariffTypeCode, Convert.ToInt64(desigGradeId), rACreatedDate).ToList(); if (chaufferCharges.Count == 0) { throw new CaresException(Resources.RentalAgreement.RentalAgreement.ChaufferRateNotDefinedForChauffer, null); } ChaufferCharge oChfRate = chaufferCharges[0]; tmp = objPs.CalculateChaufferCharge(startDtTime, endDtTime, oChfRate); } else { List <AdditionalDriverCharge> additionalDriverCharges = additionalDriverChargeRepository. GetForRaBilling(objPs.TariffType.TariffTypeCode, rACreatedDate).ToList(); if (additionalDriverCharges.Count == 0) { throw new CaresException(Resources.RentalAgreement.RentalAgreement.DriverChargeNotDefined, null); } AdditionalDriverCharge oAddDrvRate = additionalDriverCharges[0]; tmp = objPs.CalculateAddDriverCharge(startDtTime, endDtTime, oAddDrvRate); } return(tmp); }
/// <summary> /// Save Chauffer Charge Main /// </summary> /// <param name="chaufferChargeMain"></param> /// <returns></returns> public ChaufferChargeMainContent SaveChaufferCharge(ChaufferChargeMain chaufferChargeMain) { ChaufferChargeMain chaufferChargeMainDbVersion = chaufferChargeMainRepository.Find(chaufferChargeMain.ChaufferChargeMainId); TariffType tariffType = tariffTypeRepository.Find(long.Parse(chaufferChargeMain.TariffTypeCode)); chaufferChargeMain.TariffTypeCode = tariffType.TariffTypeCode; if (chaufferChargeMainDbVersion == null) //Add Case { //Validate Chauffer Charge Main ChaufferChargeValidation(chaufferChargeMain, true); chaufferChargeMain.IsActive = true; chaufferChargeMain.IsDeleted = chaufferChargeMain.IsPrivate = chaufferChargeMain.IsReadOnly = false; chaufferChargeMain.RecLastUpdatedBy = chaufferChargeMain.RecCreatedBy = chaufferChargeMainRepository.LoggedInUserIdentity; chaufferChargeMain.RecCreatedDt = chaufferChargeMain.RecLastUpdatedDt = DateTime.Now; chaufferChargeMain.RowVersion = 0; chaufferChargeMain.UserDomainKey = chaufferChargeMainRepository.UserDomainKey; if (chaufferChargeMain.ChaufferCharges != null) { foreach (var item in chaufferChargeMain.ChaufferCharges) { item.IsActive = true; item.IsDeleted = item.IsPrivate = item.IsReadOnly = false; item.RecLastUpdatedBy = item.RecCreatedBy = chaufferChargeMainRepository.LoggedInUserIdentity; item.RecCreatedDt = item.RecLastUpdatedDt = DateTime.Now; item.RowVersion = 0; item.RevisionNumber = 0; item.UserDomainKey = chaufferChargeMainRepository.UserDomainKey; } } chaufferChargeMainRepository.Add(chaufferChargeMain); } else //Update { chaufferChargeMainDbVersion.RecLastUpdatedBy = chaufferChargeMainRepository.LoggedInUserIdentity; chaufferChargeMainDbVersion.RecLastUpdatedDt = DateTime.Now; chaufferChargeMainDbVersion.StartDt = chaufferChargeMain.StartDt; if (chaufferChargeMain.ChaufferCharges != null) { //Validate Chauffer Charge Main ChaufferChargeValidation(chaufferChargeMain, false); foreach (var item in chaufferChargeMain.ChaufferCharges) { if ( chaufferChargeMainDbVersion.ChaufferCharges.All( x => x.ChaufferChargeId != item.ChaufferChargeId || item.ChaufferChargeId == 0)) { item.IsActive = true; item.IsDeleted = item.IsPrivate = item.IsReadOnly = false; item.RecLastUpdatedBy = item.RecCreatedBy = chaufferChargeMainRepository.LoggedInUserIdentity; item.RecCreatedDt = item.RecLastUpdatedDt = DateTime.Now; item.RowVersion = 0; item.RevisionNumber = 0; item.UserDomainKey = chaufferChargeMainRepository.UserDomainKey; chaufferChargeMainDbVersion.ChaufferCharges.Add(item); } else { if (chaufferChargeMainDbVersion.ChaufferCharges.Any( x => x.ChaufferChargeId == item.ChaufferChargeId)) { ChaufferCharge chaufferChargeDbVesion = chaufferChargeMainDbVersion.ChaufferCharges.First( x => x.ChaufferChargeId == item.ChaufferChargeId); if (chaufferChargeDbVesion.DesigGradeId != item.DesigGradeId || chaufferChargeDbVesion.StartDt != item.StartDt // ReSharper disable once CompareOfFloatsByEqualityOperator || chaufferChargeDbVesion.ChaufferChargeRate != item.ChaufferChargeRate) { item.IsActive = true; item.IsDeleted = item.IsPrivate = item.IsReadOnly = false; item.RecLastUpdatedBy = item.RecCreatedBy = chaufferChargeMainRepository.LoggedInUserIdentity; item.RecCreatedDt = item.RecLastUpdatedDt = DateTime.Now; item.RowVersion = 0; item.ChaufferChargeMainId = chaufferChargeMain.ChaufferChargeMainId; item.RevisionNumber = chaufferChargeDbVesion.RevisionNumber + 1; item.ChaufferChargeId = 0; item.UserDomainKey = chaufferChargeMainRepository.UserDomainKey; chaufferChargeRepository.Add(item); chaufferChargeRepository.SaveChanges(); chaufferChargeDbVesion.ChildChaufferChargeId = item.ChaufferChargeMainId; } } } } } } chaufferChargeMainRepository.SaveChanges(); return(new ChaufferChargeMainContent { ChaufferChargeMainId = chaufferChargeMain.ChaufferChargeMainId, Code = chaufferChargeMain.ChaufferChargeMainCode, Name = chaufferChargeMain.ChaufferChargeMainName, Description = chaufferChargeMain.ChaufferChargeMainDescription, StartDate = chaufferChargeMain.StartDt, TariffTypeId = tariffType.TariffTypeId, CompanyId = tariffType.Operation.Department.Company.CompanyId, CompanyCodeName = tariffType.Operation.Department.Company.CompanyCode + " - " + tariffType.Operation.Department.Company.CompanyName, DepartmentId = tariffType.Operation.Department.DepartmentId, TariffTypeCodeName = tariffType.TariffTypeCode + " - " + tariffType.TariffTypeName, OperationId = tariffType.OperationId, OperationCodeName = tariffType.Operation.OperationCode + " - " + tariffType.Operation.OperationName, }); }
public override RaDriver CalculateChaufferCharge(DateTime StartDate, DateTime EndDate, ChaufferCharge ChfRate) { RaDriver oRADriver = null; //calculate total rental duration as a time span object TimeSpan dtSpan = EndDate - StartDate; //convert rental duration to minutes for standardization float ChaufferDurationInMinutes = 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 oRADriver = new RaDriver(); oRADriver.TariffType = this.TariffType.TariffTypeCode; if (ChaufferDurationInMinutes >= TariffDurationFrom && ChaufferDurationInMinutes <= TariffDurationTo) { oRADriver.Rate = ChfRate.ChaufferChargeRate; oRADriver.TotalCharge = ChfRate.ChaufferChargeRate; oRADriver.ChargedDay = dtSpan.Days; oRADriver.ChargedHour = dtSpan.Hours; oRADriver.ChargedMinute = dtSpan.Minutes; } else { float ChargeDuration = GetDurationInMinutes(dtSpan, Convert.ToInt32(TariffType.MeasurementUnitId)); oRADriver.TotalCharge = (float)Math.Round((ChargeDuration / TariffDurationTo) * ChfRate.ChaufferChargeRate, base.DecimalRounding, MidpointRounding.AwayFromZero); oRADriver.Rate = ChfRate.ChaufferChargeRate; //excess milage charge for edit case oRADriver.ChargedDay = dtSpan.Days; oRADriver.ChargedHour = dtSpan.Hours; oRADriver.ChargedMinute = dtSpan.Minutes; } return(oRADriver); }
public abstract RaDriver CalculateChaufferCharge(DateTime StartDate, DateTime EndDate, ChaufferCharge ChfRate);