protected void RadTreeView1_ContextMenuItemClick(object sender, RadTreeViewContextMenuEventArgs e)
        {
            RadTreeNode clickedNode = e.Node;


            var nodoA           = treeEstructura.Nodes[0];
            var hijosPrimerNodo = listEstructura.Where(x => x.Nivel == 1).ToList();

            if (e.MenuItem.Value.StartsWith("[ACYS]"))
            {
                var strValue = e.MenuItem.Value;
                strValue = strValue.Replace("[ACYS]", "");

                int idACYS = Int32.Parse(strValue);


                CN_CatCNac_Estructura cm_EstrACYS = new CN_CatCNac_Estructura(model);
                CatCNac_Estructura    estACYS     = new CatCNac_Estructura();
                if (clickedNode.Level == nivelMax && nivelMax >= 1)
                {
                    RadMenuItem itemPadre = ((RadMenuItem)(e.MenuItem.Owner));
                    itemPadre.Value = itemPadre.Value.Replace("Asignar", "");

                    estACYS.Id         = Int32.Parse(clickedNode.Value);
                    estACYS.Nivel_ACYS = 1;
                    estACYS.id_Acys    = idACYS;
                    int id       = cm_EstrACYS.CambiarNivel(estACYS);
                    var itemEstr = listEstructura.Where(x => x.Id == estACYS.Id).FirstOrDefault();
                    itemEstr.Nivel_ACYS = estACYS.Nivel_ACYS;
                    itemEstr.id_Acys    = idACYS;
                }
                else
                {
                    AsignarACYS(ref clickedNode, clickedNode.Level, idACYS);
                }

                AgregarControles(ref nodoA, hijosPrimerNodo, null);
            }
            else
            {
                switch (e.MenuItem.Value)
                {
                case "Nuevo":
                    RadTreeNode nodoNuevo = new RadTreeNode();
                    nodoNuevo.Selected = true;
                    nodoNuevo.ImageUrl = clickedNode.ImageUrl;
                    clickedNode.Nodes.Add(nodoNuevo);
                    clickedNode.Expanded = true;

                    //set node's value so we can find it in startNodeInEditMode
                    nodoNuevo.Value = "Nuevo - " + Guid.NewGuid().ToString();
                    StartNodeInEditMode(nodoNuevo.Value);

                    AgregarControles(ref nodoA, hijosPrimerNodo, nodoNuevo);

                    break;

                case "Asignar":
                    AsignarACYS(ref clickedNode, clickedNode.Level, 1);
                    AgregarControles(ref nodoA, hijosPrimerNodo, null);
                    break;

                case "Asignar1":

                    CN_CatCNac_Estructura cm_Estr1 = new CN_CatCNac_Estructura(model);
                    CatCNac_Estructura    est1     = new CatCNac_Estructura();

                    if (clickedNode.Level == nivelMax && nivelMax >= 1)
                    {
                        est1.Id         = Int32.Parse(clickedNode.Value);
                        est1.Nivel_ACYS = 1;
                        int id       = cm_Estr1.CambiarNivel(est1);
                        var itemEstr = listEstructura.Where(x => x.Id == est1.Id).FirstOrDefault();
                        itemEstr.Nivel_ACYS = 1;
                    }


                    AgregarControles(ref nodoA, hijosPrimerNodo, null);
                    break;

                case "Asignar2":

                    CN_CatCNac_Estructura cm_Estr2 = new CN_CatCNac_Estructura(model);
                    CatCNac_Estructura    est2     = new CatCNac_Estructura();

                    if (clickedNode.Level == nivelMax && nivelMax >= 2)
                    {
                        est2.Id         = Int32.Parse(clickedNode.Value);
                        est2.Nivel_ACYS = 2;
                        int id       = cm_Estr2.CambiarNivel(est2);
                        var itemEstr = listEstructura.Where(x => x.Id == est2.Id).FirstOrDefault();
                        itemEstr.Nivel_ACYS = 2;
                    }

                    AgregarControles(ref nodoA, hijosPrimerNodo, null);

                    break;

                case "Asignar3":

                    CN_CatCNac_Estructura cm_Estr3 = new CN_CatCNac_Estructura(model);
                    CatCNac_Estructura    est3     = new CatCNac_Estructura();

                    if (clickedNode.Level == nivelMax && nivelMax >= 3)
                    {
                        est3.Id         = Int32.Parse(clickedNode.Value);
                        est3.Nivel_ACYS = 3;
                        int id       = cm_Estr3.CambiarNivel(est3);
                        var itemEstr = listEstructura.Where(x => x.Id == est3.Id).FirstOrDefault();
                        itemEstr.Nivel_ACYS = 3;
                    }

                    AgregarControles(ref nodoA, hijosPrimerNodo, null);

                    break;

                case "Asignar4":

                    CN_CatCNac_Estructura cm_Estr4 = new CN_CatCNac_Estructura(model);
                    CatCNac_Estructura    est4     = new CatCNac_Estructura();

                    if (clickedNode.Level == nivelMax && nivelMax >= 4)
                    {
                        est4.Id         = Int32.Parse(clickedNode.Value);
                        est4.Nivel_ACYS = 4;
                        int id       = cm_Estr4.CambiarNivel(est4);
                        var itemEstr = listEstructura.Where(x => x.Id == est4.Id).FirstOrDefault();
                        itemEstr.Nivel_ACYS = 4;
                    }

                    AgregarControles(ref nodoA, hijosPrimerNodo, null);

                    break;

                case "Borrar":
                    clickedNode.Remove();

                    CN_CatCNac_Estructura cm_EstrA = new CN_CatCNac_Estructura(model);
                    var estrA = new CatCNac_Estructura();

                    estrA.Id = Int32.Parse(clickedNode.Value);

                    cm_EstrA.Borrar(estrA);
                    listEstructura.Remove(estrA);
                    AgregarControles(ref nodoA, hijosPrimerNodo, null);



                    break;

                default:

                    CN_CatCNac_Estructura cm_EstrD = new CN_CatCNac_Estructura(model);
                    CatCNac_Estructura    estD     = new CatCNac_Estructura();

                    if (clickedNode.Level == nivelMax && e.MenuItem.Value != "")
                    {
                        estD.Id             = Int32.Parse(clickedNode.Value);
                        estD.Sucursal       = Int32.Parse(e.MenuItem.Value);
                        estD.NombreSucursal = e.MenuItem.Text;
                        int id = cm_EstrD.CambiarSucursal(estD);

                        var itemEstr = listEstructura.Where(x => x.Id == estD.Id).FirstOrDefault();
                        itemEstr.Sucursal       = Int32.Parse(e.MenuItem.Value);
                        itemEstr.NombreSucursal = e.MenuItem.Text;
                    }

                    AgregarControles(ref nodoA, hijosPrimerNodo, null);
                    break;
                }
            }
        }
        protected void btnCargaExcel_Click(object sender, EventArgs e)
        {
            HttpPostedFile filePosted = Request.Files[0];

            string pathArchivo = "c:\\KeyWeb_Log\\excelTempCC.xlsx";

            filePosted.SaveAs(pathArchivo);

            var excelFile = new ExcelQueryFactory(pathArchivo);
            var miHoja    = excelFile.Worksheet(0).Select(x => x).ToList();
            CN_CatCNac_Estructura cm_Estr = new CN_CatCNac_Estructura(model);



            using (TransactionScope scope = new TransactionScope())
            {
                try
                {
                    cm_Estr.Borrar(Int32.Parse(Request.QueryString["Id"]));
                    listEstructura.Clear();


                    int padre1 = 0;
                    int padre2 = 0;
                    int padre3 = 0;
                    int padre4 = 0;



                    foreach (var item in miHoja)
                    {
                        CatCNac_Estructura est = new CatCNac_Estructura();
                        est.Id_Matriz = Int32.Parse(Request.QueryString["Id"]);

                        //Nivel 1


                        if (item["Nivel ACYS"] == null)
                        {
                            throw new Exception("Falta la columna Nivel ACYS");
                        }
                        if (item["ACYS"] == null)
                        {
                            throw new Exception("Falta la columna ACYS");
                        }
                        if (item["Sucursal"] == null)
                        {
                            throw new Exception("Falta la columna Sucursal");
                        }



                        if (nivelMax >= 1)
                        {
                            est.NombreNodo = item[0].Value.ToString();
                            if (!this.listEstructura.Exists(x => x.NombreNodo == est.NombreNodo && x.Id_Matriz == est.Id_Matriz && x.Nivel == 1))
                            {
                                est.Nivel     = 1;
                                est.NodoPadre = 0;

                                if (nivelMax == 1)
                                {
                                    est.Nivel_ACYS = item["Nivel ACYS"].Cast <int>();

                                    var acysC = listaACYS.Where(x => x.Nombre == item["ACYS"]).FirstOrDefault();

                                    if (acysC == null)
                                    {
                                        throw new Exception("El acys no existe: " + item["ACYS"]);
                                    }

                                    int idAcys = acysC.Id;
                                    est.id_Acys = idAcys;

                                    est.Sucursal = item["Sucursal"].Cast <int>();
                                    var suc = listaSucursales.Where(x => x.Id_Cd == est.Sucursal).FirstOrDefault();

                                    if (suc == null)
                                    {
                                        throw new Exception("La Sucursal no existe: " + item["Sucursal"]);
                                    }


                                    est.NombreSucursal = item["Sucursal"] + " - " + suc.Cd_Nombre;
                                }


                                int resId = cm_Estr.Alta(est);
                                est.Id = resId;
                                padre1 = resId;
                                listEstructura.Add(est);
                            }
                        }



                        if (nivelMax >= 2)
                        {
                            //Nivel 2
                            est            = new CatCNac_Estructura();
                            est.NombreNodo = item[1].Value.ToString();
                            est.Id_Matriz  = Int32.Parse(Request.QueryString["Id"]);
                            if (!this.listEstructura.Exists(x => x.NombreNodo == est.NombreNodo && x.Id_Matriz == est.Id_Matriz && x.Nivel == 2 && x.NodoPadre == padre1))
                            {
                                est.Id_Matriz = Int32.Parse(Request.QueryString["Id"]);
                                est.Nivel     = 2;
                                est.NodoPadre = padre1;

                                if (nivelMax == 2)
                                {
                                    est.Nivel_ACYS = item["Nivel ACYS"].Cast <int>();

                                    var acysC = listaACYS.Where(x => x.Nombre == item["ACYS"]).FirstOrDefault();

                                    if (acysC == null)
                                    {
                                        throw new Exception("El acys no existe: " + item["ACYS"]);
                                    }

                                    int idAcys = acysC.Id;
                                    est.id_Acys = idAcys;

                                    est.Sucursal = item["Sucursal"].Cast <int>();
                                    var suc = listaSucursales.Where(x => x.Id_Cd == est.Sucursal).FirstOrDefault();

                                    if (suc == null)
                                    {
                                        throw new Exception("La Sucursal no existe: " + item["Sucursal"]);
                                    }


                                    est.NombreSucursal = item["Sucursal"] + " - " + suc.Cd_Nombre;
                                }

                                int resId = cm_Estr.Alta(est);
                                est.Id = resId;
                                padre2 = resId;
                                listEstructura.Add(est);
                            }
                        }

                        if (nivelMax >= 3)
                        {
                            //Nivel 3
                            est            = new CatCNac_Estructura();
                            est.NombreNodo = item[2].Value.ToString();
                            est.Id_Matriz  = Int32.Parse(Request.QueryString["Id"]);
                            if (!this.listEstructura.Exists(x => x.NombreNodo == est.NombreNodo && x.Id_Matriz == est.Id_Matriz && x.Nivel == 3 && x.NodoPadre == padre2))
                            {
                                est.Id_Matriz = Int32.Parse(Request.QueryString["Id"]);
                                est.Nivel     = 3;
                                est.NodoPadre = padre2;


                                if (nivelMax == 3)
                                {
                                    est.Nivel_ACYS = item["Nivel ACYS"].Cast <int>();

                                    var acysC = listaACYS.Where(x => x.Nombre == item["ACYS"]).FirstOrDefault();

                                    if (acysC == null)
                                    {
                                        throw new Exception("El acys no existe: " + item["ACYS"]);
                                    }

                                    int idAcys = acysC.Id;
                                    est.id_Acys = idAcys;


                                    est.Sucursal = item["Sucursal"].Cast <int>();
                                    var suc = listaSucursales.Where(x => x.Id_Cd == est.Sucursal).FirstOrDefault();

                                    if (suc == null)
                                    {
                                        throw new Exception("La Sucursal no existe: " + item["Sucursal"]);
                                    }


                                    est.NombreSucursal = item["Sucursal"] + " - " + suc.Cd_Nombre;
                                }

                                int resId = cm_Estr.Alta(est);
                                est.Id = resId;
                                padre3 = resId;
                                listEstructura.Add(est);
                            }
                        }


                        if (nivelMax >= 4)
                        {
                            //Nivel 4
                            est            = new CatCNac_Estructura();
                            est.NombreNodo = item[3].Value.ToString();
                            est.Id_Matriz  = Int32.Parse(Request.QueryString["Id"]);
                            if (!this.listEstructura.Exists(x => x.NombreNodo == est.NombreNodo && x.Id_Matriz == est.Id_Matriz && x.Nivel == 4 && x.NodoPadre == padre3))
                            {
                                est.Id_Matriz = Int32.Parse(Request.QueryString["Id"]);
                                est.Nivel     = 4;
                                est.NodoPadre = padre3;

                                est.Nivel_ACYS = item["Nivel ACYS"].Cast <int>();

                                var acysC = listaACYS.Where(x => x.Nombre == item["ACYS"]).FirstOrDefault();

                                if (acysC == null)
                                {
                                    throw new Exception("El acys no existe: " + item["ACYS"]);
                                }

                                int idAcys = acysC.Id;
                                est.id_Acys = idAcys;

                                est.Sucursal = item["Sucursal"].Cast <int>();
                                var suc = listaSucursales.Where(x => x.Id_Cd == est.Sucursal).FirstOrDefault();

                                if (suc == null)
                                {
                                    throw new Exception("La Sucursal no existe: " + item["Sucursal"]);
                                }


                                est.NombreSucursal = item["Sucursal"] + " - " + suc.Cd_Nombre;

                                int resId = cm_Estr.Alta(est);
                                est.Id = resId;
                                padre4 = resId;
                                listEstructura.Add(est);
                            }
                        }
                    }

                    model.SaveChanges();
                    scope.Complete();
                }
                catch (Exception ex)
                {
                    scope.Dispose();

                    listEstructura.Clear();
                    listEstructura = cm_Estr.ConsultarTodos(Int32.Parse(Request.QueryString["Id"]));
                    RAM1.ResponseScripts.Add("CloseAlert('" + ex.Message + "')");
                }
                finally
                {
                    var nodoA           = treeEstructura.Nodes[0];
                    var hijosPrimerNodo = listEstructura.Where(x => x.Nivel == 1).ToList();
                    nodoA.Nodes.Clear();
                    ConstruirEstructura(ref nodoA, hijosPrimerNodo);
                    AgregarControles(ref nodoA, hijosPrimerNodo, null);
                    treeEstructura.ExpandAllNodes();
                }
            }
        }