Sari la conținut

Odoo 19: arhivarea unei firme împreună cu utilizatorii de portal – modulul partner_archive_users cu întrebare de confirmare în loc de mesaj de eroare

3 noiembrie 2026 | Odoo 19 Community | Dezvoltare proprie
3 noiembrie 2026 de
Odoo 19: arhivarea unei firme împreună cu utilizatorii de portal – modulul partner_archive_users cu întrebare de confirmare în loc de mesaj de eroare

Modulul Odoo 19 partner_archive_users: întrebare de confirmare la arhivarea unei firme cu utilizatori de portal

O firmă client s-a mutat, contractul a luat sfârșit, iar dumneavoastră vreți să o arhivați în Odoo. Odoo răspunde cu un mesaj de eroare: „Nu puteți arhiva contacte care sunt legate de un utilizator activ. Arhivați mai întâi utilizatorul corespunzător.” Dacă firma are mai multe accesuri de portal, aceasta înseamnă: să căutați fiecare utilizator în parte, să-l arhivați individual, să reveniți la firmă, să arhivați din nou.

Pentru aceasta am scris micul modul Arhivarea unei firme împreună cu utilizatorii de portal (partner_archive_users) pentru Odoo 19. În locul mesajului de eroare apare o întrebare de confirmare, iar la „Da” utilizatorii de portal și firma sunt arhivați într-un singur pas. Modulul este disponibil pe GitHub ca software liber sub licența AGPL-3:

github.com/Alex0176/odoo-partner-archive-users

Folosim modulul la Biricon IT Services, în sistemul nostru de producție, din 3 noiembrie 2026. Este nou, deci experiența cu el este scurtă. Cine îl preia ar trebui să citească secțiunile despre Domeniu de aplicare și Limite .

Problema în Odoo standard

La arhivarea unui contact, Odoo verifică dacă de el este legat un utilizator și se oprește dacă da. Verificarea are sens, deoarece fiecare utilizator are nevoie de un contact. Pentru utilizatorii interni, adică angajați, blocarea este chiar dorită. La utilizatorii de portal ai clienților este însă, în primul rând, muncă manuală. Fiecare firmă client cu accesuri de portal, de exemplu pentru consultarea facturilor și a tichetelor, necesită la arhivare același proces:

  1. căutarea utilizatorilor firmei și ai persoanelor ei de contact,
  2. arhivarea fiecăruia în parte,
  3. înapoi la firmă,
  4. arhivarea firmei.

Soluția: o întrebare de confirmare

Modulul extinde calea Acțiune → Arhivare la contact, atât în formular, cât și în listă. Dacă de firma aleasă sau de persoanele ei de contact sunt legați utilizatori de portal activi, se deschide un dialog cu întrebarea „Firma trebuie într-adevăr arhivată? În sistem mai există utilizatori activi.” Dedesubt apar utilizatorii afectați, cu nume, nume de autentificare și contact.

Comparație: mesajul de eroare Odoo la arhivarea unei firme și dialogul de confirmare al modulului

  • Da, arhivează firma și utilizatorii: mai întâi sunt arhivați utilizatorii, apoi firma.
  • Anulare: nu se modifică nimic.
  • Nu există utilizatori de portal: Odoo se comportă ca până acum, nu apare niciun dialog.

Ce se arhivează și ce nu

Domeniul de aplicare este intenționat restrâns:

Prezentare generală: utilizatorii de portal și firma sunt arhivați, persoanele de contact rămân active, utilizatorii interni nu sunt niciodată atinși

  • Doar utilizatori de portal și publici (share = True). Utilizatorii interni nu sunt niciodată arhivați pe această cale. Dacă de contact este legat un acces de angajat, mesajul de eroare din Odoo rămâne. Astfel, nimeni nu blochează din greșeală un angajat pentru că a arhivat o firmă.
  • Persoanele de contact rămân active ca contacte. Doar accesurile lor de portal sunt arhivate. Aceasta corespunde Odoo standard, care la arhivarea unei firme nu atinge nici subcontactele.
  • Doar calea de arhivare din interfață. Un write({'active': False}) direct, de exemplu într-un import sau script, trece neschimbat prin verificarea din Odoo.

Implementare tehnică

Modulul nu are câmpuri noi la modelele existente. Constă dintr-o extindere a res.partner.action_archive și dintr-un asistent (partner.archive.users.wizard) care apare ca dialog.

