Uma empresa cliente foi-se embora, o contrato terminou, e quer arquivá-la no Odoo. O Odoo responde com uma mensagem de erro: «Não pode arquivar contactos associados a um utilizador ativo. Arquive primeiro o utilizador correspondente.» Se a empresa tiver vários acessos ao portal, isso significa: procurar cada utilizador individualmente, arquivá-lo individualmente, voltar à empresa, arquivar de novo.
Escrevemos para isso o pequeno módulo Arquivar empresa com utilizadores do portal (partner_archive_users) para o Odoo 19. Em vez da mensagem de erro, surge uma pergunta de confirmação e, ao responder «Sim», os utilizadores do portal e a empresa são arquivados num só passo. O módulo está disponível no GitHub como software livre sob a licença AGPL-3:
github.com/Alex0176/odoo-partner-archive-users
Utilizamos o módulo na Biricon IT Services, no nosso sistema de produção, desde 3 de novembro de 2026. É novo, pelo que a experiência com ele é curta. Quem o adotar deve ler as secções sobre Âmbito e Limitações .
O problema no Odoo padrão
Ao arquivar um contacto, o Odoo verifica se há um utilizador associado e cancela se houver. A verificação faz sentido, pois cada utilizador precisa de um contacto. Para os utilizadores internos, ou seja, os colaboradores, o bloqueio é também desejado. No caso dos utilizadores do portal de clientes, porém, é sobretudo trabalho manual. Cada empresa cliente com acessos ao portal, por exemplo para consultar faturas e tickets, exige o mesmo procedimento ao ser arquivada:
- Procurar os utilizadores da empresa e dos seus interlocutores,
- arquivar cada um individualmente,
- voltar à empresa,
- arquivar a empresa.
A solução: uma pergunta de confirmação
O módulo estende o caminho Ação → Arquivar no contacto, tanto no formulário como na lista. Se à empresa selecionada ou aos seus interlocutores estiverem associados utilizadores do portal ativos, abre-se um diálogo com a pergunta «Pretende mesmo arquivar a empresa? Ainda há utilizadores ativos no sistema.» Por baixo constam os utilizadores afetados com nome, nome de utilizador e contacto.
- Sim, arquivar empresa e utilizadores: primeiro são arquivados os utilizadores e depois a empresa.
- Cancelar: nada se altera.
- Sem utilizadores do portal: o Odoo comporta-se como até agora, não surge nenhum diálogo.
O que é arquivado e o que não é
O âmbito é deliberadamente restrito:
- Apenas utilizadores do portal e públicos (
share = True). Os utilizadores internos nunca são arquivados por este caminho. Se a um contacto estiver associado um acesso de colaborador, a mensagem de erro do Odoo mantém-se. Assim, ninguém bloqueia um colaborador por engano por ter arquivado uma empresa. - Os interlocutores permanecem ativos como contactos. Só os seus acessos ao portal são arquivados. Isto corresponde ao Odoo padrão, que também não toca nos subcontactos ao arquivar uma empresa.
- Apenas o caminho de arquivo da interface. Um
write({'active': False})direto, por exemplo numa importação ou num script, segue sem alterações para a verificação do Odoo.
Implementação técnica
O módulo não tem novos campos em modelos existentes. Consiste numa extensão de res.partner.action_archive e num assistente (partner.archive.users.wizard) que surge como diálogo.
| Componente | Função |
|---|---|
action_archive no contacto | Procura utilizadores ativos com share = True associados ao contacto ou (no caso de empresas) a contactos da empresa. Se existirem, em vez de arquivar é devolvido o diálogo. |
| Assistente | Guarda a empresa e os utilizadores encontrados, apresenta-os e, ao responder «Sim», executa o arquivo com a chave de contexto archive_linked_users. |
Contexto skip_archive_users_wizard | Desativa o diálogo. Nesse caso, volta a valer a verificação do Odoo. |
| Acesso | O assistente pode ser criado e utilizado por utilizadores internos (base.group_user). |
| Tradução | Seguem em anexo o alemão (de.po) e o modelo (.pot). |
Os utilizadores são procurados e arquivados com direitos elevados (sudo). Assim, o diálogo funciona também para utilizadores sem acesso à gestão de utilizadores. O reverso da medalha consta de Limitações.
Uma descoberta: o teste estava verde, mas o diálogo estava avariado
Na primeira utilização, o módulo teve um erro que os testes automáticos não detetaram. Ao primeiro clique em «Arquivar» na interface, em vez do diálogo surgiu o ecrã de erro do Odoo com Cannot read properties of undefined (reading 'map').
A causa: o cliente web invoca action_archive diretamente e executa uma ação devolvida sem qualquer tratamento adicional. Ao fazê-lo, lê obrigatoriamente a chave views da ação. A nossa ação só tinha view_mode. As ações de botões com type="object" são complementadas previamente pelo servidor (clean_action em call_button), mas a invocação direta de action_archive não. Os testes invocavam o método apenas em Python, e aí a falta do campo passou despercebida.
A correção é uma linha ("views": [(False, "form")]), a que se junta uma verificação no teste que exige precisamente essa chave. Nada foi arquivado nesse processo. A lição: quem devolve uma ação a partir de um método que o cliente invoca diretamente (action_archive, action_unarchive e semelhantes) deve sempre incluir views.
Instalação
git clone https://github.com/Alex0176/odoo-partner-archive-users.git
ln -s /pfad/odoo-partner-archive-users/partner_archive_users /pfad/addons/
odoo-bin -c odoo.conf -d <datenbank> -i partner_archive_users --stop-after-init
As dependências são base e contacts. Depois da instalação, o serviço Odoo tem de ser reiniciado, porque o módulo contém código Python. Quem opera um sistema de produção instala o módulo primeiro numa cópia da base de dados.
Limitações
- Autorização. Como os utilizadores são arquivados com direitos elevados, qualquer pessoa que possa arquivar um contacto pode também arquivar, através do diálogo, os acessos ao portal dessa empresa. Para utilizadores internos, isto não se aplica. Quem quiser proteger os acessos ao portal de forma mais fina tem de adaptar o módulo.
- Sem restauro automático. Se a empresa for reativada mais tarde, os utilizadores permanecem arquivados. Têm de ser reativados manualmente.
- Apenas contactos. O módulo diz respeito a empresas como contactos (
res.partner). Arquivar uma empresa do Odoo (res.company) tem outras verificações, por exemplo quando ainda é a empresa padrão de utilizadores. O módulo não se destina a isso. - Testado apenas no Odoo 19.0 Community. Não o verificámos para outras versões.
Perguntas frequentes
Porque é que os colaboradores não são arquivados também?
Um utilizador interno tem direitos no sistema e está, em regra, associado a dados, tarefas e autorizações próprios. Bloqueá-lo como efeito secundário do arquivo de uma empresa parece-nos demasiado arriscado. Por isso, mantém-se a mensagem de erro do Odoo.
Posso desativar a pergunta de confirmação?
No código, através do contexto skip_archive_users_wizard. Não existe uma definição na interface. Quem desinstalar o módulo volta a ter o comportamento padrão do Odoo.
Sob que licença está?
Sob a AGPL-3. Erros e melhorias são bem-vindos como issue no repositório GitHub .
Apoio da Biricon IT Services
Damos assistência a instalações Odoo para pequenas e médias empresas: da implementação, passando por adaptações e migrações, até à operação corrente. Se quer simplificar no Odoo processos como o arquivo de empresas clientes, configurar um portal para os seus clientes ou colocar um módulo em segurança na sua instância de produção, teremos todo o gosto em ajudar. Outros desenvolvimentos próprios: Números de documento a partir de prefixo, ano e contador, Firmenbuch e verificação de moradas para clientes austríacos e Conjuntos de produtos no orçamento como secção.
Situação em: 3 de novembro de 2026. Versão do módulo 19.0.1.0.0 com a correção do mesmo dia. Todos os nomes e nomes de utilizador nas figuras são de livre escolha.