# RenderSettings, Forms And Grids

Sophia centralizza molta UI tramite model, controller e helper. Evita markup manuale quando il pattern `RenderSettings` e applicabile.

## Pattern model/controller/view

- Model DB basati su `frmCActiveRecord`.
- `RenderSettings` inizializzato nel model e valorizzato nel controller.
- `initfields($model, $rendertype)` come punto di configurazione UI.
- Metodi ordinatori frequenti:
  - `getrenderfilters()`
  - `getrenderadminbtns()`
  - `getrenderadmin()`
  - `getrenderform()`
  - `getrenderformbtn()`
- View con helper come:
  - `drawInitFields()`
  - `drawInitButtons()`
  - `drawInitAdminButtons()`

## Griglie

Pattern ricorrenti:

- widget `widgets.FrmGridView`;
- `ajaxType = 'POST'`;
- filtri avanzati tramite form nascosta;
- `nRighe` come dimensione pagina;
- azioni riga tramite `TbButtonColumn` o `grid_view_buttons`;
- editing inline tramite `TbEditableColumn` solo con action dedicata `UpdateInline`.

## Regole operative

1. Prima di aggiungere un campo cerca `initfields` e i metodi `getrender*`.
2. Mantieni coerenza tra model search, controller, view e griglia.
3. Se aggiungi filtri, verifica persistenza dei parametri e data provider.
4. Se aggiungi action riga, verifica permessi e visibilita pulsante.
5. Se tocchi Ajax o inline editing, pianifica validazione browser.

## Anti-pattern

- Campo disegnato manualmente in view mentre esiste `RenderSettings`.
- Filtro presente in UI ma ignorato nel search/data provider.
- Pulsante griglia visibile senza controllo permessi centralizzato.
- Colonne export derivate per copia cieca dalla griglia.
