/// <summary>
 /// Método que Afecta un registro de Orden
 /// </summary>
 /// <param name="aRevision"></param>
 public static int AfectarOrdenPorID(OrdenEstimacion aOrdenEstimacion)
 {
     return OrdenEstimacionDataAccess.AfectarOrdenPorID(aOrdenEstimacion);
 }
 /// <summary>
 /// Método que inserta un nuevo registro a la tabla de OrdenEstimacion
 /// </summary>
 /// <param name="iRevision"></param>
 public static int insertarOrdenEstimacion(OrdenEstimacion iOrdenEstimacion)
 {
     return OrdenEstimacionDataAccess.Insertar(iOrdenEstimacion);
 }
        /// <summary>
        /// Método que inserta un nuevo registro a la tabla de OrdenEstimacion
        /// </summary>
        /// <param name="iVolumetria"></param>
        public static int Insertar(OrdenEstimacion iOrdenEstimacion)
        {
            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_InsertarOrdenEstimacion";

                //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 = iOrdenEstimacion.Mov;

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

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

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

                SqlParameter sqlpObservaciones = new SqlParameter();
                sqlpObservaciones.ParameterName = "@Observaciones";
                sqlpObservaciones.SqlDbType = SqlDbType.VarChar;
                if (iOrdenEstimacion.Observaciones.Equals(""))
                {
                    sqlpObservaciones.Value = "";
                }
                else
                {
                    sqlpObservaciones.Value = iOrdenEstimacion.Observaciones;
                }
                SqlParameter sqlpEstatus = new SqlParameter();
                sqlpEstatus.ParameterName = "@Estatus";
                sqlpEstatus.SqlDbType = SqlDbType.VarChar;
                sqlpEstatus.Value = iOrdenEstimacion.Estatus;

                SqlParameter sqlpUsuario = new SqlParameter();
                sqlpUsuario.ParameterName = "@Usuario";
                sqlpUsuario.SqlDbType = SqlDbType.VarChar;
                sqlpUsuario.Value = iOrdenEstimacion.Usuario;

                SqlParameter sqlpOrigen = new SqlParameter();
                sqlpOrigen.ParameterName = "@Origen";
                sqlpOrigen.SqlDbType = SqlDbType.VarChar;

                if (iOrdenEstimacion.Origen == null)
                    sqlpOrigen.Value = DBNull.Value;
                else
                    sqlpOrigen.Value = iOrdenEstimacion.Origen;

                SqlParameter sqlpOrigenID = new SqlParameter();
                sqlpOrigenID.ParameterName = "@OrigenID";
                sqlpOrigenID.SqlDbType = SqlDbType.VarChar;

                if (iOrdenEstimacion.OrigenId == null)
                    sqlpOrigenID.Value = DBNull.Value;
                else
                    sqlpOrigenID.Value = iOrdenEstimacion.OrigenId;

                SqlParameter sqlpReporte = new SqlParameter();
                sqlpReporte.ParameterName = "@Reporte";
                sqlpReporte.SqlDbType = SqlDbType.VarChar;

                if (iOrdenEstimacion.Reporte == null)
                    sqlpReporte.Value = DBNull.Value;
                else
                    sqlpReporte.Value = iOrdenEstimacion.Reporte;

                SqlParameter sqlpDivision = new SqlParameter();
                sqlpDivision.ParameterName = "@Division";
                sqlpDivision.SqlDbType = SqlDbType.VarChar;

                if (iOrdenEstimacion.Division == null)
                    sqlpDivision.Value = DBNull.Value;
                else
                    sqlpDivision.Value = iOrdenEstimacion.Division;

                SqlParameter sqlpFechaOrigen = new SqlParameter();
                sqlpFechaOrigen.ParameterName = "@FechaOrigen";
                sqlpFechaOrigen.SqlDbType = SqlDbType.SmallDateTime;

                if (iOrdenEstimacion.FechaOrigen == null)
                    sqlpFechaOrigen.Value = DBNull.Value;
                else
                    sqlpFechaOrigen.Value = iOrdenEstimacion.FechaOrigen;

                SqlParameter sqlpFechaMaxima = new SqlParameter();
                sqlpFechaMaxima.ParameterName = "@FechaMaximaAtencion";
                sqlpFechaMaxima.SqlDbType = SqlDbType.SmallDateTime;
                if (iOrdenEstimacion.FechaMaximaAtencion == null)
                    sqlpFechaMaxima.Value = DBNull.Value;
                else
                    sqlpFechaMaxima.Value = iOrdenEstimacion.FechaMaximaAtencion;

                SqlParameter sqlpDiasAtencion = new SqlParameter();
                sqlpDiasAtencion.ParameterName = "@DiasAtencion";
                sqlpDiasAtencion.SqlDbType = SqlDbType.Decimal;

                    sqlpDiasAtencion.Value = iOrdenEstimacion.DiasAtencion;

                SqlParameter sqlpReporto = new SqlParameter();
                sqlpReporto.ParameterName = "@Reporto";
                sqlpReporto.SqlDbType = SqlDbType.VarChar;

                if (iOrdenEstimacion.Reporto == null)
                    sqlpReporto.Value = DBNull.Value;
                else
                    sqlpReporto.Value = iOrdenEstimacion.Reporto;

                SqlParameter sqlpTrabajoRequerido = new SqlParameter();
                sqlpTrabajoRequerido.ParameterName = "@TrabajoRequerido";
                sqlpTrabajoRequerido.SqlDbType = SqlDbType.VarChar;
                if (iOrdenEstimacion.TrabajoRequerido == null)
                    sqlpTrabajoRequerido.Value = DBNull.Value;
                else
                    sqlpTrabajoRequerido.Value = iOrdenEstimacion.TrabajoRequerido;

                SqlParameter sqlpTrabajoRealizado = new SqlParameter();
                sqlpTrabajoRealizado.ParameterName = "@TrabajoRealizado";
                sqlpTrabajoRealizado.SqlDbType = SqlDbType.VarChar;
                if (iOrdenEstimacion.TrabajoRealizado == null)
                    sqlpTrabajoRealizado.Value = DBNull.Value;
                else
                    sqlpTrabajoRealizado.Value = iOrdenEstimacion.TrabajoRealizado;

                SqlParameter sqlpCodigoFalla = new SqlParameter();
                sqlpCodigoFalla.ParameterName = "@CodigoFalla";
                sqlpCodigoFalla.SqlDbType = SqlDbType.VarChar;
                if (iOrdenEstimacion.CodigoFalla == null)
                    sqlpCodigoFalla.Value = DBNull.Value;
                else
                    sqlpCodigoFalla.Value = iOrdenEstimacion.CodigoFalla;

                SqlParameter sqlpFechaLlegada = new SqlParameter();
                sqlpFechaLlegada.ParameterName = "@FechaLlegada";
                sqlpFechaLlegada.SqlDbType = SqlDbType.SmallDateTime;
                if (iOrdenEstimacion.FechaLlegada == null)
                    sqlpFechaLlegada.Value = DBNull.Value;
                else
                    sqlpFechaLlegada.Value = iOrdenEstimacion.FechaLlegada;

                SqlParameter sqlpHoraLlegada = new SqlParameter();
                sqlpHoraLlegada.ParameterName = "@HoraLlegada";
                sqlpHoraLlegada.SqlDbType = SqlDbType.DateTime;
                if (iOrdenEstimacion.HoraLlegada == null)
                    sqlpHoraLlegada.Value = DBNull.Value;
                else
                    sqlpHoraLlegada.Value = iOrdenEstimacion.HoraLlegada;

                SqlParameter sqlpFechaFinActividad = new SqlParameter();
                sqlpFechaFinActividad.ParameterName = "@FechaFinActividad";
                sqlpFechaFinActividad.SqlDbType = SqlDbType.SmallDateTime;
                if (iOrdenEstimacion.FechaFinActividad == null)
                    sqlpFechaFinActividad.Value = DBNull.Value;
                else
                    sqlpFechaFinActividad.Value = iOrdenEstimacion.FechaFinActividad;

                SqlParameter sqlpHoraFinActividad = new SqlParameter();
                sqlpHoraFinActividad.ParameterName = "@HoraFinActividad";
                sqlpHoraLlegada.SqlDbType = SqlDbType.DateTime;
                if (iOrdenEstimacion.HoraFinActividad == null)
                    sqlpHoraFinActividad.Value = DBNull.Value;
                else
                    sqlpHoraFinActividad.Value = iOrdenEstimacion.HoraFinActividad;

                SqlParameter sqlpCuadrilla = new SqlParameter();
                sqlpCuadrilla.ParameterName = "@Cuadrilla";
                sqlpCuadrilla.SqlDbType = SqlDbType.VarChar;
                if (iOrdenEstimacion.Cuadrilla == null)
                    sqlpCuadrilla.Value = DBNull.Value;
                else
                    sqlpCuadrilla.Value = iOrdenEstimacion.Cuadrilla;

                SqlParameter sqlpImporteTotal = new SqlParameter();
                sqlpImporteTotal.ParameterName = "@ImporteTotal";
                sqlpImporteTotal.SqlDbType = SqlDbType.Decimal;
                sqlpImporteTotal.Precision = 30;
                sqlpImporteTotal.Scale = 6;
                sqlpImporteTotal.Value = iOrdenEstimacion.ImporteTotal;

                SqlParameter sqlpHoraOrigen= new SqlParameter();
                sqlpHoraOrigen.ParameterName = "@HoraOrigen";
                sqlpHoraOrigen.SqlDbType = SqlDbType.SmallDateTime;
                if (iOrdenEstimacion.HoraOrigen == null)
                    sqlpHoraOrigen.Value = DBNull.Value;
                else
                    sqlpHoraOrigen.Value = iOrdenEstimacion.HoraOrigen;

                SqlParameter sqlpRutaImagen = new SqlParameter();
                sqlpRutaImagen.ParameterName = "@RutaImagen";
                sqlpRutaImagen.SqlDbType = SqlDbType.VarChar;
                sqlpRutaImagen.Value = iOrdenEstimacion.RutaImagen;

                SqlParameter sqlpAtendido = new SqlParameter();
                sqlpAtendido.ParameterName = "@Atendido";
                sqlpAtendido.SqlDbType = SqlDbType.VarChar;
                if (iOrdenEstimacion.Atendido == null)
                    sqlpAtendido.Value = "NO";
                else
                    sqlpAtendido.Value = "SI";

                SqlParameter sqlpReferenciaOrden = new SqlParameter();
                sqlpReferenciaOrden.ParameterName = "@ReferenciaOrden";
                sqlpReferenciaOrden.SqlDbType = SqlDbType.VarChar;
                sqlpReferenciaOrden.Value = iOrdenEstimacion.ReferenciaOrden;

                SqlParameter sqlpClasificacion = new SqlParameter();
                sqlpClasificacion.ParameterName = "@Clasificacion";
                sqlpClasificacion.SqlDbType = SqlDbType.VarChar;
                sqlpClasificacion.Value = iOrdenEstimacion.Clasificacion;

                SqlParameter sqlpCliente = new SqlParameter();
                sqlpCliente.ParameterName = "@Cliente";
                sqlpCliente.SqlDbType = SqlDbType.Char;
                if (iOrdenEstimacion.Cliente == null || iOrdenEstimacion.Cliente.Trim().Equals(""))
                    sqlpCliente.Value = DBNull.Value;
                else
                    sqlpCliente.Value = iOrdenEstimacion.Cliente;

                //3. Agregar los parametros al comando
                sqlcComando.Parameters.Add(sqlpID);
                sqlcComando.Parameters.Add(sqlpMov);
                sqlcComando.Parameters.Add(sqlpMovID);
                sqlcComando.Parameters.Add(sqlpSucursal);
                sqlcComando.Parameters.Add(sqlpFechaEmision);
                sqlcComando.Parameters.Add(sqlpObservaciones);
                sqlcComando.Parameters.Add(sqlpEstatus);
                sqlcComando.Parameters.Add(sqlpUsuario);
                sqlcComando.Parameters.Add(sqlpOrigen);
                sqlcComando.Parameters.Add(sqlpOrigenID);
                sqlcComando.Parameters.Add(sqlpReporte);
                sqlcComando.Parameters.Add(sqlpDivision);
                sqlcComando.Parameters.Add(sqlpFechaOrigen);
                sqlcComando.Parameters.Add(sqlpFechaMaxima);
                sqlcComando.Parameters.Add(sqlpDiasAtencion);
                sqlcComando.Parameters.Add(sqlpReporto);
                sqlcComando.Parameters.Add(sqlpTrabajoRequerido);
                sqlcComando.Parameters.Add(sqlpTrabajoRealizado);
                sqlcComando.Parameters.Add(sqlpCodigoFalla);
                sqlcComando.Parameters.Add(sqlpFechaLlegada);
                sqlcComando.Parameters.Add(sqlpHoraLlegada);
                sqlcComando.Parameters.Add(sqlpFechaFinActividad);
                sqlcComando.Parameters.Add(sqlpHoraFinActividad);
                sqlcComando.Parameters.Add(sqlpCuadrilla);
                sqlcComando.Parameters.Add(sqlpImporteTotal);
                sqlcComando.Parameters.Add(sqlpHoraOrigen);
                sqlcComando.Parameters.Add(sqlpRutaImagen);
                sqlcComando.Parameters.Add(sqlpAtendido);
                sqlcComando.Parameters.Add(sqlpReferenciaOrden);
                sqlcComando.Parameters.Add(sqlpClasificacion);
                sqlcComando.Parameters.Add(sqlpCliente);
                //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(OrdenEstimacion " + iOrdenEstimacion.Mov + ")): " + ex.Message);
            }
        }
 /// <summary>
 /// Método que actualiza un registro a la tabla de OrdenEstimacion
 /// </summary>
 /// <param name="iRevision"></param>
 public static int ActualizarOrdenEstimacion(OrdenEstimacion uOrdenEstimacion)
 {
     return OrdenEstimacionDataAccess.Actualizar(uOrdenEstimacion);
 }
        /// <summary>
        /// Método que Afecta un registro de OrdenEstimacion
        /// </summary>
        /// <param name="aRevision"></param>
        public static int AfectarOrdenPorID(OrdenEstimacion aOrdenEstimacion)
        {
            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_AfectarOrdenPorID";

                //2. Declarar los parametros
                SqlParameter sqlpID = new SqlParameter();
                sqlpID.ParameterName = "@ID";
                sqlpID.SqlDbType = SqlDbType.Int;
                sqlpID.Value = aOrdenEstimacion.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 AfectarOrdenPorID(OrdenEstimacion " + aOrdenEstimacion + ")): " + ex.Message);
            }
        }
        /// <summary>
        /// Método que transforma los datos Control-Valor a objeto OrdenEstimacion
        /// </summary>
        /// <param name="dRegistro"></param>
        /// <returns></returns>
        private OrdenEstimacion ObtenerObjetoDesdeForma(Dictionary<string, string> dRegistro)
        {
            //1. Declarar objeto OrdenEstimacion donde se guardarán los valores
            OrdenEstimacion oOrdenEstimacionForma = new OrdenEstimacion();

            //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 OrdenEstimacion
                    case "cmbMov":
                        oOrdenEstimacionForma.Mov = sd.Value;
                        break;
                    case "txtfSucursalID":
                        oOrdenEstimacionForma.Sucursal = sd.Value;
                        break;
                    case "dfFechaEmision":
                        oOrdenEstimacionForma.FechaEmision = Convert.ToDateTime(sd.Value);
                        break;
                    case "txtfObservaciones":
                        oOrdenEstimacionForma.Observaciones = sd.Value;
                        break;
                    //5. Segunda pestaña
                    case "txtfNoReporte":
                        oOrdenEstimacionForma.Reporte = sd.Value;
                        break;
                    case "cmbDivision":
                        oOrdenEstimacionForma.Division = sd.Value;
                        break;
                    case "dfFechaOrigen":
                        if (sd.Value == null || sd.Value.Equals(""))
                            oOrdenEstimacionForma.FechaOrigen = null;
                        else
                            oOrdenEstimacionForma.FechaOrigen = Convert.ToDateTime(sd.Value);
                        break;
                    case "dfFechaMaxima":
                        if (sd.Value == null || sd.Value.Equals(""))
                            oOrdenEstimacionForma.FechaMaximaAtencion = null;
                        else
                            oOrdenEstimacionForma.FechaMaximaAtencion = Convert.ToDateTime(sd.Value);
                        break;
                    case "nfDiasAtencion":
                        oOrdenEstimacionForma.DiasAtencion = Convert.ToDecimal(sd.Value);
                        break;
                    case "txtfReporta":
                        oOrdenEstimacionForma.Reporto = sd.Value;
                        break;
                    case "txtfTrabajoRequerido":
                        oOrdenEstimacionForma.TrabajoRequerido = sd.Value;
                        break;
                    //6. Tercer pestaña
                    case "txtfCodigoFalla":
                        oOrdenEstimacionForma.CodigoFalla = sd.Value;
                        break;

                    case "dfFechaLlegada":
                        if (sd.Value == null || sd.Value.Equals(""))
                            oOrdenEstimacionForma.FechaLlegada = null;
                        else
                            oOrdenEstimacionForma.FechaLlegada = Convert.ToDateTime(sd.Value);
                        break;
                    case "tfHoraLlegada":
                        if (sd.Value == null || sd.Value.Equals(""))
                            oOrdenEstimacionForma.HoraLlegada = null;
                        else
                            oOrdenEstimacionForma.HoraLlegada = Convert.ToDateTime(sd.Value);
                        break;
                    case "dfFechaFinActividad":
                        if (sd.Value == null || sd.Value.Equals(""))
                            oOrdenEstimacionForma.FechaFinActividad = null;
                        else
                            oOrdenEstimacionForma.FechaFinActividad = Convert.ToDateTime(sd.Value);
                        break;
                    case "tfHoraFinActividad":
                        if (sd.Value == null || sd.Value.Equals(""))
                            oOrdenEstimacionForma.HoraFinActividad = null;
                        else
                            oOrdenEstimacionForma.HoraFinActividad = Convert.ToDateTime(sd.Value);
                        break;
                    case "cmbCuadrilla":
                        oOrdenEstimacionForma.Cuadrilla = sd.Value;
                        break;
                    case "dfTotalSinRender":
                        oOrdenEstimacionForma.ImporteTotal = Convert.ToDecimal(sd.Value);
                        break;
                    case "tHoraOrigen":
                        if (sd.Value == null || sd.Value.Equals(""))
                            oOrdenEstimacionForma.HoraOrigen = null;
                        else
                            oOrdenEstimacionForma.HoraOrigen = Convert.ToDateTime(sd.Value);
                        break;
                    case "fufNormal":
                        oOrdenEstimacionForma.RutaImagen = sd.Value;
                        break;
                    case "chkAtendido":
                        oOrdenEstimacionForma.Atendido = sd.Value;
                        break;
                    case "txtNoOrden":
                        oOrdenEstimacionForma.NoOrden = sd.Value;
                        break;
                    case "txtReferenciaOrden":
                        oOrdenEstimacionForma.ReferenciaOrden = sd.Value;
                        break;
                    case "cmbClasificacion":
                        oOrdenEstimacionForma.Clasificacion = sd.Value == null ? "" : sd.Value;
                        break;
                    case "IdCliente":
                        oOrdenEstimacionForma.Cliente = sd.Value == null ? "" : sd.Value;
                        break;
                }
            }
            //3. Regresar el objeto
            return oOrdenEstimacionForma;
        }
        /// <summary>
        /// Evento que Guarda o actualiza un Movimiento
        /// </summary>
        /// <param name="oOrdenEstimacionForma"></param>
        /// <param name="oOrdenEstimacion"></param>
        /// <param name="lOrdenEstimacionD"></param>
        /// <returns></returns>
        private string GuardarMovimiento(ref OrdenEstimacion oOrdenEstimacionForma, OrdenEstimacion oOrdenEstimacion, List<OrdenEstimacionD> lOrdenEstimacionD)
        {
            //Checar ticket de autenticación
            UsuarioBusiness.checkValidSession(this);

            //1. Traemeos el objeto de sesion para llenr el objeto con los datos de usuario
            Usuario oUsuario = (Usuario)Session["Usuario"];
            oOrdenEstimacionForma.Usuario = oUsuario.ID;

            //2. Actualizamos el Estatus e Insertar en la base de datos
            oOrdenEstimacionForma.Estatus = "BORRADOR";
            string strReporte = oOrdenEstimacionForma.Reporte;
            string strImagen = fufNormal.FileName;
            oOrdenEstimacionForma.RutaImagen = strImagen;

            string bandera = Cookies.GetCookie("cookieTieneImagenReporte").Value;

            //3. Lo que sucede cuando es nuevo y no se habia guardado
            if (oOrdenEstimacion == null)
            {
                if (bandera.Equals("SI"))
                {
                    string strDireccion = Server.MapPath(" ") + "\\imagenesReportes\\" + oOrdenEstimacionForma.Reporte;
                    //2. Validar si existe el directorio donde se guardaran las imagenes
                    if (Directory.Exists(strDireccion))
                    {
                        fufNormal.PostedFile.SaveAs(strDireccion + "\\" + fufNormal.FileName);
                    }
                    else
                    {
                        Directory.CreateDirectory(strDireccion);
                        fufNormal.PostedFile.SaveAs(strDireccion + "\\" + fufNormal.FileName);
                    }

                    //Guardamos en la bd
                    oOrdenEstimacionForma.RutaImagen = "imagenesReportes\\" + oOrdenEstimacionForma.Reporte + "\\" + fufNormal.FileName;
                }
                else
                {
                    oOrdenEstimacionForma.RutaImagen = "";
                }

                oOrdenEstimacionForma.Id = OrdenEstimacionBusiness.insertarOrdenEstimacion(oOrdenEstimacionForma);

                oOrdenEstimacionForma = OrdenEstimacionBusiness.ObtenerOrdenEstimacionPorID(oOrdenEstimacionForma.Id);

                //4. Agregar el objeto al Store de Revisión
                sOrdenEstimacion.Add(new
                {
                    ID = oOrdenEstimacionForma.Id,
                    Mov = oOrdenEstimacionForma.Mov,
                    MovID = oOrdenEstimacionForma.MovID,
                    Sucursal = oOrdenEstimacionForma.Sucursal,
                    FechaEmision = oOrdenEstimacionForma.FechaEmision,
                    Observaciones = oOrdenEstimacionForma.Observaciones,
                    RSucursal = oOrdenEstimacionForma.RSucursal,
                    Estatus = oOrdenEstimacionForma.Estatus,
                    Usuario = oOrdenEstimacionForma.Usuario,
                    Origen = oOrdenEstimacionForma.Origen,
                    OrigenId = oOrdenEstimacionForma.OrigenId,
                    Reporte = oOrdenEstimacionForma.Reporte,

                    //5. Segunda parte
                    Division = oOrdenEstimacionForma.Division,
                    FechaOrigen = oOrdenEstimacionForma.FechaOrigen,
                    FechaMaximaAtencion = oOrdenEstimacionForma.FechaMaximaAtencion,
                    DiasAtencion = oOrdenEstimacionForma.DiasAtencion,
                    Reporto = oOrdenEstimacionForma.Reporto,
                    TrabajoRequerido = oOrdenEstimacionForma.TrabajoRequerido,

                    //6. Tercera parte
                    TrabajoRealizado = oOrdenEstimacionForma.TrabajoRealizado,
                    CodigoFalla = oOrdenEstimacionForma.CodigoFalla,
                    FechaLlegada = oOrdenEstimacionForma.FechaLlegada,
                    HoraLlegada = oOrdenEstimacionForma.HoraLlegada,
                    FechaFinActividad = oOrdenEstimacionForma.FechaFinActividad,
                    HoraFinActividad = oOrdenEstimacionForma.HoraFinActividad,
                    Cuadrilla = oOrdenEstimacionForma.Cuadrilla,
                    ImporteFinal = oOrdenEstimacionForma.ImporteTotal,
                    HoraOrigen = oOrdenEstimacionForma.HoraOrigen,
                    RutaImagen = oOrdenEstimacionForma.RutaImagen,
                    Atendido = oOrdenEstimacionForma.Atendido,
                    NoOrden = oOrdenEstimacionForma.NoOrden,
                    ReferenciaOrden = oOrdenEstimacionForma.ReferenciaOrden,
                    Clasificacion = oOrdenEstimacionForma.Clasificacion == null ? oOrdenEstimacionForma.Clasificacion : "",
                    Cliente = oOrdenEstimacionForma.Cliente,
                    RCliente = oOrdenEstimacionForma.RCliente
                });

                //7. Guardar Detalle y regresar valor
                GuardarDetalleOrdenEstimacion(lOrdenEstimacionD, oOrdenEstimacionForma);
                return "insertar";
            }
            else
            {
                //8. Complementar datos y actualizar encabezado
                if (bandera.Equals("SI"))
                {
                    string strDireccion = Server.MapPath(" ") + "\\imagenesReportes\\" + oOrdenEstimacionForma.Reporte;
                    //2. Validar si existe el directorio donde se guardaran las imagenes
                    if (Directory.Exists(strDireccion))
                    {
                        fufNormal.PostedFile.SaveAs(strDireccion + "\\" + fufNormal.FileName);
                    }
                    else
                    {
                        Directory.CreateDirectory(strDireccion);
                        fufNormal.PostedFile.SaveAs(strDireccion + "\\" + fufNormal.FileName);
                    }
                    //Guardamos en la bd
                    oOrdenEstimacionForma.RutaImagen = "imagenesReportes\\" + oOrdenEstimacionForma.Reporte + "\\" + fufNormal.FileName;

                }
                else
                {
                    oOrdenEstimacionForma.RutaImagen = oOrdenEstimacion.RutaImagen;
                }

                oOrdenEstimacionForma.Id = oOrdenEstimacion.Id;
                //if (oOrdenEstimacionForma.Cliente == null)
                //{
                //    oOrdenEstimacionForma.Cliente = "";
                //}
                OrdenEstimacionBusiness.ActualizarOrdenEstimacion(oOrdenEstimacionForma);

                //9. Actualizar store de OrdenesEstimaciones
                sOrdenEstimacion.GetAt(0).Set("Mov", oOrdenEstimacionForma.Mov);
                sOrdenEstimacion.GetAt(0).Set("Sucursal", oOrdenEstimacionForma.Sucursal);
                sOrdenEstimacion.GetAt(0).Set("FechaEmision", oOrdenEstimacionForma.FechaEmision);
                sOrdenEstimacion.GetAt(0).Set("Estaus", oOrdenEstimacionForma.Estatus);
                sOrdenEstimacion.GetAt(0).Set("Observaciones", oOrdenEstimacionForma.Observaciones);

                //10. Campos extras de reporte
                sOrdenEstimacion.GetAt(0).Set("Reporte", oOrdenEstimacionForma.Reporte);
                sOrdenEstimacion.GetAt(0).Set("Division", oOrdenEstimacionForma.Division);
                sOrdenEstimacion.GetAt(0).Set("FechaOrigen", oOrdenEstimacionForma.FechaOrigen);
                sOrdenEstimacion.GetAt(0).Set("FechaMaximaAtencion", oOrdenEstimacionForma.FechaMaximaAtencion);
                sOrdenEstimacion.GetAt(0).Set("DiasAtencion", oOrdenEstimacionForma.DiasAtencion);
                sOrdenEstimacion.GetAt(0).Set("Reporto", oOrdenEstimacionForma.Reporto);
                sOrdenEstimacion.GetAt(0).Set("TrabajoRequerido", oOrdenEstimacionForma.TrabajoRequerido);

                //11. Campos extras 2
                sOrdenEstimacion.GetAt(0).Set("TrabajoRealizado", oOrdenEstimacionForma.TrabajoRealizado);
                sOrdenEstimacion.GetAt(0).Set("CodigoFalla", oOrdenEstimacionForma.CodigoFalla);
                sOrdenEstimacion.GetAt(0).Set("FechaLlegada", oOrdenEstimacionForma.FechaLlegada);
                sOrdenEstimacion.GetAt(0).Set("HoraLlegada", oOrdenEstimacionForma.HoraLlegada);
                sOrdenEstimacion.GetAt(0).Set("FechaFinActividad", oOrdenEstimacionForma.FechaFinActividad);
                sOrdenEstimacion.GetAt(0).Set("HoraFinActividad", oOrdenEstimacionForma.HoraFinActividad);
                sOrdenEstimacion.GetAt(0).Set("Cuadrilla", oOrdenEstimacionForma.Cuadrilla);

                //12. Importe
                sOrdenEstimacion.GetAt(0).Set("ImporteFinal", oOrdenEstimacionForma.ImporteTotal);
                sOrdenEstimacion.GetAt(0).Set("HoraOrigen", oOrdenEstimacionForma.HoraOrigen);
                sOrdenEstimacion.GetAt(0).Set("RutaImagen", oOrdenEstimacionForma.RutaImagen);
                sOrdenEstimacion.GetAt(0).Set("NoOrden", oOrdenEstimacionForma.NoOrden);
                sOrdenEstimacion.GetAt(0).Set("ReferenciaOrden", oOrdenEstimacionForma.ReferenciaOrden);
                sOrdenEstimacion.GetAt(0).Set("Clasificacion", oOrdenEstimacionForma.Clasificacion);
                sOrdenEstimacion.GetAt(0).Set("Cliente", oOrdenEstimacionForma.Cliente);
                //13. Borrar todo el detalle e insertarlo de nuevo
               // OrdenEstimacionDBusiness.BorrarPorID(oOrdenEstimacionForma.Id);
                OrdenEstimacionDBusiness.BorrarPorID(oOrdenEstimacionForma.Id);
                GuardarDetalleOrdenEstimacion(lOrdenEstimacionD, oOrdenEstimacionForma);

                //14. Regresar valor
                return "modificar";
            }
        }
        /// <summary>
        /// Evento que Guarda el detalle de OrdenEstimacionD
        /// </summary>
        /// <param name="lOrdenEstimacionD"></param>
        /// <param name="oOrdenEstimacionForma"></param>
        private void GuardarDetalleOrdenEstimacion(List<OrdenEstimacionD> lOrdenEstimacionD, OrdenEstimacion oOrdenEstimacionForma)
        {
            //X.Msg.Alert("Confirm", "R: " + lOrdenEstimacionD.Count(), new JFunction { Fn = "showResult" }).Show();
            //1. Insertar los datos del detalle
            foreach (OrdenEstimacionD sd in lOrdenEstimacionD)
            {
                //2. Validar que el objeto no venga en blanco
                if (sd.ConceptoID.Equals(string.Empty) || sd.Cantidad.Equals(string.Empty) || sd.Precio == 0)
                    continue;
                else
                {
                    sd.Id = oOrdenEstimacionForma.Id;
                    //

                    OrdenEstimacionDBusiness.Insertar(sd);
                }
            }
        }
 /// <summary>
 /// Evento que Guarda el detalle de OrdenEstimacionD
 /// </summary>
 /// <param name="lOrdenEstimacionD"></param>
 /// <param name="oOrdenEstimacionForma"></param>
 private void ActualizarDetalleOrdenEstimacion(List<OrdenEstimacionD> lOrdenEstimacionD, OrdenEstimacion oOrdenEstimacionForma)
 {
     //1. Insertar los datos del detalle
     foreach (OrdenEstimacionD sd in lOrdenEstimacionD)
     {
         //2. Validar que el objeto no venga en blanco
         if (sd.ConceptoID.Equals(string.Empty) || sd.Cantidad.Equals(string.Empty) || sd.Precio == 0)
             continue;
         else
         {
             sd.Id = oOrdenEstimacionForma.Id;
             //OrdenEstimacionDBusiness.BorrarPorID(sd.Id);
             OrdenEstimacionDBusiness.Actualizar(sd);
         }
     }
 }