Przejdź do zawartości

Odoo 19: archiwizacja firmy wraz z użytkownikami portalu – moduł partner_archive_users z pytaniem zamiast komunikatu o błędzie

3 listopada 2026 | Odoo 19 Community | Własne oprogramowanie
3 listopada 2026 przez
Odoo 19: archiwizacja firmy wraz z użytkownikami portalu – moduł partner_archive_users z pytaniem zamiast komunikatu o błędzie

Moduł Odoo 19 partner_archive_users: pytanie przy archiwizacji firmy z użytkownikami portalu

Firma klienta odeszła, umowa została zakończona, a Państwo chcą ją zarchiwizować w Odoo. Odoo odpowiada komunikatem o błędzie: „Nie można archiwizować kontaktów powiązanych z aktywnym użytkownikiem. Najpierw zarchiwizuj powiązanego użytkownika.” Jeśli firma ma kilka dostępów do portalu, oznacza to: znaleźć każdego użytkownika osobno, zarchiwizować osobno, wrócić do firmy, ponownie zarchiwizować.

Napisaliśmy w tym celu niewielki moduł Archiwizacja firmy wraz z użytkownikami portalu (partner_archive_users) dla Odoo 19. Zamiast komunikatu o błędzie pojawia się pytanie, a po odpowiedzi „Tak” użytkownicy portalu i firma są archiwizowani w jednym kroku. Moduł jest dostępny jako wolne oprogramowanie na licencji AGPL-3 na GitHubie:

github.com/Alex0176/odoo-partner-archive-users

Używamy tego modułu w Biricon IT Services w naszym systemie produkcyjnym od 3 listopada 2026 r. Jest nowy, doświadczenie z nim jest więc krótkie. Kto go przejmuje, powinien przeczytać sekcje o zakresie i ograniczeniach .

Problem w standardowym Odoo

Przy archiwizacji kontaktu Odoo sprawdza, czy jest z nim powiązany użytkownik, i przerywa, jeśli tak. Sprawdzenie ma sens, ponieważ każdy użytkownik potrzebuje kontaktu. Dla użytkowników wewnętrznych, czyli pracowników, blokada jest także zamierzona. Przy użytkownikach portalu klientów jest to jednak przede wszystkim praca ręczna. Każda firma klienta z dostępem do portalu, na przykład do przeglądania faktur i zgłoszeń, wymaga przy archiwizacji tego samego postępowania:

  1. znaleźć użytkowników firmy i jej osób kontaktowych,
  2. zarchiwizować każdego z osobna,
  3. wrócić do firmy,
  4. zarchiwizować firmę.

Rozwiązanie: pytanie

Moduł rozszerza ścieżkę Akcja → Archiwizuj przy kontakcie, zarówno w formularzu, jak i na liście. Jeśli z wybraną firmą lub jej osobami kontaktowymi powiązani są aktywni użytkownicy portalu, otwiera się okno z pytaniem „Czy na pewno zarchiwizować firmę? W systemie są jeszcze aktywni użytkownicy.” Poniżej widnieją dotknięci użytkownicy z nazwą, loginem i kontaktem.

Porównanie: komunikat o błędzie Odoo przy archiwizacji firmy i okno z pytaniem w module

  • Tak, zarchiwizuj firmę i użytkowników: Najpierw archiwizowani są użytkownicy, potem firma.
  • Anuluj: Nic się nie zmienia.
  • Brak użytkowników portalu: Odoo zachowuje się jak dotychczas, okno się nie pojawia.

Co jest archiwizowane, a co nie

Zakres jest celowo wąski:

Przegląd: użytkownicy portalu i firma są archiwizowani, osoby kontaktowe pozostają aktywne, użytkownicy wewnętrzni nigdy nie są ruszani

  • Tylko użytkownicy portalu i publiczni (share = True). Użytkownicy wewnętrzni nigdy nie są tą drogą archiwizowani. Jeśli z kontaktem powiązany jest dostęp pracownika, komunikat o błędzie Odoo pozostaje. Dzięki temu nikt przypadkowo nie zablokuje pracownika tylko dlatego, że zarchiwizował firmę.
  • Osoby kontaktowe pozostają aktywne jako kontakty. Archiwizowane są tylko ich dostępy do portalu. Odpowiada to standardowi Odoo, które przy archiwizacji firmy również nie rusza kontaktów podrzędnych.
  • Tylko ścieżka archiwizacji w interfejsie. Bezpośrednie write({'active': False}), na przykład w imporcie lub skrypcie, przechodzi bez zmian przez kontrolę Odoo.

Realizacja techniczna

Moduł nie ma nowych pól w istniejących modelach. Składa się z rozszerzenia res.partner.action_archive i kreatora (partner.archive.users.wizard), który pojawia się jako okno dialogowe.

