Пример #1
0
        public void RemoveProduct(string userId, int productId, ApiProdAction info)
        {
            using var context = _di.GetService <ApplicationDbContext>();
            var from = getStockAndVerify(productId, info, context);

            using var transaction = context.Database.BeginTransaction();
            try
            {
                var date   = DateTime.UtcNow;
                var action = new ProductAction()
                {
                    ProductId   = productId,
                    Quantity    = -info.Quantity,
                    WarehouseId = info.FromId,
                    Description = info.Description,
                    UserId      = userId,
                    Date        = date,
                    Operation   = OperationDescription.Delete
                };
                context.ProductsTrqansactions.Add(action);
                context.SaveChanges();

                // Commit transaction if all commands succeed,
                // transaction will auto-rollback when disposed if either commands fails
                transaction.Commit();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                // TODO: Handle failure
                throw;
            }
        }
Пример #2
0
        public async Task <ApiResponseBase> Remove(int id, [FromBody] ApiProdAction model)
        {
            if (!ModelState.IsValid)
            {
                return(ModelState.ToApiBaseResponse());
            }
            var user = await GetCurrentUserAsync();

            _houseRepo.RemoveProduct(user?.Id, id, model);
            return(new ApiResponseBase());
        }
Пример #3
0
        private static WarehouseProducts getStockAndVerify(int productId, ApiProdAction info, ApplicationDbContext context)
        {
            var from = context.WarehouseProducts.Include(it => it.Product).FirstOrDefault(it => it.ProductId == productId && it.WarehouseId == info.FromId);

            if (from == null)
            {
                throw new ArgumentException($"Товар з ID {productId} не знайдено на складі");
            }
            if (from.Quantity < info.Quantity)
            {
                throw new ArgumentException($"Не достатньо товарів на складі для здійстення продажі (ProductID: {from.Product.ProductType } - {from.Product.Model})");
            }
            from.Quantity -= info.Quantity;
            return(from);
        }
Пример #4
0
        public void AddProduct(string userId, int productId, ApiProdAction info)
        {
            using var context = _di.GetService <ApplicationDbContext>();
            var from = context.WarehouseProducts.FirstOrDefault(it => it.ProductId == productId && it.WarehouseId == info.FromId);

            if (@from == null)
            {
                @from = new WarehouseProducts()
                {
                    ProductId = productId, WarehouseId = info.FromId, Quantity = 0
                };
                context.WarehouseProducts.Add(@from);
            }
            @from.Quantity += info.Quantity;

            using var transaction = context.Database.BeginTransaction();
            try
            {
                context.SaveChanges();

                var date = DateTime.UtcNow;
                context.ProductsTrqansactions.Add(new ProductAction()
                {
                    ProductId   = productId,
                    Quantity    = info.Quantity,
                    WarehouseId = info.FromId,
                    UserId      = userId,
                    Date        = date,
                    Description = $"Товар додано адміністратором",
                    Operation   = OperationDescription.StockRenew,
                    Price       = 0,
                });
                context.SaveChanges();

                // Commit transaction if all commands succeed, transaction will auto-rollback
                // when disposed if either commands fails
                transaction.Commit();
            }
            catch (Exception ex)
            {
                // TODO: Handle failure
                throw ex;
            }
        }