public List <PriceListRow> GetPriceList(DateTimeOffset startAt, CompetenceLevel competenceLevel, PriceListType listType) { return(_dbContext.PriceListRows.Where(r => r.CompetenceLevel == competenceLevel && r.PriceListType == listType && r.StartDate.Date <= startAt.Date && r.EndDate.Date >= startAt.Date).ToList()); }
public PriceInformation GetPricesRequisition(DateTimeOffset startAt, DateTimeOffset endAt, DateTimeOffset originStartAt, DateTimeOffset originEndAt, CompetenceLevel competenceLevel, PriceListType listType, int rankingId, out bool useRequestPricerows, int?timeWasteNormalTime, int?timeWasteIWHTime, IEnumerable <PriceRowBase> requestPriceRows, decimal?outlay, Order replacingOrder, DateTimeOffset orderCreatedDate, List <MealBreak> mealbreaks = null) { var prices = GetPriceList(startAt, competenceLevel, listType); //get mealbeaks if any IDictionary <PriceListRowType, int> mealbreakTimes = GetMealBreakTimesAndTypes(mealbreaks); //compare compensation for origin times with requisition times (including mealbreaks), broker/interpreter should have the compensation that get most payed var pricesRequisition = MergePriceListRowsAndReduceForMealBreak(GetPriceRowsPerType(startAt, endAt, prices, mealbreaks), mealbreakTimes); var pricesOriginTimes = MergePriceListRowsAndReduceForMealBreak(GetPriceRowsPerType(originStartAt, originEndAt, prices, mealbreaks), mealbreakTimes); useRequestPricerows = UsePricesOriginTimes(pricesRequisition, pricesOriginTimes); //if we should use request, set start and end from request start and end var pricesToUse = useRequestPricerows ? pricesOriginTimes.ToList() : pricesRequisition.ToList(); //if replacementorder - check and compare start- and endtime from replacing order if (replacingOrder != null) { var pricesReplacingOrder = MergePriceListRowsAndReduceForMealBreak(GetPriceRowsPerType(replacingOrder.StartAt, replacingOrder.EndAt, prices, mealbreaks), mealbreakTimes); bool useReplacingOrderTimes = UsePricesOriginTimes(useRequestPricerows ? pricesOriginTimes : pricesRequisition, pricesReplacingOrder); if (useReplacingOrderTimes) { pricesToUse = pricesReplacingOrder.ToList(); useRequestPricerows = useReplacingOrderTimes; } } //get lost time and extra charges pricesToUse.AddRange(GetLostTimePriceRows(startAt, timeWasteNormalTime, timeWasteIWHTime, prices)); return(CompletePricesWithExtraCharges(startAt, endAt, competenceLevel, pricesToUse, rankingId, null, orderCreatedDate, outlay, requestPriceRows.Single(rpr => rpr.PriceRowType == PriceRowType.BrokerFee))); }
public PriceInformation GetPrices(DateTimeOffset startAt, DateTimeOffset endAt, CompetenceLevel competenceLevel, PriceListType listType, int rankingId, DateTimeOffset orderCreatedDate, decimal?travelCost = null) { var prices = GetPriceList(startAt, competenceLevel, listType); return(CompletePricesWithExtraCharges(startAt, endAt, competenceLevel, MergePriceListRowsAndReduceForMealBreak(GetPriceRowsPerType(startAt, endAt, prices)).ToList(), rankingId, travelCost, orderCreatedDate)); }
private PriceRowBase GetPriceRowBrokerFee(DateTimeOffset startAt, DateTimeOffset endAt, CompetenceLevel competenceLevel, int rankingId, PriceRowBase brokerFeeToUse, DateTimeOffset orderCreatedDate) { if (brokerFeeToUse != null) { return(brokerFeeToUse); } else { //One broker fee per day int days = GetNoOfDays(startAt, endAt); //if there is no priceRowBrokerFee for the orderStart, try to get if for the orderCreatedDate (contract has ended, but order was created when contract/ranking was valid) var priceRow = _cacheService.BrokerFeePriceList.Where(br => br.RankingId == rankingId && br.CompetenceLevel == competenceLevel && br.StartDate.Date <= startAt.Date && br.EndDate.Date >= startAt.Date).Count() == 1 ? _cacheService.BrokerFeePriceList.Single(br => br.RankingId == rankingId && br.CompetenceLevel == competenceLevel && br.StartDate.Date <= startAt.Date && br.EndDate.Date >= startAt.Date) : _cacheService.BrokerFeePriceList.Single(br => br.RankingId == rankingId && br.CompetenceLevel == competenceLevel && br.StartDate.Date <= orderCreatedDate.Date && br.EndDate.Date >= orderCreatedDate.Date); return(new PriceRowBase { StartAt = startAt.Date.ToDateTimeOffsetSweden(), EndAt = endAt.Date.ToDateTimeOffsetSweden(), PriceRowType = PriceRowType.BrokerFee, Quantity = days, Price = priceRow.PriceToUse, PriceListRowId = priceRow.PriceListRowId }); } }
private PriceInformation CompletePricesWithExtraCharges(DateTimeOffset startAt, DateTimeOffset endAt, CompetenceLevel competenceLevel, List <PriceRowBase> priceListRowsPerPriceType, int rankingId, decimal?travelCost, DateTimeOffset orderCreatedDate, decimal?outlay = null, PriceRowBase requestBrokerFeeForRequisition = null) { List <PriceRowBase> allPriceRows = new List <PriceRowBase> { GetPriceRowSocialInsuranceCharge(startAt, endAt, priceListRowsPerPriceType), GetPriceRowAdministrativeCharge(startAt, endAt, priceListRowsPerPriceType), GetPriceRowBrokerFee(startAt, endAt, competenceLevel, rankingId, requestBrokerFeeForRequisition, orderCreatedDate) }; allPriceRows.AddRange(priceListRowsPerPriceType); if (travelCost != null && travelCost > 0) { allPriceRows.Add(GetTravelCostRow(startAt.Date, startAt.Date.AddDays(1).ToDateTimeOffsetSweden(), travelCost, PriceRowType.TravelCost)); } if (outlay != null && outlay > 0) { allPriceRows.Add(GetTravelCostRow(startAt.Date, startAt.Date.AddDays(1).ToDateTimeOffsetSweden(), outlay, PriceRowType.Outlay)); } allPriceRows.Add(GetRoundedPriceRow(startAt, endAt, allPriceRows)); var priceInformation = new PriceInformation { PriceRows = allPriceRows }; return(priceInformation); }
public Competence(string description, CompetenceLevel competenceLevel) { Description = description; CompetenceLevel = competenceLevel; }