Manual técnico TpvFox

En esta sección pondremos información para SuperAdministradores y desarrolladores de la aplicación TpvFox.

 

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado

Explicacion general de permisos en tpvfox

La gestión de los permisos es independiente para cada usuario.

En la tabla usuarios tenemos un campo grupo_id que si le ponemos al usuario el valor 9 es como si fuera administrador y tiene todos los permisos.

Aunque los permisos son independiente y se podría quitar o poner permisos distintos a casa usuario.

Lo permisos pueden ser:

  • 1 -> tiene acceso 
  • 0-> no tiene acceso

Los permisos de modulos , vistas o acciones los indicamos en el fichero access.xml de cada modulo pero siempre con jeraquia modulo->vista->accion. Por ejemplo:

  •  mod_clientes -> tiene permiso
  •  vista listado clientes -> tiene un permiso
  •  acciones dentro listado clientes -> tiene otro permiso.

No podemos crear un permiso una accion fuera de una vista.

¿Donde guardamos los permisos de cada usuario ?

 Los permisos de cada usuario los guardamos en tabla permisos

¿ Que son lo permisos del con usuario 0 ?

Son los permisos que tenemos por defecto en los ficheros access.xml de todos los modulos y plugins.

Se utilizan para limpiar permisos y añadir los que faltan a cada usuario, reorganizar permisos.

 

¿ Donde añado un permiso a un modulo ?

Cuando se crea un modulo , en el fichero acces.xml se indica los permisos por defecto del modulo , de sus vistas y sus acciones.

Cuando en produccion añadimos una accion, entonces los permisos tienes que reorganizar permisos, tambien podermo resetear los permisos.

REORGANIZAR LOS PERMISOS.

En menu de sistema puede encontrar la pestaña de reorganizar, ahí tiene una opcion Reorganizar permisos, donde lo que hace es eliminar los permisos usuario 0 y luego los vuelve a crear, a partir ahi comprueba  uno a uno los permisos que tiene de cada usuario, para crear o eliminar, obteniendo limpieza y creación de los nuevos permisos que tuvieran, manteniendo los permisos que tiene en la actualizadad.

RESETEAR LOS PERMISOS

Si queremos resetear los permisos, es decir poner a todos los usuarios los permisos por defecto, eliminamos los registros en la tabla permisos (vaciar registros) y cuando se loguee el usuario ya regenera los permisos por defecto.

La clase de permisos cuando NO encuentra permisos para ese usuario los vuelve a regenerar.

PROBLEMAS CON LOS PERMISOS.

Cuando reseteamos los permisos,el problema es que si tenemos muchos usuarios y con permisos diferentes, luego tenemos que volver poner en cada usuario esos permisos, la solucion a esto sería hacer grupos de permisos. Esto ultimo que pendiente para proximas versiones.

¿ Cuando se cargan los permisos ?

Los permisos se cargan en la session de php, en fichero inicial.php se crea una variable $Clasepermisos, esta variable es objeto de la clases/ClasePermisos.php

¿ Como obtengo el valor del permiso de una accion ?

Pues con el metodo abreviado :

$ClasePermisos->getAccion("descuento_ticket_update")

 Obtienes el valor del permiso, siempre y cuando exista ese permiso en ese modulo y esa vista.

Si quieres obtener un permiso de un modulo o vista distinta a la que tienes, tienes mandar un segundo parametro con array:

array ('modulo' => mod_xxx, 'vista' => 'vista')

Si al intentar obtener permiso de una acción y da un error:

PHP Recoverable fatal error: Object of class ClasePermisos could not be converted to string

Es que esta solicitando un permiso que no existe.

 

 

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado

Usamos el Modal de Javascript de Bootstrap, puede ver la documentación del modal de bootstrap

Como puedes ver en el repositorio github del proyecto tenemos en el directorio plugin/modal los ficheros

  • func_modal.js
  • ventanaModal.php

El primero es JS con el tenemos funciones para abrir modal, cerrarlo y alguna otra mas... :-)

El fichero php es el html template del modal, el cual podremo añadir con Javascript (Jquery) el contenido.

¿ Como lo añado en mi vista ?

Simplemente en fichero vista php añades:

 <?php
echo '<script src="'.$HostNombre.'/plugins/modal/func_modal.js"></script>';
include $URLCom.'/plugins/modal/ventanaModal.php';
?>

 Lo suelo colocar justo antes de cerrar la etiqueta body.

¿ Como muestro popModal  y como cierro?

Pues desde nuestro JS podemos llamar a la función abrirModal que tenemos func_modal.js , enviando titulo y el contenido como parámetros.

Para cerrar lo mismo, utilizamos la funcion cerrarModal que tenemos func_modal.js

¿ Como hago algo después de cerrar el modal ?

En la documentación encontré el evento :

$('#ventanaModal').on('hidden.bs.modal', function (e) {
.... lo queremos hacer despues de cerrar.
});

Con este evento, se ejecuta al cerrar Modal..

 Por ejemplo, puede ser interesante refrescar la pagina cuando añadimos o operamos algo, pero si pulsamos cerrar, te interesa que refresque la pagina para mostrar los cambios.

Esto prefectamente podrías hacerlo sin controlar el evento y poner recarga de pagina con javascript, pero si tienes un boton de cancelar el que no hace nada, o no simplemente deja todo igual, te interesa que no lo haga, es ahi donde entra el metodo anterior.

 

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado

En nuestro proyecto TPVFOX versionamos  X.Y.Z parche, en el momento de creacion de post estamos en V0.2.25

Metodo de crear versiones (tag)

Esto quiere decir que :

