private string BuildResultOrderMessage(string[] dishesTypesOrderIds, TimeOfDay timeOfDayOrder) { MenuItem availableMenuItem = null; Dish dish = null; string resultOrder = ""; string errorMessage = ""; var dishesTypesOrderIdsGroup = dishesTypesOrderIds.OrderBy(x => x).GroupBy(x => x); foreach (var dishTypeOrderIdGroupItem in dishesTypesOrderIdsGroup) { DishType?currentDishType = OrderingInputConverter.GetToDishType(dishTypeOrderIdGroupItem.Key); availableMenuItem = menu.GetMenuItem(timeOfDayOrder, currentDishType.Value); int dishRepetition = dishTypeOrderIdGroupItem.Count(); if (!IsValidDishType(currentDishType)) { errorMessage = GetErrorMessage(); break; } if (!IsMenuItemAvailable(availableMenuItem)) { errorMessage = GetErrorMessage(); break; } dish = availableMenuItem.Dish; if (dishRepetition == 1) { resultOrder += GetValidMessage(dish.DishTypeTitle); continue; } else { if (availableMenuItem.AllowMultipleOrders) { resultOrder += GetValidMessage(dish.DishTypeTitle, dishRepetition); } else { errorMessage = GetErrorMessage(); break; } } } resultOrder = resultOrder + errorMessage; resultOrder = resultOrder.Trim().TrimEnd(DISHES_CHAR_SEPARATOR); return(resultOrder); }
public string Order(string orderInput) { string[] inputArray = orderInput.Split(',').ToArray(); string timeOfDay = inputArray[0]; TimeOfDay?timeOfDayOrder = OrderingInputConverter.GetTimeOfDay(timeOfDay); if (timeOfDayOrder == null) { return(GetErrorMessage().Trim().TrimEnd(DISHES_CHAR_SEPARATOR)); } string[] dishesTypesOrderIds = GetOnlyDishesTypes(inputArray); string resultOrder = BuildResultOrderMessage(dishesTypesOrderIds, timeOfDayOrder.Value); return(resultOrder); }