Skip to Content

Odoo 19: архівування компанії разом із користувачами порталу – модуль partner_archive_users із запитом замість повідомлення про помилку

3 листопада 2026 року | Odoo 19 Community | Власна розробка
3 листопада 2026 р. від
Odoo 19: архівування компанії разом із користувачами порталу – модуль partner_archive_users із запитом замість повідомлення про помилку

Модуль Odoo 19 partner_archive_users: запит під час архівування компанії з користувачами порталу

Компанія-клієнт пішла, договір завершено, і ви хочете архівувати її в Odoo. Odoo відповідає повідомленням про помилку: «Ви не можете архівувати контакти, пов’язані з активним користувачем. Спочатку архівуйте відповідного користувача.» Якщо в компанії кілька доступів до порталу, це означає: знайти кожного користувача окремо, архівувати окремо, повернутися до компанії, архівувати знову.

Для цього ми написали невеликий модуль Архівування компанії разом із користувачами порталу (partner_archive_users) для Odoo 19. Замість повідомлення про помилку з’являється запит, а після відповіді «Так» користувачі порталу та компанія архівуються за один крок. Модуль доступний на GitHub як вільне програмне забезпечення за ліцензією AGPL-3:

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

Ми використовуємо цей модуль у Biricon IT Services у нашій робочій системі з 3 листопада 2026 року. Він новий, тож досвід із ним короткий. Розділи про обсяг і обмеження слід прочитати кожному, хто його використовує.

Проблема у стандартному Odoo

Під час архівування контакту Odoo перевіряє, чи до нього прив’язаний користувач, і перериває дію, якщо так. Перевірка має сенс, адже кожному користувачеві потрібен контакт. Для внутрішніх користувачів, тобто співробітників, ця заборона також є бажаною. Проте для користувачів порталу клієнтів вона насамперед означає ручну роботу. Кожна компанія-клієнт із доступами до порталу, наприклад для перегляду рахунків і заявок, потребує під час архівування одного й того самого порядку дій:

  1. знайти користувачів компанії та її контактних осіб,
  2. архівувати кожного окремо,
  3. повернутися до компанії,
  4. архівувати компанію.

Рішення: запит

Модуль розширює шлях Дія → Архівувати в контакті, у формі та у списку. Якщо до обраної компанії або її контактних осіб прив’язані активні користувачі порталу, відкривається діалог із запитанням «Чи справді архівувати компанію? У системі ще є активні користувачі.» Нижче показано відповідних користувачів з іменем, логіном і контактом.

Порівняння: повідомлення Odoo про помилку під час архівування компанії та діалог із запитом модуля

  • Так, архівувати компанію та користувачів: спочатку архівуються користувачі, потім компанія.
  • Скасувати: нічого не змінюється.
  • Користувачів порталу немає: Odoo поводиться як раніше, діалог не з’являється.

Що архівується, а що ні

Обсяг навмисно вузький:

Огляд: користувачі порталу та компанія архівуються, контактні особи залишаються активними, внутрішніх користувачів ніколи не чіпають

  • Лише користувачі порталу та публічні користувачі (share = True). Внутрішніх користувачів цим шляхом ніколи не архівують. Якщо до контакту прив’язаний доступ співробітника, повідомлення Odoo про помилку зберігається. Так ніхто випадково не заблокує співробітника через архівування компанії.
  • Контактні особи залишаються активними як контакти. Архівуються лише їхні доступи до порталу. Це відповідає стандартному Odoo, який під час архівування компанії також не чіпає підконтакти.
  • Лише шлях архівування в інтерфейсі. Прямий write({'active': False}), наприклад в імпорті чи скрипті, проходить без змін через перевірку Odoo.

Технічна реалізація

Модуль не додає нових полів до наявних моделей. Він складається з розширення res.partner.action_archive і майстра (partner.archive.users.wizard), що з’являється як діалог.

