Пример #1
0
        public List<SavingEvent> Withdraw(ISavingsContract pSaving, DateTime pDate, OCurrency pWithdrawAmount,
                                          string pDescription, User pUser, Teller teller, SqlTransaction sqlTransaction, PaymentMethod paymentMethod)
        {
            ValidateWithdrawal(pWithdrawAmount, pSaving, pDate, pDescription, pUser, teller, paymentMethod);

            List<SavingEvent> events = pSaving.Withdraw(pWithdrawAmount, pDate, pDescription, pUser, false, teller, paymentMethod);
            foreach (SavingEvent savingEvent in events)
            {
                _ePS.FireEvent(savingEvent, pSaving, sqlTransaction);
            }

            // Charge overdraft fees if the balance is negative
            if (pSaving is SavingBookContract)
            {
                if (pSaving.GetBalance() < 0 && !((SavingBookContract)pSaving).InOverdraft)
                {
                    SavingEvent overdraftFeeEvent = pSaving.ChargeOverdraftFee(pDate, pUser);
                    _ePS.FireEvent(overdraftFeeEvent, pSaving, sqlTransaction);

                    ((SavingBookContract)pSaving).InOverdraft = true;
                    UpdateOverdraftStatus(pSaving.Id, true);
                }
            }

            return events;
        }
Пример #2
0
        /// <summary>
        /// Checks DepositAmount and balance simulation
        /// </summary>
        /// <param name="pSaving"></param>
        /// <param name="pDate"></param>
        /// <param name="pWithdrawAmount"></param>
        /// <param name="pDescription"></param>
        /// <param name="pUser"></param>
        /// <returns></returns>
        public List<SavingEvent> Withdraw(ISavingsContract pSaving, DateTime pDate, OCurrency pWithdrawAmount, string pDescription, User pUser, Teller teller)
        {
            ValidateWithdrawal(pWithdrawAmount, pSaving, pDate, pDescription, pUser, teller);

            List<SavingEvent> events = pSaving.Withdraw(pWithdrawAmount, pDate, pDescription, pUser, false, teller);
            using (SqlConnection conn = _savingManager.GetConnection())
            using (SqlTransaction sqlTransaction = conn.BeginTransaction())
            {
                try
                {
                    foreach (SavingEvent savingEvent in events)
                    {
                        _ePS.FireEvent(savingEvent, pSaving, sqlTransaction);
                    }

                    // Charge overdraft fees if the balance is negative
                    if (pSaving is SavingBookContract)
                    {
                        if (pSaving.GetBalance() < 0 && !((SavingBookContract) pSaving).InOverdraft)
                        {
                            SavingEvent overdraftFeeEvent = pSaving.ChargeOverdraftFee(pDate, pUser);
                            _ePS.FireEvent(overdraftFeeEvent, pSaving, sqlTransaction);

                            ((SavingBookContract) pSaving).InOverdraft = true;
                            UpdateOverdraftStatus(pSaving.Id, true);
                        }
                    }

                    sqlTransaction.Commit();
                    return events;
                }
                catch (Exception)
                {
                    sqlTransaction.Rollback();
                    throw;
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Checks DepositAmount and balance simulation
        /// </summary>
        /// <param name="pSaving"></param>
        /// <param name="pDate"></param>
        /// <param name="pWithdrawAmount"></param>
        /// <param name="pDescription"></param>
        /// <param name="pUser"></param>
        /// <returns></returns>
        public List<SavingEvent> Withdraw(ISavingsContract pSaving, DateTime pDate, OCurrency pWithdrawAmount, string pDescription, User pUser, Teller teller, PaymentMethod paymentMethod)
        {
            ValidateWithdrawal(pWithdrawAmount, pSaving, pDate, pDescription, pUser, teller, paymentMethod);
            if (pSaving.Client == null)
                pSaving.Client =
                    ServicesProvider.GetInstance().GetClientServices().FindTiersBySavingsId(pSaving.Id);
            List<SavingEvent> events = pSaving.Withdraw(pWithdrawAmount, pDate, pDescription, pUser, false, teller, paymentMethod);
            using (SqlConnection conn = _savingManager.GetConnection())
            using (SqlTransaction sqlTransaction = conn.BeginTransaction())
            {
                try
                {
                    foreach (SavingEvent savingEvent in events)
                    {
                        _ePS.FireEvent(savingEvent, pSaving, sqlTransaction);
                        ServicesProvider.GetInstance()
                            .GetContractServices()
                            .CallInterceptor(new Dictionary<string, object>
                            {
                                {"Saving", pSaving},
                                {"Event", new SavingWithdrawEvent
                                {
                                    Id = savingEvent.Id,
                                    Code = savingEvent.Code,
                                    Amount = savingEvent.Amount,
                                    Description = savingEvent.Description,
                                    PaymentsMethod = paymentMethod
                                   }},
                                {"SqlTransaction", sqlTransaction}
                            });
                    }

                    // Charge overdraft fees if the balance is negative
                    if (pSaving is SavingBookContract)
                    {
                        if (pSaving.GetBalance() < 0 && !((SavingBookContract)pSaving).InOverdraft)
                        {
                            SavingEvent overdraftFeeEvent = pSaving.ChargeOverdraftFee(pDate, pUser);
                            _ePS.FireEvent(overdraftFeeEvent, pSaving, sqlTransaction);

                            ((SavingBookContract)pSaving).InOverdraft = true;
                            UpdateOverdraftStatus(pSaving.Id, true);
                        }
                    }

                    sqlTransaction.Commit();
                    return events;
                }
                catch (Exception)
                {
                    sqlTransaction.Rollback();
                    throw;
                }
            }
        }