Una consultora inventada que posa en marxa PSA
Exemple Cas il·lustratiu: l'empresa i les seves dades són inventades per explicar el flux.
Estudi Ribera és una consultora inventada que acaba d'instal·lar Professional Services Automation (PSA) for Odoo. La Marta, la seva responsable d'operacions, vol carregar les tarifes, deixar a punt un contracte amb fites i començar a treballar amb un client. Pel camí li surten bona part dels missatges d'error del mòdul. Els repassem en l'ordre en què li apareixen: el text literal, què vol dir i què fa per continuar.
Abans de res, la Marta obre la configuració del mòdul. Allà no li surt cap error.

WIP Account buit.Si vols repassar quins menús afegeix el mòdul i per on passa cada registre, ho tens a com funciona PSA per dins.
Tarifes: qui les pot importar i qui les pot canviar
El primer que intenta la Marta és importar la tarifa de la consultora. El mòdul l'atura amb Only Operations Directors can import rate cards. El missatge és clar: importar rate cards és cosa del perfil Operations Directors, i l'usuari de la Marta no el té. Té dues sortides: que la importi algú amb aquest perfil o que qui administra els usuaris del seu Odoo l'hi assigni, si li correspon.

Amb la tarifa carregada, la Marta vol aplicar a un client una tarifa diferent. Li surt Only PSA Operations users can override billing rates.: canviar tarifes de facturació està reservat als usuaris de PSA Operations. Un company amb aquest perfil ho prova, deixa el motiu en blanc i rep A reason is mandatory for rate overrides. La solució és escriure el motiu del canvi i tornar a desar.
Si en algun moment veus Access denied sense res més, el missatge no diu quin permís falta. El més pràctic és apuntar què estaves fent en aquell moment i demanar a qui administra els permisos que ho revisi.

Fites: què demana cadascuna abans de donar-se per assolida
El contracte d'Estudi Ribera té una primera fita, «Anàlisi». La Marta la marca com a assolida i el mòdul respon amb Milestone '%s' requires a deliverable attachment before it can be marked as reached. (a la pantalla, en lloc de %s hi surt el nom de la fita). Aquesta fita demana un lliurable adjunt abans de tancar-se: la Marta adjunta el document i la torna a marcar.
El segon intent dona Milestone '%s' requires internal approval before it can be marked as reached. Ara el que falta és l'aprovació interna de la fita. Fins que no la té, no es pot marcar com a assolida.
Un cop feta l'aprovació interna, surt Milestone '%s' requires client acceptance before it can be marked as reached. Current state: %s. Falta l'acceptació del client, i el missatge hi afegeix l'estat actual (Current state).
Quan la Marta intenta demanar aquesta aprovació al client, es troba amb The customer of milestone '%s' has no portal access: grant it first, the approval page needs a login. La pàgina d'aprovació necessita que el client iniciï sessió i aquest client no té accés al portal. Primer cal donar-li accés al portal i després repetir l'acció.
L'últim missatge de fites va al revés: Milestone '%s' does not wait for a client approval. Surt quan s'intenta registrar una aprovació del client en una fita que no l'espera. Revisa si t'has equivocat de fita.