ElementSarcină
action_archive la contactCaută utilizatori activi cu share = True, legați de contact sau (la firme) de contactele firmei. Dacă există, în loc să arhiveze, returnează dialogul.
AsistentMemorează firma și utilizatorii găsiți, îi afișează și, la „Da”, execută arhivarea cu cheia de context archive_linked_users.
Context skip_archive_users_wizardDezactivează dialogul. Atunci se aplică din nou verificarea din Odoo.
AccesAsistentul poate fi creat și folosit de utilizatorii interni (base.group_user).
TraducereGermana (de.po) și șablonul (.pot) sunt incluse.

Utilizatorii sunt căutați și arhivați cu drepturi sporite (sudo). Astfel, dialogul funcționează și pentru utilizatorii fără acces la administrarea utilizatorilor. Reversul este descris la Limite.

O constatare: testul a fost verde, dar dialogul era totuși defect

La prima utilizare, modulul a avut o eroare pe care testele automate nu au găsit-o. La primul clic pe „Arhivare” în interfață, în locul dialogului a apărut ecranul de eroare Odoo cu Cannot read properties of undefined (reading 'map').

Cauza: clientul web apelează action_archive direct și execută o acțiune returnată fără altă prelucrare. În acest proces citește obligatoriu cheia views a acțiunii. Acțiunea noastră avea doar view_mode. Acțiunile din butoane cu type="object" sunt completate în prealabil de server (clean_action în call_button), apelul direct al action_archive nu. Testele apelau metoda doar în Python, iar acolo câmpul lipsă nu a atras atenția.

Remedierea este o singură linie ("views": [(False, "form")]), la care se adaugă o verificare în test care cere exact această cheie. Cu această ocazie nu s-a arhivat nimic. Concluzia: cine returnează o acțiune dintr-o metodă pe care clientul o apelează direct (action_archive, action_unarchive și altele similare) ar trebui să includă întotdeauna views.

Instalare

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

Dependențele sunt base și contacts. După instalare, serviciul Odoo trebuie repornit, deoarece modulul conține cod Python. Cine operează un sistem de producție instalează modulul mai întâi pe o copie a bazei de date.

Limite

  • Autorizare. Deoarece utilizatorii sunt arhivați cu drepturi sporite, oricine are voie să arhiveze un contact poate arhiva prin dialog și accesurile de portal ale acelei firme. Pentru utilizatorii interni, acest lucru nu se aplică. Cine dorește să securizeze mai fin accesurile de portal trebuie să adapteze modulul.
  • Nicio restaurare automată. Dacă firma este reactivată ulterior, utilizatorii rămân arhivați. Ei trebuie reactivați manual.
  • Doar contacte. Modulul privește firmele ca contacte (res.partner). Arhivarea unei companii Odoo (res.company) are alte verificări, de exemplu dacă este încă compania implicită a unor utilizatori. Modulul nu este destinat acestui lucru.
  • Testat doar pe Odoo 19.0 Community. Pentru alte versiuni nu l-am verificat.

Întrebări frecvente

De ce nu sunt arhivați și angajații?

Un utilizator intern are drepturi în sistem și este de obicei legat de date, sarcini și autorizări proprii. Să-l blocăm ca efect secundar al arhivării unei firme ni se pare prea riscant. De aceea rămâne mesajul de eroare din Odoo.

Pot dezactiva întrebarea de confirmare?

În cod, prin contextul skip_archive_users_wizard. O setare în interfață nu există. Cine dezinstalează modulul primește din nou comportamentul standard din Odoo.

Sub ce licență este?

Sub AGPL-3. Erorile și îmbunătățirile sunt binevenite ca issue în repository-ul GitHub .

Asistență din partea Biricon IT Services

Administrăm instalări Odoo pentru întreprinderi mici și mijlocii: de la implementare, prin personalizări și migrări, până la funcționarea curentă. Dacă doriți să simplificați în Odoo procese precum arhivarea firmelor client, să configurați un portal pentru clienții dumneavoastră sau să puneți în siguranță un modul în instanța dumneavoastră de producție, vă ajutăm cu plăcere. Alte dezvoltări proprii: Numere de documente din prefix, an și contor, Firmenbuch și verificarea adreselor pentru clienți austrieci și Seturi de produse în ofertă ca secțiune.

Contactați-ne acum

Situație la: 3 noiembrie 2026. Versiunea modulului 19.0.1.0.0 cu remedierea din aceeași zi. Toate numele și numele de autentificare din figuri sunt alese liber.