Changelog — TopSeed Gestionale

Modifiche significative al gestionale. Versioning via cache-bust ?v=premium{N}. Deploy automatico su git push main.

premium38 — 22 aprile 2026

Produzione · Form contratto

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. Modificato c.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() legge campo.dim + campo.um dall'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 / prezzoKg esistenti rimangono come prezzo IVA inclusa (usato in calcAnticipi()).
  • Visualizzazione dettaglio anticipi: tabella 6 colonne con totale IVA incl. (bold) + totale IVA escl. (grigio).

premium37 — 22 aprile 2026

Produzione · Micro-flussi UI

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) scambia ordine_esec con 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_id valorizzato).
  • 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

Produzione · Catalogo fasi standard

Tabella lavorazione_fasi_config popolata

8 fasi standard del processo Semiorto inserite tramite seed SQL:

OrdineCodiceNomeTipo
10pulituraPulituraObbligatoria
20selezioneSelezioneObbligatoria
30calibraturaCalibraturaObbligatoria
40trattamentoTrattamento chimicoOpzionale
50pillolaturaPillolaturaOpzionale
60film_coatingFilm coatingOpzionale
70vigorizzazioneVigorizzazioneOpzionale
80confezionamentoConfezionamentoObbligatoria

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_id viene salvato sulla lavorazione_fasi per tracciabilità.

premium35 — 22 aprile 2026

Produzione · UI enterprise + stepper verticale

Posizionamento elementi (ordine finale dettaglio contratto)

  1. Flowbar stati contratto (PRIMO in cima, era a metà)
  2. Header info compatto (1 riga)
  3. Card dettagli contratto
  4. Anticipi (collapsed)
  5. Ispezioni di campo
  6. Ricevimenti con stepper fasi e test
  7. Test germinabilità aggregato
  8. 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

Produzione · Ripristino Ispezioni
  • 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

Produzione · Flow contratto definitivo
  • Stato in_test rimosso dal flow attivo. Mantenuto in CT_STATI come legacy per visualizzare contratti storici (label "In Test (legacy)").
  • Avanzamento retrocompat: contratti già in in_test cliccando "Avanza" passano direttamente a completato.
  • Validazione in_lavorazione → completato: richiede _ctAggregatedSeedWeight().weight > 0 (somma peso_selezionato lotti figli), o fallback su c.lavorazione.pesoNetto legacy.

premium30 — 21 aprile 2026

Produzione · Macro-flow + micro-flussi (Sprint SP1+SP2)

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 da raccolto/in_lavorazione/in_test a in_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

#RegolaDecisione
R1Proforma parziale singoli lottiNO — tutti i lotti completati
R2Test KO blocca contrattoNO — prosegue
R3Merce oltre pattuito, accettiamo
R4Pagamento: natura o selezionatoPost-lavorazione (peso_selezionato)
R5Scheduler macchinariNO — FIFO manuale

premium25-26 — 20 aprile 2026

Germinabilità OLD · App Diego completa

Deploy app Spring Boot legacy

  • WAR ROOT (sorgenti Diego) deployata sul nostro Tomcat 7. Container semiorto_germ_tomcat porta 8085.
  • Reverse proxy nginx /germinabilita-old/127.0.0.1:8085 con sub_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=run invoca /usr/local/bin/semiorto_sync.sh via 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.php con 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 dossier + reverse-engineering

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).