Tvrtka klijent se odselila, ugovor je završen, a vi je želite arhivirati u Odoou. Odoo odgovara porukom o grešci: „Ne možete arhivirati kontakte koji su povezani s aktivnim korisnikom. Najprije arhivirajte pripadajućeg korisnika.“ Ako tvrtka ima više portalnih pristupa, to znači: svakog korisnika pojedinačno pronaći, pojedinačno arhivirati, natrag na tvrtku, ponovno arhivirati.
Zato smo napisali mali modul Arhiviranje tvrtke zajedno s portalnim korisnicima (partner_archive_users) za Odoo 19. Umjesto poruke o grešci pojavljuje se upit, a uz „Da“ se portalni korisnici i tvrtka arhiviraju u jednom koraku. Modul je dostupan kao slobodan softver pod licencijom AGPL-3 na GitHubu:
github.com/Alex0176/odoo-partner-archive-users
Modul u Biricon IT Services koristimo u svom produkcijskom sustavu od 3. studenoga 2026. Nov je, pa je iskustvo s njim kratko. Tko ga preuzme, trebao bi pročitati odjeljke o opsegu i Ograničenja .
Problem u standardnom Odoou
Odoo pri arhiviranju kontakta provjerava je li na njega vezan korisnik i prekida ako jest. Provjera ima smisla jer svaki korisnik treba kontakt. Za interne korisnike, dakle zaposlenike, blokada je i željena. Kod portalnih korisnika klijenata ona je pak ponajprije ručni posao. Svaka tvrtka klijent s portalnim pristupima, na primjer za uvid u račune i tikete, pri arhiviranju traži isti postupak:
- pronaći korisnike tvrtke i njezinih kontakt osoba,
- svakog pojedinačno arhivirati,
- natrag na tvrtku,
- arhivirati tvrtku.
Rješenje: upit
Modul proširuje put Radnja → Arhiviraj na kontaktu, u obrascu kao i na popisu. Ako na odabranu tvrtku ili njezine kontakt osobe vezani aktivni portalni korisnici, otvara se dijalog s pitanjem „Treba li tvrtku doista arhivirati? U sustavu su još aktivni korisnici.“ Ispod su navedeni pogođeni korisnici s imenom, korisničkim imenom i kontaktom.
- Da, arhiviraj tvrtku i korisnike: najprije se arhiviraju korisnici, zatim tvrtka.
- Odustani: ništa se ne mijenja.
- Nema portalnih korisnika: Odoo se ponaša kao dosad, dijalog se ne pojavljuje.
Što se arhivira, a što ne
Opseg je namjerno uzak:
- Samo portalni i javni korisnici (
share = True). Interni korisnici se tim putem nikada ne arhiviraju. Ako je na kontakt vezan pristup zaposlenika, poruka o grešci Odooa ostaje. Tako nitko slučajno ne blokira zaposlenika zato što je arhivirao tvrtku. - Kontakt osobe ostaju aktivne kao kontakti. Arhiviraju se samo njihovi portalni pristupi. To odgovara standardu Odooa, koji pri arhiviranju tvrtke također ne dira podkontakte.
- Samo put arhiviranja u sučelju. Izravni
write({'active': False}), na primjer u uvozu ili skripti, ulazi nepromijenjen u provjeru Odooa.
Tehnička izvedba
Modul nema novih polja na postojećim modelima. Sastoji se od proširenja res.partner.action_archive i čarobnjaka (partner.archive.users.wizard) koji se pojavljuje kao dijalog.
| Element | Zadatak |
|---|---|
action_archive na kontaktu | Traži aktivne korisnike s share = True koji su vezani na kontakt ili (kod tvrtki) na kontakte tvrtke. Ako ih ima, umjesto arhiviranja vraća se dijalog. |
| Čarobnjak | Sprema tvrtku i pronađene korisnike, prikazuje ih i uz „Da“ izvodi arhiviranje s ključem konteksta archive_linked_users. |
Kontekst skip_archive_users_wizard | Isključuje dijalog. Tada ponovno vrijedi provjera Odooa. |
| Pristup | Čarobnjak smiju izrađivati i koristiti interni korisnici (base.group_user). |
| Prijevod | Njemački (de.po) i predložak (.pot) su priloženi. |
Korisnici se traže i arhiviraju s povišenim pravima (sudo). Tako dijalog radi i za korisnike bez pristupa upravljanju korisnicima. Druga strana medalje navedena je pod Ograničenja.
Nalaz: test je bio zelen, a dijalog ipak pokvaren
Modul je pri prvoj uporabi imao grešku koju automatski testovi nisu pronašli. Pri prvom kliku na „Arhiviraj“ u sučelju umjesto dijaloga pojavio se Odoov zaslon s greškom s porukom Cannot read properties of undefined (reading 'map').
Uzrok: web klijent izravno poziva action_archive i izvodi vraćenu radnju bez daljnje obrade. Pritom obavezno čita ključ views radnje. Naša radnja imala je samo view_mode. Radnje iz gumba s type="object" poslužitelj prethodno dopunjuje (clean_action u call_button), izravan poziv action_archive ne. Testovi su metodu pozivali samo u Pythonu, a tamo nedostajuće polje nije bilo uočljivo.
Ispravak je jedan redak ("views": [(False, "form")]), uz to dolazi provjera u testu koja traži upravo taj ključ. Pritom se ništa nije arhiviralo. Pouka: tko iz metode koju klijent izravno poziva (action_archive, action_unarchive i slične) vraća radnju, trebao bi uvijek priložiti views.
Instalacija
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
Ovisnosti su base i contacts. Nakon instalacije Odoo uslugu treba ponovno pokrenuti jer modul sadrži Python kod. Tko vodi produkcijski sustav, modul najprije instalira na kopiji baze podataka.
Ograničenja
- Ovlaštenje. Budući da se korisnici arhiviraju s povišenim pravima, svatko tko smije arhivirati kontakt može putem dijaloga arhivirati i portalne pristupe te tvrtke. Za interne korisnike to ne vrijedi. Tko želi preciznije zaštititi portalne pristupe, mora prilagoditi modul.
- Nema automatske obnove. Ako se tvrtka kasnije ponovno aktivira, korisnici ostaju arhivirani. Moraju se ručno ponovno aktivirati.
- Samo kontakti. Modul se odnosi na tvrtke kao kontakte (
res.partner). Arhiviranje Odoo tvrtke (res.company) ima druge provjere, na primjer ako je još zadana tvrtka korisnika. Modul za to nije namijenjen. - Testirano samo s Odoom 19.0 Community. Za druge verzije nismo ga provjeravali.
Česta pitanja
Zašto se zaposlenici ne arhiviraju zajedno?
Interni korisnik ima prava u sustavu i obično je povezan s vlastitim podacima, zadacima i ovlaštenjima. Blokirati ga kao nuspojavu arhiviranja tvrtke za nas je prerizično. Zato ostaje Odoova poruka o grešci.
Mogu li isključiti upit?
U kodu putem konteksta skip_archive_users_wizard. Postavke u sučelju nema. Tko deinstalira modul, ponovno dobiva standardno ponašanje Odooa.
Pod kojom je licencijom?
Pod AGPL-3. Greške i poboljšanja dobrodošli su kao issue u GitHub repozitoriju .
Podrška tvrtke Biricon IT Services
Brinemo se za Odoo instalacije malih i srednjih poduzeća: od uvođenja, preko prilagodbi i migracija, do tekućeg rada. Ako želite pojednostavniti postupke poput arhiviranja tvrtki klijenata u Odoou, postaviti portal za svoje klijente ili sigurno uvesti modul u svoju produkcijsku instancu, rado ćemo pomoći. Dodatni vlastiti razvoji: Brojevi dokumenata iz prefiksa, godine i brojača, Firmenbuch i provjera adresa za austrijske klijente i Skupovi proizvoda u ponudi kao odjeljak.
Stanje: 3. studenoga 2026. Verzija modula 19.0.1.0.0 s ispravkom istog dana. Sva imena i korisnička imena na slikama proizvoljno su odabrana.