public async Task <IActionResult> Update(string id, [FromBody] InventoryMeta inventoryMeta, bool isBalanced) { var result = await _inventoryService.Update(CurrentUser.TenantId, CurrentUser.Id, CurrentUser.FullName, CurrentUser.Avatar, id, inventoryMeta, isBalanced); if (result.Code <= 0) { return(BadRequest(result)); } return(Ok(result)); }
public async Task <IActionResult> Exports(string inventoryId, InventoryMeta inventoryMeta) { var result = await _inventoryService.Exports(CurrentUser.TenantId, CurrentUser.Id, CurrentUser.FullName, CurrentUser.Avatar, inventoryId, inventoryMeta); if (result.Code <= 0) { return(BadRequest(result)); } var fileName = "inventory.xlsx"; var fileType = "application/vnd.ms-excel"; //string sWebRootFolder = _hostingEnvironment.WebRootPath; //string sFileName = @"inventory.xlsx"; //FileStream fileStream = new FileStream(Path.Combine(sWebRootFolder, sFileName), FileMode.Open); return(File(result.Data, fileType, fileName)); }
public async Task <ActionResultResponse <string> > Insert(string tenantId, string creatorId, string creatorFullName, string creatorAvatar, InventoryMeta inventoryMeta, bool isBalance = false) { var isWarehouseExists = await _warehouseRepository.CheckExists(inventoryMeta.WarehouseId, tenantId); if (!isWarehouseExists) { return(new ActionResultResponse <string>(-1, _warehouseResourceService.GetString("Warehouse does not exists. Please check again."))); } var inventory = new Inventory { WarehouseId = inventoryMeta.WarehouseId, InventoryDate = inventoryMeta.InventoryDate, Note = inventoryMeta.Note, Status = InventoryStatus.Waiting, TenantId = tenantId, CreatorId = creatorId, CreatorFullName = creatorFullName }; inventory.InventoryDetails = await AddInventoryDetails(tenantId, inventory.WarehouseId, inventory.InventoryDate, inventory.Id, inventoryMeta.Details); await AddInventoryMembers(); if (inventory.InventoryDetails.Count == 0) { return(new ActionResultResponse <string>(-2, _sharedResourceService.GetString(ValidatorMessage.PleaseSelect, _warehouseResourceService.GetString("product")))); } var result = await _inventoryRepository.Insert(inventory); if (result <= 0) { return(new ActionResultResponse <string>(result, _sharedResourceService.GetString(ErrorMessage.SomethingWentWrong))); } await Balance(); return(new ActionResultResponse <string>(result, _sharedResourceService.GetString(SuccessMessage.AddSuccessful, _warehouseResourceService.GetString("inventory")))); #region Local functions async Task AddInventoryMembers() { var httpService = new HttpClientService(); foreach (var member in inventoryMeta.Members) { //var userInfo = await httpService.GetUserInfo(inventory.TenantId, member.UserId); //if (userInfo == null) // continue; inventory.InventoryMembers.Add(new InventoryMember { //UserId = userInfo.UserId, //FullName = userInfo.FullName, //Avatar = userInfo.Avatar, //OfficeName = userInfo.OfficeName, //PositionName = userInfo.PositionName, InventoryId = inventory.Id }); } } async Task Balance() { if (isBalance) { // Thêm phiếu nhập và xuất để cân bằng kho. await BalanceWarehouse(inventory.TenantId, inventory.Id); } } #endregion Local functions }
public async Task <ActionResultResponse <string> > Update(string tenantId, string lastUpdateUserId, string lastUpdateFullName, string lastUpdateAvatar, string inventoryId, InventoryMeta inventoryMeta, bool isBalanced) { var inventory = await _inventoryRepository.GetInfo(inventoryId); if (inventory == null) { return(new ActionResultResponse <string>(-1, _warehouseResourceService.GetString("Inventory does not exists."))); } if (inventory.TenantId != tenantId) { return(new ActionResultResponse <string>(-2, _warehouseResourceService.GetString(ErrorMessage.NotHavePermission))); } if (inventory.Status != InventoryStatus.Waiting) { return(new ActionResultResponse <string>(-3, _sharedResourceService.GetString("Inventory already balanced. You can not edit this inventory"))); } if (inventory.ConcurrencyStamp != inventoryMeta.ConcurrencyStamp) { return(new ActionResultResponse <string>(-4, _warehouseResourceService.GetString( "The inventory already updated by other people. you are not allowed to edit the inventory information."))); } var isWarehouseExists = await _warehouseRepository.CheckExists(inventoryMeta.WarehouseId, tenantId); if (!isWarehouseExists) { return(new ActionResultResponse <string>(-5, _warehouseResourceService.GetString("Warehouse does not exists. Please check again."))); } inventory.WarehouseId = inventoryMeta.WarehouseId; inventory.InventoryDate = inventoryMeta.InventoryDate; inventory.Note = inventoryMeta.Note; inventory.ConcurrencyStamp = Guid.NewGuid().ToString(); inventory.LastUpdate = DateTime.Now; inventory.LastUpdateUserId = lastUpdateUserId; inventory.LastUpdateFullName = lastUpdateFullName; inventory.InventoryDate = inventoryMeta.InventoryDate; await _inventoryRepository.Update(inventory); if (isBalanced) { var resultBalance = await BalanceWarehouse(inventory.TenantId, inventory.Id); if (resultBalance.Code <= 0) { return(resultBalance); } } await UpdateMembers(); await UpdateDetail(); return(new ActionResultResponse <string>(1, _warehouseResourceService.GetString("Update inventory successful."), string.Empty, inventory.ConcurrencyStamp)); async Task UpdateMembers() { var members = await _inventoryMemberRepository.GetsByInventoryId(inventory.Id); if (inventoryMeta.Members == null || !inventoryMeta.Members.Any()) { await _inventoryMemberRepository.ForceDeleteByInventoryId(inventory.Id); } else { var memberMetaUserIds = inventoryMeta.Members.Select(x => x.UserId).ToList(); var memberUserIds = members.Select(x => x.UserId).ToList(); var listNews = memberMetaUserIds.Except(memberUserIds).ToList(); var listDelete = memberUserIds.Except(memberMetaUserIds).ToList(); if (listNews.Any()) { var httpService = new HttpClientService(); foreach (var inventoryMember in inventoryMeta.Members.Where(x => listNews.Contains(x.UserId))) { //var userInfo = await httpService.GetUserInfo(inventory.TenantId, inventoryMember.UserId); //if (userInfo == null) // continue; inventory.InventoryMembers.Add(new InventoryMember { //UserId = userInfo.UserId, //FullName = userInfo.FullName, //Avatar = userInfo.Avatar, //OfficeName = userInfo.OfficeName, //PositionName = userInfo.PositionName, InventoryId = inventory.Id }); } await _inventoryMemberRepository.Inserts(inventory.InventoryMembers); } if (listDelete.Any()) { await _inventoryMemberRepository.Deletes(inventory.Id, listDelete); } } } async Task UpdateDetail() { var inventoryDetails = await _inventoryDetailRepository.GetInventoryDetailByInventoryId(tenantId, inventory.Id); if (inventoryDetails == null) { inventoryDetails = await AddInventoryDetails(inventory.TenantId, inventory.WarehouseId, inventory.InventoryDate, inventory.Id, inventoryMeta.Details); await _inventoryDetailRepository.Inserts(inventoryDetails); } else { var inventoryDetailMetaIds = inventoryMeta.Details.Select(x => x.Id).ToList(); var inventoryDetailIds = inventoryDetails.Select(x => x.Id).ToList(); // Danh sách thêm mới. var listNewInventoryDetailIds = inventoryDetailMetaIds.Except(inventoryDetailIds).ToList(); var listUpdateInventoryDetailIds = inventoryDetailMetaIds.Intersect(inventoryDetailIds).ToList(); var listDeleteInventoryDetailIds = inventoryDetailIds.Except(inventoryDetailMetaIds); // Thêm mới chi tiết phiếu nhập. var listNewInventoryDetailMetas = inventoryMeta.Details.Where(x => listNewInventoryDetailIds.Contains(x.Id)).ToList(); if (listNewInventoryDetailMetas.Any()) { await AddInventoryDetails(inventory.TenantId, inventory.WarehouseId, inventory.InventoryDate, inventory.Id, listNewInventoryDetailMetas); } var listUpdate = inventoryDetails.Where(x => listUpdateInventoryDetailIds.Contains(x.Id)).ToList(); if (listUpdate.Any()) { // Cập nhật chi tiết phiếu nhập. foreach (var inventoryDetail in listUpdate) { var inventoryDetailMeta = inventoryMeta.Details.FirstOrDefault(x => x.Id == inventoryDetail.Id); if (inventoryDetailMeta == null) { continue; } if (inventoryDetailMeta.RealQuantity == inventoryDetail.RealQuantity) { continue; } inventoryDetail.RealQuantity = inventoryDetailMeta.RealQuantity; } await _inventoryDetailRepository.Updates(listUpdate); } // Xóa chi tiết phiếu nhập. var listDeleteInventoryDetails = inventoryDetails.Where(x => listDeleteInventoryDetailIds.Contains(x.Id)).ToList(); if (listDeleteInventoryDetails.Any()) { await _inventoryDetailRepository.Deletes(listDeleteInventoryDetails); } } } }