ElementZadanie
action_archive przy kontakcieWyszukuje aktywnych użytkowników z share = True, powiązanych z kontaktem lub (w przypadku firm) z kontaktami firmy. Jeśli istnieją, zamiast archiwizować, zwraca okno dialogowe.
KreatorZapisuje firmę i znalezionych użytkowników, wyświetla ich i po odpowiedzi „Tak” wykonuje archiwizację z kluczem kontekstu archive_linked_users.
Kontekst skip_archive_users_wizardWyłącza okno dialogowe. Wtedy znów obowiązuje kontrola Odoo.
DostępKreator mogą tworzyć i używać użytkownicy wewnętrzni (base.group_user).
TłumaczenieDołączone są niemieckie tłumaczenie (de.po) i szablon (.pot).

Użytkownicy są wyszukiwani i archiwizowani z podwyższonymi uprawnieniami (sudo). Dzięki temu okno działa także dla użytkowników bez dostępu do zarządzania użytkownikami. Odwrotną stronę opisano w sekcji ograniczeniach.

Odkrycie: test był zielony, a okno dialogowe mimo to nie działało

Moduł miał przy pierwszym użyciu błąd, którego nie znalazły testy automatyczne. Przy pierwszym kliknięciu „Archiwizuj” w interfejsie zamiast okna pojawił się ekran błędu Odoo z komunikatem Cannot read properties of undefined (reading 'map').

Przyczyna: klient webowy wywołuje action_archive bezpośrednio i wykonuje zwróconą akcję bez dalszego przygotowania. Przy tym obowiązkowo odczytuje klucz views akcji. Nasza akcja miała tylko view_mode. Akcje z przycisków z type="object" serwer uzupełnia wcześniej (clean_action w call_button), natomiast bezpośredniego wywołania action_archive nie. Testy wywoływały metodę tylko w Pythonie i tam brakujące pole nie rzucało się w oczy.

Poprawka to jedna linijka ("views": [(False, "form")]), do tego dochodzi sprawdzenie w teście, które wymaga dokładnie tego klucza. Przy tym nic nie zostało zarchiwizowane. Wniosek: kto zwraca akcję z metody wywoływanej przez klienta bezpośrednio (action_archive, action_unarchive i podobne), powinien zawsze dołączać views.

Instalacja

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

Zależnościami są base i contacts. Po zainstalowaniu usługę Odoo trzeba uruchomić ponownie, ponieważ moduł zawiera kod Python. Kto prowadzi system produkcyjny, instaluje moduł najpierw na kopii bazy danych.

ograniczeniach

  • Uprawnienia. Ponieważ użytkownicy są archiwizowani z podwyższonymi uprawnieniami, każdy, kto może archiwizować kontakt, może przez okno dialogowe archiwizować także dostępy do portalu tej firmy. Użytkowników wewnętrznych to nie dotyczy. Kto chce dokładniej zabezpieczyć dostępy do portalu, musi dostosować moduł.
  • Brak automatycznego przywracania. Jeśli firma zostanie później ponownie aktywowana, użytkownicy pozostają zarchiwizowani. Trzeba ich reaktywować ręcznie.
  • Tylko kontakty. Moduł dotyczy firm jako kontaktów (res.partner). Archiwizacja firmy Odoo (res.company) podlega innym kontrolom, na przykład gdy jest nadal firmą domyślną użytkowników. Moduł nie jest do tego przeznaczony.
  • Przetestowane tylko z Odoo 19.0 Community. Dla innych wersji go nie sprawdzaliśmy.

Najczęstsze pytania

Dlaczego pracownicy nie są archiwizowani razem?

Użytkownik wewnętrzny ma uprawnienia w systemie i zwykle jest powiązany z własnymi danymi, zadaniami i uprawnieniami. Blokowanie go jako efektu ubocznego archiwizacji firmy jest dla nas zbyt ryzykowne. Dlatego pozostaje komunikat o błędzie Odoo.

Czy mogę wyłączyć pytanie?

W kodzie przez kontekst skip_archive_users_wizard. Ustawienia w interfejsie nie ma. Kto odinstaluje moduł, otrzymuje z powrotem standardowe zachowanie Odoo.

Na jakiej licencji jest udostępniony?

Na licencji AGPL-3. Błędy i ulepszenia są mile widziane jako issue w repozytorium GitHub .

Wsparcie ze strony Biricon IT Services

Opiekujemy się instalacjami Odoo dla małych i średnich firm: od wdrożenia, przez dostosowania i migracje, aż po bieżącą eksploatację. Jeśli chcą Państwo uprościć w Odoo procesy takie jak archiwizacja firm klientów, skonfigurować portal dla swoich klientów lub bezpiecznie wdrożyć moduł na instancji produkcyjnej, chętnie pomożemy. Kolejne własne rozwiązania: Numery dokumentów z prefiksu, roku i licznika, Firmenbuch i weryfikacja adresów dla austriackich klientów i Zestawy produktów w ofercie jako sekcja.

Skontaktuj się z nami

Stan na 3 listopada 2026 r. Wersja modułu 19.0.1.0.0 z poprawką z tego samego dnia. Wszystkie nazwy i loginy na ilustracjach zostały dobrane dowolnie.