/// <summary>
 /// Método que Afecta un registro de Revisiones
 /// </summary>
 /// <param name="aRevision"></param>
 public static int AfectarRevisionPorID(Revision aRevision)
 {
     return RevisionDataAccess.AfectarRevisionPorID(aRevision);
 }
 /// <summary>
 /// Método que inserta un nuevo registro a la tabla de Revisiones
 /// </summary>
 /// <param name="iRevision"></param>
 public static int Insertar(Revision iRevision)
 {
     return RevisionDataAccess.Insertar(iRevision);
 }
        /// <summary>
        /// Método que transforma los datos Control-Valor a objeto Revision
        /// </summary>
        /// <param name="dRegistro"></param>
        /// <returns></returns>
        private Revision ObtenerObjetoDesdeForma(Dictionary<string, string> dRegistro)
        {
            //1. Declarar objeto Revision donde se guardarán los valores
            Revision oRevisionForma = new Revision();

            //2. Por cada elemento del submit de la Forma detectar el campo y asignarlo al objeto correspondiente
            foreach (KeyValuePair<string, string> sd in dRegistro)
            {
                switch (sd.Key)
                {
                    //4. Datos de la revisión
                    case "cmbMov":
                        oRevisionForma.Mov = sd.Value;
                        break;
                    case "nfSemana":
                        oRevisionForma.Semana = Convert.ToInt16(sd.Value);
                        break;
                    case "txtfSucursalID":
                        oRevisionForma.Sucursal = sd.Value;
                        break;
                    case "dfFechaEmision":
                        oRevisionForma.FechaEmision = Convert.ToDateTime(sd.Value);
                        break;
                    case "dfFechaRevision":
                        if (sd.Value == null)
                            oRevisionForma.FechaRevision = null;
                        else
                            oRevisionForma.FechaRevision = Convert.ToDateTime(sd.Value);
                        break;
                    case "txtfObservaciones":
                        oRevisionForma.Observaciones = sd.Value;
                        break;
                    case "txtfComentarios":
                        oRevisionForma.Comentarios = sd.Value;
                        break;
                }
            }

            //3. Regresar la Revision
            return oRevisionForma;
        }
 /// <summary>
 /// Método que actualiza un nuevo registro a la tabla de Revisiones
 /// </summary>
 /// <param name="uRevision"></param>
 /// <returns></returns>
 public static int Actualizar(Revision uRevision)
 {
     return RevisionDataAccess.Actualizar(uRevision);
 }
        /// <summary>
        /// Evento que Guarda o actualiza un Movimiento
        /// </summary>
        /// <param name="oRevisionForma"></param>
        /// <param name="oRevision"></param>
        /// <param name="lRevisionD"></param>
        private string GuardarMovimiento(ref Revision oRevisionForma, Revision oRevision, List<RevisionD> lRevisionD)
        {
            //1. Lo que sucede cuando es nuevo y no se habia guardado
            if (oRevision == null)
            {
                //2. Asignar campos faltantes
                Usuario oUsuario = (Usuario)Session["Usuario"];
                oRevisionForma.Estatus = "BORRADOR";
                oRevisionForma.UsuarioAlta = oUsuario.ID;

                //3. Insertar en la base de datos
                oRevisionForma.ID = RevisionBusiness.Insertar(oRevisionForma);

                //4. Agregar el objeto al Store de Revisión
                sRevision.Add(new
                {
                    ID = oRevisionForma.ID,
                    Mov = oRevisionForma.Mov,
                    MovID = oRevisionForma.MovID,
                    Semana = oRevisionForma.Semana,
                    Sucursal = oRevisionForma.Sucursal,
                    FechaEmision = oRevisionForma.FechaEmision,
                    FechaRevision = oRevisionForma.FechaRevision,
                    Observaciones = oRevisionForma.Observaciones,
                    Comentarios = oRevisionForma.Comentarios,
                    Estatus = oRevisionForma.Estatus
                });

                //5. Guardar Detalle y regresar valor
                GuardarDetalle(lRevisionD, oRevisionForma);
                return "insertar";
            }
            else
            {
                //6. Complementar datos y actualizar encabezado
                oRevisionForma.ID = oRevision.ID;
                oRevisionForma.Estatus = oRevision.Estatus;
                RevisionBusiness.Actualizar(oRevisionForma);

                //7. Actualizar store de Revision
                sRevision.GetAt(0).Set("Mov", oRevisionForma.Mov);
                sRevision.GetAt(0).Set("Semana", oRevisionForma.Semana);
                sRevision.GetAt(0).Set("Sucursal", oRevisionForma.Sucursal);
                sRevision.GetAt(0).Set("FechaEmision", oRevisionForma.FechaEmision);
                sRevision.GetAt(0).Set("FechaRevision", oRevisionForma.FechaRevision);
                sRevision.GetAt(0).Set("Observaciones", oRevisionForma.Observaciones);
                sRevision.GetAt(0).Set("Comentarios", oRevisionForma.Comentarios);

                //8. Borrar todo el detalle e insertarlo de nuevo
                RevisionDBusiness.BorrarPorRevision(oRevisionForma.ID);
                GuardarDetalle(lRevisionD, oRevisionForma);

                //9. Regresar valor
                return "modificar";
            }
        }
 /// <summary>
 /// Evento que Guarda el detalle de Obra Civil
 /// </summary>
 /// <param name="lRevisionD"></param>
 /// <param name="oRevisionForma"></param>
 private void GuardarDetalle(List<RevisionD> lRevisionD, Revision oRevisionForma)
 {
     //1. Insertar los datos del detalle
     foreach (RevisionD sd in lRevisionD)
     {
         //2. Validar que el objeto no venga en blanco
         sd.Revision = oRevisionForma.ID;
         RevisionDBusiness.Insertar(sd);
     }
 }
        /// <summary>
        /// Método que inserta un nuevo registro a la tabla de Revisiones
        /// </summary>
        /// <param name="iRevision"></param>
        public static int Insertar(Revision iRevision)
        {
            try
            {
                //1. Configurar la conexión y el tipo de comando
                SqlConnection sqlcConectar = new SqlConnection(ConfigurationManager.ConnectionStrings["OSEF"].ConnectionString);
                SqlCommand sqlcComando = new SqlCommand();
                sqlcComando.Connection = sqlcConectar;
                sqlcComando.CommandType = CommandType.StoredProcedure;
                sqlcComando.CommandText = "web_spI_InsertarRevision";

                //2. Declarar los parametros
                SqlParameter sqlpID = new SqlParameter();
                sqlpID.ParameterName = "@ID";
                sqlpID.SqlDbType = SqlDbType.Int;
                sqlpID.Direction = ParameterDirection.Output;

                SqlParameter sqlpMov = new SqlParameter();
                sqlpMov.ParameterName = "@Mov";
                sqlpMov.SqlDbType = SqlDbType.VarChar;
                sqlpMov.Value = iRevision.Mov;

                SqlParameter sqlpMovID = new SqlParameter();
                sqlpMovID.ParameterName = "@MovID";
                sqlpMovID.SqlDbType = SqlDbType.VarChar;
                if (iRevision.MovID == null)
                    sqlpMovID.Value = DBNull.Value;
                else
                    sqlpMovID.Value = iRevision.MovID;

                SqlParameter sqlpSemana = new SqlParameter();
                sqlpSemana.ParameterName = "@Semana";
                sqlpSemana.SqlDbType = SqlDbType.TinyInt;
                sqlpSemana.Value = iRevision.Semana;

                SqlParameter sqlpSucursal = new SqlParameter();
                sqlpSucursal.ParameterName = "@Sucursal";
                sqlpSucursal.SqlDbType = SqlDbType.Char;
                sqlpSucursal.Size = 10;
                sqlpSucursal.Value = iRevision.Sucursal;

                SqlParameter sqlpFechaEmision = new SqlParameter();
                sqlpFechaEmision.ParameterName = "@FechaEmision";
                sqlpFechaEmision.SqlDbType = SqlDbType.SmallDateTime;
                sqlpFechaEmision.Value = iRevision.FechaEmision;

                SqlParameter sqlpFechaRevision = new SqlParameter();
                sqlpFechaRevision.ParameterName = "@FechaRevision";
                sqlpFechaRevision.SqlDbType = SqlDbType.Date;
                if (iRevision.FechaRevision == null)
                    sqlpFechaRevision.Value = DBNull.Value;
                else
                    sqlpFechaRevision.Value = iRevision.FechaRevision;

                SqlParameter sqlpObservaciones = new SqlParameter();
                sqlpObservaciones.ParameterName = "@Observaciones";
                sqlpObservaciones.SqlDbType = SqlDbType.VarChar;
                sqlpObservaciones.Value = iRevision.Observaciones;

                SqlParameter sqlpComentarios = new SqlParameter();
                sqlpComentarios.ParameterName = "@Comentarios";
                sqlpComentarios.SqlDbType = SqlDbType.VarChar;
                sqlpComentarios.Value = iRevision.Comentarios;

                SqlParameter sqlpEstatus = new SqlParameter();
                sqlpEstatus.ParameterName = "@Estatus";
                sqlpEstatus.SqlDbType = SqlDbType.VarChar;
                sqlpEstatus.Value = iRevision.Estatus;

                SqlParameter sqlpUsuarioAlta = new SqlParameter();
                sqlpUsuarioAlta.ParameterName = "@UsuarioAlta";
                sqlpUsuarioAlta.SqlDbType = SqlDbType.VarChar;
                sqlpUsuarioAlta.Value = iRevision.UsuarioAlta;

                //3. Agregar los parametros al comando
                sqlcComando.Parameters.Add(sqlpID);
                sqlcComando.Parameters.Add(sqlpMov);
                sqlcComando.Parameters.Add(sqlpMovID);
                sqlcComando.Parameters.Add(sqlpSemana);
                sqlcComando.Parameters.Add(sqlpSucursal);
                sqlcComando.Parameters.Add(sqlpFechaEmision);
                sqlcComando.Parameters.Add(sqlpFechaRevision);
                sqlcComando.Parameters.Add(sqlpObservaciones);
                sqlcComando.Parameters.Add(sqlpComentarios);
                sqlcComando.Parameters.Add(sqlpEstatus);
                sqlcComando.Parameters.Add(sqlpUsuarioAlta);

                //4. Abrir la conexión
                sqlcComando.Connection.Open();

                //5. Ejecutar la instrucción INSERT que regresa un dato que es el ID
                int result = Convert.ToInt32(sqlcComando.ExecuteScalar());

                //6. Cerrar la conexión
                sqlcComando.Connection.Close();

                //7. Regresar el resultado
                return Convert.ToInt32(sqlcComando.Parameters["@ID"].Value);
            }
            catch (Exception ex)
            {
                throw new Exception("Error capa de datos (public static int Insertar(Revision " + iRevision.Mov + ")): " + ex.Message);
            }
        }
        /// <summary>
        /// Método que actualiza un nuevo registro a la tabla de Revisiones
        /// </summary>
        /// <param name="uRevision"></param>
        public static int Actualizar(Revision uRevision)
        {
            try
            {
                //1. Configurar la conexión y el tipo de comando
                SqlConnection sqlcConectar = new SqlConnection(ConfigurationManager.ConnectionStrings["OSEF"].ConnectionString);
                SqlCommand sqlcComando = new SqlCommand();
                sqlcComando.Connection = sqlcConectar;
                sqlcComando.CommandType = CommandType.StoredProcedure;
                sqlcComando.CommandText = "web_spU_ActualizarRevision";

                //2. Declarar los parametros
                SqlParameter sqlpID = new SqlParameter();
                sqlpID.ParameterName = "@ID";
                sqlpID.SqlDbType = SqlDbType.Int;
                sqlpID.Value = uRevision.ID;

                SqlParameter sqlpMov = new SqlParameter();
                sqlpMov.ParameterName = "@Mov";
                sqlpMov.SqlDbType = SqlDbType.VarChar;
                sqlpMov.Value = uRevision.Mov;

                SqlParameter sqlpMovID = new SqlParameter();
                sqlpMovID.ParameterName = "@MovID";
                sqlpMovID.SqlDbType = SqlDbType.VarChar;
                if (uRevision.MovID == null)
                    sqlpMovID.Value = DBNull.Value;
                else
                    sqlpMovID.Value = uRevision.MovID;

                SqlParameter sqlpSemana = new SqlParameter();
                sqlpSemana.ParameterName = "@Semana";
                sqlpSemana.SqlDbType = SqlDbType.TinyInt;
                sqlpSemana.Value = uRevision.Semana;

                SqlParameter sqlpSucursal = new SqlParameter();
                sqlpSucursal.ParameterName = "@Sucursal";
                sqlpSucursal.SqlDbType = SqlDbType.VarChar;
                sqlpSucursal.Value = uRevision.Sucursal;

                SqlParameter sqlpFechaEmision = new SqlParameter();
                sqlpFechaEmision.ParameterName = "@FechaEmision";
                sqlpFechaEmision.SqlDbType = SqlDbType.SmallDateTime;
                sqlpFechaEmision.Value = uRevision.FechaEmision;

                SqlParameter sqlpFechaRevision = new SqlParameter();
                sqlpFechaRevision.ParameterName = "@FechaRevision";
                sqlpFechaRevision.SqlDbType = SqlDbType.Date;
                if (uRevision.FechaRevision == null)
                    sqlpFechaRevision.Value = DBNull.Value;
                else
                    sqlpFechaRevision.Value = uRevision.FechaRevision;

                SqlParameter sqlpObservaciones = new SqlParameter();
                sqlpObservaciones.ParameterName = "@Observaciones";
                sqlpObservaciones.SqlDbType = SqlDbType.VarChar;
                sqlpObservaciones.Value = uRevision.Observaciones;

                SqlParameter sqlpComentarios = new SqlParameter();
                sqlpComentarios.ParameterName = "@Comentarios";
                sqlpComentarios.SqlDbType = SqlDbType.VarChar;
                sqlpComentarios.Value = uRevision.Comentarios;

                //3. Agregar los parametros al comando
                sqlcComando.Parameters.Add(sqlpID);
                sqlcComando.Parameters.Add(sqlpMov);
                sqlcComando.Parameters.Add(sqlpMovID);
                sqlcComando.Parameters.Add(sqlpSemana);
                sqlcComando.Parameters.Add(sqlpSucursal);
                sqlcComando.Parameters.Add(sqlpFechaEmision);
                sqlcComando.Parameters.Add(sqlpFechaRevision);
                sqlcComando.Parameters.Add(sqlpObservaciones);
                sqlcComando.Parameters.Add(sqlpComentarios);

                //4. Abrir la conexión
                sqlcComando.Connection.Open();

                //5. Ejecutar la instrucción UPDATE que no regresa filas
                int result = sqlcComando.ExecuteNonQuery();

                //6. Cerrar la conexión
                sqlcComando.Connection.Close();

                //7. Regresar el resultado
                return result;
            }
            catch (Exception ex)
            {
                throw new Exception("Error capa de datos (public static int Actualizar(Revision " + uRevision.ID + ")): " + ex.Message);
            }
        }
        /// <summary>
        /// Método que Afecta un registro de Revisiones
        /// </summary>
        /// <param name="aRevision"></param>
        public static int AfectarRevisionPorID(Revision aRevision)
        {
            try
            {
                //1. Configurar la conexión y el tipo de comando
                SqlConnection sqlcConectar = new SqlConnection(ConfigurationManager.ConnectionStrings["OSEF"].ConnectionString);
                SqlCommand sqlcComando = new SqlCommand();
                sqlcComando.Connection = sqlcConectar;
                sqlcComando.CommandType = CommandType.StoredProcedure;
                sqlcComando.CommandText = "web_spS_AfectarRevisionPorID";

                //2. Declarar los parametros
                SqlParameter sqlpID = new SqlParameter();
                sqlpID.ParameterName = "@ID";
                sqlpID.SqlDbType = SqlDbType.Int;
                sqlpID.Value = aRevision.ID;

                //3. Agregar los parametros al comando
                sqlcComando.Parameters.Add(sqlpID);

                //4. Abrir la conexión
                sqlcComando.Connection.Open();

                //5. Ejecutar la instrucción UPDATE que no regresa filas
                int result = sqlcComando.ExecuteNonQuery();

                //6. Cerrar la conexión
                sqlcComando.Connection.Close();

                //7. Regresar el resultado
                return result;
            }
            catch (Exception ex)
            {
                throw new Exception("Error capa de datos (public static int AfectarRevisionPorID(Revision " + aRevision + ")): " + ex.Message);
            }
        }