예제 #1
0
        private MonetaryCycle _CreateCycle(DateTime date)
        {
            if (date < this.SourceAccount.StartDate)
            {
                throw new Exception("Cannot add a cycle before account generation.");
            }

            MonetaryCycle _cycle = null;

            if (this.MonetaryCycles.Count == 0)
            {
                // Opening the account or another initializing event.
                _cycle = new MonetaryCycle(date);
            }
            else
            {
                // if the cycle is already registered.
                _cycle = this._FindCycle(date);

                // Register new cycle.

                if (_cycle == null)
                {
                    decimal _previousClosingBalance = this.MonetaryCycles.Last().ClosingBalance;
                    _cycle = new MonetaryCycle(date, _previousClosingBalance);
                }
            }

            return(_cycle);
        }
예제 #2
0
        // Cycles are updated when a balance query is set or a transaction is set.

        public void UpdateCycle(ITransaction transaction)
        {
            MonetaryCycle _cycle = this._FindCycle(transaction.Date);

            if (_cycle == null)
            {
            }
        }
예제 #3
0
        protected MonetaryCycle _FindCycle(DateTime date)
        {
            ReaderWriterLockSlim _slimLock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);

            _slimLock.EnterReadLock();
            MonetaryCycle _cycle = this.MonetaryCycles.FirstOrDefault(x => x.Period.StartDateTime.Date == date.Date);

            if (_slimLock.IsReadLockHeld)
            {
                _slimLock.ExitReadLock();
            }
            return(_cycle);
        }
예제 #4
0
        protected MonetaryCycle _CreateCycle(DateTime date)
        {
            ReaderWriterLockSlim _slimLock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);

            _slimLock.TryEnterWriteLock(1000);
            try {
                if (date.Date < this.StartDate.Date)
                {
                    throw new Exception("Cannot add a cycle before account generation.");
                }

                MonetaryCycle _cycle = null;

                if (this.MonetaryCycles.Count == 0)
                {
                    // Opening the account or another initializing event.
                    _cycle = new MonetaryCycle(date.Date);
                }
                else
                {
                    // if the cycle is already registered.
                    _cycle = this._FindCycle(date);

                    // Register new cycle.

                    if (_cycle == null)
                    {
                        decimal _previousClosingBalance = this.MonetaryCycles.Last().ClosingBalance;
                        _cycle = new MonetaryCycle(date, _previousClosingBalance);
                    }
                }

                this.MonetaryCycles.Add(_cycle);
                //this.AvailableBalance = _cycle.AvailableBalance;
                return(_cycle);
            }
            catch { throw; }
            finally { if (_slimLock.IsWriteLockHeld)
                      {
                          _slimLock.ExitWriteLock();
                      }
            }
        }