Tareas #5090

Tareas #4608: Desarrollo del sistema de visualización de marcas

Módulo php para subir los usuario a los relojes

Added by Pablo García over 4 years ago. Updated over 2 years ago.

Status:CerradaStart date:01/14/2016
Priority:NormalDue date:
Assignee:Pablo García% Done:

100%

Category:-Spent time:10.00 hours
Target version:-

Description

Detallar las funcionalidades del módulo para la subida de usuarios a los relojes.
Hacer una clase en php que reciba datos a especificar y envíe el/los usuarios a los relojes.

ModuloReloj.zip - Modulo Reloj (2.51 KB) Federico Ubal, 02/26/2016 05:15 PM

History

#1 Updated by Federico Ubal over 4 years ago

  • % Done changed from 0 to 40

Se desarrolló un modulo para que el sistema de personal pueda interactuar con la utilidad anviz-sync. Dicha utilidad permite comunicarse con los relojes biométricos marca Anviz que son los que contamos actualmente.

#2 Updated by Federico Ubal over 4 years ago

  • % Done changed from 40 to 90

Los relojes que tenemos actualmente presentan como problemas que en principio el software de comunicación con los mismos está disponible solo para Windows, y además si bien es posible utilizarlo usando wine, hay operación que no resulta prácticas a la hora de integrarlo a un sistema de control horario, como ser que guarda las marcas en un archivo y no en una base de datos, etc. anviz-sync es una utilidad desarrollada en python3 de código abierto bajo licencia BSD, que nos permitía sincronizar las marcas con una base de datos, y si bien no estaba implementada en la utilidad, si implementaba otras funciones del protocolo de comunicación de los relojes. Al ser código abierto fue posible extender la funcionalidad de modo que la utilidad no solo pudiera sincronizar las marcas, sino que las muestre en pantalla, muestre los usuarios registrados en un reloj y registre nuevos usuarios en el reloj.

Para que el módulo pueda utilizar la utilidad, debemos instalar algunas dependencias:

sudo apt-get install python3 python3-sqlalchemy python3-pip
sudo pip3 install mysqlclient (en caso de querer sincronizar las marcas en una base de datos mysql)

luego de esto realizamos abrimos un editor de texto con permisos de superusuario con la ruta /bin/anviz:
sudo vi /bin/anviz

e ingresamos el siguiente texto:

#!/bin/bash
python3 <ruta a la carpeta>/util.py $*

Guardar los cambios y salir. Posteriormente damos permiso de ejecución:
sudo chmod a+x /bin/anviz

Y con esto quedaría instalada la utilidad y sus dependencias, permitiendo que esta pueda ser utilizada con el modulo del sistema de control horario.

#3 Updated by Federico Ubal over 4 years ago

El modulo está implementado en 3 clases:
- Reloj.php (Es la entrada al módulo y contiene las operaciones que se pueden realizar con el mismo)
- FuncReloj.php (Abstrae la información del usuario en el Reloj)
- Marca.php (Abstrae la información de la marca)

Para utilizar el módulo creamos un objeto de la clase Reloj:

$var = new Reloj(ID,IP,[PUERTO],[DB]);

Al crear el objeto es necesario ingresar el parametro ID que es el ID de dispositivo del reloj, y el parémtro IP con la dirección IP del reloj, opcionalmente se puede indicar el puerto en caso de necesitarlo, y la cadena de conexion a la base de datos si se quiere que sea la utilidad la que sincronice directamente las marcas.

Con el objeto Reloj creado tenemos disponibles las operaciones:

->getMarcas([bool $all]) - Descarga las marcas y las devuelve en un array de objetos de tipo Marca.
->sincronizaMarcas([bool $all]) - sincroniza las marcas directamente desde la utilidad.

En ambos casos el parametro $all es opcional y por defecto es falso, se debe indicar true para el caso en que sea necesario descargar todas las marcas y no solo las nuevas.

->getFuncionarios() - Descarga la lista de funcionarios registrados en el reloj, y los devuelve en un array de objetos del tipo FuncReloj.
->setFuncionarios(array $func) - toma un array de objetos del tipo Func Reloj y los registra en el reloj.

