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);
        }
Example #4
0
        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);
        }