public async Task <bool> UploadAndImportFile(int periodId, Stream stream, string fileName, int userId) { var randomFileName = Guid.NewGuid().ToString(); var fileUploadModel = new FileUploadModel { FileName = randomFileName, FileType = Shared.Enum.FileType.UploadDocument, Extension = Path.GetExtension(fileName), PeriodId = periodId, UserId = userId }; var fileUploadSuccess = await _fileAccessor.WriteFileAsync(stream, fileUploadModel); if (fileUploadSuccess) { await _importProcess.ProcessFileAsync(fileUploadModel); } return(true); }
public async Task ProcessAsync(FileUploadModel message) { Dictionary <string, decimal> accountBalances = new Dictionary <string, decimal>(); await ReadDataFromFile(message, accountBalances); var responseMessage = new StringBuilder(); if (accountBalances != null) { int successCount = 0; using (var uow = await _applicationDbFactory.BeginUnitOfWorkAsync()) { var allAccount = uow.Accounts.GetAll(); foreach (var item in accountBalances) { var account = allAccount.FirstOrDefault(a => a.AccountName == item.Key.Trim()); if (account != null) { var balanceRecord = uow.AccountPeriodBalances.GetAll().FirstOrDefault(b => b.PeriodId == message.PeriodId && b.AccountId == account.AccountId); if (balanceRecord == null) { var accountBalance = new AccountPeriodBalance { AccountId = account.AccountId, Balance = item.Value, CreatedBy = message.UserId, CreatedDate = DateTimeOffset.Now, PeriodId = message.PeriodId }; uow.AccountPeriodBalances.Insert(accountBalance); successCount++; } else { balanceRecord.Balance = item.Value; balanceRecord.CreatedDate = DateTimeOffset.Now; balanceRecord.CreatedBy = message.UserId; uow.AccountPeriodBalances.Update(balanceRecord); successCount++; } } else { responseMessage.Append(item.Key + " : Account does not exist !" + System.Environment.NewLine); } } await uow.SaveAsync(); responseMessage.Insert(0, successCount.ToString() + " Records amended succesfully!" + System.Environment.NewLine); } } else { responseMessage.Append("Data extraction error !" + System.Environment.NewLine); } byte[] resutByteArray = Encoding.UTF8.GetBytes(responseMessage.ToString()); MemoryStream resultStream = new MemoryStream(resutByteArray); await _fileAccessor.WriteFileAsync(resultStream, new FileUploadModel { Extension = ".txt", FileName = message.FileName, FileType = Shared.Enum.FileType.ResultDocument }); }