コード例 #1
0
ファイル: SavingBookContract.cs プロジェクト: aelhadi/opencbs
 private void CloseAndTransfer(ISavingsContract from, ISavingsContract to, DateTime date, User pUser,
     OCurrency amount, bool pIsDesactivateFees, Teller teller)
 {
     from.Transfer(to, amount, 0, date, "Closing transfer");
     from.Close(date, pUser, "Close savings contract", pIsDesactivateFees, teller, true);
 }
コード例 #2
0
ファイル: SavingServices.cs プロジェクト: TalasZh/opencbs
        public List<SavingEvent> CloseAndTransfer(ISavingsContract from, ISavingsContract to, DateTime date, User pUser,
            OCurrency amount, bool pIsDesactivateFees, Teller teller)
        {
            if (to.Status == OSavingsStatus.Closed)
                throw new OpenCbsSavingException(OpenCbsSavingExceptionEnum.CreditTransferAccountInvalid);

            if (from.Id == to.Id)
                throw new OpenCbsSavingException(OpenCbsSavingExceptionEnum.SavingsContractForTransferIdenticals);

            if (from.Product.Currency.Id != to.Product.Currency.Id)
                throw new OpenCbsSavingException(OpenCbsSavingExceptionEnum.SavingsContractForTransferNotSameCurrncy);

            OCurrency balance = SimulateCloseAccount(from, date, pUser, pIsDesactivateFees, teller).GetBalance(date);
            if (from is SavingBookContract && !pIsDesactivateFees) balance -= ((SavingBookContract)from).CloseFees;

            if (balance != amount)
                throw new OpenCbsSavingException(OpenCbsSavingExceptionEnum.TransferAmountIsInvalid);

            List<SavingEvent> events = new List<SavingEvent>();
            events.AddRange(from.Transfer(to, amount, 0, date, "Closing transfer"));
            events.AddRange(from.Close(date, pUser, "Close savings contract", pIsDesactivateFees, teller, false));
            foreach (SavingEvent e in events)
                _ePS.FireEvent(e);

            if (from.ClosedDate != null)
                _savingManager.UpdateStatus(from.Id, from.Status, from.ClosedDate.Value);

            return events;
        }
コード例 #3
0
ファイル: SavingServices.cs プロジェクト: TalasZh/opencbs
        public List<SavingEvent> CloseAndWithdraw(ISavingsContract saving, DateTime date, User user, OCurrency withdrawAmount, 
                                                 bool isDesactivateFees, Teller teller)
        {
            OCurrency balance = SimulateCloseAccount(saving, date, user, isDesactivateFees, teller).GetBalance(date);

            if (balance != withdrawAmount)
            {
                throw new OpenCbsSavingException(OpenCbsSavingExceptionEnum.WithdrawAmountIsInvalid);
            }

            List<SavingEvent> events = saving.Withdraw(withdrawAmount, date, "Withdraw savings", user, true,
                                                        Teller.CurrentTeller);
            events.AddRange(saving.Close(date, user, "Close savings contract", isDesactivateFees, teller, false));
            using (SqlConnection conn = _savingManager.GetConnection())
            using (SqlTransaction sqlTransaction = conn.BeginTransaction())
            {
                try
                {
                    foreach (SavingEvent savingEvent in events)
                        _ePS.FireEvent(savingEvent, saving, sqlTransaction);

                    if (saving.ClosedDate != null)
                        _savingManager.UpdateStatus(saving.Id, saving.Status, saving.ClosedDate.Value);

                    sqlTransaction.Commit();
                    return events;
                }
                catch (Exception)
                {
                    sqlTransaction.Rollback();
                    throw;
                }
            }
        }
コード例 #4
0
 private void CloseAndTransfer(ISavingsContract from, ISavingsContract to, DateTime date, User pUser,
                               OCurrency amount, bool pIsDesactivateFees, Teller teller)
 {
     from.Transfer(to, amount, 0, date, "Closing transfer");
     from.Close(date, pUser, "Close savings contract", pIsDesactivateFees, teller, true);
 }