Portafolios
Puede ver los trabajos que hemos realizado y los que estamos realizando. No están todos, ya que no todos nos permiten publicarlo.
Como ves ,hay de todo, desarrollo, diseño, tecnico .. alguno de ahora, otros de hace mucho tiempo, pero siempre con la misma filosofia aunque nos pague millones :-):
- Open source : No hacemos código privativo.
- No hacemos nunca nada dañíno y poco etico.
- Siempre vemos los intereses del cliente primero antes de ver los nuestros.
- En todo momento enseñamos al cliente lo que hacemos.
Los trabajos presentado son todos aquellos que nos permite el cliente que lo hagamos, como hacemos colaboraciones con terceros: diseñadores,programadores y otras empresas de desarrollo, no podemos publicar todos.
Cuando vamos empezar un proyecto intentamos tener definido antes:
- Establecer objetivos como punto de partida, aunque probablemente cambien con el tiempo.
- Definir Target : Sería definir el objetivo a quien va dirigido.
- Estrategia como realizar eso objetivos.
Anotaciones para crear una entrada o categoria dentro la sección de portafolios..
- Créditos: Si aparte de nosotros, participa mas empresas o profesionales de la programación, también lo indicamos aquí.
- Tiempo empleado: Tanto tiempo efectivo , como tiempo estudio. El total horas empleadas.
- Los objetivos, tarjet y estrategia : Tanto los iniciales , como los conseguidos y los nos quedan pendientes.
Si se hace muy grande, generaremos un nueva categoría dentro portafolios.
Subcategorías
El objetivo es hacer un proceso sencillo para poder controlar eventos de teclado y raton en input o cjas que necesitemos. Una idea similar como Shortcut.js.
Nosotros creamos lib teclado.js, que utilizamos en nuestro proyecto tpvfox, donde pretendemos controlar eventos de teclado y raton de un forma mas sencilla, creo que lo hemos conseguido :-)
¿Como empezar?
Lo primero añadir nuestra librería al proyecto, por ejemplo:
<script src="/lib/js/teclado.js" type="text/javascript"></script>
Luego añadir JS los Objetos queremos controlar, variables 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
}
}
Esto nosotros en tpvfox, no los añadimos directamente, lo generamos con el fichero parametros.xml, pero eso es otra historia a contar en otro momento.
Luego en nuestro html , en nuestro input debemos porne el atributo data-obj="Nombre_objeto_global". También tenemos que llamar a la funcion controlEventos(event) en el atributo html del evento queramos controlar.
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
¿Que hace la funcion after_constructor(padre_caja,event)?
Antes de montar el objecto con la tecla y realizar accion, se ejecuta.
¿Que hace la funcion before_constructor(caja)?
Despues de montar la caja y antes de hacer la funcion que asignamos, se ejecuta.
Nota:
La definicion de esta dos ultimas funciones, debería se al contrario, pero como ya teníamos proyectos con ella, de momento no la cambiamos.
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.
¿Como sabemos en version estamos?
En terminal ejecutamos:
git describe
Así no indica que version estamos
▶ git describe
v0.3.0-29-g3266211c
v0.3.0 es tag , la version que estamos. 29 indica que la rama actual esta 29 commit por encima de ese tag.
No es habitual que rama STABLE que este commit por encima. La rama MASTER o tuya si puede esta por encima ya que se intenta ser activo y ir mejorando constantemente.
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
[P] Son parches a estas actualizaciones en las base de datos, ya por ejemplo no olvidamos de algun pequeño cambio en la base de datos, pero no implica ningun cambio de codigo.
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.
A la hora eliminar una familia solo te lo permite si desrelacionas productos y no tiene familias hijas.
Funciones y objetivo de TPVFOX
Es una aplicación para gestionar medianas y pequeñas empresas. En la que puedes:
- Gestionar productos: Altas, modificaciones, gestión stock y control de precios.
- Gestionar Proveedores: Altas y modificaciones.
- Gestionar Clientes: Altas y modificaciones.
- Gestión de compras: Pedidos a proveedores, albaranes de entrada , Facturas de proveedores.
- Gestión de ventas: Tickets-POS, pedidos de clientes, albaranes y facturación-
También se puede conectar con una tienda e-comerce (Joomla + Virtuemart ), tiene la posibilidad conectarse otros e-comerce como :
- Prestashop
- woocommerce
- ...
Estas aun no esta creada la API, te apetece hacerla.
Licencia y código
Esta publico en GITHUB y con licencia GNU General Public License v2.0
Puede utilizarlo, modificarlo y incluso venderlo, lo que no puedes cambiar la licencia, el código debe ser abierto siempre.( leer licencia )
Aunque el proyecto aun esta su fase beta , ya hay varias empresas que la utilizan, si estas interesado en utilizarlo para ti o tu empresa, estaríamos encantados en ayudar.
Leer más... Escribir un comentario
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.
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.
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 ).
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.
Cada usuario puede seleccionar si quiere o no mostrar botones de las familias en la configuracion en tpv.
Recuerda que para la familia tienes a ver marcado la mostrar en cada familia, hay que tener en cuenta que si una familia padre se muestra, sus hijos se mostraran dentro del padre.
Página 1 de 3