Uma consultora inventada que põe o PSA a funcionar
Exemplo Caso ilustrativo: a empresa e os seus dados são inventados para explicar o fluxo.
A Estúdio Ribera é uma consultora inventada que acabou de instalar o Professional Services Automation (PSA) for Odoo. A Marta, responsável de operações, quer carregar as tarifas, deixar pronto um contrato com marcos e começar a trabalhar com um cliente. Pelo caminho surgem-lhe boa parte das mensagens de erro do módulo. Revemo-las pela ordem em que lhe aparecem: o texto literal, o que significa e o que faz para avançar.
Antes de mais, a Marta abre as definições do módulo. Aí não aparece nenhum erro.

WIP Account vazio.Se quiser rever que menus o módulo acrescenta e por onde passa cada registo, tem tudo em como funciona o PSA por dentro.
Tarifas: quem pode importá-las e quem pode alterá-las
A primeira coisa que a Marta tenta é importar a tarifa da consultora. O módulo trava-a com Only Operations Directors can import rate cards. A mensagem é clara: importar rate cards cabe ao perfil Operations Directors, e o utilizador da Marta não o tem. Há duas saídas: a importação é feita por alguém com esse perfil ou quem gere os utilizadores do Odoo atribui-lho, se fizer sentido.

Com a tarifa carregada, a Marta quer aplicar a um cliente uma tarifa diferente. Aparece Only PSA Operations users can override billing rates.: alterar tarifas de faturação está reservado aos utilizadores de PSA Operations. Um colega com esse perfil tenta, deixa o motivo em branco e recebe A reason is mandatory for rate overrides. A solução é escrever o motivo da alteração e voltar a guardar.
Se em algum momento vir apenas Access denied, a mensagem não diz que permissão falta. O mais prático é anotar o que estava a fazer nesse momento e pedir a quem gere as permissões que o verifique.

Marcos: o que cada um exige antes de ser dado como atingido
O contrato da Estúdio Ribera tem um primeiro marco, «Análise». A Marta marca-o como atingido e o módulo responde com Milestone '%s' requires a deliverable attachment before it can be marked as reached. (no ecrã, em vez de %s aparece o nome do marco). Esse marco exige um entregável em anexo antes de fechar: a Marta anexa o documento e volta a marcá-lo.
A segunda tentativa dá Milestone '%s' requires internal approval before it can be marked as reached. Agora o que falta é a aprovação interna do marco. Enquanto não a tiver, não pode ser marcado como atingido.
Com a aprovação interna feita, aparece Milestone '%s' requires client acceptance before it can be marked as reached. Current state: %s. Falta a aceitação do cliente, e a mensagem acrescenta o estado atual (Current state).
Quando a Marta tenta pedir essa aprovação ao cliente, depara-se com The customer of milestone '%s' has no portal access: grant it first, the approval page needs a login. A página de aprovação exige que o cliente inicie sessão e esse cliente não tem acesso ao portal. É preciso dar-lhe acesso ao portal primeiro e repetir a ação.
A última mensagem de marcos funciona ao contrário: Milestone '%s' does not wait for a client approval. Aparece quando se tenta registar uma aprovação do cliente num marco que não está à espera dela. Verifique se escolheu o marco errado.

