private static Empleado CrearEmpleadoDesdeArray(string[] arrayCamposEmpleado, string nombreArchivo)
        {
            Empleado empleado;

            try
            {
                empleado = new Empleado()
                {
                    nombre   = arrayCamposEmpleado[0],
                    apellido = arrayCamposEmpleado[1],
                    dni      = arrayCamposEmpleado[2],
                    idPuesto = int.Parse(arrayCamposEmpleado[3]),
                    horasTrabajadasUltimoMes = int.Parse(arrayCamposEmpleado[4]),
                    cuitEmpresa = arrayCamposEmpleado[5],
                };

                if (nombreArchivo != null)
                {
                    empleado.archivo = nombreArchivo;
                }
            }
            catch (IndexOutOfRangeException)
            {
                throw HttpResponseException.BadRequest("Los campos del archivo no corresponden a los definidos en la API");
            }
            catch (Exception e)
            {
                throw HttpResponseException.InternalServer(e.Message);
            }

            return(empleado);
        }
Ejemplo n.º 2
0
        public async Task <List <EmpleadoDTO> > ImportarArchivoEmpleados(IFormFile file)
        {
            ArchivoEmpleados archivoDB = await _context.ArchivosEmpleados
                                         .Where(a => a.archivo == file.FileName).FirstOrDefaultAsync();

            if (archivoDB != null)
            {
                throw HttpResponseException.BadRequest("El archivo a importar ya fue procesado o tiene el mismo nombre");
            }

            List <Empleado> empleados = new List <Empleado>();

            bool formatoDeArchivoEsCorrecto = await DeserializadorArchivoEmpleados.FormatoDeDatosDeArchivoEsCorrecto(file.OpenReadStream());

            if (formatoDeArchivoEsCorrecto)
            {
                empleados = await DeserializadorArchivoEmpleados.DeserializarArchivo(file.OpenReadStream(), file.FileName);

                empleados = await EliminarEmpleadosExistentesEnDB(empleados);

                if (empleados.Count == 0)
                {
                    throw HttpResponseException
                          .BadRequest("Los empleados del archivo ya estan registrados. Pertenecen a otro de nombre diferente");
                }

                ArchivoEmpleados archivoDb = await SubirArchivo(file);

                if (archivoDb != null)
                {
                    _context.Empleados.AddRange(empleados);
                    int filasAfectadasDeEmpleados = await _context.SaveChangesAsync();

                    if (filasAfectadasDeEmpleados == 0)
                    {
                        throw HttpResponseException.InternalServer("Error al insertar los Empleados del archivo");
                    }
                }
                else
                {
                    throw HttpResponseException.InternalServer("Error al insertar el archivo");
                }
            }

            List <EmpleadoDTO> resul = CrearListaEmpleadosDTO(empleados);

            return(resul);
        }