public override List <SavingEvent> Close(DateTime pDate, User pUser, string pDescription, bool pIsDesactivateFees, Teller teller, bool isFromClosure) { int?tellerId = null; if (teller != null && teller.Id != 0) { tellerId = teller.Id; } List <SavingEvent> listEvents = new List <SavingEvent>(); if (!isFromClosure) { listEvents = Closure(pDate, pUser); } SavingInterestsPostingEvent postingEvent = PostPayableInterests(pDate, pUser); if (postingEvent != null) { listEvents.Add(postingEvent); } OCurrency amountToPost = listEvents.Where(item => item is SavingInterestsPostingEvent).Sum(item => item.Amount.Value); SavingCloseEvent closeEvent = new SavingCloseEvent { Amount = amountToPost, Date = pDate, Description = pDescription, User = pUser, Cancelable = false, Fee = 0m, TellerId = tellerId, ProductType = typeof(SavingsBookProduct), }; Events.Add(closeEvent); if (!pIsDesactivateFees) { closeEvent.Fee = CloseFees; } listEvents.Clear(); listEvents.Add(closeEvent); Status = OSavingsStatus.Closed; ClosedDate = pDate; foreach (SavingEvent e in listEvents) { e.Target = this; } return(listEvents); }
public DateTime GetLastPostingDate() { SavingInterestsPostingEvent lastPosting = (SavingInterestsPostingEvent)Events.OrderByDescending( item => item.Date).FirstOrDefault(item => item is SavingInterestsPostingEvent && !item.Deleted); if (lastPosting == null) { if (Product is SavingsBookProduct) { if (((SavingsBookProduct)Product).InterestFrequency == OSavingInterestFrequency.EndOfDay || ((SavingBookContract)this).UseTermDeposit) { return(CreationDate.AddDays(-1)); } return(CreationDate); } return(CreationDate); } return(lastPosting.Date); }
protected SavingInterestsPostingEvent PostPayableInterests(DateTime pDate, User pUser) { OCurrency interestsToPost = 0; if (interestsToPost > 0) { SavingInterestsPostingEvent postingEvent = new SavingInterestsPostingEvent() { Date = pDate, Amount = interestsToPost, User = pUser, Cancelable = true, Description = string.Format("Posting interests for period : {0:d} to {1:d}", GetLastPostingDate(), pDate), ProductType = Product.GetType() }; Events.Add(postingEvent); return(postingEvent); } return(null); }
public void Get_Code() { SavingInitialDepositEvent savingInitialDeposit = new SavingInitialDepositEvent(); Assert.AreEqual("SVIE", savingInitialDeposit.Code); SavingDepositEvent savingDeposit = new SavingDepositEvent(); Assert.AreEqual("SVDE", savingDeposit.Code); SavingWithdrawEvent savingWithDraw = new SavingWithdrawEvent(); Assert.AreEqual("SVWE", savingWithDraw.Code); SavingInterestsAccrualEvent savingAccrualInterest = new SavingInterestsAccrualEvent(); Assert.AreEqual("SIAE", savingAccrualInterest.Code); SavingInterestsPostingEvent savingPostingInterest = new SavingInterestsPostingEvent(); Assert.AreEqual("SIPE", savingPostingInterest.Code); SavingCreditTransferEvent savingCreditTransfer = new SavingCreditTransferEvent(); Assert.AreEqual("SCTE", savingCreditTransfer.Code); SavingDebitTransferEvent savingDebitTransfer = new SavingDebitTransferEvent(); Assert.AreEqual("SDTE", savingDebitTransfer.Code); }
private static SavingEvent GetSavingsEvent(string code) { SavingEvent e; switch (code) { case OSavingEvents.Deposit: e = new SavingDepositEvent(); break; case OSavingEvents.Withdraw: e = new SavingWithdrawEvent(); break; case OSavingEvents.Accrual: e = new SavingInterestsAccrualEvent(); break; case OSavingEvents.Posting: e = new SavingInterestsPostingEvent(); break; case OSavingEvents.InitialDeposit: e = new SavingInitialDepositEvent(); break; case OSavingEvents.CreditTransfer: e = new SavingCreditTransferEvent(); break; case OSavingEvents.DebitTransfer: e = new SavingDebitTransferEvent(); break; case OSavingEvents.ManagementFee: e = new SavingManagementFeeEvent(); break; case OSavingEvents.SavingClosure: e = new SavingClosureEvent(); break; case OSavingEvents.Close: e = new SavingCloseEvent(); break; case OSavingEvents.OverdraftFees: e = new SavingOverdraftFeeEvent(); break; case OSavingEvents.Agio: e = new SavingAgioEvent(); break; case OSavingEvents.PendingDeposit: e = new SavingPendingDepositEvent(); break; case OSavingEvents.Reopen: e = new SavingReopenEvent(); break; case OSavingEvents.PendingDepositRefused: e = new SavingPendingDepositRefusedEvent(); break; case OSavingEvents.SpecialOperationCredit: e = new SavingCreditOperationEvent(); break; case OSavingEvents.SpecialOperationDebit: e = new SavingDebitOperationEvent(); break; case OSavingEvents.InterBranchCreditTransfer: e = new SavingCreditInterBranchTransferEvent(); break; case OSavingEvents.InterBranchDebitTransfer: e = new SavingDebitInterBranchTransferEvent(); break; case OSavingEvents.LoanDisbursement: e = new SavingLoanDisbursementEvent(); break; case OSavingEvents.SavingLoanRepayment: e = new LoanRepaymentFromSavingEvent(); break; case OSavingEvents.BlockCompulsarySavings: e = new SavingBlockCompulsarySavingsEvent(); break; case OSavingEvents.UnblockCompulsorySavings: e = new SavingUnblockCompulsorySavingsEvent(); break; default: Debug.Fail("Failed to create saving event object"); throw new Exception(); } return(e); }