მომხმარებელი ფირმა წავიდა, ხელშეკრულება დასრულდა და გსურთ, ის Odoo-ში დაარქივოთ. Odoo პასუხობს შეცდომის შეტყობინებით: „თქვენ არ შეგიძლიათ დააარქივოთ კონტაქტები, რომლებიც აქტიურ მომხმარებელთან არის დაკავშირებული. ჯერ დააარქივეთ შესაბამისი მომხმარებელი.“ თუ ფირმას რამდენიმე პორტალის წვდომა აქვს, ეს ნიშნავს: თითოეული მომხმარებლის ცალ-ცალკე მოძებნას, ცალ-ცალკე დაარქივებას, ფირმასთან დაბრუნებას და ხელახლა დაარქივებას.
ამისთვის დავწერეთ პატარა მოდული ფირმის დაარქივება პორტალის მომხმარებლებთან ერთად (partner_archive_users) Odoo 19-ისთვის. შეცდომის შეტყობინების ნაცვლად ჩნდება შეკითხვა, და „დიახ“-ის შემთხვევაში პორტალის მომხმარებლები და ფირმა ერთ ნაბიჯში არქივდება. მოდული თავისუფალი პროგრამული უზრუნველყოფის სახით AGPL-3 ლიცენზიით GitHub-ზეა:
github.com/Alex0176/odoo-partner-archive-users
ჩვენ მოდულს Biricon IT Services-ში ჩვენს საწარმოო სისტემაში 2026 წლის 3 ნოემბრიდან ვიყენებთ. ის ახალია, ამიტომ მასთან გამოცდილება მცირეა. ვინც მას გადაიღებს, უნდა გაეცნოს სექციებს: ფარგლები და შეზღუდვები უნდა გაეცნოს.
პრობლემა Odoo-ს სტანდარტში
Odoo კონტაქტის დაარქივებისას ამოწმებს, ხომ არ არის მასზე მომხმარებელი მიბმული, და თუ არის, წყვეტს პროცესს. შემოწმებას აზრი აქვს, რადგან ყოველ მომხმარებელს კონტაქტი სჭირდება. შიდა მომხმარებლებისთვის, ანუ თანამშრომლებისთვის, ეს ბლოკირება სასურველიცაა. მომხმარებლების პორტალის მომხმარებლებისთვის კი ის უპირველესად ხელით სამუშაოა. ყოველ მომხმარებელ ფირმას პორტალის წვდომებით, მაგალითად ინვოისებისა და ტიკეტების სანახავად, დაარქივებისას ერთი და იგივე პროცედურა სჭირდება:
- ფირმისა და მისი საკონტაქტო პირების მომხმარებლების მოძებნა,
- თითოეულის ცალ-ცალკე დაარქივება,
- ფირმასთან დაბრუნება,
- ფირმის დაარქივება.
გადაწყვეტა: შეკითხვა
მოდული აფართოებს გზას მოქმედება → დაარქივება კონტაქტზე, როგორც ფორმაში, ისე სიაში. თუ არჩეულ ფირმაზე ან მის საკონტაქტო პირებზე აქტიური პორტალის მომხმარებლებია მიბმული, იხსნება დიალოგი კითხვით „ნამდვილად უნდა დაარქივდეს ფირმა? სისტემაში კვლავ არის აქტიური მომხმარებლები.“ მის ქვემოთ ჩანს ზემოქმედების ქვეშ მოხვედრილი მომხმარებლები სახელით, შესვლის სახელითა და კონტაქტით.
- დიახ, ფირმისა და მომხმარებლების დაარქივება: ჯერ მომხმარებლები არქივდება, შემდეგ ფირმა.
- გაუქმება: არაფერი იცვლება.
- პორტალის მომხმარებლები არ არის: Odoo ძველებურად იქცევა, დიალოგი არ ჩნდება.
რა არქივდება და რა არა
ფარგლები შეგნებულად ვიწროა:
- მხოლოდ პორტალისა და საჯარო მომხმარებლები (
share = True). შიდა მომხმარებლები ამ გზით არასდროს არქივდება. თუ კონტაქტზე თანამშრომლის წვდომაა მიბმული, Odoo-ს შეცდომის შეტყობინება ძალაში რჩება. ასე ვერავინ დაბლოკავს შემთხვევით თანამშრომელს იმით, რომ ფირმა დააარქივა. - საკონტაქტო პირები კონტაქტებად აქტიური რჩებიან. მხოლოდ მათი პორტალის წვდომები არქივდება. ეს შეესაბამება Odoo-ს სტანდარტს, რომელიც ფირმის დაარქივებისას ქვეკონტაქტებსაც არ ეხება.
- მხოლოდ ინტერფეისის დაარქივების გზა. პირდაპირი
write({'active': False}), მაგალითად იმპორტში ან სკრიპტში, უცვლელად გადის Odoo-ს შემოწმებაზე.
ტექნიკური რეალიზაცია
მოდულს არსებულ მოდელებზე ახალი ველები არ აქვს. ის შედგება res.partner.action_archive-ის გაფართოებისა და ასისტენტისგან (partner.archive.users.wizard), რომელიც დიალოგის სახით ჩნდება.
| კომპონენტი | დანიშნულება |
|---|---|
action_archive კონტაქტზე | ეძებს აქტიურ მომხმარებლებს share = True-ით, რომლებიც მიბმულია კონტაქტზე ან (ფირმების შემთხვევაში) ფირმის კონტაქტებზე. თუ ასეთები არსებობს, დაარქივების ნაცვლად ბრუნდება დიალოგი. |
| ასისტენტი | ინახავს ფირმასა და ნაპოვნ მომხმარებლებს, აჩვენებს მათ და „დიახ“-ის შემთხვევაში ასრულებს დაარქივებას კონტექსტის გასაღებით archive_linked_users. |
კონტექსტი skip_archive_users_wizard | თიშავს დიალოგს. მაშინ ისევ Odoo-ს შემოწმება მოქმედებს. |
| წვდომა | ასისტენტის შექმნა და გამოყენება შეუძლიათ შიდა მომხმარებლებს (base.group_user). |
| თარგმანი | გერმანული (de.po) და თარგმანის შაბლონი (.pot) თან ერთვის. |
მომხმარებლები ძიებისა და დაარქივებისას ამაღლებული უფლებებით მუშაობენ (sudo). ამიტომ დიალოგი იმ მომხმარებლებისთვისაც მუშაობს, რომლებსაც მომხმარებლების მართვაზე წვდომა არ აქვთ. მისი უარყოფითი მხარე აღწერილია სექციაში შეზღუდვები.
აღმოჩენა: ტესტი მწვანე იყო, დიალოგი მაინც გატეხილი
მოდულს პირველ გამოყენებისას შეცდომა ჰქონდა, რომელიც ავტომატურმა ტესტებმა ვერ აღმოაჩინა. ინტერფეისში „დაარქივებაზე“ პირველი დაწკაპუნებისას დიალოგის ნაცვლად გამოჩნდა Odoo-ს შეცდომის ეკრანი შეტყობინებით Cannot read properties of undefined (reading 'map').
მიზეზი: ვებ-კლიენტი უშუალოდ იძახებს action_archive-ს და დაბრუნებულ მოქმედებას დამატებითი დამუშავების გარეშე ასრულებს. ამასთან ის აუცილებლად კითხულობს მოქმედების გასაღებს views. ჩვენს მოქმედებას მხოლოდ view_mode ჰქონდა. ღილაკებიდან მოქმედებებს type="object"-ით სერვერი წინასწარ ავსებს (clean_action call_button-ში), action_archive-ის პირდაპირ გამოძახებას კი არა. ტესტები მეთოდს მხოლოდ Python-ში იძახებდნენ და იქ ველის არარსებობა არ შეიმჩნეოდა.
გამოსწორება ერთი სტრიქონია ("views": [(False, "form")]), რასაც ემატება ტესტში შემოწმება, რომელიც ზუსტად ამ გასაღებს მოითხოვს. ამ დროს არაფერი დაარქივებულა. გაკვეთილი: ვინც მოქმედებას აბრუნებს მეთოდიდან, რომელსაც კლიენტი უშუალოდ იძახებს (action_archive, action_unarchive და მსგავსი), ყოველთვის უნდა დაამატოს views.
ინსტალაცია
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
დამოკიდებულებებია base და contacts. ინსტალაციის შემდეგ Odoo-ს სერვისი ხელახლა უნდა გაეშვას, რადგან მოდული Python-კოდს შეიცავს. ვინც საწარმოო სისტემას მართავს, მოდულს ჯერ მონაცემთა ბაზის ასლზე აყენებს.
შეზღუდვები
- უფლება. რადგან მომხმარებლები ამაღლებული უფლებებით არქივდება, ყველას, ვისაც კონტაქტის დაარქივება შეუძლია, დიალოგის მეშვეობით ამ ფირმის პორტალის წვდომების დაარქივებაც შეუძლია. შიდა მომხმარებლებზე ეს არ ვრცელდება. ვისაც პორტალის წვდომების უფრო დახვეწილი დაცვა სურს, მოდული უნდა მოირგოს.
- ავტომატური აღდგენა არ არის. თუ ფირმა მოგვიანებით ხელახლა გააქტიურდება, მომხმარებლები დაარქივებული რჩებიან. ისინი ხელით უნდა გამოცოცხლდნენ.
- მხოლოდ კონტაქტები. მოდული ეხება ფირმებს კონტაქტების სახით (
res.partner). Odoo-ს ფირმის (res.company) დაარქივებას სხვა შემოწმებები აქვს, მაგალითად თუ ის კვლავ მომხმარებლების სტანდარტული ფირმაა. ამისთვის მოდული განკუთვნილი არ არის. - გამოცდილია მხოლოდ Odoo 19.0 Community. სხვა ვერსიებისთვის ჩვენ ის არ შეგვიმოწმებია.
ხშირი კითხვები
რატომ არ არქივდებიან თანამშრომლები?
შიდა მომხმარებელს სისტემაში უფლებები აქვს და ხშირად საკუთარ მონაცემებთან, ამოცანებთან და უფლებებთანაა დაკავშირებული. მისი დაბლოკვა ფირმის დაარქივების გვერდითი ეფექტის სახით ჩვენთვის ზედმეტად სარისკოა. ამიტომ რჩება Odoo-ს შეცდომის შეტყობინება.
შემიძლია თუ არა შეკითხვის გამორთვა?
კოდში კონტექსტით skip_archive_users_wizard. ინტერფეისში პარამეტრი არ არსებობს. ვინც მოდულს წაშლის, ისევ Odoo-ს სტანდარტულ ქცევას იღებს.
რა ლიცენზიით ვრცელდება ის?
AGPL-3 ლიცენზიით. შეცდომები და გაუმჯობესებები მიიღება issue-ის სახით შემდეგ რეპოზიტორიაში: GitHub-რეპოზიტორიაში სიამოვნებით ველოდებით.
მხარდაჭერა Biricon IT Services-ისგან
ჩვენ ვემსახურებით Odoo-ს ინსტალაციებს მცირე და საშუალო საწარმოებისთვის: დანერგვიდან მორგებებისა და მიგრაციების გავლით მუდმივ ექსპლუატაციამდე. თუ გსურთ Odoo-ში პროცესების გამარტივება, როგორიცაა მომხმარებელი ფირმების დაარქივება, თქვენი მომხმარებლებისთვის პორტალის მოწყობა ან მოდულის თქვენს საწარმოო ინსტანციაში უსაფრთხოდ შეყვანა, სიამოვნებით დაგეხმარებით. სხვა საკუთარი დამუშავებები: დოკუმენტის ნომრები პრეფიქსის, წლისა და მთვლელისგან, სავაჭრო რეესტრი და მისამართის შემოწმება ავსტრიელი კლიენტებისთვის და პროდუქტების კომპლექტები შეთავაზებაში სექციის სახით.
მდგომარეობა: 2026 წლის 3 ნოემბერი. მოდულის ვერსია 19.0.1.0.0 იმავე დღის გამოსწორებით. ილუსტრაციებში ყველა სახელი და შესვლის სახელი თავისუფლადაა შერჩეული.