public void CalculateInterest_OneWeek() { SavingsBookProduct product = new SavingsBookProduct { Id = 1, InterestBase = OSavingInterestBase.Weekly, InterestFrequency = OSavingInterestFrequency.EndOfYear, CalculAmountBase = OSavingCalculAmountBase.MinimalAmount }; SavingBookContract saving = new SavingBookContract(ApplicationSettings.GetInstance(""), new User(), new DateTime(2009, 01, 05), null) { Product = product, InterestRate = 0.1 }; saving.FirstDeposit(1000, new DateTime(2009, 01, 01), null, new User(), Teller.CurrentTeller); List <SavingInterestsAccrualEvent> list = new List <SavingInterestsAccrualEvent>(); list = saving.CalculateInterest(new DateTime(2009, 01, 12), new User { Id = 1 }); Assert.AreEqual(list.Count, 1); Assert.AreEqual(list[0].Amount, 100); }
public void AddSavingBook() { SavingBookContract saving = new SavingBookContract(ApplicationSettings.GetInstance(""), new User() { Id = 1 }, new DateTime(2009, 01, 01), _savingsBookProduct, null) { Code = "S/CR/2009/SAVIN-1/BAR-1", Status = OSavingsStatus.Active, InterestRate = 0.01, FlatWithdrawFees = 3, FlatTransferFees = 3 }; saving.InitialAmount = 1000; saving.EntryFees = 10; saving.FirstDeposit(1000, new DateTime(2009, 01, 01), null, new User(), Teller.CurrentTeller); User user = new User { Id = 1 }; saving.Events[0].User = user; saving.Events[0].Id = 400; saving.SavingsOfficer = user; saving.Id = _savingManager.Add(saving, new Person { Id = 6 }); _savingEventManager.Add(saving.Events[0], saving.Id); SavingBookContract retrievedSaving = (SavingBookContract)_savingManager.Select(saving.Id); _compareSavings(saving, retrievedSaving); }
public void Charge_overdaft_fees() { SavingBookContract saving = new SavingBookContract(ApplicationSettings.GetInstance(""), new User(), new DateTime(2009, 01, 01), null) { Product = _bookProduct, AgioFees = 0.01, ChequeDepositFees = 100, DepositFees = 50, CloseFees = 100, ReopenFees = 100, OverdraftFees = 100 }; saving.FirstDeposit(1000, new DateTime(2009, 01, 01), null, new User(), Teller.CurrentTeller); Currency currency = new Currency() { UseCents = true, Code = "SOM", Id = 1, IsPivot = true, Name = "SOM" }; Assert.AreEqual(1000, saving.GetBalance().Value); //Below, we explicitly implement withdraw method from <Saving services>.<Withdraw>, since withdraw method of 'saving' object doesn't implement // overdraft fee by default List <SavingEvent> withdrawEvents = saving.Withdraw(1100, new DateTime(2009, 1, 2), "withdraw", new User(), false, null); if (saving.GetBalance() < 0 && !saving.InOverdraft) { saving.ChargeOverdraftFee(new DateTime(2009, 1, 2), new User()); } Assert.AreEqual(-200, saving.GetBalance().Value); }
public void CalculateInterest_TwoOperation_In_OneDay() { SavingsBookProduct product = new SavingsBookProduct { Id = 1, InterestBase = OSavingInterestBase.Weekly, InterestFrequency = OSavingInterestFrequency.EndOfYear, CalculAmountBase = OSavingCalculAmountBase.MinimalAmount, WithdrawFeesType = OSavingsFeesType.Flat, FlatWithdrawFees = 0 }; SavingBookContract saving = new SavingBookContract(ApplicationSettings.GetInstance(""), new User(), new DateTime(2009, 01, 01), null) { Product = product, InterestRate = 0.1, FlatWithdrawFees = 0 }; saving.FirstDeposit(1000, new DateTime(2009, 01, 01), null, new User(), Teller.CurrentTeller); saving.Withdraw(250, new DateTime(2009, 01, 02), "retrait", new User(), false, null); // saving.Deposit(100, new DateTime(2009, 02, 01), "depot", new User(), true, false, OPaymentMethods.Cash, null, null); saving.Deposit(100, new DateTime(2009, 02, 01), "depot", new User(), true, false, OSavingsMethods.Cash, null, null); List <SavingInterestsAccrualEvent> list = new List <SavingInterestsAccrualEvent>(); list = saving.CalculateInterest(new DateTime(2009, 01, 08), new User { Id = 1 }); Assert.AreEqual(list.Count, 1); Assert.AreEqual(list[0].Amount, 75); }
public void TestSavingIsValid_InitialAmountTooBig() { Assert.Ignore(); SavingBookContract saving = new SavingBookContract(ApplicationSettings.GetInstance(""), new User(), TimeProvider.Today, null) { InterestRate = 0.13, Product = _savingsProduct }; _savingServices = new SavingServices(null, null, new User { Id = 6 }); try { Client client = new Person { Id = 1 }; _savingServices.SaveContract(saving, client); saving.FirstDeposit(100000000, new DateTime(2009, 01, 01), null, new User(), Teller.CurrentTeller); Assert.Fail("Saving Contract shouldn't pass validation test before save (initial amount > product.max)."); } catch (OpenCbsSavingException exception) { Assert.AreEqual((int)OpenCbsSavingExceptionEnum.EntryFeesIsInvalid, (int)exception.Code); } }
public void TestSaving_When_InitialAmount_IsNull() { Assert.Ignore(); SavingBookContract saving = new SavingBookContract(ApplicationSettings.GetInstance(""), new User()) { CreationDate = TimeProvider.Today, InterestRate = 0.13, Product = _savingsProduct }; _savingServices = new SavingServices(null, null, new User { Id = 6 }); try { _savingServices.SaveContract(saving, new Person { Id = 6 }); saving.FirstDeposit(1000, new DateTime(2009, 01, 01), null, new User(), Teller.CurrentTeller); Assert.Fail("Saving Contract shouldn't pass validation test before save (Initial Amount is Null)."); } catch (OpenCbsSavingException exception) { Assert.AreEqual(exception.Code, OpenCbsSavingExceptionEnum.EntryFeesIsInvalid); } }
public void CalculateInterest_OneMonth_Withdraw() { SavingsBookProduct product = new SavingsBookProduct { Id = 1, InterestBase = OSavingInterestBase.Monthly, InterestFrequency = OSavingInterestFrequency.EndOfYear, CalculAmountBase = OSavingCalculAmountBase.MinimalAmount, WithdrawFeesType = OSavingsFeesType.Flat, FlatWithdrawFees = 0 }; SavingBookContract saving = new SavingBookContract(ApplicationSettings.GetInstance(""), new User(), new DateTime(2009, 01, 01), null) { Product = product, InterestRate = 0.1, FlatWithdrawFees = 0 }; saving.FirstDeposit(1000, new DateTime(2009, 01, 01), null, new User(), Teller.CurrentTeller); saving.Withdraw(100, new DateTime(2009, 01, 15), "depot", new User(), false, null); List <SavingInterestsAccrualEvent> list = new List <SavingInterestsAccrualEvent>(); list = saving.CalculateInterest(new DateTime(2009, 02, 01), new User { Id = 1 }); Assert.AreEqual(list.Count, 1); Assert.AreEqual(list[0].Amount, 90); }
public void SeveralMgmtFeeEvents() { _saving = new SavingBookContract(ApplicationSettings.GetInstance(""), new User(), new DateTime(2007, 08, 11), _bookProduct, null); _saving.AgioFees = 0.1; _saving.ManagementFees = 50; _saving.FirstDeposit(10000, new DateTime(2007, 08, 01), null, new User(), Teller.CurrentTeller); _saving.Closure(new DateTime(2007, 12, 31), new User()); List <SavingEvent> events = _saving.Events.FindAll(item => item is SavingManagementFeeEvent); Assert.AreEqual(events.Count, 4); Assert.AreEqual(9800, _saving.GetBalance().Value); }
public void PostingInterests_ThreePosting() { // Assert.Ignore(); SavingsBookProduct product = new SavingsBookProduct { Id = 1, InterestBase = OSavingInterestBase.Daily, InterestFrequency = OSavingInterestFrequency.EndOfWeek, Periodicity = new InstallmentType("Weekly", 7, 0) }; User user = new User() { Id = 1 }; DateTime creationDate = new DateTime(2009, 01, 01); DateTime postingDate = new DateTime(2009, 01, 26); SavingBookContract saving = new SavingBookContract( ApplicationSettings.GetInstance(""), user, creationDate, null) { Product = product, InterestRate = 0.1 }; saving.FirstDeposit(1000, saving.CreationDate, 0, user, new Teller()); List <SavingInterestsAccrualEvent> accrualEvents = saving.CalculateInterest(postingDate, user); foreach (var accrualEvent in accrualEvents) { saving.Events.Add(accrualEvent); } List <SavingInterestsPostingEvent> list = new List <SavingInterestsPostingEvent>(); List <SavingInterestsPostingEvent> postingEvents = new List <SavingInterestsPostingEvent>(); saving.NextMaturity = saving.GetNextMaturity(saving.CreationDate, saving.Periodicity); while (saving.NextMaturity <= postingDate) { list = saving.PostingInterests(saving.NextMaturity.Value, new User { Id = 1 }); postingEvents.AddRange(list); foreach (var postingEvent in list) { saving.Events.Add(postingEvent); } saving.NextMaturity = saving.GetNextMaturity(saving.NextMaturity.Value, saving.Periodicity); } Assert.AreEqual(3, postingEvents.Count); }
public void Test_SimulateCloseAccount() { Assert.Ignore(); _savingServices = new SavingServices(null, null, new User { Id = 6 }); SavingBookContract saving = new SavingBookContract(ApplicationSettings.GetInstance(""), new User { Id = 6 }, new DateTime(2009, 01, 01), _savingsProduct, null) { InterestRate = 0.15, ManagementFees = 0, AgioFees = 0 }; saving.FirstDeposit(1000, new DateTime(2009, 01, 01), null, new User(), Teller.CurrentTeller); Assert.AreEqual(_savingServices.SimulateCloseAccount(saving, new DateTime(2009, 02, 15), new User(), false, Teller.CurrentTeller).GetBalance(), 5650); }
public void RateWithdrawFees() { SavingsBookProduct product = new SavingsBookProduct() { WithdrawFeesType = OSavingsFeesType.Rate, RateWithdrawFeesMin = 0.01, RateWithdrawFeesMax = 0.05 }; SavingBookContract saving = new SavingBookContract(ApplicationSettings.GetInstance(""), new User(), new DateTime(2009, 01, 01), product, null) { RateWithdrawFees = 0.03 }; saving.FirstDeposit(1000, new DateTime(2009, 01, 01), null, new User(), Teller.CurrentTeller); List <SavingEvent> withdrawEvents = saving.Withdraw(10, new DateTime(2009, 01, 02), "withdraw", new User(), false, null); Assert.AreEqual(1, withdrawEvents.Count); Assert.AreEqual(10, withdrawEvents[0].Amount.Value); Assert.AreEqual(0.3, ((ISavingsFees)withdrawEvents[0]).Fee.Value); Assert.AreEqual(989.7, saving.GetBalance().Value); }
public void CloseSaving() { SavingBookContract saving = new SavingBookContract(ApplicationSettings.GetInstance(""), new User() { Id = 1 }, new DateTime(2009, 01, 01), _savingsBookProduct, null) { Code = "S/CR/2009/SAVIN-1/BAR-1", Status = OSavingsStatus.Active, InterestRate = 0.01, FlatWithdrawFees = 3 }; saving.InitialAmount = 1000; saving.EntryFees = 10; saving.FirstDeposit(1000, new DateTime(2009, 01, 01), null, new User(), Teller.CurrentTeller); User user = new User { Id = 1 }; saving.Events[0].User = user; saving.SavingsOfficer = user; saving.Id = _savingManager.Add(saving, new Person() { Id = 6 }); saving.Status = OSavingsStatus.Closed; saving.ClosedDate = new DateTime(2009, 10, 01); _savingManager.UpdateStatus(saving.Id, saving.Status, saving.ClosedDate.Value); SavingBookContract retrievedSaving = (SavingBookContract)_savingManager.Select(saving.Id); Assert.AreEqual(OSavingsStatus.Closed, retrievedSaving.Status); Assert.AreEqual(new DateTime(2009, 10, 01), retrievedSaving.ClosedDate.Value); }
public void Create_Saving_Book_Account_With_EntryFees() { SavingsBookProduct product = new SavingsBookProduct() { Name = "NewSavingProduct", InitialAmountMin = 1000, InitialAmountMax = 2000, DepositMin = 100, DepositMax = 200, WithdrawingMin = 100, WithdrawingMax = 200, InterestRate = 0.2, BalanceMin = 1000, BalanceMax = 2000, InterestBase = OSavingInterestBase.Monthly, InterestFrequency = OSavingInterestFrequency.EndOfYear, CalculAmountBase = OSavingCalculAmountBase.MinimalAmount, ClientType = OClientTypes.All, EntryFeesMin = 5, EntryFeesMax = 15, Currency = new Currency { Id = 1 } }; SavingBookContract saving = new SavingBookContract(ApplicationSettings.GetInstance(""), new User(), new DateTime(2009, 01, 01), product, null); saving.InitialAmount = 1000; saving.EntryFees = 10; saving.FirstDeposit(1000, new DateTime(2009, 01, 01), 10, new User(), Teller.CurrentTeller); Assert.AreEqual(saving.GetBalance(), 1000); Assert.AreEqual(saving.Events.Count, 1); Assert.AreEqual(saving.InitialAmount, 1000); Assert.AreEqual(saving.EntryFees, 10); }
public void FlatWithdrawFees() { SavingsBookProduct product = new SavingsBookProduct() { WithdrawFeesType = OSavingsFeesType.Flat, FlatWithdrawFeesMin = 1, FlatWithdrawFeesMax = 5 }; SavingBookContract saving = new SavingBookContract(ApplicationSettings.GetInstance(""), new User(), new DateTime(2009, 01, 01), product, null) { FlatWithdrawFees = 2, }; saving.FirstDeposit(1000, new DateTime(2009, 01, 01), null, new User(), Teller.CurrentTeller); List <SavingEvent> withdrawEvents = saving.Withdraw(10, new DateTime(2009, 01, 02), "withdraw", new User(), false, null, new PaymentMethod()); Assert.AreEqual(1, withdrawEvents.Count); Assert.AreEqual(10, withdrawEvents[0].Amount.Value); Assert.AreEqual(2, ((ISavingsFees)withdrawEvents[0]).Fee.Value); Assert.AreEqual(988, saving.GetBalance().Value); }
protected override void SetUp() { base.SetUp(); ChartOfAccounts.SuppressAll(); _savingManager = (SavingManager)container["SavingManager"]; _savingEventManager = (SavingEventManager)container["SavingEventManager"]; _client = new Person { Id = 6 }; _user = new User { Id = 1 }; User.CurrentUser = _user; _product = new SavingsBookProduct { Id = 1, Name = "SavingProduct1", InitialAmountMin = 100, InitialAmountMax = 500, BalanceMin = 0, BalanceMax = 1000, WithdrawingMin = 100, WithdrawingMax = 150, DepositMin = 200, DepositMax = 250, TransferMin = 100, TransferMax = 200, InterestRateMin = 0.2, InterestRateMax = 0.3, InterestBase = OSavingInterestBase.Daily, InterestFrequency = OSavingInterestFrequency.EndOfMonth, Currency = new Currency { Id = 1 }, WithdrawFeesType = OSavingsFeesType.Flat, FlatWithdrawFees = 10, TransferFeesType = OSavingsFeesType.Rate, RateTransferFees = 0.1 }; _saving = new SavingBookContract(ApplicationSettings.GetInstance(""), _user, new DateTime(2009, 01, 01), _product, null) { Code = "S/CR/2009/SAVIN-1/BAR-1", InterestRate = 0.2, FlatWithdrawFees = 10, RateTransferFees = 0.1 }; _saving.FirstDeposit(1000, new DateTime(2009, 01, 01), null, new User(), Teller.CurrentTeller); _savingTarget = _saving = new SavingBookContract(ApplicationSettings.GetInstance(""), _user, new DateTime(2009, 01, 01), _product, null) { Code = "S/CR/2009/SAVIN-1/BAR-2", InterestRate = 0.2, }; _saving.InitialAmount = 1000; _saving.EntryFees = 10; _saving.SavingsOfficer = _user; _saving.NumberOfPeriods = 0; _saving.Id = _savingManager.Add(_saving, _client); _savingTarget.Id = _savingManager.Add(_savingTarget, _client); Branch branch = new Branch { Id = 1, Name = "Default", Code = "Default" }; _saving.Branch = branch; _savingTarget.Branch = branch; }
public void PostingInterests_12Posting() { // Assert.Ignore(); SavingsBookProduct product = new SavingsBookProduct { Id = 1, InterestBase = OSavingInterestBase.Daily, InterestFrequency = OSavingInterestFrequency.EndOfMonth, Periodicity = new InstallmentType("Monthly", 0, 1) }; User user = new User() { Id = 1 }; DateTime creationDate = new DateTime(2009, 01, 01); SavingBookContract saving = new SavingBookContract( ApplicationSettings.GetInstance(""), user, creationDate, null ) { Product = product, InterestRate = 0.1 }; DateTime closureDate = new DateTime(2010, 01, 01); saving.NextMaturity = saving.CreationDate.Date; saving.NumberOfPeriods = 1; saving.FirstDeposit(1000, creationDate, 0, user, new Teller()); saving.NextMaturity = DateCalculationStrategy.GetNextMaturity( saving.CreationDate.Date, saving.Product.Periodicity, saving.NumberOfPeriods); List <SavingInterestsAccrualEvent> interestsAccrualEvents = saving.CalculateInterest(closureDate, new User { Id = 1 }); foreach (var accrualEvent in interestsAccrualEvents) { saving.Events.Add(accrualEvent); } List <SavingInterestsPostingEvent> list = new List <SavingInterestsPostingEvent>(); List <SavingInterestsPostingEvent> postingEvents = new List <SavingInterestsPostingEvent>(); while (saving.NextMaturity.Value <= closureDate) { list = saving.PostingInterests(saving.NextMaturity.Value, new User() { Id = 1 }); postingEvents.AddRange(list); foreach (var postingEvent in list) { saving.Events.Add(postingEvent); } saving.NextMaturity = DateCalculationStrategy.GetNextMaturity(saving.NextMaturity.Value, saving.Periodicity, 1); } list = saving.PostingInterests(new DateTime(2010, 01, 01), new User { Id = 1 }); Assert.AreEqual(12, postingEvents.Count); }