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.

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.

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.

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.

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:
| Messaggio | Quando compare | Cosa fare |
|---|---|---|
Only Operations Directors can import rate cards | Importando rate card senza quel profilo | Farlo fare a un Operations Director o chiedere il profilo |
Only PSA Operations users can override billing rates. | Modificando una tariffa di fatturazione senza quel profilo | Farlo fare a un utente PSA Operations |
A reason is mandatory for rate overrides. | Modificando una tariffa senza motivo | Scrivere il motivo |
Milestone '%s' requires a deliverable attachment... | Segnando come raggiunta una milestone senza deliverable | Allegare il deliverable |
Milestone '%s' requires internal approval... | Segnando come raggiunta una milestone senza approvazione interna | Ottenere l'approvazione interna |
Milestone '%s' requires client acceptance... | Segnando come raggiunta una milestone senza accettazione del cliente | Attendere 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 portale | Dargli accesso al portale e ripetere |
Only draft change orders can be submitted. | Inviando un ordine che non è in bozza | Verificare lo stato dell'ordine |
Only client-accepted change orders can be implemented. | Implementando un ordine non accettato dal cliente | Attendere che il cliente lo accetti |
Only active or suspended contracts can be terminated. | Chiudendo un contratto in un altro stato | Verificare lo stato del contratto |
Only terminated or suspended contracts can be archived. | Archiviando un contratto attivo | Chiuderlo 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
Verificato nel codice del modulo (versione 19.0) e nelle fonti collegate
Fonti
- Codice del modulo: flexigo_psa_premium 19.0 (9670343f): controllers/portal.py
- Codice del modulo: flexigo_psa_premium 19.0 (9670343f): controllers/rate_card_import.py
- Codice del modulo: flexigo_psa_premium 19.0 (9670343f): models/account_analytic_line_ext.py
- Codice del modulo: flexigo_psa_premium 19.0 (9670343f): models/project_milestone_ext.py
- Codice del modulo: flexigo_psa_premium 19.0 (9670343f): models/psa_change_order.py
- Codice del modulo: flexigo_psa_premium 19.0 (9670343f): models/psa_dsar_request.py
- Codice del modulo: flexigo_psa_premium 19.0 (9670343f): models/psa_nte_audit_log.py
- Codice del modulo: flexigo_psa_premium 19.0 (9670343f): models/psa_portal_action_log.py
- Codice del modulo: flexigo_psa_premium 19.0 (9670343f): models/psa_rate_override_log.py
- Codice del modulo: flexigo_psa_premium 19.0 (9670343f): models/psa_retainer_contract.py
- apps.odoo.com/apps/modules/19.0/flexigo_psa_premium
- apps.odoo.com/apps/modules/17.0/flexigo_psa_premium
- apps.odoo.com/apps/modules/18.0/flexigo_psa_premium
- flexigotech.com/en/services.html
- flexigotech.com/precios.html
