public SuggestionMade(PartyRequested partyRequested, PricingCategoryRequested pricingCategoryRequested, List <Seat> seats) { PartyRequested = partyRequested; PricingCategoryRequested = pricingCategoryRequested; _suggestedSeats = seats; }
public static PricingCategory ToPricingCategory(this PricingCategoryRequested pricingCategoryRequested) { if (CategoriesMapping.ContainsKey(pricingCategoryRequested)) { return(CategoriesMapping[pricingCategoryRequested]); } throw new ArgumentOutOfRangeException( $"{nameof(pricingCategoryRequested)} can't be translated in {nameof(PricingCategory)}"); }
public bool MatchCategory(PricingCategoryRequested pricingCategoryRequested) { if (pricingCategoryRequested == PricingCategoryRequested.Mixed) { return(true); } return(PricingCategory == pricingCategoryRequested.ToPricingCategory()); }
private List <List <Seat> > DumpSeatsSuggestedFor(PricingCategoryRequested pricingCategory) { var seatsSuggestedForThisCategory = new List <List <Seat> >(); foreach (var suggestionMade in ForCategory[pricingCategory]) { seatsSuggestedForThisCategory.Add(suggestionMade.SuggestedSeats.ToList()); } return(seatsSuggestedForThisCategory); }
public ShowSuggestion(string showId, int party, PricingCategoryRequested pricingCategoryRequested, IEnumerable <Seat> seats, int?price = null) { _seats = seats.ToList(); ShowId = showId; Party = party; PricingCategoryRequested = pricingCategoryRequested; if (price.HasValue) { TotalPrice = price.Value; } }
public static List <SuggestionMade> BuildSuggestions(int party, PricingCategoryRequested pricingCategoryRequested, params string[] groupsOfSeats) { var result = new List <SuggestionMade>(); foreach (var groupsOfSeat in groupsOfSeats) { var seats = groupsOfSeat.Split('-').Select(s => new Seat(pricingCategoryRequested.ToPricingCategory(), s, SeatAvailability.Available, 0)).ToList(); result.Add(new SuggestionMade(new PartyRequested(party), pricingCategoryRequested, seats)); } return(result); }
private static IEnumerable <SuggestionMade> GiveMeSuggestionsFor( AuditoriumSeating auditoriumSeating, PartyRequested partyRequested, PricingCategoryRequested pricingCategoryRequested) { var foundedSuggestions = new List <SuggestionMade>(); for (var i = 0; i < NumberOfSuggestionsPerPricingCategory; i++) { var seatOptionsSuggested = auditoriumSeating .SuggestSeatingOptionFor(new SuggestionRequest(partyRequested, pricingCategoryRequested)); if (seatOptionsSuggested.MatchExpectation()) { // We get the new version of the Auditorium after the allocation auditoriumSeating = auditoriumSeating.Allocate(seatOptionsSuggested); foundedSuggestions.Add(new SuggestionMade(partyRequested, pricingCategoryRequested, seatOptionsSuggested.Seats)); } } return(foundedSuggestions); }
public SuggestionRequest(PartyRequested partyRequested, PricingCategoryRequested pricingCategory) { PartyRequested = partyRequested; PricingCategory = pricingCategory; }
public IEnumerable <string> SeatNames(PricingCategoryRequested pricingCategory) { var suggestionsMade = ForCategory[pricingCategory]; return(suggestionsMade.Select(s => string.Join("-", s.SeatNames()))); }
public static IEnumerable <Seat> SelectAvailableSeatsCompliant(this IEnumerable <Seat> seats, PricingCategoryRequested pricingCategory) { return(seats.Where(s => s.IsAvailable() && s.MatchCategory(pricingCategory))); }