Esempio n. 1
0
        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;
                }
            }
        }