Einführung
In Odoo wird jede Geschäftsinformation – ob Angebot, Rechnung, Projekt oder Aufgabe – in einem Modell abgebildet. Modelle legen die Struktur der Datenbank fest: welche Felder ein Datensatz hat, wie Datensätze miteinander verknüpft sind und wie Geschäftsregeln angewendet werden. Das project.project‑Modell ist die zentrale Datenhülle für Projekte.
Für Entwickler und funktionale Berater ist das Verständnis von Odoo‑Modellen unverzichtbar. Modelle sind das Rückgrat der Odoo‑Architektur: sie definieren Felder, Relationen und Logik. Einmal verstanden, lassen sich Muster wie Felder, One2many/Many2one‑Beziehungen und Berechnungsfelder systematisch anwenden.
Dieser Beitrag konzentriert sich auf eines der wichtigsten Modelle in Odoo: project.project. Ob Sie ein Modul entwickeln, externe Systeme anbinden oder Projektprozesse konfigurieren — mit diesem Modell arbeiten Sie regelmäßig und sollten seine Rolle im System kennen.
Worum es beim Modell project.project geht
Das project.project‑Modell bildet ein einzelnes Projekt ab. Es bündelt Aufgaben, Meilensteine, Teamzuweisungen und Sichtbarkeitsregeln. Technisch ist jedes Projekt einfach ein Datensatz in dieser Modelltabelle mit all seinen Beziehungen und Einstellungen.
Das Modell wird von der Projekt‑App genutzt: Beim Anlegen eines Projekts entsteht ein project.project‑Datensatz, und Aufgaben verknüpfen sich über task_ids mit diesem Datensatz. Hier werden Standard‑Workflows, Teammitglieder und Zugriffsregeln definiert, die das Verhalten der zugehörigen Aufgaben steuern.
Das Basismodell liegt im Modul project; andere Module erweitern es per Modell‑Vererbung. Beispielsweise ergänzt Sale die rechnungsbezogenen Aspekte, Timesheet bringt Zeiterfassung und Projektplanung erweitert das Scheduling. So bleibt die Kernstruktur konsistent und Erweiterungen modular.
Das Zusammenspiel von project.project und project.task ist zentral: Das Projekt verwaltet gemeinsame Einstellungen und Teamstruktur, die Aufgaben repräsentieren einzelne Arbeitspakete. Beide zusammen bilden den Kern des Projektmanagements in Odoo.
Wichtige Felder im Modell
Im Folgenden sind die Felder aufgeführt, die im Alltag den größten Einfluss haben. Ein Blick auf ihre Bedeutung erleichtert Konfiguration, Automatisierung und Reporting.
1. name
Typ: Char. Der sichtbare Projektname. Er ist primär für Nutzerlisten, Suchfunktionen und Berichte relevant und meist das wichtigste Identifikationsmerkmal eines Projekts.
2. create_date
Typ: Datetime. Zeitpunkt der Erstellung des Datensatzes. Wird automatisch gesetzt und ist hilfreich für Audit‑Logs und zeitliche Auswertungen.
3. write_date
Typ: Datetime. Zeitpunkt der letzten Änderung. Ebenfalls automatisch gepflegt und nützlich, um Änderungen nachzuverfolgen.
4. active
Typ: Boolean. Weiche Löschung: bei False wird das Projekt archiviert und verschwindet aus Standardansichten, bleibt aber in der Datenbank erhalten.
5. sequence
Typ: Integer. Reihenfolge zur Anzeige und Sortierung. Kleinere Werte erscheinen weiter oben in Listen und Auswahlfeldern.
6. color
Typ: Integer. Farbindex für die Darstellung, etwa in Kanban‑Ansichten zur visuellen Trennung von Projekten.
7. user_id
Typ: Many2one (res.users). Projektleiter oder verantwortliche Person. Wird oft als Standardzuweisender für Aufgaben verwendet.
8. company_id
Typ: Many2one (res.company). Bei Multi‑Company‑Setups gibt dieses Feld an, zu welchem Unternehmen das Projekt gehört.
9. partner_id
Typ: Many2one (res.partner). Kunde oder Auftraggeber des Projekts. Wichtig für Abrechnung, Berichte und Kundenkommunikation.
10. description
Typ: Html. Projektbeschreibung mit Formatierung — sinnvoll für Briefings, Projektziele und Hintergrundinformationen.
11. date_start
Typ: Date. Startdatum des Projekts. Grundlage für Planung und Meilensteinberechnungen.
12. date
Typ: Date. Projektende oder Deadline. Wichtig zur Fortschrittskontrolle und für Statusberichte.
13. task_ids
Typ: One2many (project.task). Liste aller Aufgaben, die zu diesem Projekt gehören — zentrale Relation zwischen Projekt und Arbeitspaketen.
14. task_count
Typ: Integer. Anzahl der Aufgaben, berechnet aus task_ids. Nützlich für Listenansichten und Filter.
15. type_ids
Typ: Many2many (project.task.type). Definiert Phasen oder Statustypen (z. B. To Do, In Arbeit, Erledigt) und bildet den Workflow für Aufgaben ab.
16. tag_ids
Typ: Many2many (project.tags). Projekt‑Tags zur Kategorisierung und schnellen Filterung.
17. privacy_visibility
Typ: Selection. Steuerung der Zugriffsrechte: nur eingeladene interne Nutzer, alle internen Nutzer oder auch eingeladene Portal‑Nutzer (öffentlich).
18. collaborator_ids
Typ: One2many (project.collaborator). Projektteam‑Mitglieder — wer aktiv an dem Projekt mitarbeitet.
19. favorite_user_ids
Typ: Many2many (res.users). Nutzer, die das Projekt als Favorit markiert haben, für schnellen Zugriff im Dashboard.
20. allow_task_dependencies
Typ: Boolean. Wenn gesetzt, können Aufgaben Abhängigkeiten (Vorgänger/Nachfolger) bilden — wichtig für Terminplanung und Gantt‑Ansichten.
21. allow_milestones
Typ: Boolean. Erlaubt das Anlegen von Meilensteinen als besondere, abgrenzbare Lieferobjekte.
22. milestone_ids
Typ: One2many (project.milestone). Auflistung der Meilensteine eines Projekts zur Nachverfolgung wichtiger Deliverables.
23. rating_active
Typ: Boolean. Schaltet Kundenbewertungen für das Projekt frei — nützlich für Feedback und Kundenzufriedenheit.
24. task_properties_definition
Typ: Text (JSON). Definition zusätzlicher, projekt‑spezifischer Eigenschaften für Aufgaben; ermöglicht flexible Erweiterungen ohne neue Felder in der Datenbank.
25. access_url
Typ: Char. Portal‑URL, über die Kunden Zugriff auf das Projekt erhalten können — praktisch für Collaboration mit externen Stakeholdern.
26. access_token
Typ: Char. Sicherheitstoken für Portalzugriff; sorgt dafür, dass nur berechtigte Personen per Link einsehen können.
27. alias_id
Typ: Many2one (mail.alias). E‑Mail‑Alias für das Projekt: ankommende Mails können so automatisch zu Aufgaben werden.
28. activity_ids
Typ: One2many (mail.activity). Geplante Aktivitäten (Follow‑ups, Erinnerungen) im Projektkontext.
29. activity_state
Typ: Selection. Zusammenfassung des Aktivitätsstatus (z. B. Heute, Überfällig, Geplant), errechnet aus activity_ids.
30. activity_date_deadline
Typ: Date. Datum der nächsten geplanten Aktivität — hilft bei Priorisierung und Zeitplanung.
31. message_ids
Typ: One2many (mail.message). Chatter‑Nachrichten am Projekt für interne Kommunikation und Dokumentation.
32. message_follower_ids
Typ: One2many (mail.followers). Nutzer, die das Projekt beobachten und Benachrichtigungen erhalten.
33. create_uid
Typ: Many2one (res.users). Ersteller des Datensatzes, automatisch gesetzt von Odoo.
34. write_uid
Typ: Many2one (res.users). Nutzer, der zuletzt geändert hat — ebenfalls automatisch gepflegt.
Wie das Modell im Tagesgeschäft genutzt wird
1. Anlage und Verwaltung von Projekten
Vertrieb oder Projektleitung legt ein Projekt an: Name, Verantwortlicher, Zeitfenster und Sichtbarkeit werden definiert. Diese Einstellungen speichert project.project; anschließend werden Aufgaben angelegt und über task_ids dem Projekt zugeordnet.
2. Aufgaben‑Workflow
Aufgaben durchlaufen die in type_ids definierten Phasen. Der Projektleiter verteilt Aufgaben an Collaborators; das Projekt bildet die Basis für Workflow‑Einstellungen und Teamorganisation.
3. Kundenportal
Ist die Sichtbarkeit so eingestellt, dass Portalzugriff möglich ist, können Kunden über die access_url Aufgaben und Meilensteine sehen. Der access_token schützt dabei die Inhalte — praktisch für gemeinsame Projekte mit externen Partnern.
4. Zeiterfassung und Abrechnung
Mit Timesheet verknüpfen sich Projekt und Zeiteinträge; in Kombination mit Sale lässt sich projektbezogen abrechnen. Das partner_id‑Feld verbindet das Projekt direkt mit dem Kunden für Berichte und Rechnungsstellung.
5. E‑Mail‑Integration
Eingehende E‑Mails an den Projektalias werden automatisch in Aufgaben umgewandelt. Die alias_id verknüpft Projekt und Mail‑Alias und vereinfacht so die Erfassung von Aufgaben aus der Kommunikation.
Wie Entwickler das Modell erweitern
Entwickler erweitern project.project in Odoo typischerweise per Modell‑Erweiterung (Inheritance) und fügen gezielt Felder, Logik oder Constraints hinzu.
Modellvererbung
Nutzen Sie _inherit = 'project.project', um das Modell zu erweitern. So fügen Sie neue Felder hinzu, überschreiben Methoden oder ergänzen Validierungen, ohne den Originalcode zu verändern. Das hält Anpassungen wartbar und upgrade‑freundlich.
Felder hinzufügen
Ergänzen Sie neue Felder im erweiterten Modell, z. B. Char, Many2one, Boolean, Integer, Text oder Selection. Denken Sie bei unternehmensübergreifenden Setups an company‑abhängige Felder und an sinnvolle Default‑Werte.
Python‑Erweiterungen
Überschreiben Sie create, write oder unlink nur mit Bedacht und rufen Sie super() auf, um Kernfunktionalität nicht zu unterbrechen. Achten Sie besonders auf computed‑Felder und deren Abhängigkeiten, damit Berechnungen korrekt bleiben.
Odoo Studio
Odoo Studio bietet eine codefreie Möglichkeit, Felder zu ergänzen — ideal für schnelle Anpassungen. Für komplexe Logik oder langlebige Projekte sind deklarative Module allerdings robuster und besser wartbar.
Empfohlene Vorgehensweisen
- Weisen Sie user_id korrekt zu, um Verantwortlichkeiten transparent zu halten. Klare Eigentumszuweisungen erleichtern Nachverfolgung und Reporting.
- Legen Sie für jedes Projekt passende type_ids fest, damit die Phasen dem realen Workflow entsprechen und Aufgaben sinnvoll durch die Stufen fließen können.
- Nutzen Sie privacy_visibility gezielt: Private Projekte schützen sensible Inhalte, während öffentliche Projekte die Zusammenarbeit mit Portal‑Benutzern ermöglichen.
- Für API‑Integrationen nutzen Sie XML‑RPC oder JSON‑RPC. project.project ist über die Odoo‑API verfügbar — externe Systeme sollten IDs und Referenzen sauber mappen, um Inkonsistenzen zu vermeiden.
- Bei eigenen Feldern empfiehlt sich ein Modul‑Prefix (x_modulname_ oder x_‑Präfix), damit keine Namenskonflikte mit künftigen Odoo‑Felder entstehen.
Häufige Fehler
- Aufgaben ohne Projekt zu erstellen ist eine häufige Ursache für Probleme. Achten Sie darauf, dass task.project_id gesetzt wird, sonst fehlen Kontext und Zuordnung.
- Neue Projekte ohne definierte type_ids führen oft zu blockierten Workflows, weil keine Phasen vorhanden sind, durch die Aufgaben laufen könnten.
- Achten Sie darauf, privacy_visibility nicht versehentlich öffentlich zu setzen — dadurch könnten vertrauliche Projektinformationen nach außen gelangen.
- Beim Überschreiben von Kernmethoden darf super() nicht fehlen. Sonst riskieren Sie Inkompatibilitäten mit anderen Modulen oder zukünftigen Odoo‑Upgrades.
- Pflegen Sie Default‑Werte für neu eingeführte Pflichtfelder. Fehlen diese, schlagen Migrationen oder Bulk‑Operationen auf bestehende Datensätze fehl.
Fazit
Das project.project‑Modell bildet das Herz des Projektmanagements in Odoo: Es speichert Projektdefinitionen, Workflow‑Phasen und Teamzuordnungen. Wer die wichtigsten Felder und Erweiterungsmuster kennt, kann Odoo gezielt konfigurieren, erweitern und integrieren.
Ob Sie Projekte als Berater einrichten oder als Entwickler Module bauen — fundierte Kenntnisse des project.project‑Modells sparen Zeit und vermeiden Fehler in Implementierung und Betrieb.
Brauchen Sie Unterstützung bei Ihrer Odoo‑Einführung?
Dasolo unterstützt Unternehmen bei Implementierung, Customizing und Optimierung von Odoo. Unser Fokus liegt auf Integrationen per API und stabiler Odoo‑Entwicklung — mit tiefem Verständnis der Datenmodelle wie project.project.
Wenn Sie Unterstützung bei Odoo‑Implementierung, individuellen Modulen oder Integrationen benötigen: Wir helfen gern weiter. Demo buchen um Ihr Projekt zu besprechen.