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);
        }