Introdução
No Odoo, um modelo descreve a estrutura dos dados guardados na base de dados. Tudo o que representa informação de negócio — desde encomendas de venda até projetos e tarefas — vive num modelo que define campos, relações e regras.
Para consultores funcionais e programadores, dominar os modelos do Odoo é fundamental. São eles que desenham a arquitetura de dados: que campos existem, como as tabelas se relacionam e onde a lógica de negócio se aplica. O padrão de funcionamento é consistente entre modelos, o que facilita a aprendizagem e a extensão do sistema.
Este texto centra-se num dos modelos mais usados no Odoo: project.project. Quer esteja a configurar fluxos de trabalho, a integrar sistemas externos ou a desenvolver módulos à medida, é muito provável que venha a interagir com este modelo.
O que é o modelo project.project
O project.project representa um projeto dentro do Odoo — é a entidade que agrega tarefas, marcos e a equipa responsável. Cada projeto criado no sistema corresponde a um registo deste modelo.
O modelo é usado pela aplicação de Projetos: ao criar um projeto no Odoo está a criar um registo project.project. As tarefas ligam-se a esse projeto através da relação apropriada. O registo do projeto determina fases, membros da equipa e regras de visibilidade.
O núcleo do modelo está no módulo de Projectos e outros módulos complementam-no por herança. Por exemplo, o módulo de Vendas acrescenta faturação por projeto, o de Folhas de Tempo adiciona registo de horas, e o de Planeamento traz funcionalidades de Gantt. Cada extensão reutiliza a estrutura base sem duplicar lógica.
A relação entre project.project e project.task é essencial: o projeto define configurações partilhadas e contexto, enquanto a tarefa representa a unidade de trabalho. Juntos são a espinha dorsal do fluxo de trabalho de gestão de projetos no Odoo.
Campos principais do modelo
A seguir estão os campos mais relevantes do project.project. Conhecê-los facilita a configuração, filtragem e personalização dos seus projetos.
1. name
Tipo: Char. Guarda o nome do projeto — é o rótulo primário visível nas vistas e menus e serve como identificador legível para utilizadores.
2. create_date
Tipo: Datetime. Data e hora de criação do registo. Gerido automaticamente pelo Odoo, útil para auditoria e relatórios.
3. write_date
Tipo: Datetime. Data e hora da última alteração. Também gerido automaticamente e essencial para rastrear alterações.
4. active
Tipo: Boolean. Indicador de arquivamento. Quando falso, o projeto fica oculto nas vistas por defeito mas não é eliminado da base de dados.
5. sequence
Tipo: Integer. Determina a ordem de apresentação em listas e seletores; valores mais baixos são mostrados primeiro.
6. color
Tipo: Integer. Índice de cor usado em vistas kanban e listas para distinguir visualmente projetos.
7. user_id
Tipo: Many2one (res.users). Gestor do projeto — o utilizador responsável que costuma aparecer como responsável padrão nas tarefas.
8. company_id
Tipo: Many2one (res.company). Em ambientes multi-empresa indica a que empresa pertence o projeto.
9. partner_id
Tipo: Many2one (res.partner). Cliente associado ao projeto — importante para faturação e relatórios por cliente.
10. description
Tipo: Html. Descrição detalhada do projeto; permite formatação para briefs, notas e instruções.
11. date_start
Tipo: Date. Data de início prevista do projeto, usada em planeamento e relatórios cronológicos.
12. date
Tipo: Date. Data de conclusão ou prazo do projeto, usada para acompanhar entregas.
13. task_ids
Tipo: One2many (project.task). Lista das tarefas associadas — é a ligação principal entre projeto e tarefas.
14. task_count
Tipo: Integer. Contador de tarefas calculado a partir de task_ids; útil para visualização rápida e filtros.
15. type_ids
Tipo: Many2many (project.task.type). As fases ou tipos de tarefa do projeto — definem o fluxo (por exemplo: Por Fazer, Em Curso, Concluído).
16. tag_ids
Tipo: Many2many (project.tags). Etiquetas para categorizar projetos, facilitando pesquisas e filtros.
17. privacy_visibility
Tipo: Selection. Controla visibilidade: apenas utilizadores convidados, todos os utilizadores internos, ou público (inclui utilizadores de portal convidado).
18. collaborator_ids
Tipo: One2many (project.collaborator). Membros da equipa atribuídos ao projeto — define quem pode trabalhar nele.
19. favorite_user_ids
Tipo: Many2many (res.users). Utilizadores que marcaram o projeto como favorito — ajuda ao acesso rápido no painel.
20. allow_task_dependencies
Tipo: Boolean. Permite ligar tarefas entre si como predecessoras/sucessoras — relevante para planeamento e dependências.
21. allow_milestones
Tipo: Boolean. Ativa a criação de milestones no projeto — pontos-chave que sinalizam entregas importantes.
22. milestone_ids
Tipo: One2many (project.milestone). Lista de milestones do projeto, usada para acompanhar marcos do cronograma.
23. rating_active
Tipo: Boolean. Permite que clientes avaliem o projeto, útil para recolha de feedback.
24. task_properties_definition
Tipo: Text (JSON). Definições de propriedades personalizadas para tarefas — permite adicionar campos específicos por projeto.
25. access_url
Tipo: Char. URL público para acesso ao projeto via portal — usado em colaboração com clientes.
26. access_token
Tipo: Char. Token de segurança para o link do portal, garantindo que apenas quem tem autorização aceda.
27. alias_id
Tipo: Many2one (mail.alias). Alias de e-mail do projeto — mensagens recebidas podem gerar tarefas automaticamente.
28. activity_ids
Tipo: One2many (mail.activity). Atividades agendadas ligadas ao projeto — usadas para follow-ups e lembretes.
29. activity_state
Tipo: Selection. Estado resumo das atividades: Hoje, Atrasadas ou Planeadas — calculado a partir de activity_ids.
30. activity_date_deadline
Tipo: Date. Data da próxima atividade agendada, importante para planeamento operacional.
31. message_ids
Tipo: One2many (mail.message). Mensagens do chatter associadas ao projeto — central para comunicação interna.
32. message_follower_ids
Tipo: One2many (mail.followers). Utilizadores que seguem o projeto e recebem notificações.
33. create_uid
Tipo: Many2one (res.users). Utilizador que criou o registo — definido automaticamente pelo Odoo.
34. write_uid
Tipo: Many2one (res.users). Utilizador que modificou o registo por último — também definido automaticamente.
Como este modelo se encaixa nos processos empresariais
1. Criação e gestão de projetos
Quando um gestor ou comercial cria um projeto, define nome, gestor, prazos e regras de visibilidade. O registo do modelo armazena essas definições e, a seguir, são acrescentadas tarefas que ficam ligadas ao projeto.
2. Fluxo de tarefas
As tarefas transitam pelas fases definidas em type_ids. O gestor atribui tarefas aos colaboradores e configura o fluxo de trabalho e responsabilidades a nível do projeto.
3. Portal do cliente
Se a visibilidade permitir acesso via portal, os clientes conseguem ver tarefas e milestones através do access_url, protegido pelo access_token. É uma funcionalidade útil para projetos com colaboração externa.
4. Folhas de tempo e faturação
Com o módulo de Folhas de Tempo, as entradas de tempo ligam-se ao projeto; com Vendas, pode associar projetos a encomendas para faturação por projeto. O partner_id mantém a ligação ao cliente para efeitos contabilísticos.
5. Integração por e-mail
E-mails enviados para o alias do projeto podem criar tarefas automaticamente. A configuração do alias_id permite automatizar a captura de trabalho originado por mensagens.
Como os programadores estendem este modelo
Os programadores estendem project.project usando padrões do Odoo, com a herança de modelos como mecanismo central.
Herança de modelo
Para estender, declare que a sua classe herda de project.project em vez de alterar o ficheiro original. Assim adiciona campos, sobrescreve métodos ou impõe restrições mantendo o núcleo intacto — prática que facilita atualizações e manutenção.
Adicionar campos
Adicione campos no módulo de extensão usando tipos apropriados (Char, Many2one, Boolean, Integer, Text, Selection). Em ambientes multi-empresa, considere campos dependentes de company_id para evitar inconsistências.
Extensões em Python
Sobrescreva métodos como create, write ou unlink para inserir lógica adicional, usando super() para não interromper o comportamento base. Preste atenção a campos calculados e às suas dependências para evitar erros de consistência.
Odoo Studio
O Odoo Studio permite criar campos e vistas sem código — prático para personalizações rápidas. Para lógica complexa e evolução a longo prazo, preferem-se módulos personalizados porque são mais resilientes a upgrades.
Boas práticas
- Defina claro o user_id para responsabilizar gestores. Atribuição explícita facilita rastreio e governança.
- Configure type_ids por projeto para garantir que as fases reflitam os seus processos reais.
- Use privacy_visibility corretamente para proteger dados sensíveis — projetos privados devem limitar o acesso a seguidores e administradores.
- Ao integrar via API, prefira XML-RPC ou JSON-RPC e mapeie cuidadosamente os IDs externos. O projecto project.project está disponível na API e é seguro integrá-lo desde que faça validações adequadas.
- Para campos personalizados, utilize prefixos como x_ ou o prefixo do seu módulo para evitar colisões com campos que o Odoo possa introduzir em versões futuras.
Erros frequentes
- Criar tarefas sem as ligar a um projeto. Uma tarefa isolada sem project_id perde contexto e pode quebrar relatórios e regras de acesso.
- Não definir type_ids. Projetos sem fases tornam o fluxo de tarefas inutilizável e complicam a gestão de progresso.
- Configurar privacy_visibility como público quando devia ser privado. Isso pode expor informação sensível a utilizadores não autorizados.
- Sobrescrever métodos do core sem chamar super(). Esse erro pode causar incompatibilidades com outros módulos e dificultar atualizações.
- Adicionar campos obrigatórios sem valores por defeito. Isso causa falhas em registros existentes quando o módulo é instalado ou atualizado.
Conclusão
O model project.project é o ponto central da gestão de projetos no Odoo: armazena definições do projeto, fases de trabalho e a estrutura da equipa. Saber quais os campos importantes e como o modelo é estendido por módulos facilita configurar, personalizar e integrar o Odoo conforme as necessidades da empresa.
Seja a sua função configurar projetos como consultor funcional ou desenvolver módulos como programador, dominar project.project reduz retrabalho e diminui riscos de implantação.
Precisa de ajuda com a sua implementação Odoo?
A Dasolo apoia empresas na implementação, personalização e otimização do Odoo. Temos experiência em integrações via API e desenvolvimento de módulos, com conhecimento profundo da arquitetura de dados e modelos como project.project.
Se precisa de apoio na sua implementação Odoo, no desenvolvimento de módulos à medida ou em integrações, podemos ajudar. Agende uma demonstração para conversar sobre o seu projeto.