private void CalcularTotales()
        {
            List <NotaCargoDet> lista = this.ListaProductosNotaCargo;
            double importeTotal       = 0;
            float  porcDescuento1     = HD_Descuento1.Value != string.Empty ? Convert.ToInt32(HD_Descuento1.Value) : 0;
            float  porcDescuento2     = HD_Descuento2.Value != string.Empty ? Convert.ToInt32(HD_Descuento2.Value) : 0;

            for (int i = 0; i < lista.Count; i++)
            {
                NotaCargoDet factura = lista[i];
                importeTotal += factura.Nca_Importe;
            }
            Sesion sesion = (Sesion)Session["Sesion" + Session.SessionID];

            //HabilitarControlesTotales(true);
            txtImporte.Text  = importeTotal.ToString();
            importeTotal     = porcDescuento1 > 0 ? (importeTotal - (importeTotal * (porcDescuento1 / 100))) : importeTotal;
            importeTotal     = porcDescuento2 > 0 ? (importeTotal - (importeTotal * (porcDescuento2 / 100))) : importeTotal;
            txtSubTotal.Text = importeTotal.ToString();

            CN_CatCentroDistribucion cn_cd = new CN_CatCentroDistribucion();
            double iva = 0;

            cn_cd.ConsultarIva(sesion.Id_Emp, sesion.Id_Cd_Ver, ref iva, sesion.Emp_Cnx);

            txtIVA.Text   = HD_IVAfacturacion.Value.Trim() != string.Empty ? (importeTotal * iva / 100).ToString() : "0";
            txtTotal.Text = (Convert.ToSingle(txtSubTotal.Text) + Convert.ToSingle(txtIVA.Text)).ToString();
            //HabilitarControlesTotales(false);
        }
        protected void ListaProductosFacturaEspecial_ModificarProducto(NotaCargoDet factura_prod, int index)
        {
            List <NotaCargoDet> lista = this.ListaProductosNotaCargo;

            //buscar producto de factura en la lista
            NotaCargoDet factura = lista[index];

            if (factura.Id_Prd == factura_prod.Id_Prd)
            {
                lista[index] = factura_prod;
            }

            this.ListaProductosNotaCargo = lista;
            this.CalcularTotales();
        }
        protected void ListaProductosFacturaEspecial_AgregarProducto(NotaCargoDet factura_prod)
        {
            List <NotaCargoDet> lista = this.ListaProductosNotaCargo;

            ////buscar producto de factura en la lista para ver si ya existe
            //for (int i = 0; i < lista.Count; i++)
            //{
            //    NotaCargoDet factura = lista[i];
            //    if (factura.Id_Prd == factura_prod.Id_Prd)//si el producto es el mismo
            //    {
            //        throw new Exception("rgFacturaEspecial_insert_repetida");
            //    }
            //}
            lista.Add(factura_prod);
            this.ListaProductosNotaCargo = lista;
            this.CalcularTotales();
        }
        protected void rgNotaCargoEspecialDet_UpdateCommand(object sender, GridCommandEventArgs e)
        {
            NotaCargoDet facturaDet = new NotaCargoDet();

            try
            {
                GridEditableItem insertedItem = (GridEditableItem)e.Item;
                Sesion           sesion       = (Sesion)Session["Sesion" + Session.SessionID];

                facturaDet.Id_Emp      = sesion.Id_Emp;
                facturaDet.Id_Cd       = sesion.Id_Cd_Ver;
                facturaDet.Id_Nca      = 0;                                      //se debe volver asignar cuando se guarda la orden de compra, cuando actualiza queda igual
                facturaDet.Id_NcaDet   = 0;
                facturaDet.Id_CteExt   = Convert.ToInt32(this.HD_Cliente.Value); //cliente de datos generales de la factura
                facturaDet.Id_Prd      = Convert.ToInt32((insertedItem.FindControl("txtId_Prd") as RadNumericTextBox).Value);
                facturaDet.Nca_Importe = Convert.ToDouble((insertedItem.FindControl("txtNca_Importe") as RadNumericTextBox).Value.HasValue ? (insertedItem.FindControl("txtNca_Importe") as RadNumericTextBox).Value : 0);
                facturaDet.Clp_Release = (insertedItem.FindControl("txtClp_ReleaseEdit") as RadTextBox).Text;

                //datos del producto de la orden de compra
                facturaDet.Producto                         = new Producto();
                facturaDet.Producto.Id_Prd                  = Convert.ToInt32((insertedItem.FindControl("cmbProducto") as RadComboBox).SelectedValue);
                facturaDet.Producto.Id_Emp                  = sesion.Id_Emp;
                facturaDet.Producto.Id_Cd                   = sesion.Id_Cd_Ver;
                facturaDet.Producto.Id_PrdEsp               = (insertedItem.FindControl("txtId_PrdEsp") as RadTextBox).Text; ///<------
                facturaDet.Producto.Prd_Descripcion         = (insertedItem.FindControl("cmbProducto") as RadComboBox).Text;
                facturaDet.Producto.Prd_DescripcionEspecial = (insertedItem.FindControl("txtPrd_Descripcion") as RadTextBox).Text;
                facturaDet.Producto.Prd_Presentacion        = (insertedItem.FindControl("txtPrd_Presentacion") as RadTextBox).Text;
                facturaDet.Producto.Prd_UniNe               = (insertedItem.FindControl("txtPrd_UniNe") as RadTextBox).Text;

                //agregar producto de orden de compra a la lista
                this.ListaProductosFacturaEspecial_ModificarProducto(facturaDet, e.Item.ItemIndex);
            }
            catch (Exception ex)
            {
                string mensaje = string.Concat(ex.Message, "rgFacturaEspecial_insert_error");
                this.DisplayMensajeAlerta(mensaje);
            }
        }
        private void Inicializar()
        {
            try
            {
                if (!Convert.ToBoolean(Request.QueryString["Modificar"]))
                {
                    RadToolBar1.Items[1].Visible = false;
                }

                Sesion sesion = (Sesion)Session["Sesion" + Session.SessionID];
                this.HD_Cliente.Value        = Request.QueryString["Id_Cte"].ToString();
                this.HD_ImporteTotal.Value   = Request.QueryString["Nca_ImporteTotal"].ToString();
                this.HD_IVAfacturacion.Value = Request.QueryString["IVA_Nca"].ToString();
                this.HdId_NcaSerie.Value     = Request.QueryString["Id_NcaSerie"].ToString();

                string folio = Request.QueryString["Folio"].ToString();


                if (Session["NcargoEspecialGuardada" + Session.SessionID].ToString() != "1")
                {
                    ListaProductosNotaCargo = new List <NotaCargoDet>();
                }

                if (ListaProductosNotaCargo != null && ListaProductosNotaCargo.Count > 0)
                {
                    ListaProductosNotaCargo[0].Producto.Prd_DescripcionEspecial = (ListaProductosNotaCargo[0].Producto.Prd_DescripcionEspecial.Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries)).Length > 0 ? (ListaProductosNotaCargo[0].Producto.Prd_DescripcionEspecial.Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries))[0] : "";
                }
                else
                {
                    ListaProductosNotaCargo = new List <NotaCargoDet>();

                    NotaCargo nota = new NotaCargo();
                    nota.Id_Emp = sesion.Id_Emp;
                    nota.Id_Cd  = sesion.Id_Cd_Ver;
                    nota.Id_Nca = !string.IsNullOrEmpty(folio) ? Convert.ToInt32(folio) : 0;

                    List <NotaCargoDet> listaProdFacturaEspecialFinal = new List <NotaCargoDet>();
                    if (!string.IsNullOrEmpty(folio))
                    {
                        new CN_CapNotaCargo().ConsultaNotaCargoEspecialDetalle(ref listaProdFacturaEspecialFinal
                                                                               , sesion.Emp_Cnx
                                                                               , sesion.Id_Emp
                                                                               , sesion.Id_Cd_Ver
                                                                               , Convert.ToInt32(folio)
                                                                               , HdId_NcaSerie.Value
                                                                               , Convert.ToInt32(this.HD_Cliente.Value));
                    }

                    if (listaProdFacturaEspecialFinal.Count != 0)
                    {
                        ListaProductosNotaCargo = listaProdFacturaEspecialFinal;
                    }
                    else
                    {
                        //// -------------------------------------------------------------------------------------------
                        //// obtener claves de productos de Remision original
                        //// -------------------------------------------------------------------------------------------
                        string clavesProducto = string.Empty;
                        foreach (DataRow dr in dt_detalles.Rows)
                        {
                            clavesProducto = clavesProducto + dr["Id_Prd"] + "|";
                        }
                        // -------------------------------------------------------------------------------------------
                        // consulta productos de factura especial en el catalogo de Cliente-Producto en base a los productos de la factura original
                        // -------------------------------------------------------------------------------------------
                        List <NotaCargoDet> listaProdFacturaEspecial = new List <NotaCargoDet>();

                        if (!string.IsNullOrEmpty(this.HD_Cliente.Value))
                        {
                            new CN_CatClienteProd().ConsultaClienteProd_NCargoEspecial(ref listaProdFacturaEspecial
                                                                                       , sesion.Emp_Cnx
                                                                                       , sesion.Id_Emp
                                                                                       , sesion.Id_Cd_Ver
                                                                                       , Convert.ToInt32(this.HD_Cliente.Value)
                                                                                       , clavesProducto);
                        }
                        // -------------------------------------------------------------------------------------------
                        // Crear partidas adicionales de remision si es que la descripciĆ³n viene con separadores "|"
                        // -------------------------------------------------------------------------------------------
                        for (int i = 0; i < listaProdFacturaEspecial.Count; i++)
                        {
                            NotaCargoDet remisionDet = listaProdFacturaEspecial[i];
                            remisionDet.Id_CteExt = Convert.ToInt32(this.HD_Cliente.Value);//actualiza el cliente de la partida que es el cliente de la fact. original
                            string[] descripcion = remisionDet.Producto.Prd_DescripcionEspecial.Split(new char[] { '|' });

                            for (int j = 0; j < descripcion.Length; j++)
                            {
                                NotaCargoDet remisionCopia = new NotaCargoDet();
                                //remisionCopia = (RemisionDet)remisionDet;
                                remisionCopia.Producto                         = new Producto();
                                remisionCopia.Id_CteExt                        = Convert.ToInt32(this.HD_Cliente.Value);
                                remisionCopia.Id_Prd                           = remisionDet.Id_Prd;
                                remisionCopia.Producto.Id_PrdEsp               = remisionDet.Producto.Id_PrdEsp;
                                remisionCopia.Producto.Id_Prd                  = remisionDet.Producto.Id_Prd;
                                remisionCopia.Producto.Prd_Descripcion         = remisionDet.Producto.Prd_Descripcion;
                                remisionCopia.Producto.Prd_Presentacion        = remisionDet.Producto.Prd_Presentacion;
                                remisionCopia.Producto.Prd_UniNe               = remisionDet.Producto.Prd_UniNe;
                                remisionCopia.Producto.Prd_InvFinal            = remisionDet.Producto.Prd_InvFinal;
                                remisionCopia.Producto.Prd_DescripcionEspecial = descripcion[j];
                                remisionCopia.Id_Emp                           = sesion.Id_Emp;
                                remisionCopia.Id_Cd = sesion.Id_Cd_Ver;
                                if (j == 0)
                                {
                                    try
                                    {
                                        remisionCopia.Nca_Importe = Convert.ToInt32(dt_detalles.Select("Id_Prd=" + remisionDet.Id_Prd)[0]["Nca_Importe"]);
                                    }
                                    catch
                                    {
                                        remisionCopia.Nca_Importe = 0;
                                    }
                                }
                                else
                                {
                                    remisionCopia.Nca_Importe = 0;
                                }
                                ListaProductosNotaCargo.Add(remisionCopia);
                            }
                        }
                    }
                }
                double ancho = 0;
                foreach (GridColumn gc in rgNotaCargoEspecialDet.Columns)
                {
                    if (gc.Display)
                    {
                        ancho = ancho + gc.HeaderStyle.Width.Value;
                    }
                }
                rgNotaCargoEspecialDet.Width = Unit.Pixel(Convert.ToInt32(ancho));
                rgNotaCargoEspecialDet.MasterTableView.Width = Unit.Pixel(Convert.ToInt32(ancho));

                this.CalcularTotales();
                this.rgNotaCargoEspecialDet.Rebind();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }