Skip to content

Instantly share code, notes, and snippets.

@davsket
Created November 30, 2012 02:44
Show Gist options
  • Save davsket/4173459 to your computer and use it in GitHub Desktop.
Save davsket/4173459 to your computer and use it in GitHub Desktop.
Exito InfoPOS

Éxito InfoPOS

Este documento describe la implementación y configuración de la aplicación de reportes UniPOS del Éxito desarrollada por Monoku.

Tecnologías

El desarrollo de la plataforma se encuentra sobre MooTools (librería javascript) ingreada con Require.JS para manejo de módulos AMD. No obstante se recomienda que la carga de archivos no sea asincrónica, sino que por el contrario se compile el código fuente usando node.js y r.js:

cd res/js/
node ../r.js -o name=main out=main-built.js excludeShallow=raw/init-model baseUrl=.

Del resto la aplicación usa Handlebars para el manejo de templates, y otras librerías para manejo del Localstorage y widgets.

Módulos

La aplicación se encuentra principalmente dividida en:

  • main.js: que vendría siendo el controlador principal de toda la aplicación.
  • history-manager: que viene siendo un router dinámico
  • form-report-manager: vista-controlador del formulario y reporte
  • init-model-optimizer: módulo que se encarga de parsear el archivo de configuraciòn y generar visualizaciones optimizadas para la lectura de esta por diferentes mòdulos de la aplicación.
  • favs-controller: se encarga de sincronizar la información de favoritos con el usuario logueado y su localstorage.
  • templates-manager: vista principal de la aplicación, se encarga de renderizar todo el contenido usando handlebars.
  • session-manager: se encarga del manejo de la sesión, almacenamiento del usuario en cookies y carga de datos de localstorage.
  • init-model: archivo que siempre se va acargar asincrónicamente, y en el cual se encuentra la configuración de los reportes, promociones y categorías.

Archivo de Configuración

El archivo de configuración se encuentra en formato JSON principalmente, se encuentra encapsulado para ser cargado como un módulo independiente AMD para prevenir inyección de datos.

La estructura del documento JSON es sencilla:

{
    categories:                             //Listado de categorías
    [   
        {
            name: "",                       //Nombre de la categoría
      	description: "",                    //Descripción
    		allowed: true,                 //Si está habilidada o no
    		icon: "!",                      //Ícono para la fuente
    		reports:                        //Lista de reportes
            [
                name: "",                   //Nombre del reporte
        		description: "",            //Descripción del reporte
    			url: "",                    //URL absoluta del reporte
    			id: "",                     //Id del reporte
    			roles:                      //Lista de roles que lo pueden acceder
                [
                    ""                      //Código del rol, ej: ROL_CONC_ADMIN_NEGOCIO
                ],
    			params:                     //Lista de parámetros del reporte
                [
                    {
                        type: "",           //Tipo del parámetro, los que finalmente se implementaron fueron: text, date,  select, hidden
                                            //Hidden no aparece gráficamente pero se agrega a la URL al cargar el reporte
                                            //Select es el combobox de opciones, carga un listbox con las opciones definidas en options.
    					name: "",           //Es el nombre a usar para la URL, ej: fechaInicial
    					label: "",          //Es el nombre gráfico para el usuario
    					required: false,    //Si es requerido o no
                        options: [
                            {
                            "name": "",     //Valor gráfico
    						"value": ""     //Valor para asignar al name del parámetro
                            }
                        ]
                    }
                ]
            ]
        }
    ],
	home_reports: {                         //Listado de los reportes, actualmente solo soporta uno
		ROLE_NAME: "url",                   //Dependiendo del rol se muestra un reporte diferente
		ALL: "url"                          //Reporte que aplica para todos los usuarios
	},
    promotions: [                           //Listado de promociones para la página de inicio
		{
			name: "",                       //Nombre para el title                       
			description: "",                //Descripción de la promoción
			url: "",                        //URL de destino absoluta
			img: ""                         //URL absoluta de la imagen de la promoción
		}
    ]
}

Contacto

Cualquier inquietud o duda, pueden escribírmela a [[david@monoku.com]].

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment