Vai al contenuto principale
Professional Services Automation (PSA)

Errori di PSA for Odoo: un caso di esempio, messaggio per messaggio

A parte il generico Access denied, ogni messaggio di errore di Professional Services Automation (PSA) for Odoo ti dice cosa manca: un profilo (come Operations Directors per importare le tariffe), un requisito della milestone (allegato, approvazione interna o accettazione del cliente) o uno stato preciso del contratto, dell'ordine di modifica o della richiesta. Si risolve soddisfacendo quella condizione, non riprovando. Qui sotto lo vedi con una società di consulenza inventata che percorre il flusso e incontra ogni messaggio.

FlexigoTech · Responsabile: Víctor Gómez · Aggiornato il 4 novembre 2026

In breve

Versioni
Odoo 17, 18 e 19
Verificato
nel codice del modulo, versione 19.0 · nelle fonti collegate in fondo
Lettura
6 min

Una società di consulenza inventata che avvia PSA

Esempio Caso illustrativo: l'azienda e i suoi dati sono inventati per spiegare il flusso.

Studio Ribera è una società di consulenza inventata che ha appena installato Professional Services Automation (PSA) for Odoo. Marta, la responsabile operativa, vuole caricare le tariffe, preparare un contratto con milestone e iniziare a lavorare con un cliente. Lungo il percorso incontra buona parte dei messaggi di errore del modulo. Li vediamo nell'ordine in cui le compaiono: il testo letterale, cosa significa e cosa fa per andare avanti.

Per prima cosa, Marta apre le impostazioni del modulo. Lì non compare nessun errore.

Impostazioni di Odoo nella sezione PSA con il campo WIP Account vuoto e la casella di configurazione non spuntata
Le impostazioni di PSA così come le trova Marta, con WIP Account vuoto.

Se vuoi ripassare quali menu aggiunge il modulo e che percorso fa ogni record, lo trovi in come funziona PSA dall'interno.

Tariffe: chi può importarle e chi può modificarle

La prima cosa che Marta prova è importare la tariffa della società. Il modulo la blocca con Only Operations Directors can import rate cards. Il messaggio è chiaro: importare le rate card spetta al profilo Operations Directors, e l'utente di Marta non ce l'ha. Ha due strade: farla importare a qualcuno con quel profilo oppure chiedere a chi gestisce gli utenti del suo Odoo di assegnarglielo, se le spetta.

Elenco Rate Cards del modulo PSA con un solo record attivo, Standard Rate Card 2024 (Demo), in EUR
L'elenco Rate Cards con dati dimostrativi: compare solo Standard Rate Card 2024 (Demo).

Con la tariffa caricata, Marta vuole applicare a un cliente una tariffa diversa. Riceve Only PSA Operations users can override billing rates.: modificare le tariffe di fatturazione è riservato agli utenti PSA Operations. Un collega con quel profilo ci prova, lascia vuoto il motivo e riceve A reason is mandatory for rate overrides. La soluzione è scrivere il motivo della modifica e salvare di nuovo.

Se a un certo punto vedi Access denied e basta, il messaggio non dice quale permesso manca. La cosa pratica è annotare cosa stavi facendo in quel momento e chiedere a chi gestisce i permessi di verificarlo.

Elenco Utilization del modulo PSA con colonne per data, dipendente, progetto, ore, tariffa, importo fatturabile, stato WIP e approvazione del cliente
L'elenco Utilization, con tariffa e importo fatturabile in colonna.

Milestone: cosa richiede ognuna prima di risultare raggiunta

Il contratto di Studio Ribera ha una prima milestone, «Analisi». Marta la segna come raggiunta e il modulo risponde con Milestone '%s' requires a deliverable attachment before it can be marked as reached. (a schermo, al posto di %s compare il nome della milestone). Quella milestone richiede un deliverable allegato prima di chiudersi: Marta allega il documento e la segna di nuovo.

Il secondo tentativo dà Milestone '%s' requires internal approval before it can be marked as reached. Ora manca l'approvazione interna della milestone. Finché non ce l'ha, non si può segnare come raggiunta.

Una volta ottenuta l'approvazione interna, compare Milestone '%s' requires client acceptance before it can be marked as reached. Current state: %s. Manca l'accettazione del cliente, e il messaggio aggiunge lo stato attuale (Current state).

Quando Marta prova a chiedere l'approvazione al cliente, si trova davanti The customer of milestone '%s' has no portal access: grant it first, the approval page needs a login. La pagina di approvazione richiede che il cliente acceda con login, e quel cliente non ha accesso al portale. Bisogna prima dargli accesso al portale e poi ripetere l'azione.

L'ultimo messaggio sulle milestone va al contrario: Milestone '%s' does not wait for a client approval. Compare quando si prova a registrare un'approvazione del cliente su una milestone che non la prevede. Controlla di non aver sbagliato milestone.

Percorso tra l'elenco Milestones Roll-up, le categorie non fatturabili, le impostazioni di PSA e l'elenco Utilization
Le schermate del modulo che Marta attraversa: milestone con la casella di raggiunta, categorie non fatturabili, impostazioni e Utilization.

