public async Task <IActionResult> ExportProducts([FromBody] InventoryExportModel model) { var result = await _inventoryService.ExportProducts(model); return(ApiResponder.RespondSuccess(result)); }
public async Task <List <InventoryReturnModel> > ExportProducts(InventoryExportModel model) { using (var transaction = await _context.Database.BeginTransactionAsync()) { try { var inventoryItems = await _context.ProductInventories .Include(pi => pi.Customer) .Include(pi => pi.Product) .Include(pi => pi.Supplier) .Where(pi => model.InventoryItems.Contains(pi.Id)).ToListAsync(); var inventoryItemsIds = inventoryItems.Select(ii => ii.Id).Distinct().ToList(); foreach (var inventoryItemExportId in inventoryItemsIds) { if (!inventoryItemsIds.Contains(inventoryItemExportId)) { throw new InventoryItemNotFoundException(); } } foreach (var inventoryItem in inventoryItems) { if (inventoryItem.CustomerId != null || inventoryItem.ExportedDate >= inventoryItem.ImportedDate) { throw new InventoryItemAlreadyExportedException(); } inventoryItem.CustomerId = model.CustomerId; inventoryItem.ExportedDate = model.ExportedDate; } _context.ProductInventories.UpdateRange(inventoryItems); await _context.SaveChangesAsync(); transaction.Commit(); var inventoryItemReturnModels = _mapper.Map <List <ProductInventory>, List <InventoryReturnModel> >(inventoryItems); foreach (var inventoryItemReturnModel in inventoryItemReturnModels) { if (inventoryItemReturnModel.ProductDetails == null) { continue; } if (string.IsNullOrEmpty(inventoryItemReturnModel.ProductDetails.Image) || string.IsNullOrWhiteSpace(inventoryItemReturnModel.ProductDetails.Image)) { inventoryItemReturnModel.ProductDetails.Image = DefaultImageUrl; } } return(inventoryItemReturnModels); } catch (Exception) { transaction.Rollback(); throw; } } }