# Arquitectura MVC de Vtiger

## Organizacion

- `modules/<Modulo>/<Modulo>.php`: entidad CRMEntity principal y metadatos de tablas.
- `modules/<Modulo>/actions/`: acciones mutables o Ajax, clases `<Modulo>_<Accion>_Action`.
- `modules/<Modulo>/views/`: pantallas, clases `<Modulo>_<Vista>_View`.
- `modules/<Modulo>/models/`: modelos de Record, Module, ListView, DetailView, etc.
- `layouts/v7/modules/<Modulo>/`: templates `.tpl`, JS, CSS y recursos UI por modulo.
- `modules/<Modulo>/handlers/`: handlers de eventos o hooks.
- `modules/<Modulo>/helpers/`: servicios auxiliares locales.
- `modules/<Modulo>/dashboards/`: widgets/reportes de dashboard.
- `include/`: utilidades legacy, DB, webservices, eventos, query generator.
- `includes/`: runtime moderno Vtiger: HTTP, controller, viewer, cache, theme, loader.
- `vtlib/`: API para instalar/registrar modulos, campos, links, eventos, paquetes y cron.
- `vendor/`: dependencias Composer.
- `libraries/`: dependencias legacy embebidas.

## Resolucion de componentes

`Vtiger_Loader::getComponentClassName($componentType, $componentName, $moduleName)` busca primero el archivo especifico del modulo, luego fallbacks para submodulos/settings y finalmente `modules/Vtiger`. Esto permite que un modulo herede vistas/acciones base sin duplicar codigo.

## Ejemplos reales

- `Quotes_Save_Action extends Inventory_Save_Action`.
- `Quotes_List_View extends Inventory_List_View`.
- `Services_List_View extends Products_List_View`.
- `Accounts_Detail_View extends Vtiger_Detail_View`.
- `GeoCuentas_GeoAjax_Action extends Vtiger_BasicAjax_Action`.

## Widgets y layouts

- `GeoCuentas` registra links `DETAILVIEWWIDGET`, `DETAILVIEWBASIC` y `HEADERSCRIPT` sobre Accounts.
- Templates se resuelven desde `layouts/v7/modules/...` con fallback a `Vtiger`.
- `Vtiger_Viewer` asigna variables comunes: usuario actual, modulo, version, permisos y recursos.
