Kliendifirma on lahkunud, leping lõppenud ja soovite ta Odoos arhiveerida. Odoo vastab tõrketeatega: „Te ei saa arhiveerida kontakte, mis on seotud aktiivse kasutajaga. Arhiveerige esmalt vastav kasutaja.“ Kui firmal on mitu portaalipääsu, tähendab see: iga kasutaja eraldi üles leida, eraldi arhiveerida, tagasi firma juurde, uuesti arhiveerida.
Selleks kirjutasime väikese mooduli Firma arhiveerimine koos portaalikasutajatega (partner_archive_users) Odoo 19 jaoks. Tõrketeate asemel tuleb küsimus ja vastuse „Jah“ korral arhiveeritakse portaalikasutajad ja firma ühe sammuga. Moodul on vaba tarkvarana AGPL-3 litsentsi all GitHubis:
github.com/Alex0176/odoo-partner-archive-users
Kasutame moodulit Biricon IT Services'is oma tootmissüsteemis alates 3. novembrist 2026. See on uus, kogemus sellega on seega lühike. Kes selle üle võtab, peaks lugema jaotisi Ulatus ja Piirangud .
Probleem Odoo standardis
Odoo kontrollib kontakti arhiveerimisel, kas sellega on seotud kasutaja, ja katkestab, kui on. Kontroll on mõistlik, sest iga kasutaja vajab kontakti. Sisemiste kasutajate ehk töötajate puhul on lukk ka tahtlik. Klientide portaalikasutajate puhul on see aga eelkõige käsitöö. Iga kliendifirma, millel on portaalipääsud, näiteks arvete ja piletite vaatamiseks, vajab arhiveerimisel sama protsessi:
- Otsige firma ja tema kontaktisikute kasutajad,
- arhiveerige igaüks eraldi,
- tagasi firma juurde,
- arhiveerige firma.
Lahendus: küsimus
Moodul laiendab kontakti teed Toiming → Arhiveeri, nii vormis kui loendis. Kui valitud firmaga või tema kontaktisikutega on seotud aktiivsed portaalikasutajad, avaneb dialoog küsimusega „Kas firma tõesti arhiveerida? Süsteemis on veel aktiivseid kasutajaid.“ Selle all on mõjutatud kasutajad koos nime, sisselogimisnime ja kontaktiga.
- Jah, arhiveeri firma ja kasutajad: Esmalt arhiveeritakse kasutajad, seejärel firma.
- Katkesta: Midagi ei muutu.
- Portaalikasutajaid pole: Odoo käitub nagu varem, dialoogi ei ilmu.
Mis arhiveeritakse ja mis mitte
Ulatus on teadlikult kitsas:
- Ainult portaali- ja avalikud kasutajad (
share = True). Sisemisi kasutajaid selle tee kaudu kunagi ei arhiveerita. Kui kontaktiga on seotud töötaja pääs, jääb Odoo tõrketeade kehtima. Nii ei lukusta keegi kogemata töötajat, sest arhiveeris firma. - Kontaktisikud jäävad kontaktidena aktiivseks. Arhiveeritakse ainult nende portaalipääsud. See vastab Odoo standardile, mis firma arhiveerimisel alamkontakte samuti ei puuduta.
- Ainult kasutajaliidese arhiveerimistee. Otsene
write({'active': False}), näiteks impordis või skriptis, läheb muutumatult Odoo kontrolli.
Tehniline teostus
Moodulil pole olemasolevates mudelites uusi välju. See koosneb meetodi res.partner.action_archive laiendusest ja viisardist (partner.archive.users.wizard), mis ilmub dialoogina.
| Ehituskivi | Ülesanne |
|---|---|
action_archive kontaktil | Otsib aktiivseid kasutajaid väärtusega share = True, kes on seotud kontaktiga või (firmade puhul) firma kontaktidega. Kui neid on, tagastatakse arhiveerimise asemel dialoog. |
| Viisard | Salvestab firma ja leitud kasutajad, näitab neid ning teostab vastuse „Jah“ korral arhiveerimise kontekstivõtmega archive_linked_users. |
Kontekst skip_archive_users_wizard | Lülitab dialoogi välja. Siis kehtib taas Odoo kontroll. |
| Juurdepääs | Viisardit tohivad luua ja kasutada sisemised kasutajad (base.group_user). |
| Tõlge | Saksa keel (de.po) ja mall (.pot) on kaasas. |
Kasutajaid otsitakse ja arhiveeritakse laiendatud õigustega (sudo). Tänu sellele toimib dialoog ka kasutajatele, kellel puudub juurdepääs kasutajate haldusele. Selle teine külg on kirjas jaotises Piirangud.
Leid: test oli roheline, dialoog siiski rikkis
Moodulil oli esimesel kasutusel viga, mida automaattestid ei leidnud. Esimesel klõpsul nupule „Arhiveeri“ kasutajaliideses ilmus dialoogi asemel Odoo veaekraan teatega Cannot read properties of undefined (reading 'map').
Põhjus: veebiklient kutsub action_archive otse välja ja täidab tagastatud toimingu ilma täiendava ettevalmistuseta. Seejuures loeb ta kohustuslikult toimingu võtit views. Meie toimingul oli ainult view_mode. Nuppudest, mille type="object", pärinevad toimingud täiendab server enne ise (clean_action meetodis call_button), action_archive otsekutset aga mitte. Testid kutsusid meetodit välja ainult Pythonis ja seal puuduvat välja ei märgatud.
Parandus on üks rida ("views": [(False, "form")]), lisaks test, mis nõuab täpselt seda võtit. Seejuures ei arhiveeritud midagi. Õppetund: kes tagastab toimingu meetodist, mida klient otse välja kutsub (action_archive, action_unarchive ja sarnased), peaks views alati kaasa andma.
Paigaldus
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
Sõltuvused on base ja contacts. Pärast paigaldamist tuleb Odoo teenus taaskäivitada, sest moodul sisaldab Pythoni koodi. Kes haldab tootmissüsteemi, paigaldab mooduli esmalt andmebaasi koopiale.
Piirangud
- Õigus. Kuna kasutajaid arhiveeritakse laiendatud õigustega, saab igaüks, kellel on lubatud kontakti arhiveerida, dialoogi kaudu arhiveerida ka selle firma portaalipääsud. Sisemiste kasutajate puhul see ei kehti. Kes soovib portaalipääse täpsemalt kaitsta, peab moodulit kohandama.
- Automaatset taastamist pole. Kui firma hiljem uuesti aktiveeritakse, jäävad kasutajad arhiveerituks. Need tuleb käsitsi uuesti aktiveerida.
- Ainult kontaktid. Moodul puudutab firmasid kontaktidena (
res.partner). Odoo firma (res.company) arhiveerimisel on teised kontrollid, näiteks kui see on veel kasutajate vaikefirma. Selleks pole moodul mõeldud. - Testitud ainult Odoo 19.0 Community'ga. Teiste versioonide puhul me seda kontrollinud ei ole.
Korduma kippuvad küsimused
Miks töötajaid kaasa ei arhiveerita?
Sisemisel kasutajal on süsteemis õigused ja ta on tavaliselt seotud oma andmete, ülesannete ja õigustega. Teda firma arhiveerimise kõrvalmõjuna lukustada on meie jaoks liiga riskantne. Selle asemel jääb Odoo tõrketeade kehtima.
Kas saan küsimuse välja lülitada?
Koodis konteksti skip_archive_users_wizard kaudu. Seadet kasutajaliideses pole. Kes mooduli desinstallib, saab tagasi Odoo standardkäitumise.
Mis litsentsi all see on?
AGPL-3 all. Vead ja parendused on teretulnud issue'na GitHubi hoidlas .
Biricon IT Services'i tugi
Hooldame Odoo paigaldusi väikestele ja keskmise suurusega ettevõtetele: kasutuselevõtust ja kohandustest migratsioonide ja jooksva käitamiseni. Kui soovite lihtsustada töövooge nagu kliendifirmade arhiveerimine Odoos, seadistada oma klientidele portaali või tuua moodulit turvaliselt oma tootmisinstantsi, aitame hea meelega. Muud omaarendused: Dokumendinumbrid prefiksist, aastast ja loendurist, Firmenbuch ja aadressikontroll Austria klientide jaoks ja Tootekomplektid pakkumises jaotisena.
Seisuga: 3. november 2026. Mooduli versioon 19.0.1.0.0 samal päeval tehtud paranduse järel. Kõik illustratsioonide nimed ja sisselogimisnimed on vabalt valitud.