public static BankConsolidateExtractDTO ToDTO(this BankConsolidateExtract source) => source == null ? null : new BankConsolidateExtractDTO() { BankAccount = source.BankAccount.ToDTO(), ExtractsName = source.ExtractsName, Transactions = source.Transactions.Select(t => t.ToDTO()).ToList(), Balance = source.Balance.ToDTO() };
/// <summary> /// Bank Reconciliation from unique Bank Account /// </summary> /// <param name="extracts"></param> /// <returns></returns> public BankConsolidateExtract ConsolidateExtracts(List <Extract> extracts) { // Validate Extracts this.Validate(extracts); // Remove duplicated transactions var distinctTransactions = extracts.SelectMany(e => e.Transactions).Distinct().ToList(); var response = new BankConsolidateExtract() { Transactions = distinctTransactions, ExtractsName = extracts.Select(e => e.Name).ToList(), BankAccount = extracts.Select(e => e.BankAccount).FirstOrDefault(), Balance = extracts.Select(e => e.Balance).FirstOrDefault() }; return(response); }
/// <summary> /// Parse and map extracts to reconciliate /// </summary> /// <param name="files"></param> /// <returns></returns> public async Task <BankConsolidateExtractDTO> ParseAndConsolidateExtractsAsync(IList <IFormFile> files) { List <Extract> extracts = new List <Extract>(); // Parse each ofx file and map it to domain foreach (var file in files) { var parsedExtract = await OFXParser.Parse(file); var extract = parsedExtract.ToDomain(); extracts.Add(extract); } // Reconciliate extracts BankConsolidateExtract result = this.bankOperationsDomainService.ConsolidateExtracts(extracts); // Map result to DTO var response = result.ToDTO(); return(response); }