Bueno llegamos al capítulo final de nuestro control de horario.
Este es el capítulo digamos más importante porque vamos a ver las tablas que tienen que ver con el control
de horario.
Hasta ahora hemos preparado el terreno no hemos creado nuestra política.
Vamos a ir acomodando porque vamos a necesitar un poco de espacio.
Nuestros empleados nuestra tabla maestra empleados hemos vamos a ganar aquí para que no quede ningún
campo oculto vamos a mover la geografía y las áreas de la empresa muy bien ahora vamos a ver las tablas
que tienen que ver con el control de horarios yo les voy a ir explicando el porqué de cada tabla.
Estamos hablando de seis tablas así que este capítulo va a durar un poquito.
Estamos hablando de seis tablas.
Vamos a crear la primera que es la tabla por la cual se empieza qué es la tabla del movimiento del control
de horario.
El empleado fue al sistema óptico colocó su pulgar o pasó su tarjeta y eso va a mandar una información
cuál es la información que vamos a mandar va a ser así vamos a crear una carpeta una tabla con doble
clic vamos a ir desplazándonos y esa tabla se va a llamar control horario guión bajo MOV de movimiento
va a ser un movimiento.
Aquí vamos a hacer un prefijo que va a ser si H.M. c h de control horario y M de movimiento y vamos
a tener nuestro aided.
Esto no cambia y aquí vamos a colocar por ejemplo ya estamos hablando de tablas que van a ir creciendo
desmesuradamente porque día a día cada empleado va a tener n movimientos y le vamos a colocar un vigilad
de 10 por ejemplo de 10 dígitos va a ser an signed y auto incremento muy bien muy bien ahora qué es
lo primero que va a capturar nuestro sistema va a capturar la fecha vamos a poner la fecha va a ser
de tipo Toit ahora les voy a explicar por qué Veidt y no daytime si ya tengo fecha y hora porque es
muy práctico para hacer cálculos y manejar las horas mantenerlo en un campo afuera.
En definitiva va a ocupar lo mismo solo que estoy desglosando fecha por un lado y ora por el otro así
que aquí vamos a decirle que hora es de tipo Time.
Aquí vamos a quitarle los paréntesis porque si no me va a pedir un formato determinado y no es el caso.
No es lo que nosotros queremos ahora.
Solamente que me grabe la fecha en forma en la hora en formato de hora hora minutos y segundos muy bien
y lo último que vamos a tener en nuestra tabla movimiento es que empleado y o empleado aided esto lo
manejan ustedes a su gusto.
Aquí vamos a tener que ponerle de tipo in porque en nuestra tabla empleados le hemos puesto que era
de tipo Ynet.
Si no no puedo hacer la llave foránea vamos a colocarle que es Nott Noll es muy importante Ansina y
nada más por qué tengo esto nada más cada vez que un empleado pase por la máquina va a grabar la fecha
y la hora y el Leidi del empleado a la máquina no le interesa evaluar si es una entrada es una salida.
Esto lo va a hacer el sistema que nosotros desarrollemos.
Generalmente esto va a depender de las políticas que tenga la empresa porque hay empresas que calculan
las horas de acuerdo a la cantidad de tiempo que detectan que el empleado estuvo dentro de la compañía
y hay otras que lo que hacen es porque esos son cálculos muy complejos.
Imagínense que el empleado sale porque tiene que ir a comprar algo para almorzar o quiere ir a fumar
afuera como ocurre en las compañías donde no se puede fumar dentro de la compañía se van a la calle
y tienen que pasar sus tarjetas para registrar la salida porque si no las puertas o los molinetes de
los sistemas de seguridad no se habilitan entonces lo que hacen las compañías comúnmente es registrar
el primer movimiento del día como la hora de entrada y el último movimiento del día como la hora de
salida.
Todos los movimientos intermedios que ocurren en el medio no los evalúan entonces lo que quieren saber
es a qué hora entró el empleado y a qué hora se fue al finalizar el día.
Es por eso que aquí solamente vamos a grabar esos cuatro datos esos tres datos perdón fecha hora y el
empleado y luego dependiendo el sistema que nosotros hayamos desarrollado vamos a obrar en consecuencia
muy bien ya tenemos nuestra tabla movimientos lo que vamos a hacer ahora es crearle índices.
Por ejemplo vamos a crear el índice fecha donde va a ser un tipo Indec se va a poder repetir y vamos
a seleccionar la fecha.
Esto van a ver que la fecha va a participar de más de un índice es para que nosotros cuando hagamos
nuestro selects esto sea rápido no podemos perder mucho tiempo en esta tabla.
Vamos a crear un segundo índice que va a ser fecha empleado va a ser de tipo Index y vamos a tildar
la fecha y el empleado cuando busquemos los movimientos de un empleado determinado en una fecha determinada.
Al ser un índice va a ser rapidisimo ustedes tienen que entender que esta tabla va a tener miles y miles
y miles de registros con lo cual vamos a tener que trabajar fuertemente con índices.
Aquí hay un tema ustedes lo van a determinar si quieren ordenar primero por fecha o por empleado.
Es indistinto dependiendo de lo que quieran lograr si lo que quieren es barrer por el mismo empleado
en fechas diferentes les va a convenir que el índice sea primero del empleado y luego de la fecha y
si lo que quieren barrer es una fecha determinada y ordenarlo por los empleados lo van a tener que hacer.
Así como lo hemos tildado en este momento muy bien hoy ya tenemos nuestra tabla con nuestros índices
lo podemos abrir aquí lo podemos ver los índices los voy a replegar porque voy a necesitar mucho mucho
espacio en pantalla y lo que vamos a hacer ahora es crear una tabla que es una tabla de resumen.
Por qué.
Porque es una tabla que yo voy a tener resumido esto porque aquí voy a tener n registros por un mismo
empleado y por una misma fecha.
Entonces voy a crear una tabla que se va a llamar precisamente control horario res de resumen y aquí
lo que voy a hacer es si H.R que es el prefijo que voy a usar voy colocaron un Beguin también de 10
que va a ser auto incremental y sin signo voy a colocar un campo fecha que va a ser de tipo muy bien
voy a colocar el empleado que va a ser de tipo entero int y voy a colocar la cantidad de horas.
Ahora voy a explicarles por qué hago esto porque de alguna manera esto es como repetir información.
Toda esta información yo la puedo calcular de esta tabla.
Ahora cuando ustedes tengan un sistema un sistema que tiene que rápidamente hacer liquidaciones de sueldo
cálculos de horas extra y demás no van a poder tener una buena performance si tienen que leer todos
estos registros recuerden que aquí hay registros que no voy a tomar en cuenta porque el empleado salió
a fumar porque por cada movimiento son dos registros la entrada y la salida.
Entonces lo que se hace podemos ejecutarlo en una tarea programada en nuestro sistema que al final del
día recorra por esa fecha toda la tabla de control de horario y que me resuma la información de la cantidad
de horas trabajadas por cada empleado y por esa fecha.
Esta es una tabla histórica donde se va a ir alimentando y esa información la a ir resumiendo en esta
tabla.
El otro motivo por el cual hacemos esto es por qué esta tabla al ser una tabla que va ir creciendo muchísimo
la voy a tener que ir depurando en algún momento voy a tener que ir registrando voy a tener que ir borrando
registros porque va a hacer una tabla que va a tener un crecimiento exponencial.
Entonces esta tabla me sirve de resumen y es la tabla que yo voy a tomar en mis sistemas para rápidamente
saber las horas que trabajó un empleado en una fecha.
Si no voy a tener que leer los 4 6 8 o 10 registros para la misma información que hay en esta tabla
y la voy a tener que ir calculando.
Entonces tenemos nuestra tabla resumen en la tabla resumen lógicamente también vamos a ir a crear índices
el índice fechas y yo quiero saber todos los movimientos de una fecha.
Rápidamente el sistema quiere evaluar una fecha determinada y va a tener el posicionamiento exclusivo
en esa fecha y voy a poder leer todos los registros de todos los empleados que han tenido ingresos y
egresos de movimientos de control de horario en esa fecha.
Vamos a crear obviamente lo mismo fecha empleado ser de tipo índice y vamos a hacer lo mismo que hicimos
en control de horario movimiento muy bien ahora nosotros ya tenemos estas dos tablas.
Luego vamos a hacer todas las uniones por clave foránea.
Ahora lo que vamos a hacer es una tabla.
Vamos a tirar esto a un costado una tabla un poco más grande que es la tabla de novedades esta tabla
de novedades esta tabla de novedades lo que va a permitir es separar los buenos movimientos los movimientos
lógicos los empleados que han tenido por ejemplo un horario normal.
Bastante bien bastante normal con los empleados que han tenido novedades por ejemplo infracciones empleados
que han llegado tarde empleados que han faltado entonces nosotros vamos a esta tabla la vamos a llamar
perdón
control horario novedades y en esta tabla vamos a tener un prefijo que se hn de novedades vamos a tener
obviamente nuestro perdón estoy creando un índice estoy en el lugar equivocado si hn aided y va a ser
de tipo entero muy bien vamos a decirle que es outro incremente aun signed.
Aquí vamos a colocar la ficha de qué fecha fue la infracción o la novedad mejor dicho vamos a colocar
el tipo Toit vamos a colocar una una idea de infracción o sea aquí hubo una infracción o una llegada
tarde una cantidad de horas trabajadas menos de las que se tenía que haber trabajado.
Vamos a colocar aquí una infracción aided que vamos a unir a una tabla de infracciones distintas infracciones
que van a tener por supuesto un nombre y esto lo vamos a hacer una pequeña tabla va a tener algunos
registros le vamos a poner que es un Molinet de tres no han signed no Nul no puede ser nulo obviamente
aquí lo que vamos a decirle por ejemplo es el empleado del cual se ha registrado una infracción y esto
esta tabla la de novedades es muy útil para los sistemas de auditoría entonces los sistemas de auditoría
van a leer esta tabla hay novedades sí mira el empleado número 23 llegó 10 minutos tarde.
Todas estas cosas son las que nos van a permitir tener un gran sistema de control de horario y aquí
el empleado obviamente tenemos que respetar el tipo de dato que era entero y aquí vamos a colocar horas
si la novedad va a ser expresada en horas vamos a colocar un Tinet de de 1 porque nunca va a haber una
novedad que me diga que hubo diez horas tarde por ejemplo porque la jornada laboral raramente supere
las 9 horas y aquí vamos a colocar minutos porque si llego 10 minutos tarde no voy a expresarlo en horas.
Obviamente aquí vamos a elegir Tinet donde estamos aquí Tiny de3 muy bien le vamos a decir que San signed
muy bien.
Bueno esta tabla esta tabla como les dije es una tabla de novedades vamos a crearle las dos llaves las
dos índices primero fecha
va a ser un tipo índex vamos a tildar fecha vamos a crear otro que es empleado y vamos a tildar empleado
y podemos tildar podemos crear un nuevo índice que una ambos ok.
Muy bien por qué no es Geonick.
Porque para una fecha y un empleado podría haber más de una novedad podría haber más de una infracción
o algo similar.
Muy bien ahora nosotros tenemos nuestra tabla que es la tabla de novedades.
Vamos a crear la tabla de infracciones porque es parte del sistema de control de horario vamos a bajar
un poquito vamos a crear la tabla de infracciones la vamos a llamar precisamente infracciones vamos
a colocar el primer campo que va a ser infractor aided va a ser de tipos Molinet de tres no mucho más.
No molín de tres Lazer auto auto numérico muy bien auto incremento y le vamos a poner un nombre.
Qué va a hacer.
Lo dejamos con un parchar de 60
Maiden esta tabla que es la tabla maestra.
Va a estar unida a la tabla de novedades vamos a colocar esto por aquí y esto por aquí vamos a crear
las dos últimas tablas que tienen que ver con esta es una tabla las tablas que vamos a crear son las
tablas de excepciones que son las tablas de excepciones donde el sistema va a grabar cuando por ejemplo
sabemos que un empleado va a estar de vacaciones.
Sabemos que un empleado ya nos avisó que mañana no viene entonces nosotros cargamos la excepción para
que no se le controles o como una falta porque está justificada.
Tenemos la tabla de excepciones cuando a posteriori también nos ocurre que para una fecha determinada
nos trajo un nos trajo un certificado médico que dice que él faltó sí pero que estaba justificado o
que se va a retirar antes de la compañía en un día determinado.
Bueno nosotros en esta tabla excepciones que la vamos a llamar precisamente.
Vamos a doble click en nuestra tabla.
Vamos a llamarla control horario es OPS ex de excepciones.
Vamos a se va a llamar Che se Aché ahí dice y vamos a dejarlo en entero.
Está muy bien vamos a ponerle que es Singler y auto incremento.
Y aquí vamos a colocar primero el dato de qué empleado de qué empleado es el.
La excepción vamos a colocar el entero no Nul Ansina para poder unir por llave foránea la tabla empleados
y aquí vamos a poner fecha fecha desde desde qué fecha iba a comenzar la excepción por qué no uso un
campo ficha y listo.
Porque en un solo registro yo puedo tener un rango de fechas así que voy a poner fecha H de fecha hasta
porque puede ser que para un día él falte y bueno aquí van a estar los dos campos con el mismo dato
y si es un rango de fechas por ejemplo por vacaciones él va el empleado va a tener sitiado aquí que
está justificada su falta por ese rango de fechas y aquí vamos a poner
novedad.
Por ejemplo es una tabla que vamos a crear es la última tabla que vamos a crear en este.
En esta sección va a ser por ejemplo un Molinet va a ser una molín de cuatro de los tipos de novedades
que yo voy a tener en una tabla y que van a justificar vamos a verlo ahora cuando creamos esa tabla
y ahora un campo más que Zoras bueno cuántas horas tiene justificado porque qué pasa.
Yo puedo tener justificado de acuerdo a la novedad si la novedad de vacaciones yo en horas no voy a
poner nada voy a poner simplemente la fecha de la fecha hasta ahora sí lo que la novedad es se retira
antes de tiempo se llama así.
Aquí voy a poner la cantidad de horas que él va a trabajar de menos en esa fecha que voy a aceptar esto
lo voy a sitiaron directamente como.
También la cantidad de horas y le voy a poner eso 5 por la cantidad de horas que él va a trabajar de
menos que puede ser en una fecha o en un rango de fechas determinado por eso acorde con el empleado
que en lo que va de va del mes en el mes siguiente por vacaciones que yo le debo y él no se las quiere
tomar va a tener justificado trabajar no sé 200 horas menos en el mes así que por este motivo le colocó
un Molinet que pueden sobrar un par de billetes.
Pero bueno nosotros tenemos que calcular de máxima vamos a ahora muy bien por ahí la exclusión exclusiones
por una licencia por maternidad y aquí voy a colocar la cantidad de horas que yo le perdono a ese empleado
para que no sea no sea reportado como una infracción se dan cuenta.
Esta tabla de exclusiones me permite evitar que un movimiento no ha visto al sea marcado como una infracción
y ahora lo último que vamos a hacer es crear la tabla novedades hacemos doble clic.
Novedades muy bien y aquí vamos a colocar novedad aided la tabla de novedades dijimos que iba a ser
un molín de cuatro si lo ven aquí es una Molinet de cuatro va a ser obviamente auto incremento y aun
signed y aquí vamos a colocar descripción
en la descripción de la novedad.
Obviamente vamos a colocar en este caso vamos a colocar un parchar de 60 y ya tenemos nuestras tablas
creadas.
Lo último que vamos a hacer ahora es unir las tablas como corresponde y vamos luego por último a crear
nuestro Lawyer o nuestro Freinet determinado.
Vamos a unir vamos a colocar las que tengan que ver con empleados por qué.
Porque voy a tener que unir todo esto a la tabla empleados.
Vamos a hacer click en por ejemplo en este caso va a ser hijo va a ser un movimiento va a ser hijo porque
va a haber muchos movimientos para un solo empleado aquí sí entonces voy a crear mi llave foránea que
va a ser si H.M. em empleado y voy a referenciar a qué tabla la tabla empleados y aquí voy a decirle
que empleado aided se va a unir a la tabla Empleado hoy día.
Luego vamos a acomodar para que las líneas no se toquen pero ahora vamos a ocuparnos exclusivamente
de crear la Llave foránea feca.
Si H.R que es la tabla de control horario de resúmen empleado y vamos a decirle que esa tabla de resumen
va a estar unida a la tabla empleados.
Lo mismo damos aquí hay algo que no le gustó empleado es de tipo entero.
Vamos a ver los campos sí pero me faltó tildar muchas cosas.
Ahí está no Noll y Signals tienen que ser.
Vamos a grabar por las dudas sí o sí tienen que ser tildados si no no me va a abrir las opciones muy
bien ahora ya tenemos dos tablas unidas vamos a unir ahora control de NOB va a tener dos uniones va
a tener una hacia la tabla empleados vamos aquí va a ser eficaz se hn empleado a nuestra tabla empleados
y lo mismo vamos a tildar y vamos a unir lo que vamos a hacer ahora es unir la tabla de novedades a
la tabla de infracciones estando en la tabla de novedades vamos a crear nuestro próximo Foreing que
se hn in frac la vamos a llamar porque las infracciones le vamos a colocar la unión a la tabla de infracciones
y cuando hacemos clic en infracción aided la únimos directamente a nuestra tabla infracción.
Por qué y por qué si Jonh novedades porque por una infracción puede haber n movimientos n novedades
muy bien ahora lo que nos queda lo último en cuanto a uniones es colocar una unión aquí de empleado
a nuestra tabla empleados hacemos doble clic vamos a decirle que por ejemplo va a ser una Foreing que
se Aché de empleado y vamos a referenciar la tabla empleados y ahora hacemos click aquí.
Esto no tiene mucho misterio.
Lo último lo último que vamos a hacer es seleccionar a novedades como nuestra tabla hija y vamos a unir
novedades a las exclusiones recuerden que hay una idea que es de novedades.
Entonces vamos a colocar Fika novedad y va a ser de exclusión.
Vamos a unirlo a qué tabla la tabla por supuesto de control horario exclusión y aquí hacemos clic y
tenemos algo que no le gustó.
Molinet control de horario.
Perdón es un error lo que estoy haciendo es un error tengo que delimitar bien mi hijo es exclusiones
por un padre que novedades puede haber n registros de exclusiones entonces aquí mismo
vamos a colocar nos vamos a unir la tabla de exclusiones a la tabla de novedades que no es control horario
no vez sino que es la tabla de novedades muy bien y ahora le decimos que el campo novedad aided de la
tabla de control horario exclusiones se une a la tabla novedades muy bien ahora nos quedó todo ya configurado
tenemos ya absolutamente todo lo que vamos a hacer es acomodar un poquito vamos a reducir un poco visualmente
vamos a acomodar esto un poco más abajo para que podamos distinguir entre las uniones
íbamos a colocarle.
Ahí está para que es muy es a veces hasta incómodo esto.
Cuando ya tienen mucho tiempo a ver qué pasa lo vamos a mover vamos a ponerlo al 100 para ahora ponerle
el nombre y el ayer se va a llamar precisamente control horario y vamos a darle un nombre que va se
va un nombre.
Perdón estoy mareado vamos a ponerle un color diferente que va a ser nuestras tablas de control de horario
muy bien esto es todo lo que tenemos que saber para nuestro sistema de control de horario.
Ustedes pueden agregarle más tablas si quieren de acuerdo a la complejidad de lo que les piden hacer
en su trabajo pero con esto tiene que funcionar de manera perfecta.
Vamos ahora a hacer que hacer un forward a volcar todo esto en nuestra base de datos.
Vamos a ir dándole siguiente y vamos a terminar creando nuestras tablas en nuestra base de datos se
va a conectar va a ejecutar todo lo que tenga que ejecutar como son muchas tablas se demora un poquito
y vamos a tener todo impactado en nuestro motor esperemos que no haya ningún dato que falte porque la
verdad que sería volver a revisar muy bien ahora ya tenemos ya tenemos nuestro modelo en nuestro catálogo
en nuestras tablas control de horarios fíjense que ya tenemos nuestra base creada.
Vamos a ampliar un poquito esto con nuestras tablas ya tenemos todo creado así que este es el la sección
control de horario espero que les haya gustado todo este ejercicio que ha sido un poco largo pero bueno
me pidieron ejemplos reales así que lo que se viene a partir de ahora son secciones donde vamos a ver
ejemplos reales con muchas tablas y mucha explicación y van a aprender muchísimo así que los veo en
la próxima sección.