public ActionResult Proceso(String id) { // se crea dos Listas distintas una que esta guardado en el CausanteDAO y otro una lista con la clase funcionario List <Causante> listaCausante = causanteDAO.GetCausantes(); List <Funcionario> funcionarios = new List <Funcionario>(); List <Funcionario> repetidos = new List <Funcionario>(); List <Funcionario> norepetidos = new List <Funcionario>(); List <Funcionario> nuevo = new List <Funcionario>(); /* se crea 3 variables una para guardar a los nuevos funcionarios otro * para activar funcionarios y otro para desactivar los funcionarios */ int on = 1; int c = 0; int b; foreach (var item in listaCausante) { /* se crea las variables strings para guardar los nombres y apellidos, el nombre 1 es el nombre principal, * el nombre2 es el nombre secundarios, el apellido1 es el apellido paterno y el apellido 2 es para el apellido materno * el arreglo subs es para separar el nombre completo por espacio y las variables que seran almacenadas en el objectos Funcionario son el Num.Correlativo * como una Id para el funcionario el nombre como dije en lo anterior para sera separados para el nombre y apellido el Promedio_Renta en la RentaPromedio el activo * como numero preterminado sera 1 */ String nombres = " ", apellidos = " ", nombre1 = " ", nombre2 = " ", apellido1 = " ", apellido2 = " ", subapellido1 = " ", subapellido2 = " ", subapellido3 = " "; String[] subs = item.NOMBRE_CAUSANTE.Split(' '); short id_Funcionario = (short)item.NUM_CORRELATIVO; String Rut = item.RUT_CAUSANTE; int Renta = (int)item.PROMEDIO_RENTA; short Activo = 1; /* si los apellidos son "CARTER DE LA PAZ" se divide los apellidos en 4. * 3 de ellos son subsapellidos que son: DE LA PAZ que al final son un apellido unido con el segundo apellido : CARTER que al final son el resultado es: * "DE LA PAZ CARTER"*/ if (item.NOMBRE_CAUSANTE.Substring(0, 16).Equals("CARTER DE LA PAZ")) { subapellido1 = subs[3]; subapellido2 = subs[2]; subapellido3 = subs[1]; apellido1 = subapellido3 + " " + subapellido2 + " " + subapellido1; apellido2 = subs[0]; apellidos = apellido1 + " " + apellido2; nombre1 = subs[5]; nombre2 = subs[4]; nombres = nombre1 + " " + nombre2; } /* si no es el Caso y los apellidos son "GONZALEZ ACEVEDO" y terminan en un solo nombre se inviterte los apellidos y separa el nombre */ else if (item.NOMBRE_CAUSANTE.Substring(0, 16).Equals("GONZALEZ ACEVEDO")) { apellido1 = subs[1]; apellido2 = subs[0]; apellidos = apellido1 + " " + apellido2; nombre1 = subs[2]; nombres = nombre1; } /* si no es ninguno de los casos por defecto de dividira en 4 2 nombre y 2 apellidos*/ else { apellido1 = subs[1]; apellido2 = subs[0]; apellidos = apellido1 + " " + apellido2; nombre1 = subs[3]; nombre2 = subs[2]; nombres = nombre1 + " " + nombre2; } /* los datos de los causantes como Rut Nombre promedio_Renta estaran * en los funcionarios como Rut, nombre, apelldios y Renta_promedio y los deams datos en 0 o nulos */ Funcionario funcionario = new Funcionario(); funcionario.Id_Funcionario = id_Funcionario; funcionario.Rut = Rut; funcionario.Nombres = nombres; funcionario.Apellidos = apellidos; funcionario.RentaPromedio = Renta; funcionario.Activo = Activo; funcionario.Sexo = 0; funcionario.EstadoCivil = 0; funcionario.Fec_nacimiento = null; funcionario.Direccion = "Null"; /* Los objectos seran almacenados en una lista de objectos de Funcionarios */ funcionarios.Add(funcionario); } /* se va a mostrar los datos almacenados en la base de datos en el objecto Funcionario y counts se va a 0 y el objecto almacenado */ foreach (var ilem in funcionarios) { b = 0; Funcionario funcionario = new Funcionario(); funcionario.Id_Funcionario = ilem.Id_Funcionario; funcionario.Rut = ilem.Rut; funcionario.Nombres = ilem.Nombres; funcionario.Apellidos = ilem.Apellidos; funcionario.RentaPromedio = ilem.RentaPromedio; funcionario.Activo = ilem.Activo; funcionario.Sexo = ilem.Sexo; funcionario.EstadoCivil = ilem.EstadoCivil; funcionario.Fec_nacimiento = ilem.Fec_nacimiento; funcionario.Direccion = ilem.Direccion; /* se va a leer los datos del objecto Funcionario solamente su id y su rut */ foreach (var items in db.Funcionario) { Funcionario funcionario1 = new Funcionario(); funcionario1.Id_Funcionario = items.Id_Funcionario; funcionario1.Rut = items.Rut; /*si la id del funcionario de la lista es igual a la id del funcionario de la base de datos y * el rut del funcionario de la lista es igual al rut del funcionario enttonces los datos de la lista * se guardara a otra lista llamada repetidos con los mismo parametros del objectos Funcionario */ if (funcionario1.Id_Funcionario == ilem.Id_Funcionario && funcionario1.Rut.Equals(ilem.Rut)) { b = 0; c = c + 1; repetidos.Add(funcionario); } /*si no se guardara en otra lista con el nombre de los norepetidos con los datos del objeto funcionario de la base de datos * y la variable b y c se va a acumular */ else { on = 0; c = c + 1; b = b + 1; norepetidos.Add(funcionario1); } /*si la variable b es igual al conteo del foreach de la base de datos del funcionario entonces este dato es un nuevo funcionario * y se guarda en la lista de nuevo */ if (b == db.Funcionario.Count()) { nuevo.Add(funcionario); } } } /*Se crea un foreach y se va a leer los datos de la lista del norepetido y va modificar del activo va a ser 0 * como si fuera una nueva hoja de activos mayormente a todos los funcionarios van a ser 0 al inicio */ foreach (var item in norepetidos) { Funcionario funcionario = new Funcionario(); funcionario.Id_Funcionario = item.Id_Funcionario; conexion.Close(); conexion.Open(); String Cadena = "update Funcionario set Activo =" + 0 + "where Id_Funcionario =" + funcionario.Id_Funcionario + ""; SqlCommand command = new SqlCommand(Cadena, conexion); int cant; cant = command.ExecuteNonQuery(); conexion.Close(); } /* se crea un foreach para leer los datos de la lista de los repetidos va a cambiar su activo a 1 en la base de datos * entonces solo va a pasar a los funcionarios que estan repetidos */ foreach (var item in repetidos) { Funcionario funcionario = new Funcionario(); funcionario.Id_Funcionario = item.Id_Funcionario; conexion.Close(); conexion.Open(); String Cadena = "update Funcionario set Activo =" + 1 + "where Id_Funcionario =" + funcionario.Id_Funcionario + ""; SqlCommand command = new SqlCommand(Cadena, conexion); int cant; cant = command.ExecuteNonQuery(); conexion.Close(); } /* se crea un foreach para leer a los nuevos y la variable on va a ser igual a 1 */ foreach (var item in nuevo) { on = 1; } /*si la varible on es igual a 1 entonces inicia la siguiente secuencia*/ if (on == 1) { /*en caso que la base de datos esta vacia, la Variable c estara en 0 * y la lista de objectos funcionarios se guardara en la Base de datos por DEFAULT */ if (c == 0) { db.Funcionario.AddRange(funcionarios); } /* sino entonces los datos de la lista nuevo se añade a la base de datos */ else { db.Funcionario.AddRange(nuevo); } /*se elimina los datos del archivo temporal con su lista y se guarda los datos de la base de datos ademas * se redireciona al proceso de descargar */ causanteDAO.EliminarCausantes(); db.SaveChanges(); return(Redirect("../Causantes/Descargar")); } /*si on esta en 0 entonces se elimina los datos del archivo temporal con su lista y se redireciona al proceso de descargar */ else { causanteDAO.EliminarCausantes(); return(Redirect("../Causantes/Descargar")); } }
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()); } } }