Example #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);
        }
Example #2
0
        private static LeaveStatusLog CreateLog(Leave leave)
        {
            LeaveStatusLog log = new LeaveStatusLog();

            log.Date    = DateTime.Now;
            log.LeaveID = leave.LeaveID;
            log.Status  = leave.Status;
            return(log);
        }
        /// <summary>
        /// Inserts a new row in the LeaveStatusLogs table.
        /// </summary>
        /// <param name="leaveStatusLog">A LeaveStatusLog object.</param>
        /// <returns>An updated LeaveStatusLog object.</returns>
        public LeaveStatusLog Create(LeaveStatusLog leaveStatusLog)
        {
            using (var db = new DbContext(CONNECTION_NAME))
            {
                db.Set <LeaveStatusLog>().Add(leaveStatusLog);
                db.SaveChanges();

                return(leaveStatusLog);
            }
        }
Example #4
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);
        }
Example #5
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();
            }
        }
Example #6
0
        /// <summary>
        /// Inserts a new row in the LeaveStatusLogs table.
        /// </summary>
        /// <param name="leaveStatusLog">A LeaveStatusLog object.</param>
        /// <returns>An updated LeaveStatusLog object.</returns>
        public LeaveStatusLog Create(LeaveStatusLog leaveStatusLog)
        {
            const string SQL_STATEMENT =
                "INSERT INTO dbo.LeaveStatusLogs ([LeaveID], [Status], [Date]) " +
                "VALUES(@LeaveID, @Status, @Date); SELECT SCOPE_IDENTITY();";

            // Connect to database.
            Database db = DatabaseFactory.CreateDatabase(CONNECTION_NAME);

            using (DbCommand cmd = db.GetSqlStringCommand(SQL_STATEMENT))
            {
                // Set parameter values.
                db.AddInParameter(cmd, "@LeaveID", DbType.Int64, leaveStatusLog.LeaveID);
                db.AddInParameter(cmd, "@Status", DbType.Byte, leaveStatusLog.Status);
                db.AddInParameter(cmd, "@Date", DbType.DateTime, leaveStatusLog.Date);

                // Get the primary key value.
                leaveStatusLog.LogID = Convert.ToInt64(db.ExecuteScalar(cmd));
            }

            return(leaveStatusLog);
        }
Example #7
0
        /// <summary>
        /// Conditionally retrieves one or more rows from the LeaveStatusLogs table.
        /// </summary>
        /// <param name="leaveID">A leaveID value.</param>
        /// <returns>A collection of LeaveStatusLog objects.</returns>
        public List <LeaveStatusLog> SelectByLeave(long leaveID)
        {
            const string SQL_STATEMENT =
                "SELECT [LogID], [LeaveID], [Status], [Date] " +
                "FROM dbo.LeaveStatusLogs " +
                "WHERE [LeaveID]=@LeaveID " +
                "ORDER BY [Date] DESC";

            List <LeaveStatusLog> result = new List <LeaveStatusLog>();

            // Connect to database.
            Database db = DatabaseFactory.CreateDatabase(CONNECTION_NAME);

            using (DbCommand cmd = db.GetSqlStringCommand(SQL_STATEMENT))
            {
                db.AddInParameter(cmd, "@LeaveID", DbType.Int64, leaveID);

                using (IDataReader dr = db.ExecuteReader(cmd))
                {
                    while (dr.Read())
                    {
                        // Create a new LeaveStatusLog
                        LeaveStatusLog leaveStatusLog = new LeaveStatusLog();

                        // Read values.
                        leaveStatusLog.LogID   = base.GetDataValue <long>(dr, "LogID");
                        leaveStatusLog.LeaveID = base.GetDataValue <long>(dr, "LeaveID");
                        leaveStatusLog.Status  = base.GetDataValue <LeaveStatuses>(dr, "Status");
                        leaveStatusLog.Date    = base.GetDataValue <DateTime>(dr, "Date");

                        // Add to List.
                        result.Add(leaveStatusLog);
                    }
                }
            }

            return(result);
        }