Wprowadzenie
W Odoo model to schemat danych — określa, jakie informacje przechowujemy i w jakim formacie trafiają do bazy. Wszystkie elementy pracy biznesowej: zamówienia, zadania czy projekty, to rekordy zapisane w odpowiednich modelach.
Znajomość modeli Odoo jest kluczowa zarówno dla konsultantów funkcjonalnych, jak i programistów. To one determinują pola, zależności między rekordami i biznesowe reguły. Modele w Odoo są zbudowane według powtarzalnych, dobrze rozpoznawalnych wzorców.
W tekście skupiamy się na jednym z centralnych modeli aplikacji projektowej: project.project. Niezależnie czy konfigurujesz procesy, tworzysz moduły czy robisz integracje — prędzej czy później zetkniesz się z tym modelem.
Czym jest model project.project
Model project.project reprezentuje projekt w systemie — to pojemnik na zadania, kamienie milowe i ustawienia zespołu. Każdy projekt w Odoo jest odrębnym rekordem tego modelu.
Model obsługiwany jest przez aplikację Project. Gdy tworzysz projekt w interfejsie, powstaje rekord project.project, a zadania przypisuje się do niego przez pole task_ids. Projekt określa etapy pracy, członków zespołu i zasady widoczności.
Definicja modelu znajduje się w module project. Inne moduły dopisują funkcje przez dziedziczenie modeli — np. sprzedaż dodaje rozliczanie projektów, moduł Timesheet zbiera czas pracy, a planowanie wprowadza wykres Gantta. Dzięki temu rozszerzenia nie duplikują podstawowej struktury.
Relacja między project.project a project.task to fundament zarządzania projektami w Odoo: projekt zawiera wspólne ustawienia i strukturę, a zadania reprezentują poszczególne elementy pracy przypisane do projektu.
Kluczowe pola w modelu
Poniżej wymieniono najważniejsze pola modelu project.project — opanowanie ich ułatwi konfigurację, raportowanie i integracje.
1. name
Typ: Char. Nazwa projektu — główny identyfikator widoczny w listach, nagłówkach i odnośnikach.
2. create_date
Typ: Datetime. Data i godzina utworzenia rekordu. Odoo ustawia automatycznie; przydaje się w audycie i analizach historycznych.
3. write_date
Typ: Datetime. Data ostatniej modyfikacji rekordu. Również automatycznie zarządzane; pomaga śledzić, kiedy dane były zmieniane.
4. active
Typ: Boolean. Flaga archiwizacji — gdy False, projekt jest ukryty w podstawowych widokach, ale nie jest fizycznie usuwany.
5. sequence
Typ: Integer. Kolejność wyświetlania w listach i rozwijalnych menu — niższe wartości pojawiają się wcześniej.
6. color
Typ: Integer. Indeks koloru używany w widokach Kanban i listach, by szybciej wyróżnić projekt wizualnie.
7. user_id
Typ: Many2one (res.users). Kierownik projektu — domyślny przypisany użytkownik i osoba odpowiedzialna za realizację.
8. company_id
Typ: Many2one (res.company). Firma powiązana z projektem w konfiguracjach wielofirmowych.
9. partner_id
Typ: Many2one (res.partner). Klient lub partner biznesowy związany z projektem — ważne przy fakturowaniu i raportowaniu.
10. description
Typ: Html. Opis projektu — można formatować treść HTML, przydatne przy briefach i notatkach projektowych.
11. date_start
Typ: Date. Data rozpoczęcia projektu — wykorzystywana w planowaniu i raportach.
12. date
Typ: Date. Data zakończenia lub termin realizacji projektu — służy do monitoringu statusu.
13. task_ids
Typ: One2many (project.task). Lista zadań należących do projektu — główne powiązanie między projektem a zadaniami.
14. task_count
Typ: Integer. Liczba zadań — pole obliczane na podstawie task_ids; używane do wyświetlania i filtrowania.
15. type_ids
Typ: Many2many (project.task.type). Zestaw etapów/typów zadań dla projektu — definiuje ścieżkę pracy, np. Do zrobienia, W trakcie, Zakończone.
16. tag_ids
Typ: Many2many (project.tags). Tagowanie projektów do grupowania i szybkiego filtrowania.
17. privacy_visibility
Typ: Selection. Kontrola dostępu: tylko zaproszeni użytkownicy wewnętrzni (prywatny), wszyscy użytkownicy wewnętrzni, lub zaproszeni użytkownicy portalu i wszyscy wewnętrzni (publiczny).
18. collaborator_ids
Typ: One2many (project.collaborator). Członkowie zespołu przypisani do projektu — określają, kto może pracować nad zadaniami.
19. favorite_user_ids
Typ: Many2many (res.users). Użytkownicy oznaczający projekt jako ulubiony — przyśpiesza dostęp na pulpicie.
20. allow_task_dependencies
Typ: Boolean. Pozwala łączyć zadania zależnościami (poprzednik/następnik) — pomocne w planowaniu i kolejności prac.
21. allow_milestones
Typ: Boolean. Włącza możliwość tworzenia kamieni milowych w projekcie — oznaczają istotne etapy dostaw.
22. milestone_ids
Typ: One2many (project.milestone). Lista kamieni milowych projektu — służy do monitorowania kluczowych terminów.
23. rating_active
Typ: Boolean. Pozwala klientom oceniać projekt — źródło informacji zwrotnej.
24. task_properties_definition
Typ: Text (JSON). Definicja niestandardowych właściwości zadań w formacie JSON — pozwala dodawać dodatkowe pola specyficzne dla projektu.
25. access_url
Typ: Char. Link dostępu dla klientów przez portal — ułatwia współpracę zewnętrzną.
26. access_token
Typ: Char. Token bezpieczeństwa do dostępu przez portal — zabezpiecza widok projektu dla uprawnionych osób.
27. alias_id
Typ: Many2one (mail.alias). Alias e‑mailowy przypisany do projektu — przychodzące maile mogą automatycznie tworzyć zadania.
28. activity_ids
Typ: One2many (mail.activity). Zaplanowane aktywności związane z projektem — przypomnienia i follow‑upy.
29. activity_state
Typ: Selection. Podsumowanie stanu aktywności: Dzisiaj, Zaległe lub Zaplanowane — obliczane z aktywności projektu.
30. activity_date_deadline
Typ: Date. Data następnej zaplanowanej aktywności — przydatna do harmonogramowania pracy.
31. message_ids
Typ: One2many (mail.message). Wiadomości z chattera przypisane do projektu — centralne miejsce komunikacji wewnętrznej.
32. message_follower_ids
Typ: One2many (mail.followers). Obserwujący projekt — otrzymują powiadomienia o zmianach.
33. create_uid
Typ: Many2one (res.users). Użytkownik, który utworzył rekord — ustawiane automatycznie przez Odoo.
34. write_uid
Typ: Many2one (res.users). Użytkownik, który ostatnio zmodyfikował rekord — również automatyczne pole.
Jak model wykorzystuje się w procesach biznesowych
1. Tworzenie i zarządzanie projektami
Osoba odpowiedzialna (sprzedawca lub kierownik projektu) zakłada projekt, definiuje nazwę, kierownika, terminy i dostęp. Model project.project przechowuje te ustawienia, a następnie przypisuje do projektu zadania.
2. Przepływ zadań
Zadania przesuwają się między etapami określonymi w type_ids. Kierownik przydziela zadania współpracownikom, a projekt trzyma konfigurację workflow i strukturę zespołu.
3. Portal klienta
Jeśli ustawienie prywatności dopuszcza dostęp przez portal, klient może przeglądać zadania i kamienie milowe przez access_url. Token dostępu zabezpiecza link — użyteczne przy współpracy z klientami zewnętrznymi.
4. Timesheet i rozliczenia
Po zainstalowaniu Timesheet projekt łączy się z wpisami czasu pracy, a moduł Sprzedaż pozwala powiązać projekt z zamówieniami dla rozliczeń projektowych. Pole partner_id wiąże projekt z klientem.
5. Integracja e‑mailowa
Wiadomości przychodzące na alias projektu mogą automatycznie tworzyć zadania — alias_id łączy projekt z aliasem pocztowym i ułatwia rejestrację zadań z korespondencji.
Jak programiści rozszerzają ten model
Programiści rozbudowują project.project przy użyciu mechanizmów Odoo, przede wszystkim przez dziedziczenie modeli.
Dziedziczenie modelu
W module rozszerzającym użyj _inherit = 'project.project' aby dodać pola, nadpisać metody czy dodać ograniczenia. Dzięki temu modyfikacje pozostają w oddzielnym module, co ułatwia przyszłe aktualizacje i nie modyfikuje oryginalnego kodu.
Dodawanie pól
W rozszerzonym modelu deklarujesz nowe pola: Char, Many2one, Boolean, Integer, Text, Selection itd. W środowiskach wielofirmowych warto rozważyć pola zależne od company_id.
Rozszerzenia w Pythonie
Nadpisuj metody create, write czy unlink, aby dodać logikę biznesową — zawsze wywołuj super(), dbaj o poprawne zależności dla pól obliczanych i o wydajność operacji masowych.
Odoo Studio
Odoo Studio pozwala dodawać pola bez kodu — szybkie rozwiązanie dla prostych potrzeb. Dla złożonych reguł lub dłuższej perspektywy lepszym wyborem są niestandardowe moduły.
Najlepsze praktyki
- Przypisz user_id jako kierownika projektu — jasne przypisanie odpowiedzialności ułatwia zarządzanie i raportowanie.
- Skonfiguruj type_ids dla każdego projektu tak, aby etapy odpowiadały rzeczywistemu procesowi pracy w zespole.
- Używaj privacy_visibility z rozwagą — niewłaściwe ustawienie może poskutkować ujawnieniem wrażliwych informacji.
- Przy integracjach API korzystaj z XML‑RPC lub JSON‑RPC — model project.project jest dostępny przez API, ale pamiętaj o mapowaniu zewnętrznych identyfikatorów i uprawnień.
- Dla własnych pól stosuj prefixy x_ lub prefiks modułu, aby uniknąć konfliktów z przyszłymi wersjami Odoo.
Najczęstsze błędy
- Tworzenie zadań bez powiązania z projektem. Każde zadanie powinno mieć project_id — brak przypisania utrudnia organizację i raportowanie.
- Zaniedbanie ustawienia type_ids. Nowy projekt bez etapów uniemożliwi płynne przechodzenie zadań przez workflow.
- Ustawienie privacy_visibility na publiczne, gdy powinno być prywatne — ryzyko ujawnienia danych klientów lub wewnętrznych informacji.
- Nadpisywanie metod systemowych bez wywołania super() — może to złamać logikę innych modułów i utrudnić aktualizacje.
- Dodawanie wymagających pól niestandardowych bez wartości domyślnych — migracja istniejących rekordów może zakończyć się błędami walidacji.
Podsumowanie
Model project.project jest sercem zarządzania projektami w Odoo — przechowuje definicję projektu, etapy pracy i strukturę zespołu. Znajomość jego pól oraz sposobu rozbudowy przez moduły pozwala efektywnie konfigurować, dostosowywać i integrować Odoo.
Zarówno konsultant konfigurujący procesy, jak i programista tworzący rozszerzenia zyskują na sprawnym opanowaniu project.project — to oszczędza czas i zapobiega typowym błędom.
Potrzebujesz wsparcia przy wdrożeniu Odoo?
Dasolo pomaga firmom we wdrożeniach, customizacji i optymalizacji Odoo. Specjalizujemy się w integracjach API i rozwoju modułów, ze szczególnym naciskiem na właściwą architekturę danych i pracę z modelami takimi jak project.project.
Jeśli potrzebujesz wsparcia przy wdrożeniu Odoo, tworzeniu modułów czy integracjach — chętnie pomożemy. Umów demo aby porozmawiać o Twoim projekcie.