Преминете към съдържание

Odoo 19: архивиране на фирма заедно с потребителите на портала – модулът partner_archive_users с въпрос за потвърждение вместо съобщение за грешка

3 ноември 2026 г. | Odoo 19 Community | Собствена разработка
3 ноември 2026 г. от
Odoo 19: архивиране на фирма заедно с потребителите на портала – модулът partner_archive_users с въпрос за потвърждение вместо съобщение за грешка

Модул partner_archive_users за Odoo 19: въпрос за потвърждение при архивиране на фирма с потребители на портала

Една клиентска фирма е напуснала, договорът е прекратен и искате да я архивирате в Odoo. Odoo отговаря със съобщение за грешка: „Не можете да архивирате контакти, свързани с активен потребител. Първо архивирайте съответния потребител.“ Ако фирмата има няколко достъпа до портала, това означава: всеки потребител се търси поотделно, архивира се поотделно, връщане към фирмата, архивиране отново.

За тази цел написахме малкия модул Архивиране на фирма заедно с потребителите на портала (partner_archive_users) за Odoo 19. Вместо съобщението за грешка идва въпрос за потвърждение, а при „Да“ потребителите на портала и фирмата се архивират с една стъпка. Модулът е свободен софтуер под лиценза AGPL-3 в GitHub:

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, да изградите портал за вашите клиенти или да въведете безопасно модул във вашата продуктивна инстанция, с удоволствие ще помогнем. Още собствени разработки: Номера на документи от префикс, година и брояч, Търговски регистър и проверка на адреси за австрийски клиенти и Продуктови комплекти в офертата като раздел.

Свържете се с нас

Към: 3 ноември 2026 г. Версия на модула 19.0.1.0.0 с поправката от същия ден. Всички имена и потребителски имена в изображенията са произволно избрани.