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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #5
0
        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);
        }