public static void ClassInit(TestContext context)
        {
            BillingSequenceNumbersMock invoiceDataManagerMock = new BillingSequenceNumbersMock();
            BillingDataManager.Instance.SetBillingSequenceNumberCollaborator(invoiceDataManagerMock);
            BillingDataManager.Instance.InvoiceSequenceNumber=5000;
            invoicesManager = new InvoicesManager();

            clubMembers = new Dictionary<string, ClubMember>()
            {
                {"00001", new ClubMember("00001", "Francisco", "Gómez-Caldito", "Viseas")},
                {"00002", new ClubMember("00002", "Pedro", "Pérez", "Gómez")}
            };

            creditor = new Creditor("G35008770", "Real Club Náutico de Gran Canaria");
            creditorAgent = new CreditorAgent(new BankCode("2100", "CaixaBank","CAIXESBBXXX"));
            directDebitInitiationContract = new DirectDebitInitiationContract(
                new BankAccount(new InternationalAccountBankNumberIBAN("ES5621001111301111111111")),
                creditor.NIF,
                "777",
                creditorAgent);

            var directDebitmandateslist = new[]
            {
                new {clubMemberID = "00001", internalReference = 1234, ccc = "21002222002222222222" },
                new {clubMemberID = "00002", internalReference = 1235, ccc = "21003333802222222222" }
            };

            foreach (var ddM in directDebitmandateslist)
            {
                DirectDebitMandate directDebitMandate = new DirectDebitMandate(
                    ddM.internalReference,
                    new DateTime(2013,11,11),
                    new BankAccount(new ClientAccountCodeCCC(ddM.ccc)),
                    clubMembers[ddM.clubMemberID].FullName);
                clubMembers[ddM.clubMemberID].AddDirectDebitMandate(directDebitMandate);
            }

            var billsList = new[]
            {
                new {clubMemberID = "00001", Amount = 79, transactionDescription = "Cuota Social Octubre 2013" },
                new {clubMemberID = "00002", Amount = 79, transactionDescription="Cuota Social Octubre 2013" },
                new {clubMemberID = "00002", Amount = 79, transactionDescription="Cuota Social Noviembre 2013"}
            };

            foreach (var bill in billsList)
            {
                List<Transaction> transaction = new List<Transaction>()
                {
                    new Transaction(bill.transactionDescription,1,bill.Amount,new Tax("NoTAX",0),0)
                };
                ClubMember clubMember = clubMembers[bill.clubMemberID];
                InvoiceCustomerData invoiceCustomerData = new InvoiceCustomerData(clubMember);
                Invoice invoice = new Invoice(invoiceCustomerData, transaction, new DateTime(2013, 11, 11));
                invoicesManager.AddInvoiceToClubMember(invoice, clubMember);
            }

            spanishBankCodes = new BankCodes(@"XMLFiles\SpanishBankCodes.xml", BankCodes.BankCodesFileFormat.XML);
        }
 public void ADirectDebitMandateCanBeDeactivated()
 {
     ClientAccountCodeCCC ccc = new ClientAccountCodeCCC("12345678061234567890");
     BankAccount bankAccount = new BankAccount(ccc);
     DirectDebitMandate directDebitMandate = new DirectDebitMandate(1, DateTime.Now.Date, bankAccount, "NoName");
     Assert.AreEqual(DirectDebitMandate.DirectDebitmandateStatus.Active, directDebitMandate.Status);
     directDebitMandate.DeactivateMandate();
     Assert.AreEqual(DirectDebitMandate.DirectDebitmandateStatus.Inactive, directDebitMandate.Status);
 }
 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 GivenAClubMemberWithADefaultPaymentMethod(Table clientsTable)
 {
     membersManagementContextData.clubMember = new ClubMember(clientsTable.Rows[0]["MemberID"], clientsTable.Rows[0]["Name"], clientsTable.Rows[0]["FirstSurname"], clientsTable.Rows[0]["SecondSurname"]);
     string electronicIBANString = clientsTable.Rows[0]["Spanish IBAN Bank Account"].Replace(" ","").Substring(4);
     InternationalAccountBankNumberIBAN iban = new InternationalAccountBankNumberIBAN(electronicIBANString);
     BankAccount bankAccount = new BankAccount(iban);
     string debtorName = membersManagementContextData.clubMember.FullName;
     DirectDebitMandate directDebitmandate = new DirectDebitMandate(2345, DateTime.Now.Date, bankAccount, debtorName);
     PaymentMethod paymentMethod = new DirectDebitPaymentMethod(directDebitmandate, null);
     membersManagementContextData.clubMember.AddDirectDebitMandate(directDebitmandate);
     membersManagementContextData.clubMember.SetDefaultPaymentMethod(paymentMethod);
 }
 public void CantInitializeADirectDebitWithAnOutOfRangeSequenceNumber()
 {
     BankAccount bankAccount = new BankAccount(new ClientAccountCodeCCC("12345678061234567890"));
     DateTime directDebitMandateCreationDate = new DateTime(2013, 11, 11);
     try
     {
         DirectDebitMandate directDebitMandate = new DirectDebitMandate(100000, directDebitMandateCreationDate, bankAccount, "NoName");
     }
     catch (ArgumentOutOfRangeException exception)
     {
         Assert.AreEqual("Direct Debit Sequence Number out of range (1-99999)", exception.GetMessageWithoutParamName());
         throw exception;
     }
 }
 public void GivenTheseDirectDebitMandates(Table directDebits)
 {
     directDebitContextData.directDebitMandates = new Dictionary<int, DirectDebitMandate>();
     foreach (var row in directDebits.Rows)
     {
         int internalReferenceNumber = int.Parse(row["DirectDebitInternalReferenceNumber"]);
         string iBAN = (string)row["IBAN"];
         DateTime creationDate = DateTime.Parse((string)row["RegisterDate"]).Date;
         BankAccount bankAccount = new BankAccount(new InternationalAccountBankNumberIBAN(iBAN));
         string debtorName = membersManagementContextData.clubMember.FullName;
         DirectDebitMandate directDebitmandate = new DirectDebitMandate(internalReferenceNumber, creationDate, bankAccount, debtorName);
         directDebitContextData.directDebitMandates.Add(internalReferenceNumber, directDebitmandate);
     }
 }
 public void WhenIAddANewDirectDebitMandateToTheMember()
 {
     ClubMember clubMember = (ClubMember)ScenarioContext.Current["Member1"];
     DateTime creationDate = new DateTime(2013, 11, 11);
     BankAccount bankAccount = directDebitContextData.bankAccounts["ES6812345678061234567890"];
     DirectDebitMandate directDebitMandate = new DirectDebitMandate(creationDate, bankAccount, clubMember.FullName);
     ScenarioContext.Current.Add("DirectDebitMandate", directDebitMandate);
     clubMember.AddDirectDebitMandate(directDebitMandate);
 }
 public void AddDirectDebitMandate(DirectDebitMandate directDebitMandate)
 {
     directDebitmandates.Add(directDebitMandate.InternalReferenceNumber, directDebitMandate);
 }
 public void ADirectDebitPaymentMethodIsCorrectlyCreated()
 {
     int internalReferenceNumber = 2645;
     BankAccount bankAccount = new BankAccount(new ClientAccountCodeCCC("12345678061234567890"));
     DateTime directDebitMandateCreationDate = new DateTime(2013, 11, 11);
     DirectDebitMandate directDebitMandate = new DirectDebitMandate(internalReferenceNumber, directDebitMandateCreationDate, bankAccount, "NoName");
     string directDebitTransactionPaymentIdentification = "201311110000123456";
     DirectDebitPaymentMethod directDebitPaymentMethod = new DirectDebitPaymentMethod(directDebitMandate, directDebitTransactionPaymentIdentification);
     Assert.AreEqual(directDebitMandate, directDebitPaymentMethod.DirectDebitMandate);
     Assert.AreEqual("201311110000123456", directDebitPaymentMethod.DDTXPaymentIdentification);
 }
 public void IfNoReferenceNumberIsProvidedASequenceNumberIsAssigned()
 {
     billDataManager.DirectDebitSequenceNumber = 5000;
     BankAccount bankAccount = new BankAccount(new ClientAccountCodeCCC("12345678061234567890"));
     DateTime directDebitMandateCreationDate = new DateTime(2013, 11, 11);
     DirectDebitMandate directDebitMandate = new DirectDebitMandate(directDebitMandateCreationDate, bankAccount, "NoName");
     Assert.AreEqual(5000, directDebitMandate.InternalReferenceNumber);
 }
 public void WeCanSetTheDirectDebitSequenceNumberValue()
 {
     BankAccount bankAccount = new BankAccount(new ClientAccountCodeCCC("12345678061234567890"));
     DateTime directDebitMandateCreationDate = new DateTime(2013, 11, 11);
     DirectDebitMandate directDebitMandate = new DirectDebitMandate(2345, directDebitMandateCreationDate, bankAccount, "NoName");
     Assert.AreEqual(2345, directDebitMandate.InternalReferenceNumber);
 }
 public void TheBankAccountOfADirectDebitOrderCanBeChanged()
 {
     ClientAccountCodeCCC ccc = new ClientAccountCodeCCC("12345678061234567890");
     BankAccount ephemeralBankAcount = new BankAccount(ccc);
     DateTime ephemeralBankAcountActivationDate = new DateTime(2013, 11, 11);
     DirectDebitMandate directDebitMandate = new DirectDebitMandate(1, ephemeralBankAcountActivationDate, ephemeralBankAcount, "NoName");
     Assert.AreEqual(ephemeralBankAcount, directDebitMandate.BankAccount);
     InternationalAccountBankNumberIBAN iBAN = new InternationalAccountBankNumberIBAN("ES3011112222003333333333");
     BankAccount newBankAccount = new BankAccount(iBAN);
     DateTime dateOfChange = new DateTime(2013, 11, 30);
     directDebitMandate.ChangeBankAccount(newBankAccount, dateOfChange);
     Assert.AreEqual(newBankAccount, directDebitMandate.BankAccount);
     Assert.AreEqual(dateOfChange, directDebitMandate.BankAccountActivationDate);
     Assert.AreEqual(ephemeralBankAcount, directDebitMandate.BankAccountHistory[dateOfChange].BankAccount);
     Assert.AreEqual(ephemeralBankAcountActivationDate, directDebitMandate.BankAccountHistory[dateOfChange].AccountActivationDate);
     Assert.AreEqual(dateOfChange, directDebitMandate.BankAccountHistory[dateOfChange].AccountDeactivationDate);
 }
 public void ProvidingTheLastDirectDebitReferenceNumberWas100TheNextAssignedMustBe101()
 {
     billDataManager.DirectDebitSequenceNumber = 100;
     ClientAccountCodeCCC ccc = new ClientAccountCodeCCC("12345678061234567890");
     BankAccount bankAccount = new BankAccount(ccc);
     DirectDebitMandate directDebitMandate = new DirectDebitMandate(DateTime.Now.Date, bankAccount, "NoName");
     Assert.AreEqual((uint)101, billDataManager.DirectDebitSequenceNumber);
 }
 public void GivenTheseClubMembers(Table membersTable)
 {
     Dictionary<string, ClubMember> membersCollection = new Dictionary<string, ClubMember>();
     Dictionary<string, string> bICDictionary = new Dictionary<string, string>();
     foreach (var row in membersTable.Rows)
     {
         BankAccount memberAccount = new BankAccount(new ClientAccountCodeCCC((string)row["Account"]));
         bICDictionary.Add(memberAccount.BankAccountFieldCodes.BankCode, row["BIC"]);
         ClubMember clubMember = new ClubMember(
             row["MemberID"],
             row["Name"],
             row["FirstSurname"],
             row["SecondSurname"]);
         DateTime mandateCreationDate = new DateTime(2009, 10, 30);
         int directDebitReferenceNumber = int.Parse(row["Reference"]);
         DirectDebitMandate directDebitMandate = new DirectDebitMandate(
             directDebitReferenceNumber,
             mandateCreationDate,
             memberAccount,
             clubMember.FullName);
         clubMember.AddDirectDebitMandate(directDebitMandate);
         membersCollection.Add(clubMember.MemberID, clubMember);
     }
     ScenarioContext.Current.Add("BICDictionary", bICDictionary);
     ScenarioContext.Current.Add("Members", membersCollection);
 }
 public void WhenIAssignToBePaidWithADirectDebit()
 {
     int internalReferenceNumber = 2645;
     BankAccount bankAccount = new BankAccount(new ClientAccountCodeCCC("12345678061234567890"));
     DateTime directDebitMandateCreationDate = new DateTime(2013, 11, 11);
     string debtorname = membersManagementContextData.clubMember.FullName;
     DirectDebitMandate directDebitMandate = new DirectDebitMandate(internalReferenceNumber, directDebitMandateCreationDate, bankAccount, debtorname);
     DirectDebitPaymentMethod directDebitPaymentMethod = new DirectDebitPaymentMethod(directDebitMandate, null);
     ScenarioContext.Current.Add("DirectDebitpaymentMethod", directDebitPaymentMethod);
     Invoice invoice = (Invoice)ScenarioContext.Current["Invoice"];
     string billID= (string)ScenarioContext.Current["BillID"];
     Bill bill = invoice.Bills[billID];
     bill.AssignPaymentMethod(directDebitPaymentMethod);
 }
 public void WhenABillIsPaidByDirectDebitTheDebtorAccountAndTheDirectDebitTransactionPaymentIdentificartionAreStored()
 {
     Bill bill = new Bill("MMM201300015/001", "An easy to pay bill", 1, DateTime.Now, DateTime.Now.AddYears(10));
     int internalReferenceNumber = 2645;
     BankAccount bankAccount = new BankAccount(new ClientAccountCodeCCC("12345678061234567890"));
     DateTime directDebitMandateCreationDate = new DateTime(2013, 11, 11);
     DirectDebitMandate directDebitMandate = new DirectDebitMandate(internalReferenceNumber, directDebitMandateCreationDate, bankAccount, "NoName");
     string directDebitTransactionPaymentIdentification = "201311110000123456";
     DirectDebitPaymentMethod directDebitTransfermethod = new DirectDebitPaymentMethod(directDebitMandate, directDebitTransactionPaymentIdentification);
     DateTime paymentDate = new DateTime(2013, 11, 11);
     Payment payment = new Payment(bill.Amount, paymentDate, directDebitTransfermethod);
     bill.PayBill(payment);
     Assert.AreEqual("12345678061234567890", ((DirectDebitPaymentMethod)bill.Payment.PaymentMethod).DirectDebitMandate.BankAccount.CCC.CCC);
     Assert.AreEqual("201311110000123456", ((DirectDebitPaymentMethod)bill.Payment.PaymentMethod).DDTXPaymentIdentification);
 }
 public void WhenTheBillIsPaidByDirectDebit()
 {
     Invoice invoice = (Invoice)ScenarioContext.Current["Invoice"];
     Bill bill = (Bill)ScenarioContext.Current["Bill"];
     int internalReferenceNumber = 2645;
     BankAccount bankAccount = new BankAccount(new ClientAccountCodeCCC("12345678061234567890"));
     DateTime directDebitMandateCreationDate = new DateTime(2013, 11, 11);
     string debtorname = membersManagementContextData.clubMember.FullName;
     DirectDebitMandate directDebitMandate = new DirectDebitMandate(internalReferenceNumber, directDebitMandateCreationDate, bankAccount, debtorname);
     string directDebitTransactionPaymentIdentification = "201311110000123456";
     DirectDebitPaymentMethod directDebitPaymentMethod = new DirectDebitPaymentMethod(directDebitMandate, directDebitTransactionPaymentIdentification);
     DateTime paymentDate = new DateTime(2013, 11, 11);
     Payment payment = new Payment(bill.Amount, paymentDate, directDebitPaymentMethod);
     billsManager.PayBill(invoice, bill, payment);
 }
 public void GivenAReferenceNumberADirectDebitMandateIsCorrectlyCreated()
 {
     int internalReferenceNumber = 2645;
     BankAccount bankAccount = new BankAccount(new ClientAccountCodeCCC("12345678061234567890"));
     DateTime directDebitMandateCreationDate = new DateTime(2013, 11, 11);
     DirectDebitMandate directDebitMandate = new DirectDebitMandate(internalReferenceNumber, directDebitMandateCreationDate, bankAccount, "NoName");
     Assert.AreEqual(DirectDebitMandate.DirectDebitmandateStatus.Active, directDebitMandate.Status);
     Assert.AreEqual(internalReferenceNumber, directDebitMandate.InternalReferenceNumber);
     Assert.AreEqual(directDebitMandateCreationDate, directDebitMandate.DirectDebitMandateCreationDate);
     Assert.AreEqual(bankAccount, directDebitMandate.BankAccount);
     Assert.AreEqual(directDebitMandateCreationDate, directDebitMandate.BankAccountActivationDate);
 }