Ordini di modifica: è lo stato a decidere cosa puoi fare

A metà progetto, il cliente chiede di ampliare il perimetro e Marta crea un ordine di modifica. Lo invia e, senza accorgersene, lo invia di nuovo: Only draft change orders can be submitted. Si inviano solo gli ordini in bozza, e questo non lo era più.

Poi un collega prova ad approvarlo e riceve User %(name)s has no pending approval step on this change order. Il messaggio riporta il nome dell'utente e dice che non ha nessun passaggio di approvazione in sospeso su quell'ordine. Deve approvare chi ha davvero quel passaggio in sospeso.

Infine, Marta vuole applicare l'ordine prima che il cliente risponda: Only client-accepted change orders can be implemented. Si implementano solo gli ordini già accettati dal cliente, quindi tocca aspettare quell'accettazione.

Tre log che non ammettono modifiche

Marta vede una voce in uno dei log del modulo e prova a correggerla. Ci sono tre messaggi di questo tipo:

  • NTE audit log is immutable.
  • Portal action log is immutable.
  • Rate override log is immutable.

Il messaggio parla chiaro: quel log è immutabile. Non è un problema di permessi che si risolve con un altro profilo.

Contratti ed esportazioni: gli stati che il modulo controlla

A fine anno, Marta vuole chiudere un contratto e archiviarne un altro. Il primo le restituisce Only active or suspended contracts can be terminated.: si chiudono solo contratti attivi o sospesi. Il secondo, Only terminated or suspended contracts can be archived.: si archiviano solo quelli chiusi o sospesi. Il contratto che voleva archiviare era ancora attivo, quindi prima lo chiude e poi lo archivia.

Resta un ultimo messaggio: Export can only be generated for pending or processing requests. L'esportazione si genera solo per richieste in attesa o in lavorazione. Se la richiesta non è in uno di questi stati, il modulo non la genera.

Cosa insegna il caso di Studio Ribera

Ogni intoppo di Marta si è risolto leggendo la fine del messaggio: lì c'è il profilo che manca, il requisito della milestone o lo stato necessario. Ecco il riepilogo:

MessaggioQuando compareCosa fare
Only Operations Directors can import rate cardsImportando rate card senza quel profiloFarlo fare a un Operations Director o chiedere il profilo
Only PSA Operations users can override billing rates.Modificando una tariffa di fatturazione senza quel profiloFarlo fare a un utente PSA Operations
A reason is mandatory for rate overrides.Modificando una tariffa senza motivoScrivere il motivo
Milestone '%s' requires a deliverable attachment...Segnando come raggiunta una milestone senza deliverableAllegare il deliverable
Milestone '%s' requires internal approval...Segnando come raggiunta una milestone senza approvazione internaOttenere l'approvazione interna
Milestone '%s' requires client acceptance...Segnando come raggiunta una milestone senza accettazione del clienteAttendere l'accettazione; il messaggio indica lo stato attuale
The customer of milestone '%s' has no portal access...Il cliente della milestone non ha accesso al portaleDargli accesso al portale e ripetere
Only draft change orders can be submitted.Inviando un ordine che non è in bozzaVerificare lo stato dell'ordine
Only client-accepted change orders can be implemented.Implementando un ordine non accettato dal clienteAttendere che il cliente lo accetti
Only active or suspended contracts can be terminated.Chiudendo un contratto in un altro statoVerificare lo stato del contratto
Only terminated or suspended contracts can be archived.Archiviando un contratto attivoChiuderlo prima

Per preparare bene profili, milestone e contratti prima che compaiano questi messaggi, guarda l'avvio del modulo.

Come ti aiuta FlexigoTech

In FlexigoTech implementiamo Odoo 17, 18, 19 e 20 e sviluppiamo connettori e integrazioni su misura, quindi possiamo aiutarti a distribuire i profili, preparare le milestone e analizzare i messaggi che compaiono nel tuo caso. Il modulo è su Odoo Apps per 17, 18 e 19, a 9 € per versione di Odoo, pagamento unico, IVA esclusa; il servizio locale di FlexigoTech Cloud costa 29 €/mese o 290 €/anno IVA esclusa (Pro: 58 €/mese o 580 €/anno). Trovi tutti i dettagli nella pagina del modulo e nella sua scheda su Odoo Apps.

Continua a leggere

Come funziona Professional Services Automation (PSA) for Odoo dall'internoMenu, azioni pianificate e servizio esterno di Professional Services Automation (PSA) for Odoo, spiegati voce per voce per chi usa già Odoo.Avviare PSA for Odoo: impostazioni, campi del progetto e la prima settimanaGuida per avviare Professional Services Automation (PSA) in Odoo 17, 18 e 19: impostazioni, campi del progetto e cosa controllare nella prima settimana.Professional Services Automation (PSA) for Odoo: come capire se è adatto alla tua aziendaCosa copre e cosa no Professional Services Automation (PSA) for Odoo secondo la scheda, cosa verificare prima di installarlo e per quali versioni è pubblicato.
Verificato nel codice del modulo (versione 19.0) e nelle fonti collegate

Fonti