Kliento įmonė išsikėlė, sutartis baigėsi, ir norite ją suarchyvuoti Odoo. Odoo atsako klaidos pranešimu: „Negalite archyvuoti kontaktų, susietų su aktyviu naudotoju. Pirmiausia suarchyvuokite susijusį naudotoją.“ Jei įmonė turi kelias portalo prieigas, tai reiškia: kiekvieną naudotoją ieškoti atskirai, archyvuoti atskirai, grįžti prie įmonės, archyvuoti dar kartą.
Todėl parašėme mažą modulį Įmonės archyvavimas kartu su portalo naudotojais (partner_archive_users), skirtą Odoo 19. Vietoj klaidos pranešimo pateikiamas klausimas, o atsakius „Taip“ portalo naudotojai ir įmonė suarchyvuojami vienu žingsniu. Modulis kaip laisvoji programinė įranga pagal AGPL-3 licenciją prieinamas GitHub:
github.com/Alex0176/odoo-partner-archive-users
Šį modulį Biricon IT Services naudoja savo produkcinėje sistemoje nuo 2026 m. lapkričio 3 d. Jis naujas, taigi patirtis su juo trumpa. Kas jį perima, turėtų perskaityti skyrius apie Apimtį ir apribojimus .
Problema standartinėje Odoo
Archyvuodama kontaktą, Odoo patikrina, ar su juo susietas naudotojas, ir nutraukia, jei taip. Patikra turi prasmę, nes kiekvienam naudotojui reikia kontakto. Vidiniams naudotojams, t. y. darbuotojams, užraktas taip pat pageidaujamas. Tačiau klientų portalo naudotojams tai pirmiausia yra rankų darbas. Kiekvienai kliento įmonei su portalo prieigomis, pavyzdžiui, sąskaitoms ir bilietams (tickets) peržiūrėti, archyvuojant reikia tos pačios eigos:
- Surasti įmonės ir jos kontaktinių asmenų naudotojus,
- kiekvieną archyvuoti atskirai,
- grįžti prie įmonės,
- Archyvuoti įmonę.
Sprendimas: klausimas
Modulis išplečia kelią Veiksmas → Archyvuoti kontakte, tiek formoje, tiek sąraše. Jei prie pasirinktos įmonės ar jos kontaktinių asmenų prijungti aktyvūs portalo naudotojai, atsidaro dialogas su klausimu „Ar tikrai norite suarchyvuoti įmonę? Sistemoje dar yra aktyvių naudotojų.“ Žemiau pateikiami paveikti naudotojai su vardu, prisijungimo vardu ir kontaktu.
- Taip, archyvuoti įmonę ir naudotojus: pirmiausia archyvuojami naudotojai, po to įmonė.
- Atšaukti: nieko nepasikeičia.
- Portalo naudotojų nėra: Odoo elgiasi kaip anksčiau, dialogas nerodomas.
Kas archyvuojama ir kas ne
Apimtis sąmoningai siaura:
- Tik portalo ir viešieji naudotojai (
share = True). Vidiniai naudotojai šiuo keliu niekada nearchyvuojami. Jei prie kontakto prijungta darbuotojo prieiga, Odoo klaidos pranešimas išlieka. Taip niekas netyčia neužblokuoja darbuotojo, nes suarchyvavo įmonę. - Kontaktiniai asmenys lieka aktyviais kontaktais. Archyvuojamos tik jų portalo prieigos. Tai atitinka standartinę Odoo, kuri archyvuodama įmonę antrinių kontaktų taip pat neliečia.
- Tik sąsajos archyvavimo kelias. Tiesioginis
write({'active': False}), pavyzdžiui, importe ar scenarijuje, vykdomas nepakitęs ir patenka į Odoo patikrą.
Techninis įgyvendinimas
Modulis neturi naujų laukų esamuose modeliuose. Jį sudaro res.partner.action_archive išplėtimas ir vedlys (partner.archive.users.wizard), rodomas kaip dialogas.
| Sudedamoji dalis | Paskirtis |
|---|---|
action_archive kontakte | Ieško aktyvių naudotojų su share = True, prijungtų prie kontakto arba (įmonių atveju) prie įmonės kontaktų. Jei tokių yra, vietoj archyvavimo grąžinamas dialogas. |
| Vedlys | Išsaugo įmonę ir rastus naudotojus, juos parodo ir atsakius „Taip“ vykdo archyvavimą su konteksto raktu archive_linked_users. |
Kontekstas skip_archive_users_wizard | Išjungia dialogą. Tuomet vėl galioja Odoo patikra. |
| Prieiga | Vedlį gali kurti ir naudoti vidiniai naudotojai (base.group_user). |
| Vertimas | Pridėtas vertimas į vokiečių kalbą (de.po) ir šablonas (.pot). |
Naudotojai ieškomi ir archyvuojami su išplėstomis teisėmis (sudo). Todėl dialogas veikia ir naudotojams be prieigos prie naudotojų valdymo. Kita medalio pusė aprašyta skyriuje apribojimus.
Radinys: testas buvo žalias, bet dialogas vis tiek sugedęs
Pirmojo naudojimo metu modulyje buvo klaida, kurios automatiniai testai nerado. Pirmą kartą sąsajoje spustelėjus „Archyvuoti“, vietoj dialogo pasirodė Odoo klaidos ekranas su Cannot read properties of undefined (reading 'map').
Priežastis: žiniatinklio klientas action_archive kviečia tiesiogiai ir grąžintą veiksmą vykdo be papildomo apdorojimo. Tuo metu jis privalomai skaito veiksmo raktą views. Mūsų veiksmas turėjo tik view_mode. Veiksmus iš mygtukų su type="object" serveris prieš tai papildo (clean_action call_button metode), o tiesioginio action_archive iškvietimo – ne. Testai metodą kvietė tik Python kalba, ir ten trūkstamas laukas nebuvo pastebėtas.
Pataisymas yra viena eilutė ("views": [(False, "form")]), be to, teste pridėta patikra, reikalaujanti būtent šio rakto. Tuo metu niekas nebuvo suarchyvuota. Pamoka: kas veiksmą grąžina iš metodo, kurį klientas kviečia tiesiogiai (action_archive, action_unarchive ir panašūs), visada turėtų pridėti views.
Diegimas
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
Priklausomybės yra base ir contacts. Po įdiegimo Odoo tarnybą reikia paleisti iš naujo, nes modulyje yra Python kodo. Kas valdo produkcinę sistemą, modulį pirmiausia įdiegia duomenų bazės kopijoje.
apribojimus
- Teisės. Kadangi naudotojai archyvuojami su išplėstomis teisėmis, kiekvienas, kuriam leidžiama archyvuoti kontaktą, per dialogą gali suarchyvuoti ir šios įmonės portalo prieigas. Vidiniams naudotojams tai netaikoma. Kas nori smulkiau apsaugoti portalo prieigas, turi modulį pritaikyti.
- Jokio automatinio atkūrimo. Jei įmonė vėliau vėl aktyvuojama, naudotojai lieka suarchyvuoti. Juos reikia rankiniu būdu vėl aktyvuoti.
- Tik kontaktai. Modulis liečia įmones kaip kontaktus (
res.partner). Odoo įmonės (res.company) archyvavimas turi kitas patikras, pavyzdžiui, jei ji dar yra naudotojų numatytoji įmonė. Modulis tam neskirtas. - Išbandyta tik su Odoo 19.0 Community. Kitų versijų netikrinome.
Dažniausiai užduodami klausimai
Kodėl darbuotojai nearchyvuojami kartu?
Vidinis naudotojas turi sistemoje teises ir dažniausiai yra susietas su savo duomenimis, užduotimis ir leidimais. Jį užblokuoti kaip šalutinį įmonės archyvavimo poveikį mums per rizikinga. Todėl lieka Odoo klaidos pranešimas.
Ar galiu išjungti klausimą?
Kode per kontekstą skip_archive_users_wizard. Nustatymo sąsajoje nėra. Pašalinus modulį, vėl gaunamas standartinis Odoo elgesys.
Pagal kokią licenciją platinamas?
Pagal AGPL-3. Apie klaidas ir patobulinimus laukiame pranešimų užduočių (issue) pavidalu GitHub saugykloje .
Biricon IT Services palaikymas
Prižiūrime Odoo diegimus mažoms ir vidutinėms įmonėms: nuo įdiegimo, pritaikymų ir migracijų iki nuolatinio veikimo. Jei norite supaprastinti procesus, tokius kaip klientų įmonių archyvavimas Odoo, įrengti portalą savo klientams arba saugiai perkelti modulį į savo produkcinę sistemą, mielai padėsime. Kiti nuosavi kūriniai: Dokumentų numeriai iš prefikso, metų ir skaitiklio, Įmonių registras ir adresų patikra Austrijos klientams ir Produktų rinkiniai pasiūlyme kaip skyrius.
Būklė: 2026 m. lapkričio 3 d. Modulio versija 19.0.1.0.0 su tos pačios dienos pataisymu. Visi vardai ir prisijungimo vardai paveiksluose parinkti laisvai.