コード例 #1
0
        private async Task <List <SupplierBacs> > BuildSupplierPayments(IEnumerable <InvoiceTransaction> invoiceTransactions)
        {
            var results = new List <SupplierBacs>();

            var transactionsByCandidateAndInvoiceId = invoiceTransactions.GroupBy(transaction => new
            {
                transaction.InvoiceId,
                transaction.SupplierId
            });

            foreach (var transactionGroup in transactionsByCandidateAndInvoiceId)
            {
                var candidate = _candidateRepository.GetCandidateData();

                candidate.TryGetValue(transactionGroup.Key.SupplierId, out Candidate matchingCandidate);

                if (matchingCandidate == null)
                {
                    throw new InvalidOperationException(
                              $"Could not load candidate with Id {transactionGroup.Key.SupplierId}");
                }

                var bank = matchingCandidate?.BankDetails;

                var result = new SupplierBacs
                {
                    PaymentAmount    = transactionGroup.Sum(invoiceTransaction => invoiceTransaction.Gross),
                    InvoiceReference = string.IsNullOrEmpty(transactionGroup.First().InvoiceRef)
                        ? NotAvailable
                        : transactionGroup.First().InvoiceRef,
                    PaymentReference = $"SONOVATE{transactionGroup.First().InvoiceDate.GetValueOrDefault():ddMMyyyy}",
                    AccountName      = bank?.AccountName,
                    AccountNumber    = bank?.AccountNumber,
                    SortCode         = bank?.SortCode
                };

                results.Add(result);
            }

            return(results);
        }
コード例 #2
0
        private List <SupplierBacs> BuildSupplierPayments(IEnumerable <InvoiceTransaction> invoiceTransactions)
        {
            var results = new List <SupplierBacs>();

            var transactionsByCandidateAndInvoiceId = invoiceTransactions.GroupBy(transaction => new
            {
                transaction.InvoiceId,
                transaction.SupplierId
            });

            foreach (var transactionGroup in transactionsByCandidateAndInvoiceId)
            {
                var candidateRepository = new CandidateRepository();
                var candidate           = candidateRepository.GetById(transactionGroup.Key.SupplierId);

                if (candidate == null)
                {
                    throw new InvalidOperationException(string.Format("Could not load candidate with Id {0}",
                                                                      transactionGroup.Key.SupplierId));
                }

                var result = new SupplierBacs();

                var bank = candidate.BankDetails;

                result.AccountName      = bank.AccountName;
                result.AccountNumber    = bank.AccountNumber;
                result.SortCode         = bank.SortCode;
                result.PaymentAmount    = transactionGroup.Sum(invoiceTransaction => invoiceTransaction.Gross);
                result.InvoiceReference = string.IsNullOrEmpty(transactionGroup.First().InvoiceRef)
                    ? NOT_AVAILABLE
                    : transactionGroup.First().InvoiceRef;
                result.PaymentReference = string.Format("SONOVATE{0}",
                                                        transactionGroup.First().InvoiceDate.GetValueOrDefault().ToString("ddMMyyyy"));

                results.Add(result);
            }

            return(results);
        }
コード例 #3
0
        private List <ISupplierBacs> BuildSupplierPayments(IEnumerable <IInvoiceTransaction> invoiceTransactions)
        {
            var results = new List <ISupplierBacs>();

            var transactionsByCandidateAndInvoiceId = invoiceTransactions.GroupBy(transaction => new
            {
                transaction.InvoiceId,
                transaction.SupplierId
            });

            foreach (var transactionGroup in transactionsByCandidateAndInvoiceId)
            {
                var candidateRepository = new CandidateRepository();
                var candidate           = candidateRepository.GetById(transactionGroup.Key.SupplierId);

                if (candidate == null)
                {
                    throw new InvalidOperationException(string.Format(LOAD_CANDIDATE_ERROR,
                                                                      transactionGroup.Key.SupplierId));
                }

                var result = new SupplierBacs();

                var bank = candidate.BankDetails;

                result.BankDetails.AccountName   = bank.AccountName;
                result.BankDetails.AccountNumber = bank.AccountNumber;
                result.BankDetails.SortCode      = bank.SortCode;
                result.PaymentAmount             = transactionGroup.Sum(invoiceTransaction => invoiceTransaction.Gross);
                result.InvoiceReference          = string.IsNullOrEmpty(transactionGroup.First().InvoiceReference)
                    ? NOT_AVAILABLE
                    : transactionGroup.First().InvoiceReference;
                result.PaymentReference = string.Format(BACS_RESULT_REFERENCE_FORMAT,
                                                        transactionGroup.First().InvoiceDate.GetValueOrDefault().ToString(BACS_RESULT_REFERENCE_DATE_FORMAT));

                results.Add(result);
            }

            return(results);
        }