/// <summary>
        /// Apply business method. 
        /// </summary>
        /// <param name="Account">A Account value.</param>
        /// <returns>Returns a Account object.</returns>
        public Account Apply(Account Account)
        {
            Account.Status = AccountStatuses.Pending;
            Account.DateSubmitted = DateTime.Now;
            Account.IsCompleted = false;

            AccountStatusLog log = CreateLog(Account);

            // Data access component declarations.
            var AccountDAC = new AccountDAL();
            var AccountStatusLogDAC = new AccountStatusLogDAL();

            // Check for overlapping Accounts.
            if (AccountDAC.IsOverlap(Account))
            {
                throw new ApplicationException("Date range is overlapping with another Account.");
            }

            using (TransactionScope ts =
                new TransactionScope(TransactionScopeOption.Required))
            {
                // Step 1 - Calling Create on AccountDAC.
                AccountDAC.Create(Account);

                // Step 2 - Calling Create on AccountStatusLogDAC.
                log.AccountID = Account.AccountID;
                AccountStatusLogDAC.Create(log);

                ts.Complete();
            }

            return Account;
        }
        /// <summary>
        /// Approve business method. 
        /// </summary>
        /// <param name="Account">A Account value.</param>
        /// <returns>Returns a Account object.</returns>
        public Account Approve(Account Account)
        {
            Account.Status = AccountStatuses.Approved;
            Account.IsCompleted = true;

            UpdateStatus(Account);

            return Account;
        }
        /// <summary>
        /// Cancel business method. 
        /// </summary>
        /// <param name="Account">A Account value.</param>
        /// <returns>Returns a Account object.</returns>
        public Account Cancel(Account Account)
        {
            Account.Status = AccountStatuses.Cancelled;
            Account.IsCompleted = true;

            UpdateStatus(Account);

            return Account;
        }
 private static AccountStatusLog CreateLog(Account Account)
 {
     AccountStatusLog log = new AccountStatusLog();
     log.Date = DateTime.Now;
     log.AccountID = Account.AccountID;
     log.Status = Account.Status;
     return log;
 }
        /// <summary>
        /// Reject business method. 
        /// </summary>
        /// <param name="Account">A Account value.</param>
        /// <returns>Returns a Account object.</returns>
        public Account Reject(Account Account)
        {
            Account.Status = AccountStatuses.Rejected;
            Account.IsCompleted = true;

            UpdateStatus(Account);

            return Account;
        }
        private void UpdateStatus(Account Account)
        {
            AccountStatusLog log = CreateLog(Account);

            // Data access component declarations.
            var AccountDAC = new AccountDAL();
            var AccountStatusLogDAC = new AccountStatusLogDAL();

            using (TransactionScope ts =
                new TransactionScope(TransactionScopeOption.Required))
            {
                // Step 1 - Calling UpdateById on AccountDAC.
                AccountDAC.UpdateStatus(Account);

                // Step 2 - Calling Create on AccountStatusLogDAC.
                AccountStatusLogDAC.Create(log);

                ts.Complete();
            }
        }