public DirectDebitTransaction CreateANewEmptyDirectDebitTransaction(DirectDebitMandate directDebitmandate)
 {
     DirectDebitTransaction directDebitTransaction = new DirectDebitTransaction(
         directDebitmandate.InternalReferenceNumber,
         directDebitmandate.BankAccount,
         directDebitmandate.AccountHolderName,
         directDebitmandate.DirectDebitMandateCreationDate);
     return directDebitTransaction;
 }
 public DirectDebitTransaction CreateANewDirectDebitTransactionFromAGroupOfBills(DirectDebitMandate directDebitmandate, List<Bill> billsList)
 {
     DirectDebitTransaction directDebitTransaction  = new DirectDebitTransaction(
         billsList,
         directDebitmandate.InternalReferenceNumber,
         directDebitmandate.BankAccount,
         directDebitmandate.AccountHolderName,
         directDebitmandate.DirectDebitMandateCreationDate);
     return directDebitTransaction;
 }
 public void AddDirectDebitTransaction(DirectDebitTransaction directDebitTransaction)
 {
     directDebitTransactionsCollection.Add(directDebitTransaction);
     UpdateNumberOfDirectDebitTransactionsAndAmount();
 }
 public void WhenAddingAnotherBillToADirectDebitTransactionTheAmmountAndNumberOfBillsAreCorrectlyUpdated()
 {
     ClubMember clubMember = clubMembers["00002"];
     Invoice firstInvoice = clubMember.InvoicesList.Values.ElementAt(0);
     List<Bill> bills = new List<Bill>() { firstInvoice.Bills.Values.ElementAt(0) };
     DirectDebitMandate directDebitMandate = clubMembers["00002"].DirectDebitmandates.ElementAt(0).Value;
     int internalDirectDebitReferenceNumber = directDebitMandate.InternalReferenceNumber;
     BankAccount debtorAccount = directDebitMandate.BankAccount;
     string accountHolderName = directDebitMandate.AccountHolderName;
     DateTime mandateSignatureDate = directDebitMandate.DirectDebitMandateCreationDate;
     DirectDebitTransaction directDebitTransaction = new DirectDebitTransaction(bills, internalDirectDebitReferenceNumber, debtorAccount, accountHolderName, mandateSignatureDate);
     Assert.AreEqual((decimal)79, directDebitTransaction.Amount);
     Assert.AreEqual(1, directDebitTransaction.NumberOfBills);
     Invoice secondInvoice = clubMember.InvoicesList.Values.ElementAt(1);
     Bill bill = secondInvoice.Bills.ElementAt(0).Value;
     directDebitTransaction.AddBill(bill);
     Assert.AreEqual((decimal)158, directDebitTransaction.Amount);
     Assert.AreEqual(2, directDebitTransaction.NumberOfBills);
 }
 public void TheMandateIDOfADirectDebitIsWellGenerated()
 {
     ClubMember clubMember = clubMembers["00002"];
     Invoice firstInvoice = clubMember.InvoicesList.Values.ElementAt(0);
     List<Bill> bills = new List<Bill>() { firstInvoice.Bills.Values.ElementAt(0) };
     DirectDebitMandate directDebitMandate = clubMembers["00002"].DirectDebitmandates.ElementAt(0).Value;
     int internalDirectDebitReferenceNumber = directDebitMandate.InternalReferenceNumber;
     BankAccount debtorAccount = directDebitMandate.BankAccount;
     string accountHolderName = directDebitMandate.AccountHolderName;
     DateTime mandateSignatureDate = directDebitMandate.DirectDebitMandateCreationDate;
     DirectDebitTransaction directDebitTransaction = new DirectDebitTransaction(bills, internalDirectDebitReferenceNumber, debtorAccount, accountHolderName, mandateSignatureDate);
     Assert.AreEqual(1235, directDebitTransaction.InternalDirectDebitReferenceNumber);
     directDebitTransaction.GenerateMandateID("777");
     Assert.AreEqual("000077701235                       ", directDebitTransaction.MandateID);
 }
 public void AnEmptyDirectDebitTransactionIsCorrectlyCreated()
 {
     ClubMember clubMember = clubMembers["00002"];
     DirectDebitMandate directDebitMandate = clubMembers["00002"].DirectDebitmandates.ElementAt(0).Value;
     int internalDirectDebitReferenceNumber = directDebitMandate.InternalReferenceNumber;
     BankAccount debtorAccount = directDebitMandate.BankAccount;
     string accountHolderName = directDebitMandate.AccountHolderName;
     DateTime mandateSignatureDate = directDebitMandate.DirectDebitMandateCreationDate;
     DirectDebitTransaction directDebitTransaction = new DirectDebitTransaction(internalDirectDebitReferenceNumber, debtorAccount, accountHolderName, mandateSignatureDate);
     Assert.AreEqual(internalDirectDebitReferenceNumber, directDebitTransaction.InternalDirectDebitReferenceNumber);
     Assert.AreEqual(debtorAccount, directDebitTransaction.DebtorAccount);
     Assert.AreEqual(0, directDebitTransaction.NumberOfBills);
 }
 public void ADirectDebitTransactionIsCorrectlyCreated()
 {
     ClubMember clubMember = clubMembers["00002"];
     List<Invoice> invoices = clubMember.InvoicesList.Values.ToList();
     List<Bill> bills = invoices.Select(invoice => invoice.Bills.ElementAt(0).Value).ToList();
     DirectDebitMandate directDebitMandate = clubMembers["00002"].DirectDebitmandates.ElementAt(0).Value;
     int internalDirectDebitReferenceNumber = directDebitMandate.InternalReferenceNumber;
     BankAccount debtorAccount = directDebitMandate.BankAccount;
     string accountHolderName = directDebitMandate.AccountHolderName;
     DateTime mandateSignatureDate = directDebitMandate.DirectDebitMandateCreationDate;
     DirectDebitTransaction directDebitTransaction = new DirectDebitTransaction(bills, internalDirectDebitReferenceNumber, debtorAccount, accountHolderName, mandateSignatureDate);
     Assert.AreEqual(bills, directDebitTransaction.BillsInTransaction);
     Assert.AreEqual(internalDirectDebitReferenceNumber, directDebitTransaction.InternalDirectDebitReferenceNumber);
     Assert.AreEqual(debtorAccount, directDebitTransaction.DebtorAccount);
     Assert.AreEqual((decimal)158, directDebitTransaction.Amount);
     Assert.AreEqual(2, directDebitTransaction.NumberOfBills);
 }
        public void ADirectDebitTransactionIsCorrectlyAddedToGroupPayment()
        {
            string localInstrument = "COR1";
            DirectDebitTransactionsGroupPayment directDebitTransactionsGroupPayment = new DirectDebitTransactionsGroupPayment(localInstrument);

            ClubMember clubMember = clubMembers["00002"];
            Invoice firstInvoice = clubMember.InvoicesList.Values.ElementAt(0);
            List<Bill> bills = new List<Bill>() { firstInvoice.Bills.Values.ElementAt(0) };
            DirectDebitMandate directDebitMandate = clubMembers["00002"].DirectDebitmandates.ElementAt(0).Value;
            int internalDirectDebitReferenceNumber = directDebitMandate.InternalReferenceNumber;
            BankAccount debtorAccount = directDebitMandate.BankAccount;
            string accountHolderName = directDebitMandate.AccountHolderName;
            DateTime mandateSignatureDate = directDebitMandate.DirectDebitMandateCreationDate;
            DirectDebitTransaction directDebitTransaction = new DirectDebitTransaction(bills, internalDirectDebitReferenceNumber, debtorAccount, accountHolderName, mandateSignatureDate);
            directDebitTransactionsGroupPayment.AddDirectDebitTransaction(directDebitTransaction);
            Assert.AreEqual(1, directDebitTransactionsGroupPayment.NumberOfDirectDebitTransactions);
            Assert.AreEqual((decimal)79, directDebitTransactionsGroupPayment.TotalAmount);
        }
        private DirectDebitTransactionInformation9 GenerateDirectDebitTransactionInfo_DrctDbtTxInf(
            CreditorAgent creditorAgent,
            DirectDebitTransaction directDebitTransaction)
        {
            PaymentIdentification1 paymentIdentification_PmtID = new PaymentIdentification1(
                directDebitTransaction.DirectDebitTransactionInternalReference,    //<InstrID>
                directDebitTransaction.DirectDebitTransactionInternalReference);   //<EndToEndID>

            ActiveOrHistoricCurrencyAndAmount instructedAmount_InstdAmt = new ActiveOrHistoricCurrencyAndAmount(
                "EUR",                                      //<InstdAmt> ""CCY" atribute value
                directDebitTransaction.Amount);             //<InstdAmt>

            MandateRelatedInformation6 mandateRelatedInformation_MndtRltdInf = new MandateRelatedInformation6(
                directDebitTransaction.MandateID,               //<MndtID>
                directDebitTransaction.MandateSigatureDate,     //<DtOfSgntr>
                true,                                           //<DtOfSgntr> will be serialized
                false,                                          //<AmdmntInd> - There is no amendment
                false,                                          //<AmdmntInd> will not be serialize
                null,                                           //<AmdmntInfDtls> - No amendment details
                null,                                           //<ElctrncSgntr> - No electronic signature
                DateTime.MinValue,                              //<FrstColltnDt> - Not used by creditor in SEPA COR, but can't be null
                false,                                          //<FrstColltnDt> will not be serialized
                DateTime.MaxValue,                              //<FnlColltnDt> - Not used by creditor in SEPA COR, but can't be null
                false,                                          //<FnlColltnDt> will not be serialized
                Frequency1Code.MNTH,                            //<Frqcy> - Not used by creditor in SEPA COR, but can't be null
                false);                                         //<Frqcy> will not be serialized

            DirectDebitTransaction6 directDebitTransaction_DrctDbtTx = new DirectDebitTransaction6(
                mandateRelatedInformation_MndtRltdInf,  //<MndtRltdInf>
                null,                                   //<CdtrSchmeId> - No. Only one creditor scheme per payment information <PmtInf> group
                null,                                   //<PreNtfctnId> - Not used by creditor in SEPA COR
                DateTime.MinValue,                      //<PreNtfctnDt> - Not used by creditor in SEPA COR, but can't be null
                false);                                 //<PreNtfctnDt> will not be serialized

            FinancialInstitutionIdentification7 financialInstitutuinIdentification_FinInstnID = new FinancialInstitutionIdentification7(
                creditorAgent.BankBIC,  //<BIC>
                null,                   //<ClrYsMmbId> - Not used by creditor in SEPA COR
                null,                   //<Nm> Not used by creditor in SEPA COR
                null,                   //<PstlAdr> - Not used by creditor in SEPA COR
                null);                  //<Othr> - Not used by creditor in SEPA COR

            BranchAndFinancialInstitutionIdentification4 debtorAgent_DbtrAgt = new BranchAndFinancialInstitutionIdentification4(
                financialInstitutuinIdentification_FinInstnID,  //<FinInstnId>
                null);                                          //<BrcnhID> - Not used by creditor in SEPA COR

            PartyIdentification32 debtor_Dbtr = new PartyIdentification32(
                directDebitTransaction.AccountHolderName,   //<Nm>
                null,                                       //<PstlAdr> - No postal address needed
                null,                                       //<Id> - No extra ID needed
                null,                                       //<CtryOfRes> - Not used by creditor in SEPA COR
                null);                                      //<CtctDtls> - Not used by creditor in SEPA COR

            AccountIdentification4Choice accountID_Id = new AccountIdentification4Choice(
                directDebitTransaction.DebtorAccount.IBAN.IBAN);

            CashAccount16 debtorAccount_DbtrAcct = new CashAccount16(
                accountID_Id,   //<Id>
                null,           //<Tp> - Not used by creditor in SEPA COR
                null,           //<Ccy> - Not used by creditor in SEPA COR
                null);          //<Nm> - Not used by creditor in SEPA COR

            string[] remittanceConcepts = directDebitTransaction.BillsInTransaction.Select(bill => bill.Description).ToArray();
            RemittanceInformation5 remitanceInformation_RmtInf = new RemittanceInformation5(
                remittanceConcepts,                                     //<Ustrd>
                new StructuredRemittanceInformation7[] { null });       //<Strd> - Only <Ustrd> or <Strd>

            DirectDebitTransactionInformation9 directDebitTransactionInfo_DrctDbtTxInf = new DirectDebitTransactionInformation9(
                paymentIdentification_PmtID,        //<PmtID>
                null,                               //<PmtTpInf> - Not used by creditor in SEPA COR
                instructedAmount_InstdAmt,          //<InstdAmt>
                ChargeBearerType1Code.SLEV,         //<ChrgBr> - No. Only one Charge Bearer per payment information <PmtInf> group
                false,                              //<ChrgBr> will not be serialized
                directDebitTransaction_DrctDbtTx,   //<DrctDbtTx>
                null,                               //<UltmtCdtr> - Not necessary. If son, only one Ultimate Creditor per payment information <PmtInf> group
                debtorAgent_DbtrAgt,                //<DbtrAgt>
                null,                               //<DbtrAgtAcct> - Not used by creditor in SEPA COR
                debtor_Dbtr,                        //<Dbtr>
                debtorAccount_DbtrAcct,             //<DbtrAcct>
                null,                               //<UltmtDbtr> - Only if Ultimate Debtor is different from debtor.
                null,                               //<InstrForCdtrAgt> - Not used by creditor in SEPA COR
                null,                               //<Purp> - Not mandatory. Only use to inform debtor. Is meaningless for agents.
                new RegulatoryReporting3[] { null },//<RgltryRptg> - Only needed for big payments from non residents
                null,                               //<Tax> - Not used by creditor in SEPA COR
                new RemittanceLocation2[] { null }, //<RltdRmtInf> - Not used by creditor in SEPA COR
                remitanceInformation_RmtInf);       //<RmtInf>

            return directDebitTransactionInfo_DrctDbtTxInf;
        }
 public void AddDirectDebitTransactionToGroupPayment(
     DirectDebitTransaction directDebitTransaction,
     DirectDebitTransactionsGroupPayment directDebitTransactionsGroupPayment)
 {
     directDebitTransactionsGroupPayment.AddDirectDebitTransaction(directDebitTransaction);
 }
 public void AddBilllToExistingDirectDebitTransaction(DirectDebitTransaction directDebitTransaction, Bill bill)
 {
     directDebitTransaction.AddBill(bill);
 }