Exemple #1
0
        private void EnrichTransactionsByDetails(AmexCardInfo card, CreditCardDebitPeriod debit, List <AmexCardTransaction> transactions)
        {
            var tasks = CreateDetailsEnrichmentTasks(card.CardIndex, debit, transactions);

            foreach (var task in tasks)
            {
                task.Start();
            }

            Task.WaitAll(tasks.ToArray());
        }
Exemple #2
0
        private List <Task> CreateDetailsEnrichmentTasks(int cardIndex, CreditCardDebitPeriod debit, List <AmexCardTransaction> dtoTransactions)
        {
            var result = new List <Task>();
            var period = $"{debit.Date.Month}{debit.Date.Year}";

            foreach (var trs in debit.Transactions)
            {
                var trsToEnrich = dtoTransactions.FirstOrDefault(t => trs.Id == t.VoucherNumberRatz || trs.Id == t.VoucherNumberRatzOutbound);
                if (trsToEnrich == null)
                {
                    continue;
                }

                var task = new Task((p) =>
                {
                    try
                    {
                        TransactionEnrichmentParameters parameters = (TransactionEnrichmentParameters)p;
                        var isInbound = !string.IsNullOrEmpty(trsToEnrich.DealsInbound) &&
                                        !trsToEnrich.DealsInbound.Equals("no", StringComparison.CurrentCultureIgnoreCase);

                        var details = _api.GetTransactionDetails(cardIndex, period,
                                                                 isInbound, parameters.Transaction.Id);

                        parameters.Transaction.DealSector      = (details?.Sector ?? String.Empty).Trim();
                        parameters.Transaction.SupplierAddress = (details?.Address ?? String.Empty).Trim();
                    }
                    catch (Exception exp)
                    {
                    }
                }, new TransactionEnrichmentParameters
                {
                    RowTransaction = trsToEnrich,
                    Transaction    = trs
                });

                result.Add(task);
            }

            return(result);
        }
Exemple #3
0
        private static CreditCardDebitPeriod GenerateDebitPeriodForTransaction(AmexCardInfo card, CreditCardDebitPeriod debit, AmexCardTransaction transaction)
        {
            return(new CreditCardDebitPeriod
            {
                CardId = GenerateCardId(card),
                CardLastDigits = card.CardNumber,
                Date = debit.Date,

                Amount = String.IsNullOrEmpty(transaction.DealSumOutbound)
                    ? Convert.ToDecimal(transaction.PaymentSum)
                    : Convert.ToDecimal(transaction.DealSumOutbound),

                Transactions = new List <CreditCardTransaction>()
            });
        }
Exemple #4
0
        private List <CreditCardDebitPeriod> FetchInternalDebits(AmexCardInfo card, CreditCardDebitPeriod debit, IList <AmexCardTransaction> transactions, bool includeDeatils)
        {
            var result = new List <CreditCardDebitPeriod>();

            for (int i = 0; i < transactions.Count; i++)
            {
                var trs = transactions[i];
                if (!String.IsNullOrEmpty(trs.DealsInbound) && trs.VoucherNumber == null)
                {
                    if (trs.DealSumType == "P" && trs.MoreInfo == "חיוב במועד הבא")
                    {
                        transactions.RemoveAt(i);
                        transactions.RemoveAt(i - 1);
                        i -= 2;
                    }
                    else if (trs.DealSumType == "T" && trs.DealsInbound == "NO")
                    {
                        transactions.RemoveAt(i);
                        i--;
                    }
                    else if (trs.DealSumType == "T" && trs.DealsInbound == "yes")
                    {
                        var newDebit = GenerateDebitPeriodForTransaction(card, debit, transactions[i - 1]);
                        var debitTrs = GenerateCardTransaction(transactions[i - 1], newDebit.Date);

                        newDebit.Transactions.Add(debitTrs);
                        result.Add(newDebit);

                        if (includeDeatils)
                        {
                            EnrichTransactionsByDetails(card, newDebit, transactions.ToList());
                        }

                        transactions.RemoveAt(i);
                        transactions.RemoveAt(i - 1);
                        i -= 2;
                    }
                    else if (trs.DealSumType == "1")
                    {
                        transactions.RemoveAt(i);
                        i--;
                    }
                }
                else if (String.IsNullOrEmpty(trs.DealsInbound))
                {
                    if (trs.DealSumOutbound == null && !trs.FullSupplierNameOutbound.Equals("CASH ADVANCE FEE"))
                    {
                        transactions.RemoveAt(i);
                        i--;
                    }
                    else if (Convert.ToDecimal(trs.DealSumOutbound) < 0)
                    {
                        var newDebit = GenerateDebitPeriodForTransaction(card, debit, trs);
                        var debitTrs = GenerateCardTransaction(trs, newDebit.Date);

                        newDebit.Transactions.Add(debitTrs);
                        result.Add(newDebit);

                        if (includeDeatils)
                        {
                            EnrichTransactionsByDetails(card, newDebit, transactions.ToList());
                        }

                        transactions.RemoveAt(i);
                        i--;
                    }
                }
            }

            return(result);
        }
Exemple #5
0
 private bool SameDebits(CreditCardDebitPeriod debit, CreditCardDebitPeriod debitUpdate)
 {
     return(debitUpdate.Transactions.Any(t => !IsExisted(t, debit.Transactions)));
 }