Firma kupca je otišla, ugovor je okončan, a vi je želite arhivirati u Odoou. Odoo odgovara porukom o grešci: „Ne možete arhivirati kontakte koji su povezani s aktivnim korisnikom. Prvo arhivirajte pripadajućeg korisnika.“ Ako firma ima više pristupa portalu, to znači: svakog korisnika posebno tražiti, posebno arhivirati, nazad na firmu, ponovo arhivirati.
Za to smo napisali mali modul Arhiviranje firme zajedno s korisnicima portala (partner_archive_users) za Odoo 19. Umjesto poruke o grešci dolazi upit, a pri „Da“ se korisnici portala i firma arhiviraju u jednom koraku. Modul je dostupan kao slobodan softver pod licencom AGPL-3 na GitHubu:
github.com/Alex0176/odoo-partner-archive-users
Modul koristimo kod Biricon IT Services od 3. novembra 2026. u našem produktivnom sistemu. Nov je, iskustvo s njim je dakle kratko. Ko ga preuzima, trebao bi pročitati odjeljke o obimu i ograničenjima .
Problem u standardnom Odoou
Odoo pri arhiviranju kontakta provjerava visi li na njemu neki korisnik i prekida ako da. Provjera ima smisla, jer svaki korisnik treba kontakt. Za interne korisnike, dakle zaposlenike, blokada je i željena. Kod korisnika portala kupaca ona je ipak prije svega ručni posao. Svaka firma kupca s pristupima portalu, na primjer za uvid u račune i tikete, treba pri arhiviranju isti postupak:
- Potražiti korisnike firme i njenih kontakt osoba,
- svakog posebno arhivirati,
- nazad na firmu,
- arhivirati firmu.
Rješenje: upit
Modul proširuje put Akcija → Arhiviraj na kontaktu, u obrascu kao i u listi. Ako na odabranoj firmi ili njenim kontakt osobama vise aktivni korisnici portala, otvara se dijalog s pitanjem „Treba li firma zaista biti arhivirana? U sistemu su još aktivni korisnici.“ Ispod stoje zahvaćeni korisnici s imenom, korisničkim imenom i kontaktom.
- Da, arhivirati firmu i korisnike: Prvo se arhiviraju korisnici, zatim firma.
- Otkaži: Ništa se ne mijenja.
- Nema korisnika portala: Odoo se ponaša kao dosad, ne pojavljuje se nikakav dijalog.
Šta se arhivira, a šta ne
Obim je namjerno usko postavljen:
- Samo korisnici portala i javni korisnici (
share = True). Interni korisnici se ovim putem nikada ne arhiviraju. Ako na kontaktu visi pristup zaposlenika, poruka o grešci Odoa ostaje. Tako niko nehotice ne blokira zaposlenika jer je arhivirao firmu. - Kontakt osobe ostaju aktivne kao kontakti. Arhiviraju se samo njihovi pristupi portalu. To odgovara standardu Odoa, koji pri arhiviranju firme podkontakte također ne dira.
- Samo put arhiviranja iz korisničkog interfejsa. Direktno
write({'active': False}), na primjer u uvozu ili skripti, ulazi nepromijenjeno u provjeru Odoa.
Tehnička realizacija
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.
| Gradivni element | Zadatak |
|---|---|
action_archive na kontaktu | Traži aktivne korisnike s share = True koji vise na kontaktu ili (kod firmi) na kontaktima firme. Ako ih ima, umjesto arhiviranja vraća se dijalog. |
| Čarobnjak | Pohranjuje firmu i pronađene korisnike, prikazuje ih i pri „Da“ izvršava arhiviranje s ključem konteksta archive_linked_users. |
Kontext skip_archive_users_wizard | Isključuje dijalog. Tada ponovo važi provjera Odoa. |
| Pristup | Čarobnjak smiju kreirati i koristiti interni korisnici (base.group_user). |
| Prevod | Njemački (de.po) i predložak (.pot) su priloženi. |
Korisnici se traže i arhiviraju s povišenim pravima (sudo). Time dijalog funkcioniše i za korisnike bez pristupa upravljanju korisnicima. Druga strana medalje nalazi se pod ograničenjima.
Nalaz: test je bio zelen, a dijalog ipak neispravan
Modul je pri prvoj upotrebi imao grešku koju automatski testovi nisu pronašli. Pri prvom kliku na „Arhiviraj“ u korisničkom interfejsu pojavio se umjesto dijaloga Odoo ekran greške s Cannot read properties of undefined (reading 'map').
Uzrok: Web klijent poziva action_archive direktno i izvršava vraćenu akciju bez dodatne obrade. Pritom obavezno čita ključ views akcije. Naša akcija imala je samo view_mode. Akcije iz dugmadi s type="object" server prethodno dopunjava (clean_action u call_button), direktan poziv action_archive ne. Testovi su pozivali metodu samo u Pythonu, a tamo se nedostajuće polje nije primijetilo.
Ispravka je jedan red ("views": [(False, "form")]), uz to dolazi provjera u testu koja traži upravo taj ključ. Pritom ništa nije arhivirano. Pouka: ko iz metode koju klijent poziva direktno (action_archive, action_unarchive i slične) vraća akciju, 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
Zavisnosti su base i contacts. Nakon instalacije Odoo usluga mora biti ponovo pokrenuta, jer modul sadrži Python kod. Ko vodi produktivni sistem, modul prvo instalira na kopiji baze podataka.
ograničenjima
- Ovlaštenje. Budući da se korisnici arhiviraju s povišenim pravima, svako ko smije arhivirati kontakt može putem dijaloga arhivirati i pristupe portalu te firme. Za interne korisnike to ne važi. Ko želi finije osigurati pristupe portalu, mora prilagoditi modul.
- Nema automatskog vraćanja. Ako se firma kasnije ponovo aktivira, korisnici ostaju arhivirani. Moraju se ručno reaktivirati.
- Samo kontakti. Modul se odnosi na firme kao kontakte (
res.partner). Arhiviranje Odoo firme (res.company) ima druge provjere, na primjer ako je još standardna firma korisnika. Za to modul nije namijenjen. - Testirano samo s Odoo 19.0 Community. Za druge verzije nismo provjeravali.
Česta pitanja
Zašto se zaposlenici ne arhiviraju zajedno?
Interni korisnik ima prava u sistemu i najčešće je povezan s vlastitim podacima, zadacima i ovlaštenjima. Blokirati ga kao nuspojavu arhiviranja firme nam je prerizično. Zato ostaje kod Odoo poruke o grešci.
Mogu li isključiti upit?
U kodu putem konteksta skip_archive_users_wizard. Postavke u korisničkom interfejsu nema. Ko deinstalira modul, ponovo dobiva standardno ponašanje Odoa.
Pod kojom licencom je?
Pod AGPL-3. Greške i poboljšanja dobrodošli su kao issue u GitHub repozitoriju .
Podrška Biricon IT Services
Brinemo o Odoo instalacijama za mala i srednja preduzeća: od uvođenja, preko prilagodbi i migracija, do tekućeg rada. Ako želite pojednostaviti procese poput arhiviranja firmi kupaca u Odoou, postaviti portal za svoje kupce ili sigurno postaviti modul u svoju produktivnu instancu, rado ćemo pomoći. Daljnji vlastiti razvojni projekti: Brojevi dokumenata iz prefiksa, godine i brojača, Firmenbuch i provjera adresa za austrijske kupce i Setovi proizvoda u ponudi kao odjeljak.
Stanje na dan: 3. novembra 2026. Verzija modula 19.0.1.0.0 s ispravkom istog dana. Sva imena i korisnička imena na slikama proizvoljno su odabrana.