Skip to Content

Odoo 19: архіваванне кампаніі разам з карыстальнікамі партала — модуль partner_archive_users з запытам пацвярджэння замест паведамлення пра памылку

3 лістапада 2026 | Odoo 19 Community | Уласная распрацоўка
3 лістапада 2026 г. by
Odoo 19: архіваванне кампаніі разам з карыстальнікамі партала — модуль partner_archive_users з запытам пацвярджэння замест паведамлення пра памылку

Модуль partner_archive_users для Odoo 19: запыт пацвярджэння пры архіваванні кампаніі з карыстальнікамі партала

Кампанія-кліент сышла, дагавор скончыўся, і вы хочаце заархіваваць яе ў 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. Паведамленні пра памылкі і прапановы паляпшэнняў у выглядзе зваротаў у рэпазіторыі GitHub — будзем рады.

Падтрымка ад Biricon IT Services

Мы суправаджаем сістэмы Odoo для малых і сярэдніх прадпрыемстваў: ад укаранення, дапрацовак і міграцый да штодзённай эксплуатацыі. Калі вы хочаце спрасціць такія працэсы, як архіваванне кампаній-кліентаў у Odoo, наладзіць партал для кліентаў або бяспечна ўсталяваць модуль у рабочай сістэме, мы ахвотна дапаможам. Іншыя ўласныя распрацоўкі: Нумары дакументаў з прэфікса, года і лічыльніка, Рэестр кампаній і праверка адрасоў для аўстрыйскіх кліентаў і Наборы тавараў як раздзел камерцыйнай прапановы.

Звязацца з намі

Стан на 3 лістапада 2026. Версія модуля 19.0.1.0.0 з выпраўленнем ад таго ж дня. Усе імёны і лагіны на ілюстрацыях выдуманыя.