X : Fin de una etapa , ya termino de implentar de nuevas funcionalidades.Actualmente aun estamos 0

Y: Añadimos alguna funcionalidad o cambios muy grandes.

Z: Pequeños cambios y pequeñas mejoras.

P: Parches para arreglar bug, advertencia .... Se crea un parche simplemente cuando es plenamente necesarios, sino se deja en master hasta hacer una nueva version.

 Como versionamos nuesta Base de datos

Todos sabemos que los cambios en la estructura de la Base datos implica siempre posibles problemas, por ello nosotros cuando realizamos un cambio en la estructura de la base de datos, lo que hacermos es un fichero en el directorio BD/Update con las nombre y indicando la version:

install_update_vX.Y.Z.P

En estos ficheros puede encontrar las instrucciones sql para ejecutar para actualizar tu Base de Datos.

Siempre que se genere un fichero install_update nuevo se debe crear una version nueva ( tag nuevo) en proyecto git.

De esta forma todas las instalaciones cuando actualizan saben que  instrucciones sql tiene que ejecutar. Por ejemplo si estamos en la version v0.2.22, si vamos al directorio BD/Update podemos ver cuantos ficheros hay hasta la version actual, y por lo cual sabermos que instruciones sql tenemos que ejecutar.

 

 

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado

Aquí intentaremos explicar los posibles estado que pueda tener el campo estado en las distintas tablas del proyecto TPVFOX.

Este campo hasta ahora era varchar, sabemos que no es lo correcto, crearemos una tabla de estados para relacionarlas con un id :-)

Ahora definimos los posibles estados que vamos utilizando en las distintas tablas.

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado

Lo primero es deciros que esta entrada es un borrador para nosotros los programadores de tpvfox, no es un modelo a seguir, para nada, todo contrario ya que este proyecto empezó con código espagueti y poco a poco lo vamos mejorando.

Si estas interesado continuar mejorando nuestro TPVFOX es interesante que sigas leyendo. No dudes en ponerte en contacto con nosotros para cualquier aclaración o duda.

Un poco teoría y referencias.

Un MVC que precie debería separar la lógica de la aplicación con la vista (lo que muestra), es decir que nos permite separar los componentes de nuestra aplicación según su funcionalidad, que cuando hacemos un cambio en alguna parte de nuestro código, esto no afecte otra parte del mismo, no es una tarea fácil.

Por ejemplo:

En una web un usuario hace una petición en una web , el controlador responde esa petición, ya que es el controlador el se que encarga de la lógica de la web.

El controlador le pide al modelo la información de esa petición. El modelo se encarga de los datos ( consultar la base de datos) , una vez los tenga , se los envía al controlador nuevamente , por ultimo es el controlador el que se los envía a la vista para mostrarlos.

Tengo que decir que todas las referencias que fui leyendo , no  siempre los modelos se encargan de los datos, por lo que entiendo que no todas los sistema MVC son iguales.

 Algunas de las referencias que encontré MVC :

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado

CRUD es un acronimo ingles de Crear, Leer, Actualizar y Borrar. Los que me conoceis sabeis que no me gustan mucho tecnicismos y acronimos raros, aunque tenemos que conocerlos para poder hablar a veces con algunos compañeros que si los utilizan.

 En nuetra aplicacion intentamos hacer un modelo CRUD que podamos utilizar en todos los modulos que utilicemos, desde que empezamos el proyecto hasta ahora pasamos ya por varios modelos, por ello es hora empezar de formarme y documentar de una forma mas estandar para tener CRUD en tpvfox.

Ponemos los Modelos que tenemos en estos momento, ya que algunos los fuimos descartando y no existen:

  • /modulos/claseModelo.php
  • /modulos/claseModeloP.php
  • /ClaseTFModelo.php

Poco a poco estoy intentando pasar todas las llamadas a de los primeros al ultimo ( /ClaseTFModelo.php ).

 

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado

El objetivo es hacer un proceso sencillo para poder controlar eventos de tecla y raton. Una idea similar como shortcut.js.

Nosotros creamos lib teclado.js, que tenemos en lib/js/, donde una forma sencilla, creo :-), controlamos los eventos de teclado y los eventos de raton

¿Como empezar?

Lo primero añadiendo es añadir los objetos globales en JS en el head


var idInput = {
	id_input : 'idInput', // Este se añade ante construir ya que el id input es Unidad_Fila_1
	acciones : {
		 13 : 'accion_realizar_pulsar_intro', // Pulso intro
		 40 : 'accion_realizar_pulsar_abajo', // Pulso abajo. 
		 38 : 'accion_realizar_pulsar_arriba', // Pulso arriba pero va para abajo.
			},
	parametros : {
		dedonde : 'nombre_pantalla'
		// Los parametros que podemos necesitar
		}
}

Luego añadir la libreria

 <script src="/<?php echo $HostNombre; ?>/lib/js/teclado.js"></script> 

Poner en input,check,button o la caja permita eventos,el atributo data-obj="Nombre_objeto_global"

Tambien poner en el evento queramos controlas llamamos a la funcion controlEventos(event).

Y ya solo queda currar lo queremos que haga.

En esta parte tienes que tener en cuenta que las funciones que necesita y utiliza son:

  • function controladorAcciones(caja,accion)
  • function after_constructor(padre_caja,event)
  • function before_constructor(caja)

¿Que hace la funcion controladorAcciones ?

Esta funcion puede ser un switch o simple if donde comprobamos si existe la accion que le tenemos objeto global.

Llegamos a la funcion cuando pulso una tecla o un evento que tengamos definido en el objeto global, realizar la accion que le indiquemos