Skip to Content

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, да поставите портал за вашите клиенти или безбедно да внесете модул во вашата производствена инстанца, со задоволство ќе помогнеме. Други сопствени развивања: Броеви на документи од префикс, година и бројач, Firmenbuch и проверка на адреси за австриски клиенти и Сетови производи во понудата како дел.

Контактирајте не сега

Состојба: 3 ноември 2026 година. Верзија на модулот 19.0.1.0.0 со поправката од истиот ден. Сите имиња и кориснички имиња на сликите се слободно избрани.