public ActionResult Insertar(HttpPostedFileBase Files) { /* se crea dos clase de Dao una para el Causante y otro para el Documento esas clases son para almacenamiento temporal * en caso que en la parte de proceso de guardado se Cancele se tiene que volver al proceso de insertar otra vez, ademas * el documento y todo el almacenamiento que estaban en la Clase DAO se borrara automaticamente * */ CausantesDAO causanteDAO = new CausantesDAO(); DocumentoDAO documentoDAO = new DocumentoDAO(); causanteDAO.EliminarCausantes(); documentoDAO.EliminarDocumento(); List <Causante> causa = new List <Causante>(); /* en caso de que no hay nada en el documento se enviara un mensaje de Archivo Vacio*/ if (Files == null || Files.ContentLength == 0) { return(ViewBag.Message = "Archivo Vacio"); } else { try { /* toma el nombre y el contenido del documento , lo envia y lo guarda en una carpeta llamada "descargas" */ String fileName = Path.GetFileName(Files.FileName); String folderpath = Path.Combine(Server.MapPath("~/Views/Causantes/descargas"), fileName); Files.SaveAs(folderpath); /* toma el contenido del la tabla lo dividi en tres listas las Listas A y B son para contenido que no se guarda * use una variable Llamada Count si el count estan en menor o igual a 4 el contenido * estara en la lista A y B en caso de si una de las filas esta vacia se agregan el Valor Null, * se guardan en las listas A y B si Count es igual a 5 los datos se guardara en la lista C * que son para la Columnas del causante ej: Num.Correlativo , Rut Causante, etc. */ StreamReader streamReader = new StreamReader(Files.InputStream, System.Text.Encoding.UTF8); List <string> ListaA = new List <string>(); List <string> ListaB = new List <string>(); List <string> ListaC = new List <string>(); int count = 0; while (!streamReader.EndOfStream) { var line = streamReader.ReadLine(); if (line.Equals("")) { line = "null|null"; var values = line.Split('|'); ListaA.Add(values[0]); ListaB.Add(values[1]); count = count + 1; } else { var values = line.Split('|'); if (count <= 4 || count == 4) { ListaA.Add(values[0]); ListaB.Add(values[1]); count = count + 1; } else if (count == 5) { ListaC.Add(values[0]); ListaC.Add(values[1]); ListaC.Add(values[2]); ListaC.Add(values[3]); ListaC.Add(values[4]); ListaC.Add(values[5]); ListaC.Add(values[6]); ListaC.Add(values[7]); ListaC.Add(values[8]); ListaC.Add(values[9]); ListaC.Add(values[10]); ListaC.Add(values[11]); ListaC.Add(values[12]); ListaC.Add(values[13]); ListaC.Add(values[14]); ListaC.Add(values[15]); ListaC.Add(values[16]); ListaC.Add(values[17]); count = count + 1; } else { /* ya si Count esta mayor a 5 se guardara los datos de los causantes que al inicio estaran en String al inicio * y algunos datos del causante se conviete en variables Int o Short ej: NUM_CORRELATIVO, CODIGO_TIPO_CAUSANTE * CODIGO_TIPO_BENEFICIARIO, CODIGO_TIPO_BENEFICIO, TRAMO, MONTO_BENEFICIO, CODIGO_ESTADO_TUPLA y PROMEDIO_RENTA * ademas que la fechas son guardardas en la varible DATE y todo los datos de la clase Causante se guardan una Lista Temporal * Llamada CausanteDAO */ Causante causantes = new Causante(); short Num_Correlativo = Convert.ToInt16(values[0]); int Codigo_tipo_causante = Int32.Parse(values[3]); int Codigo_tipo_beneficiario = Int32.Parse(values[7]); int Codigo_tipo_beneficio = Int32.Parse(values[9]); DateTime Fecha_Reconocimiento = DateTime.Parse(values[13].Replace("/", "-")); short Tramo = Convert.ToInt16(values[14]); int Monto_Beneficio = Int32.Parse(values[15]); int Codigo_estado_Tupla = Int32.Parse(values[16]); int Promedio_Renta; /* se enviara un try en caso que el promedio renta sea Null se cambiara un 0 * si no es el caso entonces se enviara el numero que esta en el archivo */ try { Promedio_Renta = Int32.Parse(values[18]); } catch (Exception) { Promedio_Renta = 0; } causantes.NUM_CORRELATIVO = Num_Correlativo; causantes.RUT_CAUSANTE = values[1]; causantes.NOMBRE_CAUSANTE = values[2]; causantes.CODIGO_TIPO_CAUSANTE = Codigo_tipo_causante; causantes.TIPO_CAUSANTE = values[4]; causantes.RUT_BENEFICIARIO = values[5]; causantes.NOMBRE_BENEFICIARIO = values[6]; causantes.CODIGO_TIPO_BENEFICIARIO = Codigo_tipo_beneficiario; causantes.TIPO_BENEFICIARIO = values[8]; causantes.CODIGO_TIPO_BENEFICIO = Codigo_tipo_beneficio; causantes.TIPO_BENEFICIO = values[10]; causantes.RUT_EMPLEADOR = values[11]; causantes.NOMBRE_EMPLEADOR = values[12]; causantes.FECHA_RECONOCIMIENTO = Fecha_Reconocimiento; causantes.TRAMO = Tramo; causantes.MONTO_BENEFICIO = Monto_Beneficio; causantes.CODIGO_ESTADO_TUPLA = Codigo_estado_Tupla; causantes.GLOSA_ESTADO_TUPLA = values[17]; causantes.PROMEDIO_RENTA = Promedio_Renta; causanteDAO.Crear(causantes); count = count + 1; } } } /* 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 */ String result = string.Empty; String Fechas = DateTime.Now.Date.ToString("yyyy/MM/dd"); foreach (string strfile in Directory.GetFiles(Server.MapPath("~/Views/Causantes/descargas"))) { FileInfo fi = new FileInfo(strfile); if (fi.Name.Equals(fileName)) { Documento documento = new Documento(); documento.Archivo = fi.Name; documento.Tamaño = fi.Length; documento.tipo = GetFileTypeByExtension(fi.Extension); documento.Fecha = DateTime.Parse(Fechas); documentoDAO.Creardocumento(documento); } } /* despues sera enviado al controlador de Proceso_de_guardado */ ViewBag.Message = "Archivo Subiendo"; return(Redirect("Proceso_de_guardado")); } /* en caso qyue el doucmento son sea igual al formato entonces se enviara * un mensaje de error diciedo Archivo Erroneo */ catch (Exception ex) { ViewBag.Message = "Archivo erroneo"; ViewBag.Message = ex; return(View()); } } }