Changelog — TopSeed Gestionale
Modifiche significative al gestionale. Versioning via cache-bust ?v=premium{N}. Deploy automatico su git push main.
- premium38 — 22/04 · Data today + materiale anticipato doppio prezzo IVA
- premium37 — 22/04 · Fasi ricorsive + riordino + test germ ricevimento
- premium36 — 22/04 · Dropdown fasi standard 8 voci
- premium35 — 22/04 · UI enterprise stepper verticale + accordion inline
- premium34 — 22/04 · Ripristino Ispezioni di campo
- premium33 — 22/04 · Flow contratto definitivo (in_test rimosso)
- premium30 — 21/04 · Macro-flow + micro-flussi (SP1+SP2)
- premium25-26 — 20/04 · App Diego completa + sync AWS
- premium24 — 20/04 · Portale dossier + reverse-engineering Diego
premium38 — 22 aprile 2026
Data Contratto = today (auto-popolata)
- Nuovo contratto: data preimpostata su oggi via
td(). - Edit di contratti legacy senza data registrata: hardening, popola con today invece di lasciare
gg/mm/aaaa. Modificatoc.dataContratto||''→c.dataContratto||td().
Ettari / Mq sotto Campo, autocompilato
- Spostato da sinistra (riga varietà) a una riga sotto i selettori Produttore + Campo.
- Etichetta rinominata: "Area campo (da anagrafica)".
- Auto-fill al cambio del select Campo:
_ctAutofillEttari()leggecampo.dim+campo.umdall'anagrafica del produttore. - Hint dinamico sotto l'input: "Auto-compilato da anagrafica campo: 15.20 ha. Modificabile se la superficie produttiva differisce."
- Se il campo non ha
dim: "Il campo selezionato non ha area registrata. Inserisci manualmente." - Input resta editabile per override (es. campo da 20 ha ma il contratto è solo per 12).
Materiale anticipato — doppio prezzo IVA inclusa / IVA esclusa
- Layout form a 3 colonne per ogni materiale (Piantine, Portaseme, Bulbi): Quantità · Prezzo IVA inclusa · Prezzo IVA esclusa.
- Nuovi campi DB:
piantine.prezzoUnitNet,portaseme.prezzoKgNet,bulbi.prezzoKgNet. - Retrocompat:
prezzoUnit/prezzoKgesistenti rimangono come prezzo IVA inclusa (usato incalcAnticipi()). - Visualizzazione dettaglio anticipi: tabella 6 colonne con totale IVA incl. (bold) + totale IVA escl. (grigio).
premium37 — 22 aprile 2026
Fasi di lavorazione ricorsive
- Rimosso il vincolo "già aggiunta": una fase può essere selezionata più volte (es. Selezione si rifà se la germinabilità non è idonea).
- Counter informativo nel dropdown:
Selezione · già 2×.
Riordino fasi nello stepper
- Bottoni
↑/↓accanto a ogni fase. _ctMoveFase(ctId, lotId, faseId, dir)scambiaordine_eseccon la fase adiacente. Se gli ordini coincidono normalizza in 10/20/30… poi applica lo swap.- Bottone
↑disabilitato sulla prima,↓sull'ultima.
Test germinabilità a livello ricevimento
- Nuovo blocco inline sopra lo stepper fasi (dentro la card ricevimento).
- Lista compatta dei test senza fase associata (
fase_lavorazione_id = NULL,ricevimento_idvalorizzato). - Bottone
+ Test germinabilitàapre form blu inline con campi minimi (prova, tipologia seme, obbligatorio default ON, note). - Salvataggio diretto via
_ctSaveTestForm(ctId, ricId, lotId, faseId=null). - Utile per test "generici" all'arrivo merce, prima delle lavorazioni.
premium36 — 22 aprile 2026
Tabella lavorazione_fasi_config popolata
8 fasi standard del processo Semiorto inserite tramite seed SQL:
| Ordine | Codice | Nome | Tipo |
|---|---|---|---|
| 10 | pulitura | Pulitura | Obbligatoria |
| 20 | selezione | Selezione | Obbligatoria |
| 30 | calibratura | Calibratura | Obbligatoria |
| 40 | trattamento | Trattamento chimico | Opzionale |
| 50 | pillolatura | Pillolatura | Opzionale |
| 60 | film_coating | Film coating | Opzionale |
| 70 | vigorizzazione | Vigorizzazione | Opzionale |
| 80 | confezionamento | Confezionamento | Obbligatoria |
Form "Nuova fase"
- Dropdown con le 8 fasi standard ordinate per
ordine, suffix(opz.)per le opzionali. - Opzione "Altro (custom)…" in fondo per casi speciali non in catalogo: apre input testo libero per nome.
- Quando si seleziona dal catalogo,
fase_config_idviene salvato sulla lavorazione_fasi per tracciabilità.
premium35 — 22 aprile 2026
Posizionamento elementi (ordine finale dettaglio contratto)
- Flowbar stati contratto (PRIMO in cima, era a metà)
- Header info compatto (1 riga)
- Card dettagli contratto
- Anticipi (collapsed)
- Ispezioni di campo
- Ricevimenti con stepper fasi e test
- Test germinabilità aggregato
- Resto (pagamenti, documenti, note, allegati)
Header compatto contratto
1 riga sobria: CTR-2026-0042 · Pomodoro RIC-001 · Produttore: Schiavone · 12 ha · IN PRODUZIONE · Ricev. 2/3 · Test 3/4.
Stepper verticale fasi (dentro card ricevimento)
- Pallini stato cliccabili:
○pianificata ·◐in corso ·●completata. - Linea di collegamento dashed (pianificata→in corso) o solid (verso completata).
- Per ogni fase: nome, tag stato, date range, delta peso
802 → 760 kg (−42). - Bottoni
↑ ↓ Modifica. - Test germinabilità sotto ogni fase: pallini colorati + count + lista compatta inline (tipologia · stato · Obb./Opz. · % · IDONEO/NON IDONEO).
- Click sul pallino di stato → toggle ciclico (no conferma): pianificata → in_corso → completata → pianificata. Auto-aggiorna
dataora_inizio/fine+ ricalcolo stato ricevimento + check completabilità contratto.
Accordion inline (no modal)
- Click "Modifica" su una fase: espande form accordion sotto la riga (nome/ordine/peso in/peso out/note).
- Click "+ Nuova fase": stesso form ma vuoto, in fondo allo stepper.
- Form test germ sotto la fase: campi minimi (prova, tipologia seme, obbligatorio, note).
Rimosse emoji decorative
Template enterprise: sostituite con caratteri tipografici neutri (●, ○, ◐, →, ↑, ↓) + pill uppercase con letter-spacing per i tag.
premium34 — 22 aprile 2026
- Card Ispezioni di campo ripristinata in posizione prominente (subito dopo l'header info contratto). Era stata sepolta in fondo durante un refactor precedente.
- Layout coerente: border-left blu, badge conteggio, bottone "Nuova ispezione", lista compatta con border-left e foto inline.
- Rimosso definitivamente accordion fasi inline duplicato (fasi gestite solo nello stepper della card ricevimento).
premium33 — 22 aprile 2026
- Stato
in_testrimosso dal flow attivo. Mantenuto inCT_STATIcome legacy per visualizzare contratti storici (label "In Test (legacy)"). - Avanzamento retrocompat: contratti già in
in_testcliccando "Avanza" passano direttamente acompletato. - Validazione
in_lavorazione → completato: richiede_ctAggregatedSeedWeight().weight > 0(sommapeso_selezionatolotti figli), o fallback suc.lavorazione.pesoNettolegacy.
premium30 — 21 aprile 2026
Migration DB
SQL sql/migrations/2026-04-20_microflussi.sql applicata in prod:
ricevimenti: +stato, +peso_finale, +data_completamento, +tests_richiesti, +tests_completati.test_germinabilita: +ricevimento_id, +obbligatorio_per_completamento.contracts: 5 contratti legacy migrati daraccolto/in_lavorazione/in_testain_produzione.
Macro-flow contratto semplificato
Da 8 stati a 6: bozza → approvato → in_coltivazione → in_produzione → completato → pagato.
Helper backend
_ricevimentoRecalcStato(ricId)_ctCompletionReadiness(ct)_ctAutoCheckCompletable(ctId)_ctProformaReadiness(ct)
Regole business confermate dal cliente
| # | Regola | Decisione |
|---|---|---|
| R1 | Proforma parziale singoli lotti | NO — tutti i lotti completati |
| R2 | Test KO blocca contratto | NO — prosegue |
| R3 | Merce oltre pattuito | SÌ, accettiamo |
| R4 | Pagamento: natura o selezionato | Post-lavorazione (peso_selezionato) |
| R5 | Scheduler macchinari | NO — FIFO manuale |
premium25-26 — 20 aprile 2026
Deploy app Spring Boot legacy
- WAR
ROOT(sorgenti Diego) deployata sul nostro Tomcat 7. Containersemiorto_germ_tomcatporta 8085. - Reverse proxy nginx
/germinabilita-old/→127.0.0.1:8085consub_filter,proxy_redirect,proxy_cookie_path. - Fix priorità:
location ^~per superare la regex globale~ .*\.(js|css)?$. - Tab "App completa (Spring)" embedda l'app via iframe HTTPS.
Sync manuale AWS → locale
- Bottone "⬇ Sincronizza da AWS" nel tab OLD.
germ_old_sync.php?action=runinvoca/usr/local/bin/semiorto_sync.shvia sudo NOPASSWD.- Script: mysqldump da
35.180.208.200:3300+ backup gzip + drop/recreate + import + cleanup (max 7 backup). - Log in
/var/log/semiorto_sync.log. Cron rimosso, sync on-demand.
UI consultazione archivio
- API PHP
germ_old_api.phpcon 13 endpoint REST. - 9 sotto-tab: Dashboard · Analisi · Lotti · Specie · Varietà · Produttori · Tecnici/Tipologie · Export XLSX · App completa.
- 31.713 analisi · 6.605 lotti consultabili con filtri, paginazione, modal dettaglio, conte giornaliere.
premium24 — 20 aprile 2026
Portale documentazione /docs-germinabilita/
- 12 pagine: home, architettura, modello dati, casi d'uso, flussi, ruoli, calcoli, pagine UI, API reference, integrazione, integrazione gestionale, proposta sviluppo, migrazione, sorgenti.
- Password gate (SHA-256 client-side):
TopSeedDev2026.
Reverse-engineering app Diego
- 7.350 righe Java letti (85% codice Spring Boot).
- 14 entità JPA, 8 controller, 7 service, 7 DAO, 23 JSP mappati.
- Liste statiche estratte: tipologie prova, vigore, risultato, scostamento, replica analisi, 9 tipologie seme, 12 mesi.
Algoritmo germinabilità
Formula generaConta() replicata byte-per-byte: media aritmetica conte A/B/C/D × 2 letture, normalizzazione su germinato2 per somma=100, germinabilità finale = germinato1 + germinato2 (interi truncate).