Este documento describe la implementación y configuración de la aplicación de reportes UniPOS del Éxito desarrollada por Monoku.
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.
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.
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
}
]
}
Cualquier inquietud o duda, pueden escribírmela a [[david@monoku.com]].