public async Task <bool> UpdateInboundReceiptAsync(InboundReceiptInputDto dto) { var inboundReceipt = dto.MapTo <InboundReceipt>(); await _inboundReceiptRepo.UpdateAsync(inboundReceipt); var items = dto.Items.Select(d => d.MapTo <InboundReceiptItem>()).ToArray(); await _inboundReceiptItemRepo.UpdateAsync(items); return(true); }
public async Task <bool> AddInboundReceiptAsync(InboundReceiptInputDto dto, IServiceProvider serviceProvider) { if (dto.Items == null || dto.Items.Length <= 0) { return(false); } var inboundReceipt = dto.MapTo <InboundReceipt>(); var items = dto.Items.Select(d => d.MapTo <InboundReceiptItem>()).ToArray(); var inventoryRepo = serviceProvider.GetService <IRepository <Inventory, Guid> >(); var warehouseRepo = serviceProvider.GetService <IRepository <Kira.LaconicInvoicing.Warehouse.Entities.Warehouse, Guid> >(); var warehouse = await warehouseRepo.GetFirstAsync(w => w.Number == dto.WarehouseNumber); var inventories = inventoryRepo.Query().Where(iv => iv.WarehouseId == warehouse.Id); var updateInventories = new List <Inventory>(); var addInventories = new List <Inventory>(); var dt = DateTime.Now; foreach (var item in items) { if (inventories.Any(iv => iv.Number == item.Number)) { var inventory = await inventories.FirstOrDefaultAsync(iv => iv.Number == item.Number); inventory.Amount += item.Amount; inventory.DateTime = dt; updateInventories.Add(inventory); } else { var inventory = new Inventory() { Id = Guid.NewGuid(), WarehouseId = warehouse.Id, GoodsCategory = item.GoodsCategory, Name = item.Name, Number = item.Number, Amount = item.Amount, DateTime = dt }; addInventories.Add(inventory); } } await _inboundReceiptRepo.InsertAsync(inboundReceipt); await _inboundReceiptItemRepo.InsertAsync(items); if (updateInventories.Count > 0) { await inventoryRepo.UpdateAsync(updateInventories.ToArray()); } if (addInventories.Count > 0) { await inventoryRepo.InsertAsync(addInventories.ToArray()); } return(true); }