Tras las nuevas tecnologías y recursos que tenemos en las empresas, seguimos haciendo muchas de las funciones de recursos humanos con las tecnologías de antaño.

Hemos visto que esas funciones son de gran dificultad y deberíamos tener una aplicación que nos permita hacer esas funciones que hemos comentado de manera mas intuitiva y dinámica.

Para ello hemos generado un monorepositorio de nxNrwl con Angular 10, NestJs y BBDD de MySql

Nrwl es una herramienta que nos permite montar distintas aplicaciones Node.JS dentro del mismo repositorio, de esa forma podemos compartir funciones y recursos sin necesidad de tener que hacerlo con rutas directas, además permite la no redundancia y creación de shared-interfaces. Para nuestra aplicación será esencial.

¿Que es un Monorepositorio?

Un monorepo podría entenderse como un enorme repositorio que contiene todo el código y funcionalidad de distintos proyectos

Características

  • Compartir una librería que puede ser un servicio o componente entre los proyectos dentro del repositorio
  • Compartir código entre proyectos que utilizan diferentes frameworks tales como Angular, React
  • Tenemos más de un proyecto en el mismo repositorio.
  • Conjunto único de dependencias (package.json)
  • Tener aplicaciones full-stack con su marco preferido

¿Que es Nx?

NX es el kit de herramientas para el desarrollo de Monorepositorios, que le ayuda a construir software de manera más inteligente y rápida. Con Nx puede crear aplicaciones fullStack con su marco preferido.

Como instalarlo

Se necesitará Node.JS y angular-cli

Para la creación del monorepositorio: npx create-nx-workspace@latest

Al ejecutar este comando, solicitará informacion como el nombre del «workspace» el de la aplicación o le tipo de hoja de estilo que queramos usar

En nuestro caso tenemos que escoger Angular con api Nest

Configuración de la API

Tras tener la aplicación montada nos aparecerán dentro de las apps nuestra API y nuestra aplicación postTajamar

Dentro de la api tenemos nuestro controlador, en el que tenemos que poner nuestra escucha de llamada

Captura de pantalla 2020-11-19 094022

Tambien tenemos nuestra base de datos, que tenemos que darle las claves para conectarse

Captura de pantalla 2020-11-19 094045

Este es el servicio que se conecta con la BBDD

Captura de pantalla 2020-11-19 094034

En nuestro caso, hay veces que mandamos JSON para convertirlos a posteriori, para ello hemos declarado nuestras librerias con interfaces

Captura de pantalla 2020-11-19 094121

Este es el servicio que concatena

Captura de pantalla 2020-11-19 094058

Este es el servicio que hace la petición

Captura de pantalla 2020-11-19 094107

Esta api nos devolvera un observable con el resultado de la BBDD

BBDD

para la creación de la BBDD hemos usado MySql. Dentro del cual hemos tenido que crear un usuario DBA y las tablas

Creacion usuario:

Captura de pantalla 2020-11-19 094121

Creación tablas:

Captura de pantalla 2020-11-19 095532

Tras ello tenemos que crear nuestro primer servicio en la aplicación postTajamar

Se llamará API

Captura de pantalla 2020-11-19 095740

Ahora tenemos que crear un servicio que consuma de manera inteligente este servicio, para ello hemos creado el servicio getterSetter, que de manera inteligente guarda los datos para reducir el consumo con la BBDD

Captura de pantalla 2020-11-19 095944

Este servicio guarda los datos y en caso de tener muchas peticiones vuelve a hacer una consulta, en caso de actualizaciones solo hace el update a la BBDD y lo actualiza de manera automatica en sus datos. En las peticiones guarda la información en la petición para consumirla despues

Captura de pantalla 2020-11-19 100158

Para poder llevar todo esto acabo sin problematica de errores en interfaces hemos declarado una libreria compartida con los modules

modules

Como tenemos datos sensibles en nuestra página, tenemos que tener un servicio que encripte nuestras contraseñas para evitar la sencillez y descifrado del mismo. Para ello hemos creado una clave compuesta para que sea irreversible. De esta forma podemos encriptar pero no desencriptar

Captura de pantalla 2020-11-19 100453

Ahora vamos a crear el primer servicio, será el que se ocupe de la creación, loggeo y logout de los usuarios.

loginService

Es el turno de la creación del servicio de los trabajadores

trabajadoresService

Ahora con el comando: npx ng g c «COMPONENTE» vamos a crear los componentes que necesitaremos

Captura de pantalla 2020-11-19 102102

Vamos a empezar por el de welcome, en el cual hemos usado AOS para una visualización mas dinamica de los elementos

Este es el resultado:

Captura de pantalla 2020-11-19 102255

Nuestro footer es especial, ya que hace un efecto Layer down, este seria el seultado

Captura de pantalla 2020-11-19 102319

Nuestro app.component.html sería este:

Captura de pantalla 2020-11-19 102556

Estamos viendo una linea que contiene router-outlet

Para ello necesitamos el modulo que proporcione routing

routing

El código typescript que genera el efecto layer estaría en app.component.ts sería este:

typescript component ts

Todo ello acompañado de un complejo .scss

Vamos a crear nuestro navbar

Para ello creamos nuestro html

navbar

Y nuestras funciones en typescript

navbar ts

Ahora vamos a hacer nuestros dialogs (páginas salientes) que nos muestren el logeo o registro del usuario, sesion abierta y logout. Con sus correspondientes mensajes de feedback

Estas serían las capturas de los resultados

login
register
sesion abierta
logout
mensajes

Todo va asociado a un control de errores por ejemplo:

control errores

Ya teniendo nuestra sesión iniciada vamos a poder ver mas enlaces en caso de ser trabajador

Tenemos de forma distintiva cada uno de los crud que se ven a continuación

menu cruds

Pero en este caso vamos a ver todo, este sería el html

ver todo html

Todos estos componentes funcionan con el datasource de mattable

este sería un ejemplo sencillo del html

mat table html

Este sería un ejemplo del typescript que lo apoya

mat table ts

Veamos el resultado de nuestro verTodo

ver todo cerrado

Estas tablas pueden ser expandibles:

ver todo abierto

Estos componentes se ven de diferente forma aquí que en su vista privativa

vista privativa

Todas las tablas tienen un filtro de busqueda

Busqueda activa

Ademas las lineas pueden ser ordenables

sort funcionando 2
sort funcionanod

Vamos a ver ahora la parte de administracion

ejemplo administracion

Asi es como se crean los datos

Vamos a ver ahora el historico de los puestos

historicos todos

Ahora vamos a ver solo los puestos del trabajador

informacion privativa puestos

Junto con todos sus datos de trabajador

https://flic.kr/p/2k89uTQ

A continuación veremos la forma de editar los campos del usuario

ver cuenta editar

Vamos a ver ahora la parte de nóminas, es la mas compleja, ya que tiene la parte mas elaborada, que es la elaboración de nominas automaticamente

Esta genera las nominas del trabajador con incremento salarial desde la primera vez que entro en la empresa de forma automatica

generadorAutomaticoNominas

Este sería el resultado

nominas persona
nominas trabajador
nomina escandallo categorias

Todo ello en su respectiva matTable

Autor/a: Manuel Menéndez Ibáñez

Curso: Desarrollo Web Full Stack, MultiCloud y Multiplataforma

Centro: Tajamar

Año académico: 2020-2021

Dejo enlace de GitHub para la recreación del proyecto: https://github.com/TajamarManuel/AngularPostTajamar

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.