Ordens de alteração: o estado decide o que se pode fazer
A meio do projeto, o cliente pede para alargar o âmbito e a Marta cria uma ordem de alteração. Submete-a e, sem reparar, volta a submetê-la: Only draft change orders can be submitted. Só se submetem ordens em rascunho, e esta já não estava.
Depois, um colega tenta aprová-la e recebe User %(name)s has no pending approval step on this change order. A mensagem indica o nome do utilizador e diz que não tem nenhum passo de aprovação pendente nessa ordem. Tem de aprovar quem tiver esse passo pendente.
Por fim, a Marta quer aplicar a ordem antes de o cliente responder: Only client-accepted change orders can be implemented. Só se implementam ordens que o cliente já aceitou, por isso resta esperar por essa aceitação.
Três logs que não admitem alterações
A Marta vê uma entrada num dos logs do módulo e tenta corrigi-la. Há três mensagens deste tipo:
NTE audit log is immutable.Portal action log is immutable.Rate override log is immutable.
A mensagem diz tudo: esse log é imutável. Não é uma falha de permissões que se resolva com outro perfil.
Contratos e exportações: os estados que o módulo verifica
No fecho do ano, a Marta quer terminar um contrato e arquivar outro. O primeiro dá Only active or suspended contracts can be terminated.: só se terminam contratos ativos ou suspensos. O segundo, Only terminated or suspended contracts can be archived.: só se arquivam os terminados ou suspensos. O contrato que queria arquivar continuava ativo, por isso primeiro termina-o e depois arquiva-o.
Falta mais uma mensagem: Export can only be generated for pending or processing requests. A exportação só é gerada para pedidos pendentes ou em processamento. Se o pedido não estiver num desses estados, o módulo não a gera.
O que aprender com o caso da Estúdio Ribera
Cada tropeção da Marta resolveu-se lendo o final da mensagem: aí está o perfil em falta, o requisito do marco ou o estado necessário. Eis o resumo:
| Mensagem | Quando aparece | O que fazer |
|---|---|---|
Only Operations Directors can import rate cards | Ao importar rate cards sem esse perfil | Pedir a um Operations Director ou pedir o perfil |
Only PSA Operations users can override billing rates. | Ao alterar uma tarifa de faturação sem esse perfil | Pedir a um utilizador de PSA Operations |
A reason is mandatory for rate overrides. | Ao alterar uma tarifa sem motivo | Escrever o motivo |
Milestone '%s' requires a deliverable attachment... | Ao marcar como atingido um marco sem entregável | Anexar o entregável |
Milestone '%s' requires internal approval... | Ao marcar como atingido um marco sem aprovação interna | Obter a aprovação interna |
Milestone '%s' requires client acceptance... | Ao marcar como atingido um marco sem aceitação do cliente | Esperar pela aceitação; a mensagem mostra o estado atual |
The customer of milestone '%s' has no portal access... | O cliente do marco não tem acesso ao portal | Dar-lhe acesso ao portal e repetir |
Only draft change orders can be submitted. | Ao submeter uma ordem que não está em rascunho | Verificar o estado da ordem |
Only client-accepted change orders can be implemented. | Ao implementar uma ordem sem aceitação do cliente | Esperar que o cliente a aceite |
Only active or suspended contracts can be terminated. | Ao terminar um contrato noutro estado | Verificar o estado do contrato |
Only terminated or suspended contracts can be archived. | Ao arquivar um contrato ativo | Terminá-lo antes |
Para deixar perfis, marcos e contratos bem preparados antes de estas mensagens aparecerem, veja a configuração inicial do módulo.
Como a FlexigoTech o pode ajudar
Na FlexigoTech implementamos Odoo 17, 18, 19 e 20 e desenvolvemos conectores e integrações à medida, por isso podemos ajudar a distribuir perfis, preparar marcos e analisar as mensagens que surjam no seu caso. O módulo está na Odoo Apps para 17, 18 e 19, a 9 € por versão do Odoo, pagamento único e sem IVA; o serviço local da FlexigoTech Cloud custa 29 €/mês ou 290 €/ano sem IVA (Pro: 58 €/mês ou 580 €/ano). Tem todos os detalhes na página do módulo e na sua página da Odoo Apps.
Continue a ler
Verificado no código do módulo (versão 19.0) e nas fontes indicadas
Fontes
- Código do módulo: flexigo_psa_premium 19.0 (9670343f): controllers/portal.py
- Código do módulo: flexigo_psa_premium 19.0 (9670343f): controllers/rate_card_import.py
- Código do módulo: flexigo_psa_premium 19.0 (9670343f): models/account_analytic_line_ext.py
- Código do módulo: flexigo_psa_premium 19.0 (9670343f): models/project_milestone_ext.py
- Código do módulo: flexigo_psa_premium 19.0 (9670343f): models/psa_change_order.py
- Código do módulo: flexigo_psa_premium 19.0 (9670343f): models/psa_dsar_request.py
- Código do módulo: flexigo_psa_premium 19.0 (9670343f): models/psa_nte_audit_log.py
- Código do módulo: flexigo_psa_premium 19.0 (9670343f): models/psa_portal_action_log.py
- Código do módulo: flexigo_psa_premium 19.0 (9670343f): models/psa_rate_override_log.py
- Código do módulo: 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
