/// <summary>
        /// PAGE LOAD
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            
            
            Hashtable htbPermisos = (Hashtable)Session["permisos"];
            char cPermiso = 'N';
            try
            {
                #region Interfaz
                cPermiso = (char)htbPermisos["pedidos"];
                imbNuevo = (ImageButton)Master.FindControl("imgBtnNuevo");
                imbNuevo.Click += new ImageClickEventHandler(this.imbNuevo_Click);
                imbEditar = (ImageButton)Master.FindControl("imgBtnEditar");
                imbEditar.Click += new ImageClickEventHandler(this.imbEditar_Click);
                imbEliminar = (ImageButton)Master.FindControl("imgBtnEliminar");
                imbEliminar.Click += new ImageClickEventHandler(this.imbEliminar_Click);
                imbMostrar = (ImageButton)Master.FindControl("imgBtnMostrar");
                imbMostrar.Click += new ImageClickEventHandler(this.imbMostrar_Click);
                imbAceptar = (ImageButton)Master.FindControl("imgBtnAceptar");
                imbAceptar.Click += new ImageClickEventHandler(this.imbAceptar_Click);
                imbCancelar = (ImageButton)Master.FindControl("imgBtnCancelar");
                imbCancelar.Click += new ImageClickEventHandler(this.imbCancelar_Click);
                imbImprimir = (ImageButton)Master.FindControl("imgBtnImprimir");
                imbImprimir.Click += new ImageClickEventHandler(this.imbImprimir_Click);

                rdbFolio = (RadioButton)Master.FindControl("rdbFiltro1");
                rdbFolio.Text = "Folio";
                rdbCliente = (RadioButton)Master.FindControl("rdbFiltro2");
                rdbCliente.Text = "Cliente";
                rdbFecha = (RadioButton)Master.FindControl("rdbFiltro3");
                rdbFecha.Text = "Fecha";
                btnBuscar = (Button)Master.FindControl("btnBuscar");
                btnBuscar.Click += new EventHandler(this.btnBuscar_Click);
                txbBuscar = (TextBox)Master.FindControl("txtBuscar");
                //Master.FindControl("btnReportes").Visible = false;

                lblNombreModulo = (Label)Master.FindControl("lblNombreModulo");
                lblNombreModulo.Text = "Pedidos";

                //GT 0175
                imbReportes = (ImageButton)Master.FindControl("imgBtnReportes");
                imbReportes.Click += new ImageClickEventHandler(this.imbReportes_Click);

                switch (cPermiso)
                {
                    case 'T':
                        break;
                    case 'E':
                        DesactivarEdicionEliminacion();
                        break;
                    case 'L':
                        DesactivarEdicionEliminacion();
                        DesactivarNuevo();
                        break;
                }
                #endregion

                if (!IsPostBack)
                {
                    Session["editarpartidas"] = 0;

                    Session["reporteactivo"] = 0;
                    Session["reportdocument"] = "";
                    Session["titulo"] = "";
                    Session["resultadoquery"] = "";
                    ViewState["direccionsorting"] = System.Web.UI.WebControls.SortDirection.Ascending;
                }

                if (int.Parse(Session["editarpartidas"].ToString()) == 1)
                {
                    Session["editarpartidas"] = 0;
                }
                else
                {
                    dgvPartidaDetalle.Visible = true;
                    dgvPartidaDetalle.ShowHeader = true;
                    dgvPartidaDetalle.EmptyDataText = "Sin Detalle";
                    dgvPartidaDetalle.DataSource = ((List<MedNeg.Facturas.BlDetallePartida>)Session["lstDetallePartidaPedidos"]);
                    dgvPartidaDetalle.DataBind();
                    txbClave.TextChanged += new EventHandler(txbClave_TextChanged);
                }

                if (!IsPostBack)
                {
                    // Saber si estan activados los folios automaticos y poner su valor por default
                    // Se almacena en una variable de sesión para comparar que se esta respetando el formato automatico
                    // y validar que no haya cambiado el folio de pedidos debido a otro registro mientras se hacia el actual 
                    oblPedido = new MedNeg.Pedidos.BlPedidos();
                    Session["iFolioAutomatico"] = oblPedido.RecuperaFolioAutomatico(Server.MapPath("~/Archivos/Configuracion.xml"));
                    txbFolio.Text = Session["iFolioAutomatico"].ToString();
                    Session["lstDetallePartidaPedidos"] = new List<MedNeg.Facturas.BlDetallePartida>();
                    pnlFormulario.Visible = false;
                    pnlCatalogo.Visible = false;
                    //pnlReportes.Visible = false;
                    Session["sTotalFactura"] = 0;

                    //Variable de sesion para saber si es un ensamble al momento de registrar el detalle de la partida
                    // 0 = False, 1 = True
                    Session["sBolEsEnsamble"] = 0;
                    //GT 0175
                    ConfigurarMenuBotones(true, true, false, false, false, false, true, true);
                }
            }
            catch (NullReferenceException)
            {
                if (!ClientScript.IsStartupScriptRegistered("alertsession"))
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(),
                        "alertsession", "alertarSesion();", true);
                }
                pnlCatalogo.Visible = false;
                pnlFormulario.Visible = false;
                Site1 oPrincipal = (Site1)this.Master;
                oPrincipal.DeshabilitarControles(this);
                oPrincipal.DeshabilitarControles();
            }            
        }
        /// <summary>
        /// Registrar nuevo pedido
        /// </summary>
        private void Nuevo()
        {

            string sRutaArchivoConfig=Server.MapPath("~/Archivos/Configuracion.xml");

            oPedido = new MedDAL.DAL.pedidos();
            oblPedido = new MedNeg.Pedidos.BlPedidos();
            if (Session["sIdCliente"] != null)
            {
                oPedido.idCliente = (int)Session["sIdCliente"];
                oPedido.Fecha = DateTime.Now;
                oPedido.Estatus = cmbEstatus.SelectedValue;

                //Validar Folio Repetido
                if (ValidaFolioRepetido())
                {

                    //Validar si se esta respetando el folio automatico y verificar si aun es el mismo o cambio su valor
                    if (Session["iFolioAutomatico"].Equals(txbFolio.Text))
                    {
                        oPedido.Folio = oblPedido.RecuperaFolioAutomatico(sRutaArchivoConfig).ToString();
                    }
                    else
                    {
                        oPedido.Folio = txbFolio.Text;
                    }

                    if (oblPedido.NuevoRegistro(oPedido))
                    {
                        //Datos de la bitacora
                        sDatosBitacora += "Folio:" + txbFolio.Text + " ";
                        sDatosBitacora += "Fecha:" + txbFecha.Text + " ";
                        sDatosBitacora += "Estatus:" + cmbEstatus.SelectedItem.ToString() + " ";
                        sDatosBitacora += "Cliente:" + txbCliente.Text + " ";

                        // Registrar la partida del pedido
                        oPedido = new MedDAL.DAL.pedidos();
                        oPedido = oblPedido.BuscarPedidoFolio(txbFolio.Text);
                        int iIdPedido = oPedido.idPedido;
                        bool bRegistroFallido = false;

                        //Recorrer el objeto de sesion lstDetallePartidaPedidos que contiene los datos de la partida
                        foreach (MedNeg.Facturas.BlDetallePartida pedidoDetalle in (List<MedNeg.Facturas.BlDetallePartida>)Session["lstDetallePartidaPedidos"])
                        {
                            //Saber si es un ensamble el que se esta registrando
                            if (pedidoDetalle.bEsEnsamble == true)
                            {
                                AgregarDetalleEnsamble(pedidoDetalle, oPedido.idPedido);
                            }
                            else
                            {
                                oblPedido = new MedNeg.Pedidos.BlPedidos();
                                MedDAL.DAL.pedidos_partida oPedidoPartida = new MedDAL.DAL.pedidos_partida();

                                oPedidoPartida.idPedido = iIdPedido;
                                oPedidoPartida.idProducto = pedidoDetalle.iIdProducto;
                                oPedidoPartida.Cantidad = pedidoDetalle.dCantidad;
                                oPedidoPartida.IEPS = pedidoDetalle.dIeps;
                                oPedidoPartida.Iva = pedidoDetalle.dIva;
                                oPedidoPartida.Precio = pedidoDetalle.dPrecio;
                                oPedidoPartida.Observaciones = pedidoDetalle.sObservaciones;
                                oPedidoPartida.Descripcion = pedidoDetalle.sProducto;

                                //Registrar el detalle del pedido
                                if (!oblPedido.NuevoDetallePartida(oPedidoPartida))
                                {
                                    bRegistroFallido = true;
                                }
                                else
                                {
                                    sDatosBitacora += "Producto:" + pedidoDetalle.iIdProducto.ToString() + " ";
                                    sDatosBitacora += "Cant:" + pedidoDetalle.dCantidad.ToString() + " ";
                                    sDatosBitacora += "IEPS:" + pedidoDetalle.dIeps.ToString() + " ";
                                    sDatosBitacora += "Iva:" + pedidoDetalle.dIva.ToString() + " ";
                                    sDatosBitacora += "Precio:" + pedidoDetalle.dPrecio.ToString() + " ";
                                    sDatosBitacora += "Total:" + Convert.ToDecimal((pedidoDetalle.dCantidad * pedidoDetalle.dPrecio) + pedidoDetalle.dIeps + pedidoDetalle.dIva) + ", ";
                                    sDatosBitacora += "Obs:" + pedidoDetalle.sObservaciones;                                    
                                }
                            }
                        }

                        //Si un registro de la partida se debe de eliminar todo
                        if (!bRegistroFallido)
                        {
                            oBitacora = new MedDAL.DAL.bitacora();
                            oblBitacora = new MedNeg.Bitacora.BlBitacora();
                            oBitacora.FechaEntradaSrv = DateTime.Now;
                            oBitacora.FechaEntradaCte = DateTime.Now;//Linea Temporal
                            oBitacora.Modulo = "Pedidos";
                            oBitacora.Usuario = Session["usuario"].ToString();
                            oBitacora.Nombre = Session["nombre"].ToString();
                            oBitacora.Accion = "Nuevo Pedido";
                            oBitacora.Descripcion = sDatosBitacora;
                            if (!oblBitacora.NuevoRegistro(oBitacora))
                            {
                                lblDatos.Text = "El evento no pudo ser registrado en la bitácora";
                            }

                            //Actualizar el consecutivo en la bitacora
                            oblPedido.ActualizarFolioPedido(sRutaArchivoConfig);
                            Session["sIdCliente"] = null;

                            //Proceso que mande reporte con los datos del pedido acabado de hacer. 
                            //Pedidos, Pedidos_Partida
                            //MostrarReporte(txbFolio.Text);
                        }
                        else
                        {
                            //Eliminar el pedido, su partida e indicar al usuario que lo intente de nuevo, limpiar la cadena de bitacora
                            Eliminar(iIdPedido);
                            sDatosBitacora = "";
                            lblDatos.Text = "No se pudo registrar el pedido, por favor verifique los datos y vuelva a intentarlo";

                        }
                    }
                    else //Fallo el registro del pedido
                    {
                        lblDatos.Text = "No se pudo registrar el pedido, por favor vuelva a intentarlo";
                    }

                }
                else  //si es folio repetido
                {
                    lblDatos.Text = "Folio Repetido, no se puede generar el pedido";

                }
            }
            else
            {
                lblDatos.Text = "Por favor, elija a un Cliente";
            }
        }