예제 #1
0
        public ActionResult DocumentoRegistrados(HttpPostedFileBase insertar)
        {
            /*si no se ha subido ningun documento se enviara un mensaje que ira a la vista */


            if (insertar == null || insertar.ContentLength == 0)
            {
                ViewBag.Message = "Archivo Vacio, Por favor ingrese un archivo";
                return(View());
            }
            else
            {
                /* pero si se subido un documento se creara tres listas una lista para la clase registro y dos listas de la clase Documento
                 * ademas 4 variables int
                 * la varable onRE sirve para guardar en la base de datos el nuevo objecto Registro,
                 * la variable onDo es para guardar en la base de datos el nuevo documento,
                 * la variable Do_Re es para guardar el nuevo objecto Registro o el nuevo objecto Documento y
                 * la variable Idregistro es para agregar para clave foranea de Fk_ID_Documento del nuevo objecto Registro
                 * */
                List <Registro>  Guardar_registros  = new List <Registro>();
                List <Documento> Guardar_documentos = new List <Documento>();
                int Do_Re      = 0;
                int onRE       = 0;
                int onDo       = 0;
                int idregistro = 0;
                /* La lista  Archivos es una lista que esta extraida del Almacenmiento temporal  de DocumentoDAO */
                List <Documento> Archivos = documentoDAO.GetDocumento();
                /* y se limpia por Completo */
                Archivos.Clear();
                /*se elimnia todo el contenido de los documentoDAO*/
                documentoDAO.BorrartodolosDocumentos();
                /*se toma el archivo que esta en el summit*/
                String fileName = Path.GetFileName(insertar.FileName);
                /*lo direcciona a la carpeta DocumentosG con su nombre*/
                String folderpath = Path.Combine(Server.MapPath("~/DocumentosG"), fileName);
                /* y se  guarda en la carpeta DocumentosG */
                insertar.SaveAs(folderpath);

                /* la variable Fechas extrae de la fecha de hoy     */
                String Fechas = DateTime.Now.Date.ToString("yyyy/MM/dd");
                /* se hace un foreach con la informacion que esta en los documentos almacenados en la carpeta DocumentosG   */
                foreach (string strfile in Directory.GetFiles(Server.MapPath("~/DocumentosG")))
                {
                    /* se usara la clase FileInfo para extraer la informacion del documento  */
                    FileInfo fi = new FileInfo(strfile);

                    /* si el nombre del documento es igual a nombre del documento que hemos subido entonces se vas a extraer
                     * el nombre, el tamaño, la extension y la fecha del el dia que se subio yse  guardara en el archivo temporal de documentoDAO
                     * para mas informacion de la extension dirijase al metodo GetFileTypeByExtension */
                    if (fi.Name.Equals(fileName))
                    {
                        Documento Doc = new Documento();
                        Doc.Archivo = fi.Name;
                        Doc.Tamaño  = fi.Length;
                        Doc.Tipo    = GetFileTypeByExtension(fi.Extension);
                        Doc.Fecha   = DateTime.Parse(Fechas);
                        documentoDAO.GuaradarDocumento(Doc);
                    }
                }

                /* La lista Archivos extrae los nuevos datos que se ha almacenado en el almacenamieto temporal de DocumentoDAO
                 * y se crea  nuevas variables
                 * la variable count que es para guardar los documentos y  los registros,
                 * la variable id es para agregar una id a los documentos la base de datos en la parte esta vacia por defectos  se  usara la  id para asignar a la tabla de documentos,
                 * la variable iddoc es igual que  la id pero con una diferencia que se agregara el ultimo id del documeto mas con la id  ej: si la ultima id es 4 iddoc tomara ese id de documento
                 * y se  sumara con la variable id que por defecto es 1 y el nuevo documento con una id sera 5 ademas
                 * la variable on su funcion es saber si un documento ya esta registrado en la base de datos */
                Archivos = documentoDAO.GetDocumento();
                int count = 0;
                int id    = 1;
                int iddoc = 0;
                int on;
                /* se empieza a leer el documento que esta en la lista archivos   */
                foreach (var item in Archivos)
                {
                    on = 0;
                    Documento Doc = new Documento();
                    Doc.Archivo = item.Archivo;
                    Doc.Tamaño  = item.Tamaño;
                    Doc.Tipo    = item.Tipo;
                    Doc.Fecha   = DateTime.Parse(Fechas);
                    /* se crea un foreach para leer los documentos que estan en la base de datos*/
                    foreach (var items in db.Documento)
                    {
                        Documento doc = new Documento();
                        doc.Id_Documento = items.Id_Documento;
                        doc.Archivo      = items.Archivo;
                        doc.Tamaño       = items.Tamaño;
                        doc.Tipo         = items.Tipo;
                        doc.Fecha        = items.Fecha;

                        /*  si el nombre del documento que esta en la lista es igual al nombre del documento que esta en la base de datos
                         *  y el tamaño del documento que esta en la lista es igual al tamaño del documento que esta en la base de datos
                         *  y el Tipo del documento que esta en la lista es igual al Tipo del documento que esta en la base de datos
                         *  entonces la id del documento sera guardado en la varible idregistro y la variable on sera 1 y seguira leyendo los documentos  */
                        if (doc.Archivo.Equals(Doc.Archivo) && doc.Tamaño == Doc.Tamaño && doc.Tipo.Equals(Doc.Tipo))
                        {
                            idregistro = doc.Id_Documento;
                            on         = 1;
                            break;
                        }

                        /* sino si la varible on es igual a 1 entonces
                         * si la cantidad de los Documentos de la base de datos no es igual a 0 entoces iddoc tomara la id del documento de la base de datos ademas
                         * seguira leyendo */
                        else if (on == 1)
                        {
                            if (db.Documento.Count() != 0)
                            {
                                iddoc = doc.Id_Documento;
                            }
                            break;
                        }

                        /* sino entonces
                         * si la cantidad de los Documentos de la base de datos no es igual a 0 entoces iddoc tomara la id del documento de la base de datos ademas la variable count se acumulara
                         * seguira leyendo  */

                        else
                        {
                            if (db.Documento.Count() != 0)
                            {
                                iddoc = doc.Id_Documento;
                            }
                            count += 1;
                        }

                        /* si count es mayor o igual al conteo de Documento de la base de datos entonces
                         * la id del objecto Documento sera la suma de id y iddoc se almacenara en la lista Guardar_Documento y las variables Do_Re y onDo
                         * sera 1 eso solo pasara si el documento no esta registrado en la base de datos */
                        if (count >= db.Documento.Count())
                        {
                            Doc.Id_Documento = id + iddoc;
                            idregistro       = Doc.Id_Documento;
                            Guardar_documentos.Add(Doc);
                            Do_Re += 1;
                            onDo  += 1;
                        }
                    }
                }

                /* eempieza crear una lista de la clase persona que se extraera los datos que esta en el almacenamieto de PersonaDAO
                 * y se reutiiza las varibles  count  y on para otro usos */
                List <Personas> Person = new PersonaDAO().GetPersonas();
                count = 0;

                /* se crea un foreach para la para leer  los datos de la lista personas  y ses extrae el rut */
                foreach (var item in Person)
                {
                    Personas personas1 = new Personas();
                    personas1.Rut = item.Rut;

                    /* Se reutiliza la lista Archivos y se muesta en un foreach y se extrae solo la Id del documento
                     * y los datos extraidos seran guardados en el objecto Registro con el nombre de la variable re   */
                    foreach (var items in Archivos)
                    {
                        Registro re = new Registro();
                        re.Fk_Id_Documento = idregistro;
                        re.Fk_RUT          = personas1.Rut;

                        /* se creara un foeach para leer los datos que estan en registro qu esta en la base de datos y extraera la claves foraneas de Fk_RUT y Fk_Id_Documento
                         * */
                        foreach (var ite in db.Registro)
                        {
                            Registro registro = new Registro();
                            registro.Fk_RUT          = ite.Fk_RUT;
                            registro.Fk_Id_Documento = ite.Fk_Id_Documento;
                            /* si la claves foraneas son iguale a los datos que estan en el objecto registro con el nombre re entonces se enviara un mensaje a la vista   */
                            if (registro.Fk_RUT.Equals(re.Fk_RUT) && registro.Fk_Id_Documento == re.Fk_Id_Documento)
                            {
                                ViewBag.Message = "ya esta Registrado este documento para este usuario";
                                return(View());
                            }
                            /* si no se acumulara la variable count  */
                            else
                            {
                                count += 1;
                            }
                        }
                        /* si a variable count es  igual entonces  los datos del objecto con el nombre re se guardara e una lista  y se acumula las variables   */
                        if (count == db.Registro.Count())
                        {
                            Guardar_registros.Add(re);
                            Do_Re += 1;
                            onRE  += 1;
                        }
                    }
                }
                /* si la variable Do_Re es igual a 1 entoces se guardara el documentos o el registro    */
                if (Do_Re == 1)
                {
                    /* si la variable onDo es igual a 1 entonces se guardara solo el documento en la base de datos   */
                    if (onDo == 1)
                    {
                        db.Documento.AddRange(Guardar_documentos);
                    }
                    /* sino si la variable onRe es igual a 1  entonces se guardara solo el registro en la base de datos  */
                    else if (onRE == 1)
                    {
                        db.Registro.AddRange(Guardar_registros);
                    }
                }
                /* sino si la variable Do_RE es igual a 2 entonces se guardara ambos objectos a la base de datos   */
                else if (Do_Re == 2)
                {
                    db.Documento.AddRange(Guardar_documentos);
                    db.Registro.AddRange(Guardar_registros);
                }
                /* se guarda los cambios en la base de datos  despues de este proceso pasara igual que en la parte GET */
                db.SaveChanges();
                documentoDAO.BorrartodolosDocumentos();
                List <Personas> personas = new PersonaDAO().GetPersonas();
                foreach (var item in personas)
                {
                    Personas person = new Personas();
                    person.Rut = item.Rut;
                    foreach (var items in db.Registro)
                    {
                        Registro R = new Registro();
                        R.Fk_Id_Documento = items.Fk_Id_Documento;
                        R.Fk_RUT          = items.Fk_RUT;
                        if (person.Rut.Equals(R.Fk_RUT))
                        {
                            registroDAO.guardarRegistro(R);
                        }
                    }
                }
                List <Registro> registros = registroDAO.GetRegistros();

                if (registros.Count != 0)
                {
                    foreach (var item in registros)
                    {
                        Registro registro = new Registro();
                        registro.Fk_RUT          = item.Fk_RUT;
                        registro.Fk_Id_Documento = item.Fk_Id_Documento;
                        foreach (var items in db.Documento)
                        {
                            Documento documento = new Documento();
                            documento.Id_Documento = items.Id_Documento;
                            if (documento.Id_Documento == registro.Fk_Id_Documento)
                            {
                                documento.Archivo = items.Archivo;
                                documento.Tamaño  = items.Tamaño;
                                documento.Tipo    = items.Tipo;
                                documento.Fecha   = items.Fecha;
                                documentoDAO.GuaradarDocumento(documento);
                            }
                        }
                    }
                    registroDAO.BorrarRegistro();
                }

                return(View());
            }
        }