public async Task <ProductViewModel> UpdateProductTransaction(UserProfile user, ProductDetailViewModel product) { var business = await _businessRepo.GetByIdAsync(user.business_id.Value); Product pr; int prodId; try { pr = await _prodRepo.GetByIdAsync(product.Id.Value, user.business_id.Value); if (pr != null) { prodId = pr.id; } else { throw new Exception("Не указан идентификатор товара / неверный идентификатор."); } } catch (Exception) { throw new Exception("Не указан идентификатор товара / неверный идентификатор."); } var price = new Price { prod_id = prodId, }; var prod = new Product { id = prodId, name = product.ProdName, business_id = user.business_id, unit_id = product.UnitId, attr1 = product.VendorCode, attr9 = product.Size, attr10 = product.Color }; if (!string.IsNullOrEmpty(product.Category)) { prod.folder_id = await _foldersDataService.GetFolderIdByPath(product.Category, business.id); } else { prod.folder_id = pr.folder_id; } var candidatePrice = _priceRepo.GetPriceByProdId(prodId); candidatePrice.price = product.Price; prod.Price = candidatePrice; if (product.img != null) { try { var imgDal = await _imgRepo.GetByIdAsync(prodId); if (imgDal != null && !string.IsNullOrEmpty(imgDal.img_url)) { var isDeleted = await _dbBase.Delete("/products/" + business.id + ". " + business.name + "/" + imgDal.prod_id + "." + imgDal.img_name + "." + imgDal.img_type); if (isDeleted) { imgDal.img_url = null; imgDal.img_url_temp = null; await _imgRepo.UpdateImage(imgDal); } } using (var stream = product.img.OpenReadStream()) { var bytes = ReadToEnd(stream); prod.ImgMemoryStream = new MemoryStream(bytes); prod.ImgBase64 = product.ImgBase64; prod.Category = product.Category; prod.Image = imgDal; } } catch (Exception) { throw new Exception("Невозможно удалить предыдущую картинку товара."); } } await _productDataService.Update(prod); return(await GetProduct(user, prodId)); }
public async Task <int> Insert(Product product) { using (var session = new Session()) { var uow = session.UnitOfWork; _productRepository = new ProductRepository(uow); _priceRepository = new PriceRepository(uow); _businessRepository = new BusinessRepository(uow); _imageRepository = new ImagesRepository(uow); _strategy = new FifoStrategy(); _ordersRepository = new OrdersRepository(uow); _orderDetailRepository = new OrderDetailRepository(uow); _costRepository = new CostRepository(uow); var imgPath = string.Empty; uow.Begin(); try { var productId = await _productRepository.InsertUow(product); if (product.Price != null && product.Price.price.HasValue) { await _priceRepository.InsertUow(new Price { price = product.Price.price, prod_id = productId }); } else { await _priceRepository.InsertUow(new Price { prod_id = productId }); } if (!string.IsNullOrEmpty(product.ImgBase64) && product.ImgMemoryStream != null) { var business = await _businessRepository.GetByIdUow(product.business_id.Value); var imgParts = product.ImgBase64.Split('.'); imgPath = "/products/" + business.id + ". " + business.name + "/" + productId + "." + product.name + "." + imgParts.Last(); var imgUrl = await _dbBase.Upload(product.ImgMemoryStream, imgPath); var img = new Image { img_url = imgUrl, prod_id = productId, img_name = product.name, img_type = imgParts.LastOrDefault(), img_url_temp = MakeTemporary(imgUrl), img_path = product.Category }; await _imageRepository.InsertUow(img); } if (product.Orders.Any()) { foreach (var order in product.Orders) { var orderId = await _ordersRepository.InsertUow(order); foreach (var orderDetail in order.OrderDetails) { orderDetail.prod_id = productId; orderDetail.order_id = orderId; await _orderDetailRepository.InsertUow(orderDetail); } var orderDal = await _ordersRepository.GetByIdWithMultiUow(orderId); await _strategy.UpdateAverageCostUow(Direction.Order, orderDal, uow); } } else if (product.Cost.Any()) { var cost = product.Cost.FirstOrDefault(); if (cost != null && cost.value.HasValue) { cost.prod_id = productId; await _costRepository.InsertUow(cost); } else { await _costRepository.InsertUow(new Cost { prod_id = productId }); } } uow.Commit(); return(productId); } catch (Exception e) { uow.RollBack(); if (!string.IsNullOrEmpty(imgPath)) { await _dbBase.Delete(imgPath); } throw e; } } }