Example #1
0
        public async Task <IActionResult> GetInventoryByProductId(Guid?id)
        {
            var sellerClaim  = this.User.Claims.FirstOrDefault(x => x.Type == AccountConstants.Claims.OrganisationIdClaim);
            var serviceModel = new GetInventoryByProductIdServiceModel
            {
                ProductId = id.Value,
            };

            var validator        = new GetProductByIdModelValidator();
            var validationResult = await validator.ValidateAsync(serviceModel);

            if (validationResult.IsValid)
            {
                var inventoryProduct = await this.inventoriesService.GetInventoryByProductId(serviceModel);

                if (inventoryProduct != null)
                {
                    var response = new InventorySumResponseModel
                    {
                        ProductId         = inventoryProduct.ProductId,
                        AvailableQuantity = inventoryProduct.AvailableQuantity,
                        Quantity          = inventoryProduct.Quantity,
                        ProductName       = inventoryProduct.ProductName,
                        ProductSku        = inventoryProduct.ProductSku,
                        RestockableInDays = inventoryProduct.RestockableInDays,
                        ExpectedDelivery  = inventoryProduct.ExpectedDelivery,
                        Details           = inventoryProduct.Details.Select(item => new InventoryDetailsResponseModel
                        {
                            Id                = item.Id,
                            ProductId         = item.ProductId,
                            ProductName       = item.ProductName,
                            Quantity          = item.Quantity,
                            AvailableQuantity = item.AvailableQuantity,
                            ExpectedDelivery  = item.ExpectedDelivery,
                            ProductSku        = item.ProductSku,
                            WarehouseId       = item.WarehouseId,
                            WarehouseName     = item.WarehouseName,
                            RestockableInDays = item.RestockableInDays,
                            LastModifiedDate  = item.LastModifiedDate,
                            CreatedDate       = item.CreatedDate
                        })
                    };

                    return(this.StatusCode((int)HttpStatusCode.OK, response));
                }
                else
                {
                    return(this.StatusCode((int)HttpStatusCode.NotFound));
                }
            }

            throw new CustomException(string.Join(ErrorConstants.ErrorMessagesSeparator, validationResult.Errors.Select(x => x.ErrorMessage)), (int)HttpStatusCode.UnprocessableEntity);
        }
Example #2
0
        public async Task <InventorySumServiceModel> GetInventoryByProductId(GetInventoryByProductIdServiceModel model)
        {
            var inventory = from i in this.context.Inventory
                            join warehouse in this.context.Warehouses on i.WarehouseId equals warehouse.Id
                            where i.ProductId == model.ProductId.Value && i.IsActive
                            select new
            {
                Id                = i.Id,
                ProductId         = i.ProductId,
                ProductName       = i.ProductName,
                ProductSku        = i.ProductSku,
                Quantity          = i.Quantity,
                AvailableQuantity = i.AvailableQuantity,
                ExpectedDelivery  = i.ExpectedDelivery,
                RestockableInDays = i.RestockableInDays,
                WarehouseId       = i.WarehouseId,
                WarehouseName     = warehouse.Name,
                LastModifiedDate  = i.LastModifiedDate,
                CreatedDate       = i.CreatedDate
            };

            if (inventory.OrEmptyIfNull().Any())
            {
                var inventorySum = new InventorySumServiceModel
                {
                    ProductId         = model.ProductId.Value,
                    ProductName       = inventory.FirstOrDefault().ProductName,
                    ProductSku        = inventory.FirstOrDefault().ProductSku,
                    AvailableQuantity = inventory.Sum(x => x.AvailableQuantity),
                    Quantity          = inventory.Sum(x => x.Quantity),
                    ExpectedDelivery  = inventory.Min(x => x.ExpectedDelivery),
                    RestockableInDays = inventory.Min(x => x.RestockableInDays),
                    Details           = inventory.Select(item => new InventoryServiceModel
                    {
                        Id                = item.Id,
                        ProductId         = item.ProductId,
                        ProductName       = item.ProductName,
                        ProductSku        = item.ProductSku,
                        AvailableQuantity = item.AvailableQuantity,
                        Quantity          = item.Quantity,
                        ExpectedDelivery  = item.ExpectedDelivery,
                        WarehouseId       = item.WarehouseId,
                        WarehouseName     = item.WarehouseName,
                        RestockableInDays = item.RestockableInDays,
                        LastModifiedDate  = item.LastModifiedDate,
                        CreatedDate       = item.CreatedDate
                    })
                };

                return(inventorySum);
            }

            return(default);