//-----------------------archivo--------------------------------
    protected void B_cargar_file_Click(object sender, EventArgs e)
    {
        ClientScriptManager cm = this.ClientScript;
        //String nombreArchivo = System.IO.Path.GetFileName(FU_archivo_file.PostedFile.FileName);
        string nom = TB_archivo_nombre.Text.ToString();
        string extension = System.IO.Path.GetExtension(FU_archivo_file.PostedFile.FileName);
        String nombreArchivo = nom + extension;
        string saveLocation = Server.MapPath("~\\Archivos");
        //string ruta = "hola";
        //DataTable archivo;

        L_Subir_archivos operacion = new L_Subir_archivos();
        U_Subir_archivos datos = new U_Subir_archivos();
        datos = operacion.seleccion_archivo(nombreArchivo, extension, saveLocation, Session["archivo"]);

        cm.RegisterClientScriptBlock(this.GetType(), "", datos.Mensajes);

        if (datos.Guardar == true)
        {
            try
            {
                FU_archivo_file.PostedFile.SaveAs(datos.Url_pag);

                Session["archivo"] = datos.Session_archivo;

                //cm.RegisterClientScriptBlock(this.GetType(), "", "<script type='text/javascript'>alert('El archivo ha sido cargado');</script>");
                Response.Write("<script type='text/javascript'>alert('El archivo ha sido cargado');</script>");

                llenar_grillas();
            }
            catch (Exception exc)
            {
                cm.RegisterClientScriptBlock(this.GetType(), "", "<script type='text/javascript'>alert('Error: ');</script>");
                return;

                throw exc;
            }

        }
        else
        {
            cm.RegisterClientScriptBlock(this.GetType(), "", "<script type='text/javascript'>alert('Archivo no cargado');</script>");
        }

    }
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Cache.SetNoStore();
        //llamamos la logica y el metodo
        L_Subir_archivos operacion = new L_Subir_archivos();
        U_Subir_archivos datos = new U_Subir_archivos();

        Int64 idioma;

        //preguntamos si la session idioma viene vacio
        if (Session["idioma"] == null)
        {
            //idioma por defecto 
            idioma = Int64.Parse("1");
            datos_idioma = operacion.idioma(idioma, 14);
            llenar_componentes(datos_idioma);
        }
        else if (Session["idioma"] != null)
        {
            //idioma seleccionado
            idioma = Int64.Parse(Session["idioma"].ToString());
            datos_idioma = operacion.idioma(idioma, 14);
            llenar_componentes(datos_idioma);
        }

        if (!IsPostBack)
        {
            datos = operacion.verificar(Session["user"], Session["rolUser"]);

            //enviar desde la logica un codigo scrip
            Response.Write(datos.Url_pag);
            //muestra u oculta las herramientas de categoria
            L_archivo_categoria.Visible = datos.Guardar;
            TB_archivo_precio.Visible = datos.Guardar;
            DDL_archivo_categoria.Visible = datos.Guardar;
            //ponemos valores por defecto sobre las cajas de texto de la fecha
            TB_archivo_fecha.Text = DateTime.Now.ToString("yyyy,MM,dd");
            llenar_grillas();
        }

    }//page_load
        //----- verificar sesion .....
        public U_Subir_archivos verificar(object user, object rol)
        {
            U_Subir_archivos datos = new U_Subir_archivos();

            if (user == null)
            {
                datos.Url_pag = "<script type='text/javascript'>window.location=\"inicio.aspx\"</script>";
            }
            else
            {
                if (int.Parse((String)rol) != 1 && int.Parse((String)rol) != 2)
                {
                    //lo utilizamos para definir la visibilidad de los componentes
                    datos.Guardar = false;
                }
                else
                {
                    datos.Guardar = true;
                }
            }

            return(datos);
        }
        //----- verificar seleccion de foto .....
        public U_Subir_archivos seleccion_foto(String nombreArchivo, string extension, string saveLocation, object Sfotos)
        {
            DataTable        imagen = new DataTable();
            U_Subir_archivos info   = new U_Subir_archivos();
            string           ruta   = "hola";

            //validamos que se haya seleccionado un archivo
            if (nombreArchivo.Equals("") || extension.Equals(""))
            {
                //cm.RegisterClientScriptBlock(this.GetType(), "", "<script type='text/javascript'>alert('Debe seleccionar una imagen');</script>");
                info.Mensajes = "<script type='text/javascript'>alert('Debe seleccionar una imagen');</script>";
                return(info);
            }
            else
            {
                if (Sfotos == null)
                {
                    //imagen = new DataTable();
                    imagen.Columns.Add("nombre");
                    imagen.Columns.Add("ruta");
                    Sfotos             = imagen;
                    info.Session_fotos = imagen;
                }

                imagen = (DataTable)Sfotos;

                //validamos que no se hayan subido mas de 1 archivo
                if (imagen.Rows.Count == 1)
                {
                    //cm.RegisterClientScriptBlock(this.GetType(), "", "<script type='text/javascript'>alert('No puede subir mas de 1 archivo');</script>");
                    info.Mensajes = "<script type='text/javascript'>alert('No puede subir mas de 1 imagen');</script>";
                    info.Guardar  = false;
                    return(info);
                }
                else
                {
                    //preguntamos al extension y damos la localizacion de la carpeta
                    if (!(extension.Equals(".jpg") || extension.Equals(".JPG") || extension.Equals(".png") || extension.Equals(".PNG") || extension.Equals(".jpge") || extension.Equals(".bmp")))
                    {
                        //cm.RegisterClientScriptBlock(this.GetType(), "", "<script type='text/javascript'>alert('Tipo de archivo no valido - solo formatos(jpg, jpeg, png o bmp)');</script>");
                        info.Mensajes = "<script type='text/javascript'>alert('Tipo de archivo no valido - solo formatos(jpg, jpeg, png o bmp)');</script>";
                        info.Guardar  = false;
                        return(info);
                    }
                    else
                    {
                        //saveLocation = (Server.MapPath("~\\Imagenes\\Imagenes_Archivos") + "\\" + nombreArchivo);
                        ruta = saveLocation + "\\" + nombreArchivo;

                        //confirmamos que no exitas el archivo
                        if (System.IO.File.Exists(ruta))
                        {
                            //cm.RegisterClientScriptBlock(this.GetType(), "", "<script type='text/javascript'>alert('Ya existe un archivo en el servidor con ese nombre');</script>");
                            info.Mensajes = "<script type='text/javascript'>alert('Ya existe una imagen en el servidor con ese nombre');</script>";
                            info.Guardar  = false;
                            return(info);
                        }
                        else
                        {
                            info.Url_pag = ruta;

                            //llenamos el data table
                            string[] celdas = new string[2];
                            celdas[0] = nombreArchivo;
                            celdas[1] = "~\\Imagenes\\Imagenes_Archivos" + "\\" + nombreArchivo;

                            imagen.Rows.Add(celdas);

                            info.Session_fotos = imagen;
                            info.Guardar       = true;

                            return(info);
                        }
                    }
                }
            }//else principal
        }
        //----- subir archivo .....
        public U_Subir_archivos subir_archivo(string nombre, string anio, string sinopsis, string num_pag, string foto_archivo, string link_archivo,
                                              string id_user, String tags, string rol_user, string categoria, int cont_categoria, int cont_autor, string[] nom_autores,
                                              DataTable imagen_file, DataTable archivo_file, object Stags, object Sautor)
        {
            U_Subir_archivos info_2 = new U_Subir_archivos();
            //Dao_Subir_archivos operacion = new Dao_Subir_archivos();
            //DataTable informacion_archivo = operacion.consultar_archivo_nombre(nombre);

            List <sp_consulta_archivo_nombre_Result> datos = operacion_n.sp_consulta_archivo_nombre(nombre).ToList <sp_consulta_archivo_nombre_Result>();
            DataTable informacion_archivo = ToDataTable(datos);

            //asignamos la session en caso que no pase el if
            info_2.Session_fotos   = imagen_file;
            info_2.Session_archivo = archivo_file;

            //cuando el componente esta oculto no se puede utilizar para el rol 3
            if (int.Parse(rol_user) == 3)
            {
                categoria = "1";
            }
            else
            {
                cont_categoria = int.Parse(categoria);
            }

            //verificamos si la consulta trajo parametros
            if (informacion_archivo.Rows.Count == 0)
            {//datos no registrados usuario valido para insertar
             //--------------categorias_validaciones..............................................

                if (cont_categoria == 1)
                {
                    //Response.Write("<script type='text/javascript'>alert('Debe seleccionar una categoria');</script>");
                    info_2.Mensajes = "<script type='text/javascript'>alert('Debe seleccionar una categoria');</script>";
                    return(info_2);
                }

                //--------------imagen_validaciones..............................................

                //preguntamos si posee parametros
                if (imagen_file != null)
                {
                    foto_archivo = imagen_file.Rows[0][1].ToString();
                }
                else
                {
                    //cm.RegisterClientScriptBlock(this.GetType(), "", "<script type='text/javascript'>alert('Debe ingresar la imagen de la portada');</script>");
                    info_2.Mensajes = "<script type='text/javascript'>alert('Debe ingresar la imagen de la portada');</script>";
                    return(info_2);
                }

                //--------------archivo_validaciones..............................................

                //preguntamos si posee parametros
                if (archivo_file != null)
                {
                    link_archivo = archivo_file.Rows[0][1].ToString();
                }
                else
                {
                    //cm.RegisterClientScriptBlock(this.GetType(), "", "<script type='text/javascript'>alert('Debe ingresar el archivo');</script>");
                    info_2.Mensajes = "<script type='text/javascript'>alert('Debe ingresar el archivo');</script>";
                    return(info_2);
                }

                //--------------autores_validaciones..............................................

                //si la session es nula, no hay checklist seleccionados
                if (Sautor == null)
                {
                    //Response.Write("<script type='text/javascript'>alert('Debe seleccionar algun autor');</script>");
                    info_2.Mensajes = "<script type='text/javascript'>alert('Debe seleccionar algun autor');</script>";
                    return(info_2);
                }

                //--------------tags_validaciones..............................................

                //si la session es nula, no hay checklist seleccionados
                if (Stags == null)
                {
                    //Response.Write("<script type='text/javascript'>alert('Debe seleccionar tags');</script>");
                    info_2.Mensajes = "<script type='text/javascript'>alert('Debe seleccionar tags');</script>";
                    return(info_2);
                }


                //--------------insertar_archivo..............................................

                //Encapsulamos datos
                E_archivo datosArchivo = new E_archivo();

                datosArchivo.Nombre      = nombre;
                datosArchivo.Fecha       = anio;
                datosArchivo.Sinopsis    = sinopsis;
                datosArchivo.NumPag      = num_pag;
                datosArchivo.IdCategoria = categoria;
                datosArchivo.Foto        = foto_archivo;
                datosArchivo.Link        = link_archivo;
                datosArchivo.IdUser      = id_user;
                datosArchivo.Tags        = tags;
                datosArchivo.IdMod       = rol_user;
                datosArchivo.UserCambio  = id_user;

                //mandamos al metodo de agregar archivo
                try
                {
                    //operacion.insertar_archivo(datosArchivo);
                    operacion_n.sp_insertar_archivo(Int32.Parse(datosArchivo.IdMod), datosArchivo.Nombre, datosArchivo.Fecha, datosArchivo.Sinopsis,
                                                    Int32.Parse(datosArchivo.NumPag), datosArchivo.Foto, datosArchivo.Link, datosArchivo.Tags, Int32.Parse(datosArchivo.IdUser), Int32.Parse(datosArchivo.IdCategoria),
                                                    Int32.Parse(datosArchivo.UserCambio));
                }
                catch (Exception exc)
                {
                    throw exc;
                }

                //llamamos la clase encapsular
                E_archivo_autor archivo_autor = new E_archivo_autor();

                for (int i = 0; i < cont_autor; i++)
                {
                    //encapsulamos
                    archivo_autor.NombreAutor = nom_autores[i];
                    archivo_autor.UserCambio  = id_user;

                    try
                    {
                        //mandamos al metodo de agregar archivo_autor
                        //operacion.insertar_archivo_autor(archivo_autor);
                        operacion_n.sp_insertar_archivo_autor(archivo_autor.NombreAutor, Int32.Parse(archivo_autor.UserCambio));
                    }
                    catch (Exception exc)
                    {
                        throw exc;
                    }
                }

                //obtenemos los datos del ultimo archivo subido
                //DataTable info = operacion.mostrar_archivo();

                List <sp_mostrar_archivo_Result> datos3 = operacion_n.sp_mostrar_archivo().ToList <sp_mostrar_archivo_Result>();
                DataTable info = ToDataTable(datos3);

                //Encapsulamos datos
                E_subir_descargar subir_descargar = new E_subir_descargar();

                //obtenemos la posicion de la fila
                int contador = info.Rows.Count - 1;
                subir_descargar.IdUser     = id_user;
                subir_descargar.IdArchivo  = info.Rows[contador][0].ToString();
                subir_descargar.Concepto   = "Upload";
                subir_descargar.Precio     = "0";
                subir_descargar.UserCambio = id_user;

                try
                {
                    //mandamos al metodo de agregAR subir_descargar
                    //operacion.insertar_subir_descargar(subir_descargar);
                    operacion_n.sp_insertar_subir_descargar(Int32.Parse(subir_descargar.IdUser), Int32.Parse(subir_descargar.IdArchivo), subir_descargar.Concepto, Int32.Parse(subir_descargar.Precio), Int32.Parse(subir_descargar.UserCambio));

                    info_2.Mensajes        = "<script type='text/javascript'>alert('Archivo subido con exito, esperar a moderacion');window.location=\"inicio.aspx\"</script>";
                    info_2.Session_fotos   = null;
                    info_2.Session_archivo = null;

                    return(info_2);
                }
                catch (Exception exc)
                {
                    throw exc;
                }
            }//if
            else
            { //si trajo parametros el usuario esta en el sistema
                //Response.Write("<script type='text/javascript'>alert('El nombre(archivo) ya se encuentra registrado');</script>");
                info_2.Mensajes = "<script type='text/javascript'>alert('El nombre(archivo) ya se encuentra registrado');</script>";
                return(info_2);
            }
        }///////////////
    //-----------------------boton--------------------------------
    protected void B_archivo_subir_Click(object sender, EventArgs e)
    {
        ClientScriptManager cm = this.ClientScript;

        //reiniciamos session
        Session["tags"] = null;
        Session["autor"] = null;

        //obtenemos la variable de session de la imagen y archivo
        DataTable imagen_file = new DataTable();
        imagen_file = (DataTable)Session["foto"];
        DataTable archivo_file = new DataTable();
        archivo_file = (DataTable)Session["archivo"];
        
        //obetenmos las variables
        string nombre = TB_archivo_nombre.Text.ToString() +".pdf";
        string anio = TB_archivo_fecha.Text.ToString();
        string sinopsis = TB_archivo_sinopsis.Text.ToString();
        string num_pag = TB_archivo_paginas.Text.ToString();
        string foto_archivo = "";
        string link_archivo = "";
        string id_user = Session["rolID"].ToString();
        String tags = "";
        string rol_user = Session["rolUser"].ToString();
        DataList dl_tags = DL_archivo_tags;
        DataList dl_autor = DL_archivo_autores;
        //asignamos contadores 
        string categoria = DDL_archivo_categoria.SelectedValue.ToString();
        int cont_categoria = 0;
        int cont_autor = 0;
        int val_autor = 0;

        //foreach es un ciclo, Sintaxis: (var objeto, in coleccion(componente))
        //recorremos el datalist y guardamos
 
        // ---------------------------- obtenemos los tags ********************** 
        foreach (DataListItem dl0 in dl_tags.Items)
        {
            //iniciamos ciclo y preguntamos si hay checklist seleccionados para guardar
            CheckBox cb0 = (CheckBox)(dl0.FindControl("CB_tags"));
            if (cb0.Checked == true)
            {
                if (Session["tags"] == null)
                {
                    Session["tags"] = "hola";
                }
                tags += cb0.Text + '-';
            }

        }

        // ---------------------------- obtenemos los autores ********************** 
        foreach (DataListItem dl in dl_autor.Items)
        {
            //iniciamos ciclo y preguntamos si hay checklist seleccionados para guardar
            CheckBox cb = (CheckBox)(dl.FindControl("CB_autores"));
            if (cb.Checked == true)
            {
                if (Session["autor"] == null)
                {
                    Session["autor"] = "hola";
                }
                cont_autor += 1;
            }

        }

        //creamos el array que contendra los nombres de los autores
        string[] nom_autores = new string[cont_autor];

        foreach (DataListItem dl1 in DL_archivo_autores.Items)
        {
            //iniciamos ciclo y preguntamos si hay checklist seleccionados para guardar
            CheckBox cb1 = (CheckBox)(dl1.FindControl("CB_autores"));
            if (cb1.Checked == true)
            {
                //guardamos los nombres de cada autor
                nom_autores[val_autor] = cb1.Text.ToString();
                val_autor += 1;

            }//if

        }//foreach


        // ---------------------------- llammamos logica y mandamos variables ********************** 
        L_Subir_archivos operacion = new L_Subir_archivos();
        U_Subir_archivos datos_registro = operacion.subir_archivo(nombre, anio, sinopsis, num_pag, foto_archivo, link_archivo,
                                          id_user, tags, rol_user, categoria, cont_categoria, cont_autor, nom_autores,
                                          imagen_file, archivo_file, Session["tags"], Session["autor"]);


        //reiniciamos session
        Session["foto"] = datos_registro.Session_fotos;
        Session["archivo"] = datos_registro.Session_archivo;
        Session["tags"] = null;
        Session["autor"] = null;
        llenar_grillas();
        cm.RegisterClientScriptBlock(this.GetType(), "", datos_registro.Mensajes);
    
    }//boton