[Gestiong-desarrollo] Cómo funcionan los módulos en GestiONG
Gestión integral de ONG y asociaciones
Status: Beta
Brought to you by:
scapel
|
From: Santiago C. T. <sa...@ke...> - 2008-04-30 12:55:18
|
Esta documentación la subiré a la wiki cuando esté completa.
La base de GestiONG la componen las siguientes 5 bibliotecas:
libbase .- Clases fundamentales
libdb .- Clases de acceso a la base de datos
libgui .- Definición de las clases del GUI
libqui-xxx .- Implementación de las clases del GUI
librtk .- Generador de informes
libsystem .- Programa principal, ventana principal, login y
formularios generales.
A esta base, se pueden añadir dinámica o estáticamente diferentes módulos:
mod-sistema .- Login principal, usuarias
mod-contactos .- Tabla de contactos
mod-contable .- Contabilidad
mod-socias .- Gestión de socias
Los módulos permiten:
- Añadir nuevas tablas y formularios al programa
- Sustituir tablas y formularios existentes
- Añadir nuevas opciones a los menús de la ventana principal
- Añadir nuevos informes
- etc.
Para crear un nuevo módulo, hay que derivar una nueva clase de
gong::Module y reimplementar las siguientes funciones:
virtual bool initMainWindow
Para añadir las opciones al menú principal
virtual bool login
Para conectarse a las bases de datos que sean necesarias
virtual bool initDataDictionary
Para definir las tablas de la base de datos del módulo
virtual db::Record *createRecord
Para crear un Record de este módulo.
virtual FrmEditRecord *createFrmEditRecord
Para crear un formulario de edición para un registro.
Las dos últimas funciones son llamadas por GestiONG en cada módulo
cargado cada vez que necesita crear un registro o un formulario, desde
el cargado al final hasta el cargado al principio. Esto permite
redefinir formularios y registros.
Por ejemplo, supongamos que tenemos cargado el módulo CONTACTOS y
queremos crear un módulo para añadirle un nuevo campo: OCUPACION.
En la función initDataDictionary añadiríamos ese campo a la tabla de
CONTACTOS.
Crearíamos una clase
class RecNuevoContacto: public RecContacto
y un formulario
class FrmEditRecNuevoContacto: public FrmEditRecContacto
y luego, en createRecord,
virtual db::Record *createRecord(const Xtring &tablename)
{
if( tablename == "CONTACTOS" )
return new RecNuevoContacto(...);
}
y en createFrmEditRecord
virtual FrmEditRecord *createFrmEditRecord(const Xtring &tablename)
{
if( tablename == "CONTACTOS" )
return new FrmEditRecNuevoContacto(...);
}
Solo con esto, al cargar nuestro nuevo módulo, se crearía el nuevo campo
en la base de datos y se sustituiría el formulario de edición de
contactos por el nuevo.
Todo este proceso se puede realizar de una forma muy cómoda con la
autogeneración de código que ofrece la biblioteca capel, tal y como
expliqué en un correo anterior.
Desafortunadamente, aunque en la versión 0.3.3 todo esto está totalmente
implementado, en la 0.4.0 aún me quedan unos días de trabajo por lo que
no podéis comenzar a programar los nuevos módulos aún. No voy a poder
continuar con el proyecto hata al menos el miércoles que viene, por lo
que hasta finales de la semana que viene no podríamos ponernos con los
nuevos módulos. Pero a partir de entonces, el desarrollo será muy
rápido, por lo que recomiendo que vayáis ya ultimando los requisitos de
los nuevos módulos.
Un abrazo,
-- santilin
|