-getUltimoResultado() - Luego de realizar una operación podremos constatar si ocurrio un error llamando a esta funcion, la misma devuelve un array asociativo con las siguientes claves:
"comando" - tiene como valor la ultima operacion realizada.
"salida" - tiene como valor la salida estándar del comando (en caso de tener un error, sale a la salida de error, por lo que no se verá aquí)
"resultado" - Tiene como valor el código de finalización de la utilidad, con lo cual si no es 0, ocurrió un error.

Creamos un objeto de la clase FuncReloj:

$var = new FuncReloj(id,nombre,[admin],[dep],[group],[mode],[fp],[pwd],[card]);

Son requeridos los parametros id que corresponde al id que tendrá o tiene la persona en el reloj, y el parámetro nombre que tiene un máximo de 10 caracteres (por lo que se sugiere una combinación del tipo inicial del nombre y apellido. Son opcionales los parametros admin para indicar si el usuario es o será administrador (por defecto no lo es), dep para indicar departamento, group para el grupo horario, mode para el modo de autentificacion, fp para la huella registrada, pwd para el password y card para la tarjeta. La mayoria de estos parametros son opcionales ya o bien depende de la configuracion del reloj o bien al momento de registrar usuarios nos interesa que no sean ingresados.

En esta clase contamos con las operaciones:
->getId() - Devuelve el Id del usuario en el reloj
->getNombre() - Devuelve el nombre del usuario en el reloj.
->getAdmin() - Devuelve un valor que indica si es administrador del reloj.
->getPass() - Devuelve el password encriptado.
->getCard() - Devuelve la tarejeta.
->getGrupo() - Devuelve el grupo del reloj al que pertenece el usuario.
->getModo() - Devuelve el modo de autentificacion del usuario
->getFP() - Devuelve la huella registrada del usuario
->getDepartamento() - Devuelve el Departamento al que pertenece el usuario.
->setNombre(Valor) - Cambia el valor del Nombre del usuario.
->setAdmin(Valor) - Cambia el valor de administrador.
->setGrupo(valor) - Cambia el grupo al que pertenece al usuario
->setModo(valor) - Cambia el modo de autentificacion del usuario.
->setDepartamento(valor) - Cambia el departamento al que pertence el usuario.

Al utilizar las operaciones set* se cambia el valor en el objeto pero no se envia al reloj, para que esto ocurra se debe subir el usuario una vez se efectuaron las modificaciones, al subirlo se sobreescribe el usuario de existir.

Creamos un objeto de la clase Marca:

$var = new Marca(ID,Fecha,tipo de marcado,tipo de marca)

Si bien los objetos de esta clase solo son creados dentro del modulo de reloj, se interactúar con ellos si se llama a la operación getMarcas en un objeto Reloj, por lo que lo que los valores contenidos en la marca son:

ID - Es el id del usuario del reloj que realizó la marca
Fecha - Fecha y hora de realización de la marca (El formato es: yyyy/mm/dd hh:mm:ss)
Tipo de marcado - Indica si marco por huella, password o tarjeta
Tipo de marca - Si es entrada/salida/etc.

Las operaciones correspondientes a esta clase son:
->getUID() -Id del usuario
->getFecha() - Fecha de la marca
->getTipoBackup() - Tipo de marcado
->getTipo() - tipo de marca

#4 Updated by Federico Ubal over 4 years ago

  • Status changed from Nueva to Resuelta
  • Assignee changed from Federico Ubal to Pablo García
  • % Done changed from 90 to 100

#5 Updated by Federico Ubal over 4 years ago

Para el caso de que se quiera utilizar la utilidad de comunicacion por los relojes directamente desde una lineas de comandos las opciones que acepta son las siguientes:

 -a            Indica que queremos todas las marcas del reloj, no solo las nuevas. Necesita -m ó -s
 -c <ruta>     Recibe la ruta al archivo de configuración que se quiera utilizar.
 -u [ruta]     Indica que queremos subir funcionarios y opcionalmente la ruta al archivo con la información de los mismos. Por defecto se encuentra en: /tmp/staff.csv
 -d            Baja la información de los funcionarios almacenados en el reloj.
 -m            Baja las marcas del reloj
 -s            Sincroniza las marcas en una base de datos.

#6 Updated by Federico Ubal over 4 years ago

Agrego el archivo con las clases del modulo

#7 Updated by Pablo García over 4 years ago

  • Parent task set to #4608

#8 Updated by Victor Alem over 2 years ago

  • Status changed from Resuelta to Cerrada

Also available in: Atom PDF