СкладникПризначення
action_archive у контактіШукає активних користувачів із share = True, прив’язаних до контакту або (для компаній) до контактів компанії. Якщо такі є, замість архівування повертається діалог.
МайстерЗберігає компанію та знайдених користувачів, показує їх і після відповіді «Так» виконує архівування з ключем контексту archive_linked_users.
Контекст skip_archive_users_wizardВимикає діалог. Тоді знову діє перевірка Odoo.
ДоступМайстер можуть створювати й використовувати внутрішні користувачі (base.group_user).
ПерекладНімецький (de.po) і шаблон (.pot) додаються.

Користувачів шукають і архівують із підвищеними правами (sudo). Завдяки цьому діалог працює й для користувачів без доступу до керування користувачами. Зворотний бік описано в розділі обмеження.

Знахідка: тест був зеленим, а діалог усе одно зламаний

Під час першого застосування в модулі була помилка, якої автоматичні тести не виявили. Після першого натискання «Архівувати» в інтерфейсі замість діалогу з’явився екран помилки Odoo з Cannot read properties of undefined (reading 'map').

Причина: вебклієнт викликає action_archive напряму й виконує повернуту дію без подальшої обробки. При цьому він обов’язково читає ключ views дії. У нашої дії був лише view_mode. Дії з кнопок із type="object" сервер доповнює заздалегідь (clean_action у call_button), а прямий виклик action_archive — ні. Тести викликали метод лише на Python, і там відсутнє поле не впадало в око.

Виправлення — це один рядок ("views": [(False, "form")]), до якого додається перевірка в тесті, що вимагає саме цей ключ. При цьому нічого не архівувалося. Висновок: хто повертає дію з методу, який клієнт викликає напряму (action_archive, action_unarchive та подібні), завжди має додавати views.

Встановлення

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

Залежностями є base і contacts. Після встановлення службу Odoo потрібно перезапустити, оскільки модуль містить код Python. Хто експлуатує робочу систему, встановлює модуль спочатку на копії бази даних.

обмеження

  • Права доступу. Оскільки користувачів архівують із підвищеними правами, кожен, кому дозволено архівувати контакт, може через діалог також архівувати доступи до порталу цієї компанії. Для внутрішніх користувачів це не діє. Хто хоче тонше захистити доступи до порталу, має доопрацювати модуль.
  • Без автоматичного відновлення. Якщо компанію згодом знову активують, користувачі залишаються архівованими. Їх потрібно реактивувати вручну.
  • Лише контакти. Модуль стосується компаній як контактів (res.partner). Архівування компанії Odoo (res.company) має інші перевірки, наприклад якщо вона ще є компанією за замовчуванням для користувачів. Модуль для цього не призначений.
  • Протестовано лише на Odoo 19.0 Community. Для інших версій ми його не перевіряли.

Поширені запитання

Чому співробітників не архівують разом?

Внутрішній користувач має права в системі й зазвичай пов’язаний зі своїми даними, завданнями та дозволами. Блокувати його як побічний ефект архівування компанії для нас надто ризиковано. Тому залишається повідомлення Odoo про помилку.

Чи можна вимкнути запит?

У коді — через контекст skip_archive_users_wizard. Налаштування в інтерфейсі немає. Хто видаляє модуль, знову отримує стандартну поведінку Odoo.

Під якою ліцензією він поширюється?

Під ліцензією AGPL-3. Повідомлення про помилки та вдосконалення у вигляді issue в репозиторії GitHub вітаються.

Підтримка від Biricon IT Services

Ми обслуговуємо інсталяції Odoo для малого й середнього бізнесу: від впровадження через доопрацювання та міграції до поточної експлуатації. Якщо ви хочете спростити в Odoo такі процеси, як архівування компаній-клієнтів, налаштувати портал для своїх клієнтів або безпечно ввести модуль у ваш робочий екземпляр, ми охоче допоможемо. Інші наші власні розробки: Номери документів із префікса, року та лічильника, Firmenbuch і перевірка адрес для австрійських клієнтів і Набори продуктів у пропозиції як розділ.

Зв’язатися з нами

Станом на 3 листопада 2026 року. Версія модуля 19.0.1.0.0 з виправленням того самого дня. Усі імена та логіни на ілюстраціях обрано довільно.