Ordres de canvi: l'estat decideix què es pot fer
A mig projecte, el client demana ampliar l'abast i la Marta crea una ordre de canvi. L'envia i, sense adonar-se'n, la torna a enviar: Only draft change orders can be submitted. Només s'envien les ordres en esborrany, i aquesta ja no ho era.
Després, un company intenta aprovar-la i rep User %(name)s has no pending approval step on this change order. El missatge indica el nom de l'usuari i diu que no té cap pas d'aprovació pendent en aquesta ordre. L'ha d'aprovar qui sí que tingui aquest pas pendent.
Finalment, la Marta vol aplicar l'ordre abans que el client contesti: Only client-accepted change orders can be implemented. Només s'implementen les ordres que el client ja ha acceptat, així que toca esperar aquesta acceptació.
Tres logs que no admeten canvis
La Marta veu una entrada en un dels logs del mòdul i intenta corregir-la. Hi ha tres missatges d'aquest tipus:
NTE audit log is immutable.Portal action log is immutable.Rate override log is immutable.
El missatge ho diu: aquest log és immutable. No és una fallada de permisos que es resolgui amb un altre perfil.
Contractes i exportacions: els estats que mira el mòdul
En tancar l'any, la Marta vol finalitzar un contracte i arxivar-ne un altre. El primer li dona Only active or suspended contracts can be terminated.: només es finalitzen contractes actius o suspesos. El segon, Only terminated or suspended contracts can be archived.: només s'arxiven els finalitzats o suspesos. El contracte que volia arxivar encara era actiu, així que primer el finalitza i després l'arxiva.
Queda un missatge més: Export can only be generated for pending or processing requests. L'exportació només es genera per a sol·licituds pendents o en procés. Si la sol·licitud no està en un d'aquests estats, el mòdul no la genera.
Què n'aprenem del cas d'Estudi Ribera
Cada entrebanc de la Marta es va resoldre llegint el final del missatge: allà hi ha el perfil que falta, el requisit de la fita o l'estat necessari. Aquest és el resum:
| Missatge | Quan surt | Què cal fer |
|---|---|---|
Only Operations Directors can import rate cards | En importar rate cards sense aquest perfil | Que ho faci un Operations Director o demanar el perfil |
Only PSA Operations users can override billing rates. | En canviar una tarifa de facturació sense aquest perfil | Que ho faci un usuari de PSA Operations |
A reason is mandatory for rate overrides. | En canviar una tarifa sense motiu | Escriure el motiu |
Milestone '%s' requires a deliverable attachment... | En marcar com a assolida una fita sense lliurable | Adjuntar el lliurable |
Milestone '%s' requires internal approval... | En marcar com a assolida una fita sense aprovació interna | Aconseguir l'aprovació interna |
Milestone '%s' requires client acceptance... | En marcar com a assolida una fita sense acceptació del client | Esperar l'acceptació; el missatge dona l'estat actual |
The customer of milestone '%s' has no portal access... | El client de la fita no té accés al portal | Donar-li accés al portal i repetir |
Only draft change orders can be submitted. | En enviar una ordre que no està en esborrany | Comprovar l'estat de l'ordre |
Only client-accepted change orders can be implemented. | En implementar una ordre sense acceptació del client | Esperar que el client l'accepti |
Only active or suspended contracts can be terminated. | En finalitzar un contracte en un altre estat | Revisar l'estat del contracte |
Only terminated or suspended contracts can be archived. | En arxivar un contracte actiu | Finalitzar-lo abans |
Per deixar ben preparats els perfils, les fites i els contractes abans que surtin aquests missatges, mira la posada en marxa del mòdul.
Com t'ajuda FlexigoTech
A FlexigoTech implantem Odoo 17, 18, 19 i 20 i desenvolupem connectors i integracions a mida, així que et podem ajudar a repartir perfils, preparar fites i revisar els missatges que et surtin en el teu cas. El mòdul és a Odoo Apps per a 17, 18 i 19, a 9 € per versió d'Odoo, pagament únic i sense IVA; el servei local de FlexigoTech Cloud costa 29 €/mes o 290 €/any sense IVA (Pro: 58 €/mes o 580 €/any). Tens tots els detalls a la pàgina del mòdul i a la seva fitxa d'Odoo Apps.
Continua llegint
Comprovat al codi del mòdul (versió 19.0) i a les fonts enllaçades
Fonts
- Codi del mòdul: flexigo_psa_premium 19.0 (9670343f): controllers/portal.py
- Codi del mòdul: flexigo_psa_premium 19.0 (9670343f): controllers/rate_card_import.py
- Codi del mòdul: flexigo_psa_premium 19.0 (9670343f): models/account_analytic_line_ext.py
- Codi del mòdul: flexigo_psa_premium 19.0 (9670343f): models/project_milestone_ext.py
- Codi del mòdul: flexigo_psa_premium 19.0 (9670343f): models/psa_change_order.py
- Codi del mòdul: flexigo_psa_premium 19.0 (9670343f): models/psa_dsar_request.py
- Codi del mòdul: flexigo_psa_premium 19.0 (9670343f): models/psa_nte_audit_log.py
- Codi del mòdul: flexigo_psa_premium 19.0 (9670343f): models/psa_portal_action_log.py
- Codi del mòdul: flexigo_psa_premium 19.0 (9670343f): models/psa_rate_override_log.py
- Codi del mòdul: 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
