public async Task <List <OrderResponseModel> > GetByDriver(int driverId) { List <Order> ordersEntity = await this._orderRepository.FindAllAsync(x => x.DriverId == driverId); List <int> orderIds = ordersEntity.Select(x => x.Id).ToList(); List <OrderDetail> orderDetailsEntity = await this._orderDetailRepository.FindAllAsync(x => orderIds.Contains(x.OrderId)); List <int> orderedItemIds = orderDetailsEntity.Select(x => x.OrderedItemId).ToList(); List <MenuItem> menuItemsEntity = await this._menuItemRepository.FindAllAsync(x => orderedItemIds.Contains(x.MenuItemId)); List <int> restaurantsIds = ordersEntity.Select(x => x.RestaurantId).ToList(); List <Restaurant> restaurantsEntity = await this._restaurantRepository.FindAllAsync(x => restaurantsIds.Contains(x.RestaurantId)); Driver driverEntity = await this._driverRepository.FindAsync(x => driverId == x.DriverId); List <OrderResponseModel> orders = this._mapper.Map <List <Order>, List <OrderResponseModel> >(ordersEntity); foreach (OrderResponseModel order in orders) { order.RestaurantName = restaurantsEntity.FirstOrDefault(x => x.RestaurantId == order.RestaurantId).Name; order.DriverName = $"{driverEntity.FirstName} {driverEntity.LastName}"; order.OrderItems = orderDetailsEntity.Where(x => x.OrderId == order.Id).Select(x => { MenuItem menuItemEntity = menuItemsEntity.FirstOrDefault(y => y.Id == x.OrderedItemId); OrderItemResponseModel orderedItem = new OrderItemResponseModel() { MenuItemName = menuItemEntity.Name, Price = menuItemEntity.Price, Quantity = x.Quantity }; return(orderedItem); }).ToList(); } return(orders); }
public async Task <MonthlyReportResponseModel> GenerateMonthlyReport(int restaurantId, int month) { MonthlyReportResponseModel responseObject = new MonthlyReportResponseModel(); if (month == -1) { month = DateTime.UtcNow.Month; } responseObject.Month = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(month); responseObject.RestaurantId = restaurantId; List <Order> ordersEntity = await this._orderRepository.FindAllAsync(x => x.RestaurantId == restaurantId && x.DateTime.Month == month && x.Status == OrderStatus.Delivered); List <int> orderIds = ordersEntity.Select(x => x.Id).ToList(); List <OrderDetail> orderDetailsEntity = await this._orderDetailRepository.FindAllAsync(x => orderIds.Contains(x.OrderId)); List <int> orderedItemIds = orderDetailsEntity.Select(x => x.OrderedItemId).ToList(); List <MenuItem> menuItemsEntity = await this._menuItemRepository.FindAllAsync(x => orderedItemIds.Contains(x.MenuItemId)); List <int> driversIds = ordersEntity.Select(x => x.DriverId ?? 0).Where(x => x != 0).ToList(); Restaurant restaurantEntity = await this._restaurantRepository.FindAsync(x => x.RestaurantId == restaurantId); responseObject.RestaurantName = restaurantEntity.Name; List <Driver> driversEntity = await this._driverRepository.FindAllAsync(x => driversIds.Contains(x.DriverId)); List <OrderResponseModel> orders = this._mapper.Map <List <Order>, List <OrderResponseModel> >(ordersEntity); foreach (OrderResponseModel order in orders) { order.RestaurantName = restaurantEntity.Name; if (order.DriverId.HasValue) { Driver driverEntity = driversEntity.FirstOrDefault(x => x.DriverId == order.DriverId); if (driverEntity != null) { order.DriverName = $"{driverEntity.FirstName} {driverEntity.LastName}"; } } order.OrderItems = orderDetailsEntity.Where(x => x.OrderId == order.Id).Select(x => { MenuItem menuItemEntity = menuItemsEntity.FirstOrDefault(y => y.Id == x.OrderedItemId); OrderItemResponseModel orderedItem = new OrderItemResponseModel() { MenuItemName = menuItemEntity.Name, Price = menuItemEntity.Price, Quantity = x.Quantity }; return(orderedItem); }).ToList(); } responseObject.DeliveredOrders = orders; return(responseObject); }
/// <summary> /// An inventory item comes through that we haven't seen yet. An order has taken all its quantity so we can't get it from BL. /// Add an inventory item for it. /// </summary> /// <param name="model"></param> /// <returns></returns> private PartModel AddInventoryFromOrderItem(OrderItemResponseModel model, PartModel partModel) { var part = partModel.Part; var inv = partModel.PartInventory; inv.InventoryId = model.inventory_id; inv.MyPrice = decimal.Parse(model.unit_price); inv.Location = model.remarks; inv.LastUpdated = DateTime.UtcNow; inv.Notes = "Added from order item"; //var inv = new PartInventory //{ // InventoryId = model.inventory_id, // Quantity = 0, // MyPrice = decimal.Parse(model.unit_price), // ColourId = model.color_id, // ColourName = model.color_name, // Condition = model.new_or_used, // Location = model.remarks, // Notes = "", // LastUpdated = DateTime.UtcNow, // Part = part, // Image = _api.GetItemImage(model.item.type, model.item.no, model.color_id) //}; if (string.IsNullOrEmpty(inv.Location)) { inv.Description = model.description; } inv = _partInventoryRepo.Update(inv); //var pricing = _api.UpdatePartPricingFromApi(model.item.no, model.item.type, model.color_id, model.new_or_used); //_partInventoryRepo.AddPartInv(ref inv, ref pricing, ref part); //return new PartModel //{ // Part = part, // PartInventory = inv, // PartPriceInfo = pricing //}; partModel.PartInventory = inv; return(partModel); }
private void AddPartInventoryFromOrder(OrderItemResponseModel item) { var inv = new PartInventory { InventoryId = item.inventory_id, Quantity = 0, MyPrice = decimal.Parse(item.unit_price_final), ColourId = item.color_id, ColourName = item.color_name, Condition = item.new_or_used, Location = item.remarks, Image = _apiService.GetItemImage(item.item.type, item.item.no, item.color_id), Description = item.description, LastUpdated = DateTime.UtcNow }; _dataService.AddPartInvFromOrder(inv, item.item.no, item.item.type); }
public async Task <DriverOrderResponseModel> GetByRestaurant(int restaurantId, int driverId) { DriverOrderResponseModel responseObject = new DriverOrderResponseModel(); Driver driverEntity = await this._driverRepository.FindAsync(x => x.DriverId == driverId); if (driverEntity == null) { return(responseObject); } responseObject.DriverId = driverId; responseObject.DriverName = $"{driverEntity.FirstName} {driverEntity.LastName}"; List <Order> ordersEntity = await this._orderRepository.FindAllAsync(x => x.RestaurantId == restaurantId && x.DriverId == driverId && DateTime.UtcNow <= x.DateTime.AddMonths(2)); List <int> orderIds = ordersEntity.Select(x => x.Id).ToList(); List <OrderDetail> orderDetailsEntity = await this._orderDetailRepository.FindAllAsync(x => orderIds.Contains(x.OrderId)); List <int> orderedItemIds = orderDetailsEntity.Select(x => x.OrderedItemId).ToList(); List <MenuItem> menuItemsEntity = await this._menuItemRepository.FindAllAsync(x => orderedItemIds.Contains(x.MenuItemId)); Restaurant restaurantEntity = await this._restaurantRepository.FindAsync(x => x.RestaurantId == restaurantId); List <OrderResponseModel> orders = this._mapper.Map <List <Order>, List <OrderResponseModel> >(ordersEntity); foreach (OrderResponseModel order in orders) { order.RestaurantName = restaurantEntity.Name; order.DriverName = $"{driverEntity.FirstName} {driverEntity.LastName}"; order.OrderItems = orderDetailsEntity.Where(x => x.OrderId == order.Id).Select(x => { MenuItem menuItemEntity = menuItemsEntity.FirstOrDefault(y => y.Id == x.OrderedItemId); OrderItemResponseModel orderedItem = new OrderItemResponseModel() { MenuItemName = menuItemEntity.Name, Price = menuItemEntity.Price, Quantity = x.Quantity }; return(orderedItem); }).ToList(); } responseObject.Orders = orders; return(responseObject); }