Пример #1
0
        /// <summary>
        /// Apply business method.
        /// </summary>
        /// <param name="leave">A leave value.</param>
        /// <returns>Returns a Leave object.</returns>
        public Leave Apply(Leave leave)
        {
            leave.Status        = LeaveStatuses.Pending;
            leave.DateSubmitted = DateTime.Now;
            leave.IsCompleted   = false;

            LeaveStatusLog log = CreateLog(leave);

            // Data access component declarations.
            var leaveDAC          = new LeaveDAC();
            var leaveStatusLogDAC = new LeaveStatusLogDAC();

            Validations.ValidateLeaveDates(leave);

            // Check for overlapping leaves.
            if (leaveDAC.IsOverlap(leave))
            {
                throw new ApplicationException("Date range is overlapping with another leave.");
            }

            using (TransactionScope ts =
                       new TransactionScope(TransactionScopeOption.Required))
            {
                // Step 1 - Calling Create on LeaveDAC.
                leaveDAC.Create(leave);

                // Step 2 - Calling Create on LeaveStatusLogDAC.
                log.LeaveID = leave.LeaveID;
                leaveStatusLogDAC.Create(log);

                ts.Complete();
            }

            return(leave);
        }
Пример #2
0
        /// <summary>
        /// GetLeaveById business method.
        /// </summary>
        /// <param name="leaveID">A leaveID value.</param>
        /// <returns>Returns a Leave object.</returns>
        public Leave GetLeaveById(long leaveID)
        {
            Leave result = default(Leave);

            // Data access component declarations.
            var leaveDAC = new LeaveDAC();

            // Step 1 - Calling SelectById on LeaveDAC.
            result = leaveDAC.SelectById(leaveID);
            return(result);
        }
Пример #3
0
        /// <summary>
        /// Apply business method.
        /// </summary>
        /// <param name="leave">A leave value.</param>
        /// <returns>Returns a Leave object.</returns>
        public Leave Apply(Leave leave)
        {
            leave.Status        = LeaveStatuses.Pending;
            leave.DateSubmitted = DateTime.Now;
            leave.IsCompleted   = false;

            LeaveStatusLog log = CreateLog(leave);

            // Data access component declarations.
            var leaveDAC          = new LeaveDAC();
            var leaveStatusLogDAC = new LeaveStatusLogDAC();

            // Activate Data Annotation validation.
            var context          = new ValidationContext(leave);
            var validationErrors = new List <ValidationResult>();

            Validator.TryValidateObject(leave, context, validationErrors, true);

            if (validationErrors.Count > 0)
            {
                throw new ApplicationException(validationErrors[0].ErrorMessage);
            }

            // Check for overlapping leaves.
            if (leaveDAC.IsOverlap(leave))
            {
                throw new ApplicationException("Date range is overlapping with another leave.");
            }

            using (TransactionScope ts =
                       new TransactionScope(TransactionScopeOption.Required))
            {
                // Step 1 - Calling Create on LeaveDAC.
                leaveDAC.Create(leave);

                // Step 2 - Calling Create on LeaveStatusLogDAC.
                log.LeaveID = leave.LeaveID;
                leaveStatusLogDAC.Create(log);

                ts.Complete();
            }

            return(leave);
        }
Пример #4
0
        private void UpdateStatus(Leave leave)
        {
            LeaveStatusLog log = CreateLog(leave);

            // Data access component declarations.
            var leaveDAC          = new LeaveDAC();
            var leaveStatusLogDAC = new LeaveStatusLogDAC();

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

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

                ts.Complete();
            }
        }
Пример #5
0
        /// <summary>
        /// ListLeavesByEmployee business method.
        /// </summary>
        /// <param name="startRowIndex">A startRowIndex value.</param>
        /// <param name="maximumRows">A maximumRows value.</param>
        /// <param name="sortExpression">A sortExpression value.</param>
        /// <param name="employee">A employee value.</param>
        /// <param name="category">A category value.</param>
        /// <param name="status">A status value.</param>
        /// <returns>Returns a List<Leave> object.</returns>
        public List <Leave> ListLeavesByEmployee(int maximumRows, int startRowIndex,
                                                 string sortExpression, string employee, LeaveCategories?category, LeaveStatuses?status,
                                                 out int totalRowCount)
        {
            List <Leave> result = default(List <Leave>);

            if (string.IsNullOrWhiteSpace(sortExpression))
            {
                sortExpression = "DateSubmitted DESC";
            }

            // Data access component declarations.
            var leaveDAC = new LeaveDAC();

            // Step 1 - Calling Select on LeaveDAC.
            result = leaveDAC.Select(maximumRows, startRowIndex, sortExpression,
                                     employee, category, status);

            // Step 2 - Get count.
            totalRowCount = leaveDAC.Count(employee, category, status);

            return(result);
        }