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()); } }