Example #1
0
        public async Task <bool> AddItem(DocumentAddItemModel model)
        {
            try
            {
                //Это "немножко" плохой код; ввиду реализации всей инфраструктуры я потратил достаточное количество времени(для тестового задания).
                //Реализация методов обновления остатков должна быть заложена в репозиторий, что я не успеваю сделать :)
                //Тем не менее требуемый функционал реализован.
                var ctx = new StoreHouseContext();

                var entityFrom = ctx.Stocks.SingleOrDefault(x => x.ProductId == model.Product.Id && x.WarehouseId == model.WarehouseFrom.Id);
                entityFrom.Value -= model.Value;
                ctx.Stocks.Update(entityFrom);

                var entityTo = ctx.Stocks.SingleOrDefault(x => x.ProductId == model.Product.Id && x.WarehouseId == model.WarehouseTo.Id);
                entityTo.Value += model.Value;
                ctx.Stocks.Update(entityTo);
                //плохой код закончен

                var warehouseFromItem = await _warehouseRepo.GetItemByid(model.WarehouseFrom.Id);

                //var warehouseFromStock = warehouseFromItem.Stocks.SingleOrDefault(x => x.ProductId == model.Product.Id);
                //warehouseFromStock.Value -= model.Value;

                //var warehouseToItem = await _warehouseRepo.GetItemByid(model.WarehouseTo.Id);
                //var warehouseToStock = warehouseFromItem.Stocks.SingleOrDefault(x => x.ProductId == model.Product.Id);
                //warehouseToStock.Value += model.Value;

                _documentsRepo.Add(new Documents
                {
                    StockId       = model.Product.Id,
                    WarehouseFrom = model.WarehouseFrom.Id,
                    WarehouseTo   = model.WarehouseTo.Id,
                    Value         = model.Value
                });

                ctx.SaveChanges();//сохранение контекста, вызванное плохим кодом выше
                _documentsRepo.SaveChanges();

                return(true);
            }
            catch (Exception ex)
            {
                return(false);
            }
        }
Example #2
0
        public async Task <IActionResult> AddNewItem([FromBody] DocumentAddItemModel model)
        {
            //check availability to transact
            var allowToTransact = _warehousesService
                                  .PossibleToTransactFrom(model.WarehouseFrom.Id, model.Product.Id, model.Value);

            if (!allowToTransact.Result)
            {
                return(BadRequest("Balance of goods smaller than you requested to ship"));
            }

            try
            {
                return(Ok(await _documentsService.AddItem(model)));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }