Este repositorio define una tarea para evaluar las habilidades de comprensión y ejecución de aspirantes a trabajar con nosotros en proyectos basados en PHP.
- Cree un fork de este repositorio en su usuario de GitHub
- Cumpla con todos los requerimientos de la letra
- Envíe un Pull Request a este repositorio desde su fork
- Definir un componente de Composer (https://getcomposer.org/) para php-test, lo más completo que pueda.
- Crear una pequeña aplicación con: PHP, jQuery, Twitter Bootstrap y MySQL, que cumpla con los siguientes flujos:
- Un usuario accede a la aplicación desde localhost
- La aplicación muestra un formulario de login con email y password
- El usuario ingresa email y password erróneos
- La aplicación muestra el login y un mensaje error
- El usuario ingresa email y password correctos
- La aplicación muestra una pantalla de listado de códigos de diagnósticos vacía
- El usuario hace clic en el botón "upload"
- La aplicación muestra una ventana modal con un formulario que tiene un file picker y un botón "upload"
- El usuario hace clic en el file picker
- La aplicación abre el selector de archivos del sistema operativo
- El usuario selecciona un archivo CSV ("codigos.csv" presente en este repositorio) y hace clic en OK
- El archivo queda seleccionado en el file picker
- El usuario hace clic en el botón "upload" de la ventana modal
- La aplicación recibe el archivo, lo procesa y carga los datos en la base de datos, antes de guardar en la base de datos debe verificar que no hay items repetidos, comparando los códigos dentro del CSV
- La aplicación devuelve la cantidad de items cargados en la base de datos y la cantidad de items en el CSV original y se las muestra al usuario, dentro de la misma modal
- El usuario cierra la modal
- La aplicación recarga el listado de códigos, mostrando ahora los códigos que se cargado desde el CSV
- El listado de códigos debe ser paginado, se muestran 10 items por página, y un paginados en la parte inferior de la pantalla
- Por defecto se muestra la primera página (primeros 10 códigos)
- El usuario hace clic en el paginador, en la página 2, y se muestran los segundos 10 códigos
- El usuario puede hacer clic en cualquiera de las páginas y la aplicación muestra los códigos correspondientes a dicha página
- En la parte superior del listado de códigos hay un search box
- El usuario ingresa un código parcial o completo
- La aplicación muestra los items que contengan el código parcial o completo dentro de su código
- El resultado de la búsqueda se muestra también paginado (si hay más de 10 elementos en el resultado, se muestran tantans páginas como sea necesarias en el paginador)
- El usuario hace clic en el botón logout
- La aplicación elimina la sesión y muestra el formulario de login
- Si el usuario ingresa de nuevo, la aplicación debería listar los items que se cargaron en los flujos anteriores, y el paginador y búsqueda funcionar correctamente
- Notar que al paginar, habiendo una búsqueda presente, es debe mantener la búsqueda
- La carga y respuesta en 2.13, 2.14 y 2.15 debe hacerse por AJAX
- La búsqueda en el search box en 2.23, 2.24, 2.25 debe hacerse por AJAX
- El procesamiento del CSV en 2.11 - 2.15 debe filtrar los códigos duplicados, sin fallar, y cargando solo los códigos que aparecen una sola vez en el CSV
- El esquema de la base de datos debe ser el siguiente:
- user(id integer PK, email varchar(255) not null, password varchar(255) not null)
- cpt(id indeger PK, code varchar(255) not null, description text not null)
- Los identificadores son autoincrementales.
- Utilizar PHP directo, sin frameworks
- Utilizar los componentes de Twitter Bootstrap para la interfaz de usuario
- Utilizar jQuery para manejar las interacciones con AJAX
- Los datos deben estar almacenados en MySQL
- Debe incluir un script que se pueda ejecutar directamente desde la terminal, que cargue un par de usuarios en la base de datos
- El archivo
codigos.csv
contiene valores con comillas dobles dentro del texto de la segunda columna (ej. el texto del códigoA4719
debe cargarse en la base de datos exactamente como"y set" Tubing for Peritoneal Dialysis
), también hay textos con paréntesis, puntos y comas, barras/
y otros símbolos:<
,>
,&
,%
o con comas,
. La carga debe mantener los textos tal cual están en el archivo. - Notar también que algunos textos en el archivo con bastante largos, debe tener en cuenta esto al crear el esquema de la base de datos, dado que el texno NO DEBE TRUNCARSE.
- Y notar que se agregaron códigos repetidos para que verifique duplicados en la subida: no se deberían cargar items con códigos duplicados. LOS DUPLICADOS NO TIENEN POR QUÉ SER ITEMS CONSECUTIVOS dentro del archivo.
- El archivo puede contener líneas en blanco, se deben filtrar.
- Debe entregar el código PHP, un archivo SQL con el esquema de la base de datos, el script para cargar usuarios, el "composer.json" (definición del componente de Composer), y un documento en Markdown the GitHub "DOC.md" que explique lo que hizo.
- La forma de entrega es mediante la creación de un Pull Request desde su fork hacia este repositorio.
- Se valorará que además comparta un video con una pequeña demo del trabajo realizado, explicando los flujos de usuario que son soportados (no es necesario que explique el código). Puede subir el video a YouTube y agregar el link en la documentación que entregue.