/// <summary>
        /// Evento que se lanza al cargar el store
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void sPreciarioGeneral_Load(object sender, DirectEventArgs e)
        {
            //1. Obtener valor de la cookie
            string strcookieEditarPreciario = Cookies.GetCookie("cookieEditarPreciarioGeneral").Value;

            //2. Validar si es un nuevo registro o se va a editar
            if (!strcookieEditarPreciario.Equals("Nuevo"))
            {
                //3. Cargar el Encabezado
                PreciarioGeneral oPreciario = PreciarioGeneralBusiness.ObtenerPreciarioGeneralPorID(strcookieEditarPreciario);
                sPreciarioGeneral.Add(new
                {
                    ID                = oPreciario.ID,
                    Descripcion       = oPreciario.Descripcion,
                    Archivo           = oPreciario.Archivo,
                    Estatus           = oPreciario.Estatus,
                    FechaAlta         = oPreciario.FechaAlta,
                    Usuario           = oPreciario.Usuario,
                    TipoMantenimiento = oPreciario.TipoMantenimiento,
                    TipoObra          = oPreciario.TipoObra
                });

                //4. Cargar el detalle del movimiento
                sCarga.DataSource = PreciarioGeneralConceptoBusiness.ObtenerPreciarioGeneralConceptoPorPreciario(oPreciario.ID);
                sCarga.DataBind();
            }
        }
        /// <summary>
        /// Evento que vuelve a leer los datos para ser cargados al store
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void OnReadData_sCarga(object sender, StoreReadDataEventArgs e)
        {
            //4. Cargar el detalle del movimiento
            string strcookieEditarPreciario = Cookies.GetCookie("cookieEditarPreciarioGeneral").Value;

            sCarga.DataSource = PreciarioGeneralConceptoBusiness.ObtenerPreciarioGeneralConceptoPorPreciario(strcookieEditarPreciario);
            sCarga.DataBind();
        }
        /// <summary>
        /// Evento de clic del botón Guardar
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void imgbtnGuardar_Click(object sender, DirectEventArgs e)
        {
            //1. Obtener datos de la Forma y saber si es edición o nuevo
            string strRegistro = e.ExtraParams["registro"];
            string strEstatus  = e.ExtraParams["estatus"];
            string strArchivo  = e.ExtraParams["archivo"];
            string rTipoObra   = e.ExtraParams["tipoObra"];
            string rTipoMtno   = e.ExtraParams["tipoMnto"];

            string strRegistrosNuevos       = e.ExtraParams["registrosnuevos"];
            string strRegistrosActualizados = e.ExtraParams["registrosactualizados"];
            string strRegistrosEliminados   = e.ExtraParams["registroseliminados"];

            string strcookieEditarPreciario       = Cookies.GetCookie("cookieEditarPreciarioGeneral").Value;
            Dictionary <string, string> dRegistro = JSON.Deserialize <Dictionary <string, string> >(strRegistro);
            string strPreciarioDetalle            = e.ExtraParams["DetallePreciario"];

            //2. Se guarda en una lista el Store que contiene todos los campos para deserealizarlos y usarlos para el insert
            List <PreciarioGeneralConcepto> lDetallePreciario = JSON.Deserialize <List <PreciarioGeneralConcepto> >(strPreciarioDetalle);

            PreciarioGeneral oPreciario = new PreciarioGeneral();

            //3. 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 del preciario
                case "txtfDescripcion":
                    oPreciario.Descripcion = sd.Value;
                    break;
                }
            }

            //5. Se toma el nombre del archivo de Excel que se está cargando
            oPreciario.Archivo = fufArchivoExcel.FileName;

            //6. Validar si es nuevo o es uno existente
            if (strcookieEditarPreciario.Equals("Nuevo"))
            {
                //7. Traemeos el objeto de sesion para llenr el objeto con los datos de usuario
                oPreciario.FechaAlta = DateTime.Now;


                Usuario oUsuario = (Usuario)Session["Usuario"];
                oPreciario.Usuario = oUsuario.ID;
                oPreciario.Estatus = strEstatus;

                if (rTipoObra.Equals("true"))
                {
                    oPreciario.TipoObra = true;
                }

                if (rTipoMtno.Equals("true"))
                {
                    oPreciario.TipoMantenimiento = true;
                }


                if (PreciarioGeneralBusiness.ObtenerPreciariosGeneralesRepetidos(oPreciario.Descripcion))
                {
                    var success = new JFunction {
                        Fn = "imgbtnGuardar_Click_SuccessRepetido"
                    };
                    X.Msg.Alert("Alerta", "<p align='center'>El preciario ya se encuentra registrado con el nombre: <br/>" + oPreciario.Descripcion + ".</p>", success).Show();
                }
                else
                {
                    //8. Insertar en la base de datos
                    oPreciario.ID = PreciarioGeneralBusiness.Insertar(oPreciario);
                    string categoria       = "";
                    string subcategoria    = "";
                    string subsubcategoria = "";

                    foreach (PreciarioGeneralConcepto sd in lDetallePreciario)
                    {
                        //9. Insertar Categoria
                        if (sd.Tipo.Equals("1"))
                        {
                            PreciarioGeneralCategoria c = new PreciarioGeneralCategoria();
                            c.Clave       = sd.Clave;
                            c.Preciario   = oPreciario.ID;
                            c.Descripcion = sd.Descripcion;
                            c.Usuario     = oUsuario.ID;
                            c.Estatus     = sd.Estatus;
                            c.FechaAlta   = sd.FechaAlta;
                            categoria     = PreciarioGeneralCategoriaBusiness.Insertar(c);
                        }
                        //10. Insertar SubCategoria
                        if (sd.Tipo.Equals("2"))
                        {
                            PreciarioGeneralSubCategoria sc = new PreciarioGeneralSubCategoria();
                            sc.Clave       = sd.Clave;
                            sc.Preciario   = oPreciario.ID;
                            sc.Descripcion = sd.Descripcion;
                            sc.Categoria   = categoria;
                            sc.Usuario     = oUsuario.ID;
                            sc.Estatus     = sd.Estatus;
                            sc.FechaAlta   = sd.FechaAlta;
                            subcategoria   = PreciarioGeneralSubCategoriaBusiness.Insertar(sc);
                        }
                        //11. Insertar SubSubCategoria
                        if (sd.Tipo.Equals("3"))
                        {
                            PreciarioGeneralSubSubCategoria ssc = new PreciarioGeneralSubSubCategoria();
                            ssc.Clave        = sd.Clave;
                            ssc.Preciario    = oPreciario.ID;
                            ssc.Descripcion  = sd.Descripcion;
                            ssc.Categoria    = categoria;
                            ssc.SubCategoria = subcategoria;
                            ssc.Usuario      = oUsuario.ID;
                            ssc.Estatus      = sd.Estatus;
                            ssc.FechaAlta    = sd.FechaAlta;
                            subsubcategoria  = PreciarioGeneralSubSubCategoriaBusiness.Insertar(ssc);
                        }
                        //12. Insertar Concepto
                        if (sd.Tipo.Equals(""))
                        {
                            PreciarioGeneralConcepto pc = new PreciarioGeneralConcepto();
                            pc.Clave           = sd.Clave;
                            pc.Preciario       = oPreciario.ID;
                            pc.Descripcion     = sd.Descripcion;
                            pc.Unidad          = sd.Unidad;
                            pc.Cantidad        = sd.Cantidad;
                            pc.Costo           = sd.Costo;
                            pc.Categoria       = categoria;
                            pc.SubCategoria    = subcategoria;
                            pc.SubSubCategoria = subsubcategoria;
                            pc.Usuario         = oUsuario.ID;
                            pc.Estatus         = sd.Estatus;
                            pc.FechaAlta       = sd.FechaAlta;
                            pc.Moneda          = sd.Moneda;
                            PreciarioGeneralConceptoBusiness.Insertar(pc);
                        }
                    }
                    //Inserta las categorias de otros
                    PreciarioGeneralCategoria catg = new PreciarioGeneralCategoria();
                    catg.Clave       = "OTR-001";
                    catg.Preciario   = oPreciario.ID;
                    catg.Descripcion = "OTROS ADICIONALES";
                    catg.Usuario     = oUsuario.ID;
                    catg.Estatus     = strEstatus;
                    catg.FechaAlta   = DateTime.Now;
                    categoria        = PreciarioGeneralCategoriaBusiness.Insertar(catg);

                    PreciarioGeneralSubCategoria scatg = new PreciarioGeneralSubCategoria();
                    scatg.Clave       = "OTR-001";
                    scatg.Preciario   = oPreciario.ID;
                    scatg.Descripcion = "OTROS ADICIONALES";
                    scatg.Usuario     = oUsuario.ID;
                    scatg.Categoria   = categoria;
                    scatg.Estatus     = strEstatus;
                    scatg.FechaAlta   = DateTime.Now;
                    subcategoria      = PreciarioGeneralSubCategoriaBusiness.Insertar(scatg);

                    PreciarioGeneralSubSubCategoria sscatg = new PreciarioGeneralSubSubCategoria();
                    sscatg.Clave        = "OTR-001";
                    sscatg.Preciario    = oPreciario.ID;
                    sscatg.Descripcion  = "OTROS ADICIONALES";
                    sscatg.Categoria    = categoria;
                    sscatg.SubCategoria = subcategoria;
                    sscatg.Usuario      = oUsuario.ID;
                    sscatg.Estatus      = strEstatus;
                    sscatg.FechaAlta    = DateTime.Now;
                    PreciarioGeneralSubSubCategoriaBusiness.Insertar(sscatg);

                    //13. Mandar mensaje con el código del Preciario
                    var success = new JFunction {
                        Fn = "imgbtnGuardar_Click_Success"
                    };
                    X.Msg.Alert("Registro completo", "<p align='center'>Preciario registrado con ID: <br/>" + oPreciario.ID + ".</p>", success).Show();

                    sCarga.DataSource = PreciarioGeneralConceptoBusiness.ObtenerPreciarioGeneralConceptoPorPreciario(oPreciario.ID);
                    sCarga.DataBind();
                }
            }
            else
            {
                //14. Valida que archivo guardar
                if (fufArchivoExcel.FileName.Equals(""))
                {
                    oPreciario.Archivo = strArchivo;
                }
                else
                {
                    oPreciario.Archivo = fufArchivoExcel.FileName;
                }

                //15. Tomamos la sucursal y estatus como parametro independiente por que ya esta deshabilitada
                oPreciario.ID      = strcookieEditarPreciario;//ID PRE
                oPreciario.Estatus = strEstatus;

                //16. Actualizar los datos del Preciario
                PreciarioGeneralBusiness.Actualizar(oPreciario);

                //16.1 Validamos si tiene nuevos conceptos
                Usuario usr = (Usuario)Session["Usuario"];
                if (!strRegistrosNuevos.Equals("0"))
                {
                    List <PreciarioGeneralConcepto> lDetallePreciarioNuevos = JSON.Deserialize <List <PreciarioGeneralConcepto> >(strRegistrosNuevos);
                    foreach (PreciarioGeneralConcepto sd in lDetallePreciarioNuevos)
                    {
                        PreciarioGeneralConcepto npgc = new PreciarioGeneralConcepto();
                        npgc.Clave           = sd.Clave;
                        npgc.Preciario       = oPreciario.ID;
                        npgc.Descripcion     = sd.Descripcion;
                        npgc.Unidad          = sd.Unidad;
                        npgc.Cantidad        = sd.Cantidad;
                        npgc.Costo           = sd.Costo;
                        npgc.Categoria       = sd.Categoria;
                        npgc.SubCategoria    = sd.SubCategoria;
                        npgc.SubSubCategoria = sd.SubSubCategoria;
                        npgc.Usuario         = usr.ID;
                        npgc.Estatus         = oPreciario.Estatus;
                        npgc.FechaAlta       = DateTime.Now;
                        npgc.Moneda          = sd.Moneda;
                        PreciarioGeneralConceptoBusiness.Insertar(npgc);
                    }
                }
                if (!strRegistrosActualizados.Equals("0"))
                {
                    List <PreciarioGeneralConcepto> lDetallePreciarioActualizados = JSON.Deserialize <List <PreciarioGeneralConcepto> >(strRegistrosActualizados);
                    foreach (PreciarioGeneralConcepto sd in lDetallePreciarioActualizados)
                    {
                        PreciarioGeneralConcepto npgc = new PreciarioGeneralConcepto();
                        npgc.ID              = sd.ID;
                        npgc.Clave           = sd.Clave;
                        npgc.Preciario       = oPreciario.ID;
                        npgc.Descripcion     = sd.Descripcion;
                        npgc.Unidad          = sd.Unidad;
                        npgc.Cantidad        = sd.Cantidad;
                        npgc.Costo           = sd.Costo;
                        npgc.Categoria       = sd.Categoria;
                        npgc.SubCategoria    = sd.SubCategoria;
                        npgc.SubSubCategoria = sd.SubSubCategoria;
                        npgc.Usuario         = usr.ID;
                        npgc.Estatus         = oPreciario.Estatus;
                        npgc.FechaAlta       = DateTime.Now;
                        npgc.Moneda          = sd.Moneda;
                        PreciarioGeneralConceptoBusiness.Actualizar(npgc);
                    }
                }
                if (!strRegistrosEliminados.Equals("0"))
                {
                    List <PreciarioGeneralConcepto> lDetallePreciarioEliminados = JSON.Deserialize <List <PreciarioGeneralConcepto> >(strRegistrosEliminados);
                    foreach (PreciarioGeneralConcepto sd in lDetallePreciarioEliminados)
                    {
                        PreciarioGeneralConceptoBusiness.Borrar(sd.ID, sd.Clave);
                    }
                }


                //17. Mandar mensaje con el código del preciario
                var success = new JFunction {
                    Fn = "imgbtnGuardar_Click_Success"
                };
                X.Msg.Alert("Actualización completa", "<p align='center'>Se han actualizado los datos del preciario <br/>" + oPreciario.ID + ".</p>", success).Show();
            }
        }