Ejemplo n.º 1
0
        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"));
            }
        }
Ejemplo n.º 2
0
        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());
                }
            }
        }