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 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>(); 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 ActionResult Index(int id) { var run = _runRepo.GetRunDetails(id); var train = _trainRepo.GetTrainDetails(run.TrainId); var model = new RunViewModel() { RunDate = run.Date, Carriages = train.Carriages.ToDictionary(x => x.Number), PlacesByCarriage = run.Places.GroupBy(x => x.CarriageNumber).ToDictionary(x => x.Key, x => x.ToList()), ReservedPlaces = run.Places.Where(p => _resServ.PlaceIsOccupied(p)).Select(p => p.Id).ToList(), Train = train, }; return(View(model)); }
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 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(TicketPriceParametersDTO priceParametersDTO) { var components = new List <PriceComponent>(); var run = _runRepository.GetRunDetails(priceParametersDTO.PlaceInRun.RunId); var train = _trainRepository.GetTrainDetails(run.TrainId); var carriagetype = train.Carriages.FirstOrDefault(x => x.Number == priceParametersDTO.PlaceInRun.CarriageNumber).Type; if (priceParametersDTO.Drink == true) { components.Add(new PriceComponent { Name = "Drink price", Value = 5, Ticket = priceParametersDTO.Ticket, TicketId = priceParametersDTO.Ticket.Id }); } if (priceParametersDTO.Bed == true && carriagetype != CarriageType.Sedentary) { components.Add(new PriceComponent { Name = "Bed price", Value = 15, Ticket = priceParametersDTO.Ticket, TicketId = priceParametersDTO.Ticket.Id }); } return(components); }