v2.8.0
- Nuovo (Scheda ordine): "Genera Documento" applica le impostazioni di un trigger. Il nuovo campo "Impostazioni da" propone il trigger attivo che corrisponde all'ordine per il tipo scelto (tipo cliente, metodo di pagamento, tipo documento scelto dal cliente; a parità il trigger fallito su quest'ordine, poi quello con lo Stato destinazione uguale allo stato attuale) e ne applica oggetto visibile e interno, nota del trigger (seguita da quella scritta nel riquadro), data, anagrafica cliente su Fatture in Cloud, sezionale (con il sezionale automatico e più categorie chiede quale usare), bollo, centro di ricavo, categorie, scadenza bonifico, descrizione prodotti, IVA personalizzata; sotto il campo un riepilogo indica oggetto, data, email, invio allo SdI, anagrafica e sezionale. Come il trigger invia l'email al cliente, la fattura elettronica allo SdI e scrive la nota "Emessa …". "Nessuna — generazione libera" è il comportamento di prima; se nessun trigger corrisponde il riquadro lo segnala. Fino alla 2.7.9 la generazione manuale ignorava tutte queste impostazioni: i documenti uscivano con l'oggetto predefinito, senza oggetto interno e senza email al cliente.
- Nuovo (Scheda ordine): un riquadro per ogni trigger che non è riuscito a generare il documento, con motivo, data, "Riprova generazione documento" e "Ignora".
- Nuovo (Errori): il rifiuto per limite di documenti del piano (Fatture in Cloud HTTP 409 "Hai superato il limite di documenti inclusi nella tua licenza per l'anno …") e i limiti del piano WooBiller sono riconosciuti come tali: avviso rosso "ordini con documento non generato" nelle pagine WooBiller e negli ordini, con l'elenco degli ordini e "Riprova tutti" — un ordine alla volta, dal più vecchio, con avanzamento; si ferma al primo nuovo errore di limite del piano o se il collegamento a Fatture in Cloud risulta revocato o mancante (non per i problemi di rete momentanei); salta e indica gli ordini annullati / rimborsati e quelli con trigger eliminato o disattivato. L'avviso comprende anche gli errori registrati dalle versioni precedenti; "Nascondi avviso" lo nasconde finché non si registra un nuovo errore. Nel log il limite di documenti di Fatture in Cloud compare ora come righe WARNING senza stack trace (prima ERROR con lo stack trace completo).
- Fix (Riprova): ogni trigger fallito ha ora il suo errore: prima un secondo trigger fallito sovrascriveva il primo e qualsiasi documento emesso cancellava gli errori di tutti gli altri trigger. "Riprova" non risponde più "Documento rigenerato con successo" quando nessun documento è stato emesso (totale 0, sezionale da scegliere), rifiuta i trigger disattivati, registra il nuovo errore se fallisce di nuovo, lavora con il blocco per ordine come i trigger automatici e con l'email "Allega all'email ordine WC" invia l'email dedicata (prima il cliente non riceveva nulla). Se il documento risulta creato sul servizio ma non salvato in WooBiller, "Riprova" si rifiuta di emetterlo una seconda volta.
- Fix (Trigger): "Mantieni documento precedente" disattivo — per Proforma, Preventivo e Rapporto di intervento il vecchio documento viene cancellato solo dopo che il nuovo è stato creato (un errore di creazione lo faceva perdere). Per Fattura, Fattura Elettronica, Ricevuta e Nota di credito resta cancellato prima, per non lasciare buchi nella numerazione; se la creazione fallisce, l'ordine riceve una nota con il numero cancellato e l'errore lo indica.
- Fix (Trigger): Ripetizione "Se ordine modificato" e "Smart" non scattavano mai (impronta dell'ordine calcolata in due modi diversi e una condizione impossibile sullo stato). Ora, quando l'ordine raggiunge lo stato del trigger, il documento viene generato se il trigger non ne ha ancora creato uno per quell'ordine, oppure se prodotti, totale, metodo di pagamento, Codice Fiscale o Partita IVA sono cambiati rispetto al suo ultimo documento; i documenti già emessi contano come "non modificato". Attenzione: un trigger con queste Ripetizioni, finora mai scattato, dopo l'aggiornamento emette documenti ed email dal primo ordine che raggiunge il suo stato. "Smart" si comporta come "Se ordine modificato" (lo Stato partenza vale per tutti i trigger).
- Fix (Fattura elettronica): una fattura elettronica creata a mano non poteva essere inviata allo SdI da WooBiller ("Verifica e invia a SdI" assente, e il server rispondeva "risulta già trasmessa"). Ora il pulsante compare e, prima di toccare il documento, WooBiller chiede a Fatture in Cloud lo stato SdI reale: se risulta già trasmessa o se Fatture in Cloud non risponde non fa nulla.
- Fix (Scheda ordine): il link "Visualizza" dei documenti non faceva nulla; ora apre il documento.
- Fix (Documenti): data e anno dei documenti generati senza data del trigger sono nel fuso orario del sito (prima UTC: tra mezzanotte e l'1 / le 2 uscivano con il giorno precedente).
- Tecnico: nuova
Services\BillingException(categorielicense_limit,plan_limit,rate_limited,auth,network,server,validation,orphaned,unknown; HTTP status come codice, eccezione originale comeprevious) lanciata daFICService::create_document(),OpenAPIService::create_document()e dai limiti del piano inDocumentManager; nuovaTriggers\GenerationFailures(meta_woobiller_last_errorcon una voce per trigger, compatibile con il formato precedente; ordini trovati con una query sulla tabella dei meta ordine, HPOS o legacy; riepilogo dell'avviso nel transientwoobiller_failed_generations_summary, svuotato a ogni scrittura);Triggers\OrderFingerprint;TriggerEvaluator::static_mismatch()/changed_since();TriggerManager::fire_trigger()restituisce l'esito,build_document_overrides(),after_document_created(),generate_with_trigger()(sotto il lock per ordine, con nuovo controllo dei doppioni),manual_trigger_choices(),with_order_lock(),same_type_documents(); "Genera Documento" lavora sotto il lock per ordine e annota "forzata" / "seconda … confermata" solo a documento creato;DocumentType::is_fiscal();create_document()accetta l'overridemeta(source,applied_trigger_id,order_fingerprintinmeta_json); i documenti manuali restano contrigger_id0; AJAXwoobiller_failed_generations,woobiller_dismiss_failure,woobiller_retry_documentcontrigger_id(rispostastatus, errorecode/category),woobiller_generate_documentcontrigger_idesezionale_category(codicesezionale_choice); nuovaAdmin\GenerationFailuresNotice(opzionewoobiller_failed_generations_dismissed, azioneadmin_post_woobiller_dismiss_failures_notice);FICEInvoiceService::describe_row()restituiscestate_unknown, nuovois_resendable_status(),status()con parametro$strict;LicenseGate::documents_used_this_year()conta l'anno nel fuso del sito comedoc_year; HTTP 402 classificato come limite del piano; nuove chiavi i18n JSmanual_trigger_*,failure_quota_*,retry_all_*,repetitionOrderModified,repetitionSmartesezionalePick*(prima non localizzate).