/// <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 strFinObra = e.ExtraParams["FInObra"];
            string strSemanasObra = e.ExtraParams["semanasObra"];

            string strcookieEditarSucursal = Cookies.GetCookie("cookieEditarSucursal").Value;

            Dictionary<string, string> dRegistro = JSON.Deserialize<Dictionary<string, string>>(strRegistro);
            Sucursal oSucursal = new Sucursal();
            oSucursal.FechaAlta = DateTime.Now;

            string strcookieCP = "";
            string strcookieMunicipio = "";
            string strcookieEstado = "";
            string strcookieColonia = "";

            if (strcookieEditarSucursal.Equals("Nuevo"))
            {

                strcookieCP = Cookies.GetCookie("cookieCP").Value;
                strcookieMunicipio = Cookies.GetCookie("cookieMunicipio").Value;
                strcookieEstado = Cookies.GetCookie("cookieEstado").Value;
                strcookieColonia = Cookies.GetCookie("cookieColonia").Value;
                oSucursal.CodigoPostal = strcookieCP;
                oSucursal.Colonia = strcookieColonia;
                oSucursal.Estado = strcookieEstado;
                oSucursal.Municipio = strcookieMunicipio;
            }
            else {
                strcookieCP = Cookies.GetCookie("cookieCP").Value;
                strcookieMunicipio = Cookies.GetCookie("cookieMunicipio").Value;
                strcookieEstado = Cookies.GetCookie("cookieEstado").Value;
                strcookieColonia = Cookies.GetCookie("cookieColonia").Value;
                if (strcookieCP.Length > 0)
                {
                    oSucursal.CodigoPostal = strcookieCP;
                    oSucursal.Colonia = strcookieColonia;
                    oSucursal.Estado = strcookieEstado;
                    oSucursal.Municipio = strcookieMunicipio;
                } else {
                    Sucursal oSucursalForma = SucursalBusiness.ObtenerSucursalPorID(strcookieEditarSucursal);
                    if (oSucursal != null)
                    {
                        oSucursal.CodigoPostal = oSucursalForma.CodigoPostal;
                        oSucursal.Colonia = oSucursalForma.Colonia;
                        oSucursal.Estado = oSucursalForma.Estado;
                        oSucursal.Municipio = oSucursalForma.Municipio;
                    }
                }

            }

            //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)
                {
                    //3. Datos del proveedor
                    case "nfCR":
                        oSucursal.CR = Convert.ToInt16(sd.Value);
                        break;
                    case "txtfNombre":
                        oSucursal.Nombre = sd.Value;
                        break;
                    case "txtfDireccionZona":
                        oSucursal.Direccionzona = sd.Value;
                        break;
                    case "txtfGerenteBBVANombre":
                        oSucursal.GerenteBBVANombre = sd.Value;
                        break;
                    case "txtfGerenteBBVAAPaterno":
                        oSucursal.GerenteBBVAAPaterno = sd.Value;
                        break;
                    case "txtfGerenteBBVAAMaterno":
                        oSucursal.GerenteBBVAAMaterno = sd.Value;
                        break;
                    case "txtfSupervisorNombre":
                        oSucursal.SupervisorNombre = sd.Value;
                        break;
                    case "txtfSupervisorAPaterno":
                        oSucursal.SupervisorAPaterno = sd.Value;
                        break;
                    case "txtfSupervisorAMaterno":
                        oSucursal.SupervisorAMaterno = sd.Value;
                        break;
                    case "txtfProveedorEnergia":
                        oSucursal.ProveedorEnergia = sd.Value;
                        break;
                    case "nfSuperficie":
                        oSucursal.Superficie = Convert.ToInt32(sd.Value);
                        break;
                    case "txtfCoordinadorNombre":
                        oSucursal.CoordinadorNombre = sd.Value;
                        break;
                    case "txtfCoordinadorAPaterno":
                        oSucursal.CoordinadorAPaterno = sd.Value;
                        break;
                    case "txtfCoordinadorAMaterno":
                        oSucursal.CoordinadorAMaterno = sd.Value;
                        break;
                    case "txtfCalle":
                        oSucursal.Calle = sd.Value;
                        break;
                    case "txtfEntreCalles":
                        oSucursal.EntreCalles = sd.Value;
                        break;
                    case "txtfNoExterior":
                        oSucursal.NoExterior = sd.Value;
                        break;
                    case "txtfNoInterior":
                        oSucursal.NoInterior = sd.Value;
                        break;
                    //case "txtfCodigoPostal":
                    //    oSucursal.CodigoPostal = Convert.ToInt32(sd.Value);
                    //    break;
                    //case "cmbColonia":
                    //    oSucursal.Colonia = sd.Value;
                    //    break;
                    //case "cmbEstado":
                    //    oSucursal.Estado = sd.Value;
                    //    break;
                    //case "cmbMunicipio":
                    //    oSucursal.Municipio = sd.Value;
                    //    break;
                    case "cmbProveedor":
                        oSucursal.Contratista = sd.Value;
                        break;
                    case "dfInicioObra":
                        oSucursal.InicioObra = Convert.ToDateTime(sd.Value);
                        break;
                    case "dfFechaAlta":
                        oSucursal.FechaAlta = Convert.ToDateTime(sd.Value);
                        break;
                    case "cmbEstatus":
                        oSucursal.Estatus = sd.Value;
                        break;
                    case "cmbEmpresaSupervisora":
                        oSucursal.EmpresaSupervisora = sd.Value == null || sd.Value.Equals("") ? "" : sd.Value;
                        break;
                    case "cmbTipoConcepto":
                        oSucursal.TipoConcepto = sd.Value == null || sd.Value.Equals("") ? "" : sd.Value;
                        break;
                    case "txtTipoObra":
                        oSucursal.TipoObra = sd.Value == null || sd.Value.Equals("") ? "" : sd.Value;
                        break;
                }
            }
            oSucursal.FinObra = Convert.ToDateTime(strFinObra);
            oSucursal.SemanasObra = Convert.ToInt16(strSemanasObra);
            string strcookieCliente = Cookies.GetCookie("cookieEditarCliente").Value != null || Cookies.GetCookie("cookieEditarCliente").Value.Length > 0 ? Cookies.GetCookie("cookieEditarCliente").Value : "";
            oSucursal.Cliente = strcookieCliente;

            if(strcookieCliente != null && !strcookieCliente.Equals("")){
                oSucursal.Cliente = strcookieCliente;
            }
            //4. Validar si es nuevo o es uno existente
            if (strcookieEditarSucursal.Equals("Nuevo"))
            {
                //5. Insertar en la base de datos
                oSucursal.FechaAlta = DateTime.Now;
                oSucursal.Estatus = "ALTA";

                if (SucursalBusiness.ObtenerCREnSucursales(oSucursal.CR, strcookieCliente))
                {
                    var success = new JFunction { Fn = "imgbtnGuardar_Click_SuccessCR" };
                    X.Msg.Alert("Alerta", "<p align='center'>El cliente ya posee esta sucursal registrada con CR: <br/>" + oSucursal.CR + ".</p>", success).Show();
                }else{
                    oSucursal.ID = SucursalBusiness.Insertar(oSucursal);
                    //6. Mandar mensaje con el código del proveedor
                    var success = new JFunction { Fn = "imgbtnGuardar_Click_Success" };
                    X.Msg.Alert("Registro completo", "<p align='center'>Sucursal registrada con ID: <br/>" + oSucursal.ID + ".</p>", success).Show();
                }
            }
            else
            {
                oSucursal.ID = strcookieEditarSucursal;
                oSucursal.Estatus = strEstatus;
                //7. Actualizar los datos del proveedor
                SucursalBusiness.Actualizar(oSucursal);
                //8. Mandar mensaje con el código del proveedor
                var success = new JFunction { Fn = "imgbtnGuardar_Click_Success" };
                X.Msg.Alert("Actualización completa", "<p align='center'>Se han actualizado los datos de la sucursal <br/>" + oSucursal.ID + ".</p>", success).Show();
            }
        }
 /// <summary>
 /// Método que actualiza un nuevo registro a la tabla de Sucursales
 /// </summary>
 /// <param name="uSucursal"></param>
 /// <returns></returns>
 public static int Actualizar(Sucursal uSucursal)
 {
     return SucursalDataAccess.Actualizar(uSucursal);
 }
 /// <summary>
 /// Método que inserta un nuevo registro a la tabla de Sucursales
 /// </summary>
 /// <param name="iSucursal"></param>
 public static string Insertar(Sucursal iSucursal)
 {
     return SucursalDataAccess.Insertar(iSucursal);
 }
        /// <summary>
        /// Método que inserta un nuevo registro a la tabla de Sucursales
        /// </summary>
        /// <param name="iSucursal"></param>
        public static string Insertar(Sucursal iSucursal)
        {
            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_InsertarSucursal";

                //2. Declarar los parametros
                SqlParameter sqlpID = new SqlParameter();
                sqlpID.ParameterName = "@ID";
                sqlpID.SqlDbType = SqlDbType.Char;
                sqlpID.Value = iSucursal.ID;
                sqlpID.Size = 10;
                sqlpID.Direction = ParameterDirection.Output;

                SqlParameter sqlpCR = new SqlParameter();
                sqlpCR.ParameterName = "@CR";
                sqlpCR.SqlDbType = SqlDbType.SmallInt;
                sqlpCR.Value = iSucursal.CR;

                SqlParameter sqlpNombre = new SqlParameter();
                sqlpNombre.ParameterName = "@Nombre";
                sqlpNombre.SqlDbType = SqlDbType.VarChar;
                sqlpNombre.Value = iSucursal.Nombre;

                SqlParameter sqlpDireccionZona = new SqlParameter();
                sqlpDireccionZona.ParameterName = "@DireccionZona";
                sqlpDireccionZona.SqlDbType = SqlDbType.VarChar;
                sqlpDireccionZona.Value = iSucursal.Direccionzona;

                SqlParameter sqlpGerenteBBVANombre = new SqlParameter();
                sqlpGerenteBBVANombre.ParameterName = "@GerenteBBVANombre";
                sqlpGerenteBBVANombre.SqlDbType = SqlDbType.VarChar;
                sqlpGerenteBBVANombre.Value = iSucursal.GerenteBBVANombre;

                SqlParameter sqlpGerenteBBVAAPaterno = new SqlParameter();
                sqlpGerenteBBVAAPaterno.ParameterName = "@GerenteBBVAAPaterno";
                sqlpGerenteBBVAAPaterno.SqlDbType = SqlDbType.VarChar;
                sqlpGerenteBBVAAPaterno.Value = iSucursal.GerenteBBVAAPaterno;

                SqlParameter sqlpGerenteBBVAAMaterno = new SqlParameter();
                sqlpGerenteBBVAAMaterno.ParameterName = "@GerenteBBVAAMaterno";
                sqlpGerenteBBVAAMaterno.SqlDbType = SqlDbType.VarChar;
                sqlpGerenteBBVAAMaterno.Value = iSucursal.GerenteBBVAAMaterno;

                SqlParameter sqlpSupervisorNombre = new SqlParameter();
                sqlpSupervisorNombre.ParameterName = "@SupervisorNombre";
                sqlpSupervisorNombre.SqlDbType = SqlDbType.VarChar;
                sqlpSupervisorNombre.Value = iSucursal.SupervisorNombre;

                SqlParameter sqlpSupervisorAPaterno = new SqlParameter();
                sqlpSupervisorAPaterno.ParameterName = "@SupervisorAPaterno";
                sqlpSupervisorAPaterno.SqlDbType = SqlDbType.VarChar;
                sqlpSupervisorAPaterno.Value = iSucursal.SupervisorAPaterno;

                SqlParameter sqlpSupervisorAMaterno = new SqlParameter();
                sqlpSupervisorAMaterno.ParameterName = "@SupervisorAMaterno";
                sqlpSupervisorAMaterno.SqlDbType = SqlDbType.VarChar;
                sqlpSupervisorAMaterno.Value = iSucursal.SupervisorAMaterno;

                SqlParameter sqlpProveedorEnergia = new SqlParameter();
                sqlpProveedorEnergia.ParameterName = "@ProveedorEnergia";
                sqlpProveedorEnergia.SqlDbType = SqlDbType.VarChar;
                sqlpProveedorEnergia.Value = iSucursal.ProveedorEnergia;

                SqlParameter sqlpSuperficie = new SqlParameter();
                sqlpSuperficie.ParameterName = "@Superficie";
                sqlpSuperficie.SqlDbType = SqlDbType.Int;
                sqlpSuperficie.Value = iSucursal.Superficie;

                SqlParameter sqlpCoordinadorNombre = new SqlParameter();
                sqlpCoordinadorNombre.ParameterName = "@CoordinadorNombre";
                sqlpCoordinadorNombre.SqlDbType = SqlDbType.VarChar;
                sqlpCoordinadorNombre.Value = iSucursal.CoordinadorNombre;

                SqlParameter sqlpCoordinadorAPaterno = new SqlParameter();
                sqlpCoordinadorAPaterno.ParameterName = "@CoordinadorAPaterno";
                sqlpCoordinadorAPaterno.SqlDbType = SqlDbType.VarChar;
                sqlpCoordinadorAPaterno.Value = iSucursal.CoordinadorAPaterno;

                SqlParameter sqlpCoordinadorAMaterno = new SqlParameter();
                sqlpCoordinadorAMaterno.ParameterName = "@CoordinadorAMaterno";
                sqlpCoordinadorAMaterno.SqlDbType = SqlDbType.VarChar;
                sqlpCoordinadorAMaterno.Value = iSucursal.CoordinadorAMaterno;

                SqlParameter sqlpCalle = new SqlParameter();
                sqlpCalle.ParameterName = "@Calle";
                sqlpCalle.SqlDbType = SqlDbType.VarChar;
                sqlpCalle.Value = iSucursal.Calle;

                SqlParameter sqlpEntreCalles = new SqlParameter();
                sqlpEntreCalles.ParameterName = "@EntreCalles";
                sqlpEntreCalles.SqlDbType = SqlDbType.VarChar;
                sqlpEntreCalles.Value = iSucursal.EntreCalles;

                SqlParameter sqlpNoExterior = new SqlParameter();
                sqlpNoExterior.ParameterName = "@NoExterior";
                sqlpNoExterior.SqlDbType = SqlDbType.VarChar;
                sqlpNoExterior.Value = iSucursal.NoExterior;

                SqlParameter sqlpNoInterior = new SqlParameter();
                sqlpNoInterior.ParameterName = "@NoInterior";
                sqlpNoInterior.SqlDbType = SqlDbType.VarChar;
                sqlpNoInterior.Value = iSucursal.NoInterior;

                SqlParameter sqlpCodigoPostal = new SqlParameter();
                sqlpCodigoPostal.ParameterName = "@CodigoPostal";
                sqlpCodigoPostal.SqlDbType = SqlDbType.Char;
                sqlpCodigoPostal.Size = 10;
                sqlpCodigoPostal.Value = iSucursal.CodigoPostal;

                SqlParameter sqlpColonia = new SqlParameter();
                sqlpColonia.ParameterName = "@Colonia";
                sqlpColonia.SqlDbType = SqlDbType.VarChar;

                if (iSucursal.Colonia == null)
                    sqlpColonia.Value = DBNull.Value;
                else
                    sqlpColonia.Value = iSucursal.Colonia;

                SqlParameter sqlpEstado = new SqlParameter();
                sqlpEstado.ParameterName = "@Estado";
                sqlpEstado.SqlDbType = SqlDbType.Char;
                sqlpEstado.Size = 2;
                sqlpEstado.Value = iSucursal.Estado;

                SqlParameter sqlpMunicipio = new SqlParameter();
                sqlpMunicipio.ParameterName = "@Municipio";
                sqlpMunicipio.SqlDbType = SqlDbType.Char;
                sqlpMunicipio.Size = 4;
                sqlpMunicipio.Value = iSucursal.Municipio;

                SqlParameter sqlpContratista = new SqlParameter();
                sqlpContratista.ParameterName = "@Contratista";
                sqlpContratista.SqlDbType = SqlDbType.VarChar;
                if (iSucursal.Contratista != null)
                {
                    sqlpContratista.Value = iSucursal.Contratista;
                }
                else
                {
                    sqlpContratista.Value = DBNull.Value;
                }

                SqlParameter sqlpInicioObra = new SqlParameter();
                sqlpInicioObra.ParameterName = "@InicioObra";
                sqlpInicioObra.SqlDbType = SqlDbType.Date;
                sqlpInicioObra.Value = iSucursal.InicioObra;

                SqlParameter sqlpFinObra = new SqlParameter();
                sqlpFinObra.ParameterName = "@FinObra";
                sqlpFinObra.SqlDbType = SqlDbType.Date;
                sqlpFinObra.Value = iSucursal.FinObra;

                SqlParameter sqlpSemanasObra = new SqlParameter();
                sqlpSemanasObra.ParameterName = "@SemanasObra";
                sqlpSemanasObra.SqlDbType = SqlDbType.SmallInt;
                sqlpSemanasObra.Value = iSucursal.SemanasObra;

                SqlParameter sqlpFechaAlta = new SqlParameter();
                sqlpFechaAlta.ParameterName = "@FechaAlta";
                sqlpFechaAlta.SqlDbType = SqlDbType.SmallDateTime;
                sqlpFechaAlta.Value = iSucursal.FechaAlta;

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

                SqlParameter sqlpTipoConcepto = new SqlParameter();
                sqlpTipoConcepto.ParameterName = "@TipoConcepto";
                sqlpTipoConcepto.SqlDbType = SqlDbType.VarChar;
                sqlpTipoConcepto.Value = iSucursal.TipoConcepto;

                SqlParameter sqlpEmpresaSupervisora = new SqlParameter();
                sqlpEmpresaSupervisora.ParameterName = "@EmpresaSupervisora";
                sqlpEmpresaSupervisora.SqlDbType = SqlDbType.VarChar;
                sqlpEmpresaSupervisora.Value = iSucursal.EmpresaSupervisora;

                SqlParameter sqlpTipoObra = new SqlParameter();
                sqlpTipoObra.ParameterName = "@TipoObra";
                sqlpTipoObra.SqlDbType = SqlDbType.VarChar;
                sqlpTipoObra.Value = iSucursal.TipoObra;

                SqlParameter sqlpCliente = new SqlParameter();
                sqlpCliente.ParameterName = "@Cliente";
                sqlpCliente.SqlDbType = SqlDbType.VarChar;
                sqlpCliente.Value = iSucursal.Cliente;

                //3. Agregar los parametros al comando
                sqlcComando.Parameters.Add(sqlpID);
                sqlcComando.Parameters.Add(sqlpCR);
                sqlcComando.Parameters.Add(sqlpNombre);
                sqlcComando.Parameters.Add(sqlpDireccionZona);
                sqlcComando.Parameters.Add(sqlpGerenteBBVANombre);
                sqlcComando.Parameters.Add(sqlpGerenteBBVAAPaterno);
                sqlcComando.Parameters.Add(sqlpGerenteBBVAAMaterno);
                sqlcComando.Parameters.Add(sqlpSupervisorNombre);
                sqlcComando.Parameters.Add(sqlpSupervisorAPaterno);
                sqlcComando.Parameters.Add(sqlpSupervisorAMaterno);
                sqlcComando.Parameters.Add(sqlpProveedorEnergia);
                sqlcComando.Parameters.Add(sqlpSuperficie);
                sqlcComando.Parameters.Add(sqlpCoordinadorNombre);
                sqlcComando.Parameters.Add(sqlpCoordinadorAPaterno);
                sqlcComando.Parameters.Add(sqlpCoordinadorAMaterno);
                sqlcComando.Parameters.Add(sqlpCalle);
                sqlcComando.Parameters.Add(sqlpEntreCalles);
                sqlcComando.Parameters.Add(sqlpNoExterior);
                sqlcComando.Parameters.Add(sqlpNoInterior);
                sqlcComando.Parameters.Add(sqlpCodigoPostal);
                sqlcComando.Parameters.Add(sqlpColonia);
                sqlcComando.Parameters.Add(sqlpEstado);
                sqlcComando.Parameters.Add(sqlpMunicipio);
                sqlcComando.Parameters.Add(sqlpContratista);
                sqlcComando.Parameters.Add(sqlpInicioObra);
                sqlcComando.Parameters.Add(sqlpFinObra);
                sqlcComando.Parameters.Add(sqlpSemanasObra);
                sqlcComando.Parameters.Add(sqlpFechaAlta);
                sqlcComando.Parameters.Add(sqlpEstatus);
                sqlcComando.Parameters.Add(sqlpTipoConcepto);
                sqlcComando.Parameters.Add(sqlpEmpresaSupervisora);
                sqlcComando.Parameters.Add(sqlpTipoObra);
                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 sqlcComando.Parameters["@ID"].Value.ToString();
            }
            catch (Exception ex)
            {
                throw new Exception("Error capa de datos (public static int Insertar(Sucursal " + iSucursal.Nombre + ")): " + ex.Message);
            }
        }