# INTRANET EPIS ### Dudas producto - El filtro de pendiente no lo tenemos. Así que no se podría filtrar para poder firmar - Estado esperando firma: Vemos que en el diseño (parte derecha) aparece, pero en el funcional lo tenemos agrupado dentro de pendiente. ### Notas ### BBDD - Migracion tabla jos_6c_adjuntos_epi : modelar entidad (repo - modelo - test - factory) - 4h - Añadir campo ver_intranet (bool) default true - Añadir campo orden (int pequeñito) - Añadir campo descripcion (varchar) - Migration para pasar datos de adjuntos_formacion a formacions_contenido obligatorio (select insert) para los adjuntos subidos antes del 01/08/2022 y despues borrar los datos de adjuntos_formacion subidos antes del 01/08/2022. - 1h ### Heimdall - Ir solucionando tests -2d - openapi - 1d - Modelar tabla jos_6c_historico_epi (repo - modelo - test - factory) - 3h - Crear util que compruebe que el requisito pertenece al trabajador que hace la peticion - 1h - Search EPIS /intranet-ppe-requirement - 2d - Basarse en los searchs de recos y formaciones - Filtros por estado - Filtro por nombre del epi del catalogo - filterByName - Filtro controlador para solo devolver epis activas - Filtro controlador por empleado - Ordenado por fecha de validez - Añadir aggregation STATUS - response (revisar si existe algún endpoint ya para que coincidan los nombres => /ppe-requirement) - items: [{ - canSign => si permite firma y tiene marcada la opción del ratón tabla jos_6c_epis (campos admite_firma_prl y firma_raton) - hasAnnexes => bool si existen anexos que se puedan ver desde la intranet - numberDeliveriesLast12Months (número de entregas los ultimos 12 meses) - required => bool de la tabla jos_6c_trabajador_epi 'obligatorio' }] - Crear endpoint GET intranet-ppe-requirement/{requirementId}/acknowledgement - 4h - Comprobar que el requerimiento es del empleado que hace la peticion - Usar el proceso GetPpeRequirementAcknowledgementProcess - Search anexos intranet-ppe-requirement/{requirementId}/annexes - 4h - Comprobar que el requerimiento es del empleado que hace la peticion - con id del requisito => solo los que se puedan ver desde la intranet - para la respuesta usar la vista AttachmentView - response items: [{ "id": 1, "name": "filename", "filePath": "filepath", "description": "description" "mimeType": "img/png", "order": 1 }] - GET anexo intranet-ppe-requirement/{requirementId}/annexes/{annexesId} - 3h - Comprobar que el requerimiento es del empleado que hace la peticion - con id del requisito => comprobar que lo pueda ver - POST intranet-ppe-requirement/{requirementId}/resend - 3h - Llamara a joomla para volver a enviar los correos (falta que nos pasen en endpoint de joomla) - response code: 0 - POST intranet-ppe-requirement/{requirementId}/confirm - 3h - Actualiza el campo de fecha de entrega y actualiza la fecha de validez si tiene periocidad - Añade una nota en la tabla jos_6c_notas_epi - id_epi = id del requisito - id_acuse_recibo sera igual a 0 - nota = preguntar que texto debemos poner - response code: 0 - Ampliar search requisitos de formacion para incluir booleanos que indique si una formacion tiene contenido (obligatorio o no) - hasNonRequiredDocuments - hasRequiredDocuments - hasOthersDocuments 5h - Actualizar openapi - duplicar joins con otros alias de la columna certificateDocumentId - ver que el documento no sea un certificado - anadir joins (formacion_contenido_obligatorio y adjunto_formacion) que miren si se tiene contenido obligatorio o no - Ampliar Get de Intranet Training Requirement el proceso RequirementTrainingDetailProcess para que traiga los otros documentos (documentos sin certificado y visibles desde la intranet) devolver id en md5 y nombre del tipo del documento 3h - othersDocuments: [ { id: md5(id) name: documentTypeName mimeType: mimeType } ] - Actualizar openapi Cálculo de horas: - Tareas: 60horas - Review: 7horas - Ajustes: 7horas Total: 74horas ### Hellheim - Habrá una pestaña nueva para poder mostrar los anexos desde la intranet. Quitar el popup infernal (como en los recos)5h - Tiene los campos orden, ver intranet y descripción (como el popup que hizo Diego para los recos) - Adaptar controlador de reenviar firma de AR de Epi para que se pueda llamar desde Laravel. Si usa SeysProfile para comprobar si tiene intranet pensar en hacer otro controlador. 1h - index.php?task=episprlempleados.reenviarFirmaRemotaAR - Adaptar controlador de vista previa de AR de EPI para que se pueda llamar desde Angular. Si usa SeysProfile para comprobar si tiene intranet pensar en hacer otro controlador.1h - index.php?option=com_seysconecta&task=episprlempleados.previsualizarAr - Adaptar controlador de firma de AR de EPI para que se pueda llamar desde Angular. Si usa SeysProfile para comprobar si tiene intranet pensar en hacer otro controlador. 1h - index.php?task=episprlempleados.firmarRequisitosEPIs - Hacer contralador para descarga de documentos solo para intranet a partir del actual (index.php?option=com_seysconecta&task=documento.download). Crear tarea en Angular para modificar las rutas. 1h - Cambio en tamaño de subida de ficheros a 20MB. Repasar subidas de ficheros actuales en J!. 2h Crear tarea en Angular para repasr componentes de subida. ### Midgard ### Nidavellir - Crear modulo de epis (1h) (en jira..) - Actualizar angular (2d) (en jira..) - Periodicidad: (3h) (en jira..) - Nos llegan número de días. si es > 365 poner xx años, sino meses y luego días. Crear un helper en Odin para que devuelva este valor. Si el resto de la division de 365 es 0 devolvemos xxx años, sino dividimos entre 30 y si el resto es 0 devolvemos xxx meses y sino pues xxx dias (odin gestionará la traducción y devolverá todo formateado y traducido) => meterlo en el dateHelper - Mapper, entidad y servicio para el search del listado de los requisitos (2h) (en jira...) - Crear componente listado de epis (1d 4h) (en jira ...) - Llamar al nuevo Search intranet-ppe - Llamada a aggregation - Preparar la ruta del listado para que se pueda filtrar desde el widget de la home - La periodicidad la sacaremos llamando a una función nueva de Odin que la llamamos desde el mapper. Si periodicidad === 0 metemos undefined para no pintar nada - Nos traerá tb el número de unidades entregadas en los últimos 12 meses para mostrar en la pantalla de firma - Mirar de refactorizar funciones identicas como listenToRoutesChanges y ¿setTooltips? - Componente acciones botones (10h) (en jira...) ESTADOS: - Caducado => sin ningun boton - Conforme => boton ver acuse de recibo - Pendiente => ver anexos (si tiene anexos), firmar (si tiene firma), confirmar (si no tiene firma) - Esperando firma => reenviar email, ver anexos (si tiene anexos) BOTONES: - Confirmar (llamada laravel) - Ver anexos (modal como el resto de listados) - Firmar (pantalla firma como resto de listados) ==> hay que mandarle el número de unidades entregados en los últimos 12 meses que trae el requisito. Guardarlo en el servicio para firmar junto con el tipo de epi (ver TrainingSignatureService) - Ver acuse de recibo (llamada descarga fichero ==> laravel) - Reenviar email (llamada laravel => resend ¿?) - Modal anexos (5h) (en jira...) - Servicio para esto - La entidad y el mapper usar AttachmentEntity y extender si es necesario - El search se llama cuando se va a levantar el modal o en el onInit de los botoncicos - Componente firma (8h) (en jira...) - Crear el servicio para firmar. En él almacenaremos el tipo de epi y el dato de número de unidades entregadas en los últimos 12 meses. Ese dato se puede pintar en intranet-content='signed-extra-info' - EXTRA BALL: - Listado: recibiremos un nuevo parámetro llamado xxx que si vale true siempre mostraremos el botón de 'ver formación', pero si llega a false no quiere decir que debamos ocultar el boton de ver formación => 2h - Añadir en modelo y mapper los nuevos parametros - hasNonRequiredDocuments - hasRequiredDocuments - hasOthersDocuments - Ficha de formación => 5h - Duda producto: qué hacer con el contenido obligatorio ==> dejamos la caja pero cuando llegamos al paso del test unicamente mostramos completado 5/5 y nada más - En el padre, cuando hace el get de la formación tb recibiremos un array con othersDocuments. Este array se lo pasaremos al bloque del contenido adicional: othersDocuments: [ { id: md5(id) name: documentTypeName mimeType: mimeType } ] - Modificar el mapper y la entidad para que el get de la formación pueda recibir estos otherDocuments - Si hay datos en otherDocuments mostraremos el bloque y el texto será distinto ("Aquí tienes contenido adicional que te apoyará en tu formación y otros documentos") - Modal recursos adicionales => 2h - Si hay datos en otherDocuments debermos pintar el nuevo bloque en el modal - Para descargar usaremos el mismo servicio que existe pasando los mismos datos (el id que sea) Cálculo de horas: - Tareas: 55horas - Review: 7horas - Ajustes: 7horas - Traducciones: 1hora Total: 70horas