Buonasera, stavo sviluppando un modulo che ci serve a noi e ho visto questi tre problemi riscontrati nella gestione dei magazzini, emersi, come dicevo, durante lo sviluppo di un modulo custom che estende la gestione multi-magazzino. Riportati separatamente perché indipendenti tra loro, ma tutti concentrati sugli stessi file.
Cosa succede
id_warehouse = 0 viene trattato in più punti del codice come "Sede" (l'azienda stessa), ma è un valore convenzionale hardcoded, non un record vero della tabella warehouse:
modules/magazz/lib.function.php — selectIdWarehouse() aggiunge a mano un'opzione value="0" con etichetta "Sede" quando costruisce la tendina, proprio perché altrimenti non ci sarebbe
modules/magazz/admin_artico.php, report_movmag.php, select_schart.php — trattano il valore 0 come caso speciale in punti diversi, ciascuno a modo suo
Impatto
"Sede" non compare mai nell'elenco gestito da admin_warehouse.php / report_warehouse.php: non è modificabile, non è cancellabile, non è "un magazzino" a tutti gli effetti come gli altri
Qualsiasi articolo/movimento senza posizione esplicita (id_artico_position non impostato) finisce silenziosamente in questo magazzino "fantasma"
Ogni sviluppatore che estenda la gestione magazzini deve ricordarsi di gestire il caso id_warehouse == 0 a mano, in ogni punto, perché non esiste un modo centralizzato per farlo
Riproduzione
Creare un articolo e registrare un movimento senza selezionare una posizione (id_artico_position vuoto)
Il movimento risulta associato a id_warehouse = 0
Aprire report_warehouse.php: quel magazzino non compare in nessuna riga della tabella
Proposta
Inserire "Sede" come riga vera in warehouse (con id coerente = 0, gestendo l'auto_increment di conseguenza), così da poterla gestire con gli stessi strumenti di qualsiasi altro magazzino, invece di trattarla come eccezione sparsa nel codice.
Cosa succede
Nell'array delle intestazioni colonna ($sortable_headers) è presente $script_transl['print'], quindi il testo "Stampa" compare nell'header della tabella. Ma nel ciclo che stampa le righe, la cella corrispondente è sempre vuota:
php
Nessun pulsante, nessun link, nessuna funzione collegata.
Impatto
Funzionalità presumibilmente prevista e mai completata. L'header illude l'utente che esista una stampa per riga del magazzino, che in realtà non c'è da nessuna parte in GAzie (né situaz_magazz.php né stampa_situaz.php permettono di filtrare per un singolo magazzino: aggregano sempre tutti insieme).
Proposta
O completare la funzione (report di giacenza filtrato sul singolo magazzino, cosa che oggi manca del tutto nel codice nativo), o togliere l'header "Stampa" se la funzione non è più prevista.
Una possibile soluzione (temporanea, già testata in un nostro modulo custom)
Per le nostre esigenze abbiamo implementato una stampa PDF che mostra la giacenza di ogni articolo filtrata su un singolo magazzino, riusando getStockAvailability($codart, $id_warehouse) già presente in magazzForm — funzione che restituisce correttamente la giacenza per magazzino, ma che oggi non viene sfruttata da nessuna pagina di stampa nativa. La logica: stesso layout di stampa_situaz.php (stessa struttura di pagina, stesso stile di riga con colori per giacenza bassa/esaurita), ma con una query filtrata sul magazzino selezionato invece che aggregata su tutti.
È una soluzione pensata per il nostro caso d'uso specifico (verificare trasferimenti tra magazzini) e non copre tutti gli scenari (es. non gestisce ancora "Sede", vedi punto 1) — la condividiamo solo come punto di partenza concreto, nel caso possa essere utile come riferimento per una versione nativa più completa, non come patch pronta per il merge.
Cosa succede
Tutta la tabella (compreso ogni di riga) è racchiusa dentro un solo:
html
... ... tutte le righe ...Impatto
Qualunque tentativo di aggiungere un controllo interattivo per singola riga (es. un pulsante che apra un'altra pagina con parametri specifici di quella riga) richiederebbe un secondo
<form> annidato dentro il primo — HTML non lo permette. I browser "riparano" l'HTML non valido in modo incoerente a seconda della posizione nella pagina, causando comportamenti imprevedibili e diversi riga per riga (in un nostro test, il pulsante funzionava in modo casuale a seconda di quale riga risultava per prima in base all'ordinamento scelto).Riproduzione
Aggiungere un dentro una cella di una riga della tabella di report_warehouse.php
Cambiare l'ordinamento cliccando su un'intestazione di colonna diversa
Il comportamento del form annidato cambia in modo incoerente a seconda di quale riga si trova ora per prima
Proposta
Restringere il di ricerca/ordinamento solo alla riga dei filtri in cima alla tabella, lasciando le righe dati fuori da qualsiasi form — così eventuali controlli per riga (checkbox, pulsanti con azione propria) possono essere aggiunti senza incorrere in HTML non valido.
Segnalazioni raccolte durante lo sviluppo di un modulo custom (gestione flotta rotabili/manutenzione) su GAzie 9.09.
</form>
Quello che dice è tutto giusto ma per fare queste modifiche consiglio di partecipare allo sviluppo e alla manutenzione del core altrimenti rischia in un futuro di ritrovarsi con un modulo difficile da mantenere allineato. Tenga conto che le modifiche devono assicurare anche la retrocompatibilità ed essere sempre riferiti a quello che vedo in questo repository. Se intende fare questo può contattarmi, anche privatamente .
Ok le scrivo.