public async Task <IActionResult> PostStockItemAsync([FromBody] PostStockItemsRequestModel requestModel)
        {
            Logger?.LogDebug("'{0}' has been invoked", nameof(PostStockItemAsync));

            var response = new SingleResponse <StockItem>();

            try
            {
                var existingEntity = await Repository
                                     .GetStockItemsByStockItemNameAsync(new StockItem { StockItemName = requestModel.StockItemName });

                if (existingEntity != null)
                {
                    ModelState.AddModelError("StockItemName", "Stock item name already exists");
                }

                if (!ModelState.IsValid)
                {
                    return(BadRequest());
                }

                // Create entity from request model
                var entity = requestModel.ToEntity();

                // Add entity to repository
                Repository.Add(entity);

                // Save entity in database
                await Repository.CommitChangesAsync();

                // Set the entity to response model
                response.Model = entity;
            }
            catch (Exception ex)
            {
                response.DidError     = true;
                response.ErrorMessage = "There was an internal error, please contact to technical support.";

                Logger?.LogCritical("There was an error on '{0}' invocation: {1}", nameof(PostStockItemAsync), ex);
            }

            return(response.ToHttpResponse());
        }
        public async Task TestPostStockItemAsync()
        {
            // Arrange
            var repository   = RepositoryMocker.GetWarehouseRepository(nameof(TestPostStockItemAsync));
            var controller   = new WarehouseController(null, repository);
            var requestModel = new PostStockItemsRequestModel
            {
                StockItemID            = 100,
                StockItemName          = "USB anime flash drive - Goku",
                SupplierID             = 12,
                UnitPackageID          = 7,
                OuterPackageID         = 7,
                LeadTimeDays           = 14,
                QuantityPerOuter       = 1,
                IsChillerStock         = false,
                TaxRate                = 15.000m,
                UnitPrice              = 32.00m,
                RecommendedRetailPrice = 47.84m,
                TypicalWeightPerUnit   = 0.050m,
                CustomFields           = "{ \"CountryOfManufacture\": \"Japan\", \"Tags\": [\"32GB\",\"USB Powered\"] }",
                Tags          = "[\"32GB\",\"USB Powered\"]",
                SearchDetails = "USB anime flash drive - Goku",
                LastEditedBy  = 1,
                ValidFrom     = DateTime.Now,
                ValidTo       = DateTime.Now.AddYears(5)
            };

            // Act
            var response = await controller.PostStockItemAsync(requestModel) as ObjectResult;

            var value = response.Value as ISingleResponse <StockItem>;

            repository.Dispose();

            // Assert
            Assert.False(value.DidError);
        }