GB_AGGridSQLWidget_mod

Widget HTML5/CWP per AVEVA Wonderware / System Platform basato su AG Grid.

Struttura:
- GB_AGGridSQLWidget_mod/index.html
- GB_AGGridSQLWidget_mod/widget.wjson
- GB_AGGridSQLWidget_mod/build/build.min.js
- GB_AGGridSQLWidget_mod/build/build.min.css
- resources/libs/ag-grid-community.min.js
- resources/libs/ag-grid.css
- resources/libs/ag-theme-quartz.css

Contratto Widget Properties allineato a GBRevoGrid:
- Columns: JSON array di definizioni colonna.
- Data: JSON array di righe.
- FontSize, HeaderHeight, HeaderFontSize, RowHeight: aspetto griglia.
- IsDirty: scritto dal widget quando una cella viene modificata.
- IsEditable: abilita/disabilita editing.
- IsDebugMode: abilita log console.
- ColumnsProperties: JSON array di attributi aggiuntivi colonna.
- ColumnsOptions: JSON array di opzioni dropdown per colonna.
- ConditionalCellStyles: JSON array di regole per cambiare stile testo/sfondo cella in base ai dati della riga.

Il widget non apre connessioni SQL Server e non usa fetch/XMLHttpRequest.
La connessione diretta a SQL Server deve essere gestita lato HMI/System Platform,
poi i risultati devono essere scritti nella property Data e le colonne nella property Columns.


Rigenerato con struttura compatibile con New-CwpFromFolder_CORRETTO.ps1: entry ZIP con backslash, cartella radice inclusa e senza directory-entry esplicite. Le librerie sono in ./resources/libs rispetto al widget.


FIX COLORI:
- Aggiunta alternanza colori righe personalizzabile.
- Nuove Widget Properties: HeaderBackgroundColor, HeaderTextColor, OddRowBackgroundColor, EvenRowBackgroundColor, SelectedRowBackgroundColor, RowTextColor, BorderColor.
- Archivio CWP generato con logica compatibile con New-CwpFromFolder_CORRETTO.ps1.

FIX STILI CONDIZIONALI CELLA:
- Aggiunta Widget Property ConditionalCellStyles.
- Dopo la modifica di una cella il widget forza il refresh delle celle, così gli stili condizionali vengono ricalcolati subito.
- Il parser accetta anche JSON passato da AVEVA come stringa tra virgolette.
- Il parser accetta anche stringhe AVEVA con doppie virgolette interne, ad esempio "[{""field"":""Valore""}]".
- ColumnsProperties accetta sia JSON array sia lista separata da pipe, ad esempio {"editable":false}|{"filter":false}.
- Gli stili condizionali riconoscono i nomi campo anche con differenze di accento/maiuscole, ad esempio Quantità e Quantita.
- ColumnsProperties ora rispetta editable:false, readonly:true, readOnly:true, filter:false, filterable:false e isFilterable:false.
- Formato:
  [
    {"targetField":"Quantità","when":{"field":"Note","operator":"notEmpty"},"textColor":"#ff0000"},
    {"targetField":"Quantità","when":{"field":"Quantità","operator":">","value":300},"textColor":"#ff0000","backgroundColor":"#fff2cc"}
  ]
- Campi supportati: targetField/target/column, when.field, when.operator, when.value, textColor/color, backgroundColor/bgColor, fontWeight, fontStyle, elseTextColor/elseColor, elseBackgroundColor/elseBgColor, elseFontWeight, elseFontStyle.
- Operatori supportati: notEmpty, empty, notNull, isNull, equals, notEquals, contains, startsWith, endsWith, in, notIn, >, >=, <, <=.
