public List <PriceComponent> CalculatePrice(PlaceInRun placeInRun) { var components = new List <PriceComponent>(); var run = _runRepository.GetRunDetails(placeInRun.RunId); var train = _trainRepository.GetTrainDetails(run.TrainId); var agency = _agenciesRepository.GetAgencyDetails(train.AgencyId); var place = train.Carriages .Select(car => car.Places.SingleOrDefault(pl => pl.Number == placeInRun.Number && car.Number == placeInRun.CarriageNumber)) .SingleOrDefault(x => x != null); var placeComponent = new PriceComponent() { Name = "Main price: " + Convert.ToString(place.Carriage.DefaultPrice) + "$ AgencyTax: " + Convert.ToString(((agency.AgencyPay) - 1) * 100) + "%" + " Full Price:" }; placeComponent.Value = place.Carriage.DefaultPrice * agency.AgencyPay; components.Add(placeComponent); var AgencyInfo = new PriceComponent() { Name = "Agency Tax provided by " + agency.Name, Value = place.Carriage.DefaultPrice * ((agency.AgencyPay) - 1) }; components.Add(AgencyInfo); return(components); }
public Run CreateRun(int trainId, DateTime date) { if (GetAvailableDatesForNewRun(trainId, date, date.AddDays(1)).Count < 1) { throw new InvalidOperationException(String.Format("Train {0} is occupied at {1}. Run can not be created", trainId, date)); } var train = _trainRepo.GetTrainDetails(trainId); var run = new Run() { TrainId = train.Id, Date = date, Places = new List <PlaceInRun>() }; foreach (var carriage in train.Carriages) { foreach (var place in carriage.Places) { var newPlaceInRun = new PlaceInRun() { Number = place.Number, CarriageNumber = carriage.Number, Run = run }; run.Places.Add(newPlaceInRun); } ; } ; _runRepo.CreateRun(run); return(run); }
public List <PriceComponent> CalculatePrice(PlaceInRun placeInRun /*,ServicesContext requestedServices*/) { var components = new List <PriceComponent>(); //if (requestedServices.Tee) //{ // тут какая то логика. много. // обращения к сервисам var beveragesPriceComponent = new PriceComponent() { Name = "Beverages", Value = 3 }; components.Add(beveragesPriceComponent); //} var domesticsPriceComponent = new PriceComponent() { Name = "Domestics", Value = 2 }; components.Add(domesticsPriceComponent); return(components); }
public List <PriceComponent> CalculatePrice(PlaceInRun placeInRun) { var components = new List <PriceComponent>(); var runDate = placeInRun.Run.Date; foreach (Holiday holiday in _holidayRepository.GetHolidaysList()) { if (runDate.Day == holiday.Date.Day && runDate.Month == holiday.Date.Month && runDate.Year == holiday.Date.Year) { var HolidayComponent = new PriceComponent() { Name = $"Holiday service tax for {holiday.Name}", Value = 10000m }; components.Add(HolidayComponent); return(components); } } if (runDate.DayOfWeek == DayOfWeek.Saturday || runDate.DayOfWeek == DayOfWeek.Sunday) { var WeekendComponent = new PriceComponent() { Name = "Weekend service tax", Value = 5000m }; components.Add(WeekendComponent); } else { components = null; } return(components); }
public List <PriceComponent> CalculatePrice(PlaceInRun placeInRun) { var components = new List <PriceComponent>(); var run = _runRepository.GetRunDetails(placeInRun.RunId); var train = _trainRepository.GetTrainDetails(run.TrainId); var place = train.Carriages .Select(car => car.Places.SingleOrDefault(pl => pl.Number == placeInRun.Number && car.Number == placeInRun.CarriageNumber)) .SingleOrDefault(x => x != null); var placeComponent = new PriceComponent() { Name = "Main price" }; placeComponent.Value = place.Carriage.DefaultPrice * place.PriceMultiplier; components.Add(placeComponent); if (placeComponent.Value > 30) { var cashDeskComponent = new PriceComponent() { Name = "Cash desk service tax", Value = placeComponent.Value * 0.2m }; components.Add(cashDeskComponent); } return(components); }
public List <PriceComponent> CalculatePrice(PlaceInRun placeInRun) { var components = new List <PriceComponent>(); components.AddRange(_strat1.CalculatePrice(placeInRun)); components.AddRange(_strat2.CalculatePrice(placeInRun)); return(components); }
public List <PriceComponent> CalculatePrice(PlaceInRun placeInRun) { var components = new List <PriceComponent>(); var holidayList = _holidayRepository.GetAllHolidays(); var run = _runRepository.GetRunDetails(placeInRun.RunId); var train = _trainRepository.GetTrainDetails(run.TrainId); var place = train.Carriages .Select(car => car.Places.SingleOrDefault(pl => pl.Number == placeInRun.Number && car.Number == placeInRun.CarriageNumber)) .SingleOrDefault(x => x != null); var placeComponent = new PriceComponent() { Name = "Main price" }; placeComponent.Value = place.Carriage.DefaultPrice * place.PriceMultiplier; components.Add(placeComponent); if (run.Date.DayOfWeek == (DayOfWeek)0 || run.Date.DayOfWeek == (DayOfWeek)6) { var cashDeskComponent = new PriceComponent() { Name = "Holiday tax", Value = placeComponent.Value * 1.25m }; components.Add(cashDeskComponent); } for (int i = 1; i < holidayList.Count; i++) { if (run.Date.Day == holidayList[i].Day && run.Date.Month == holidayList[i].Month) { var cashDeskComponent = new PriceComponent() { Name = "Holiday tax", Value = placeComponent.Value * 1.25m }; components.Add(cashDeskComponent); break; } } if (placeComponent.Value > 30) { var cashDeskComponent = new PriceComponent() { Name = "Cash desk service tax", Value = placeComponent.Value * 0.2m }; components.Add(cashDeskComponent); } return(components); }
public List <PriceComponent> CalculatePrice(PlaceInRun placeInRun) { var components = new List <PriceComponent>(); foreach (var strategy in _strategyList) { components.AddRange(strategy.CalculatePrice(placeInRun)); } return(components); }
public List <PriceComponent> CalculatePrice(PlaceInRun placeInRun) { var components = new List <PriceComponent>(); var teaComponent = new PriceComponent() { Name = "Price for " + _name, Value = _price }; components.Add(teaComponent); return(components); }
public List <PriceComponent> CalculatePrice(PlaceInRun placeInRun) { var run = _runRepository.GetRunDetails(placeInRun.RunId); var train = _trainRepository.GetTrainDetails(run.TrainId); var components = new DefaultPriceCalculationStrategy(_runRepository, _trainRepository). CalculatePrice(placeInRun); if (_trainRepository.GetTrainDetails(placeInRun.Run.TrainId).Booking != null) { components.AddRange(new BookingPriceCalculationStrategy(_runRepository, _trainRepository). CalculatePrice(placeInRun)); } return(components); }
public Reservation Reserve(PlaceInRun place) { if (PlaceIsOccupied(place)) { throw new InvalidOperationException(String.Format("place {0} can't be reserved becouse it is currently occupied", place.Id)); } var createIt = new Reservation() { Start = DateTime.Now, End = DateTime.Now.AddMinutes(20), PlaceInRunId = place.Id, }; _resRepo.Create(createIt); _resRepoLogger.Log("NewReservation created", 0); Debug.WriteLine("NewReservation created"); return(createIt); }
public List <PriceComponent> CalculatePrice(PlaceInRun placeInRun) { var train = _trainRepository.GetTrainDetails(placeInRun.Run.TrainId); var priceComponents = new List <PriceComponent>(); priceComponents.AddRange(_strategy.CalculatePrice(placeInRun)); var sum = 0m; foreach (var p in priceComponents) { sum += p.Value; } var AgencyComponent = new PriceComponent { Name = "AgencyMargin", Value = train.CompanyMargin.Margin * sum }; priceComponents.Add(AgencyComponent); return(priceComponents ); }
public bool PlaceIsOccupied(PlaceInRun place) { var reservationsForCurrentPlace = _resRepo.GetAllForPlaceInRun(place.Id); if (reservationsForCurrentPlace == null) { return(false); } var activeReservationFound = false; foreach (var res in reservationsForCurrentPlace) { if (IsActive(res)) { activeReservationFound = true; } } return(activeReservationFound); }
public List <PriceComponent> CalculatePrice(PlaceInRun placeInRun) { List <PriceComponent> components = null; foreach (IPriceCalculationStrategy priceCalculationStrategy in _priceCalculationStrategies) { var price = priceCalculationStrategy.CalculatePrice(placeInRun); if (price != null) { if (components == null) { components = price; } else { components.AddRange(price); } } } return(components); }
public List<PriceComponent> CalculatePrice(PlaceInRun placeInRun) { var components = new List<PriceComponent>(); var run = _runRepository.GetRunDetails(placeInRun.RunId); var train = _trainRepository.GetTrainDetails(run.TrainId); var place = train.Carriages .Select(car => car.Places.FirstOrDefault(pl => pl.Number == placeInRun.Number && car.Number == placeInRun.CarriageNumber)) .SingleOrDefault(x => x != null); var cashDeskComponent = new PriceComponent() { Name = "Booking service tax", Value = place.Carriage.DefaultPrice * place.PriceMultiplier * Convert.ToDecimal(train.Booking.OverPrice) }; components.Add(cashDeskComponent); return components; }
public List <PriceComponent> CalculatePrice(PlaceInRun placeInRun) { var priceComponents = new List <PriceComponent>(); priceComponents.AddRange(_strategy.CalculatePrice(placeInRun)); var teaComponent = new PriceComponent { Name = "Tea price", Value = PriceList.TEA * _teaCount }; priceComponents.Add(teaComponent); var coffeeComponent = new PriceComponent { Name = "Coffee price", Value = PriceList.COFFEE * _coffeeCount }; priceComponents.Add(coffeeComponent); var cookiesComponent = new PriceComponent { Name = "Cookies price", Value = PriceList.COOKIES * _cookiesCount }; priceComponents.Add(cookiesComponent); return(priceComponents); }
public List <PriceComponent> CalculatePrice(PlaceInRun placeInRun) { var components = new List <PriceComponent>(); components.AddRange(_priceCalculationStrategy.CalculatePrice(placeInRun)); if (IsHoliday(placeInRun.Run.Date)) { var sum = 0m; foreach (var component in components) { sum += component.Value; } components.Add(new PriceComponent { Name = "Holidays fee", Value = sum * Constants.HolidayPriceMultiplier }); } return(components); }