Ejemplo n.º 1
0
 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);
        }
Ejemplo n.º 3
0
        /// <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);
        }