Mengatur Hak Akses Tombol Print Odoo

Berdasarkan pengalaman saya selama ini sebagai programmer odoo, banyak permintaan klien yang berhubungan dengan hak akses. Seperti user A boleh melakukan aksi X sedangkan user B tidak, termasuk hak akses tombol print. Hal inilah yang mendasari saya untuk membuat module hak akses tombol print ini.

Odoo sendiri memiliki banyak report, hampir setiap form memiliki tombol print untuk mencetak report ini, sehingga saya mencoba membuat module yang dapat di atur sedinamis mungkin. Harapan saya user dapat mengatur tombol print secara mudah lewat user interface. Tidak perlu membuat module atau addon untuk mengatur setiap tombol print di setiap form. Tentu saja module ini hanya untuk menyelesaikan masalah umum, kebutuhan setiap perusahaan tentu berbeda dengan perusahaan lain, dan tentu saja tidak mudah untuk membuat sebuah module sapu jagat 🙂

Anda dapat mendownload module tersebut di halaman github saya. Berikut ini adalah beberapa skenario yang dapat anda lakukan dengan module ini.

Membuat Semua User Tidak Bisa Mencetak Report XXX

Misal jika anda ingin semua user tidak bisa mencetak report Quotation / Order anda dapat melakukannya dengan mudah. Pertama pastikan module sudah diinstall, sign in sebagai Administrator kemudian masuk mode debug. Buka menu Settings >> Technical >> Reporting >> Print Access Right. Buat sebuah record baru, pada bagian field Name isi dengan kata-kata bebas sesuai kebutuhan. Pada bagian field Document pilih nama report yang akan diberi hak akses, misal Quotation / Order. Pada bagian field Type pilih Fixed. Centang pada bagian field Apply To All User. Dan yang terakhir, pada bagian field Error Message isi dengan kata-kata yang akan muncul jika user meng-klik tombol print. Jangan lupa klik tombol Save untuk menyimpan.

Jika ada user yang mencoba untuk mencetak report Quotation / Order termasuk Administrator, sebuah pesan error akan muncul seperti pada gambar dibawah ini.

Membuat User XXX Tidak Bisa Mencetak Report YYY

Pada skenario sebelumnya, report Quotation / Order diatur agar tidak bisa dicetak oleh semua user. Lalu bagaimana jika kita ingin agar pembatasan di atas hanya diterapkan pada user tertentu saja ? Caranya cukup mudah, cukup hilangkan centangan pada field Apply To All User, maka sebuah field baru dengan nama Apply to Specific User akan muncul. Pilih user mana saja yang akan dikenai hak akses, seperti pada gambar di bawah ini.

Jika user yang masuk pada pengaturan field Apply to Specific User mencoba untuk mencetak report, sebuah pesan error akan muncul seperti pada gambar di bawah ini.

Membuat User XXX Hanya Bisa Mencetak Report YYY Sebanyak ZZZ Kali

Skenario selanjutnya yang dapat diterapkan menggunakan module ini adalah membatasi user agar hanya bisa mencetak suatu report beberapa kali saja. Misal jika anda ingin membatasi user Marc Demo agar hanya bisa mencetak report Delivery Slip sebanyak 2 kali, anda dapat memilih Fixed Print Count pada field Type, kemudian sebuah field baru dengan nama Max Print Count akan muncul, masukkan angka batas berapa kali user dapat mencetak report tersebut.

Jika user yang terkena hak akses mencoba mencetak report lebih dari pengaturan Max Print Count sebuah pesan error akan muncul.

Anda dapat masuk ke menu Settings >> Technical >> Reports, kemudian pilih salah satu nama report yang telah anda atur hak aksesnya, kemudian lihat pada tab Print Count untuk memonitor user XXX sudah mencetak dokumen dengan id YYY sebanyak berapa kali.

Field Record ID pada gambar di atas, adalah id atau primary key dari transaksi yang sudah dicetak oleh user. Anda tentu saja bisa mengubah nilai dari field Count, misal pada kasus tertentu user sudah melebihi batas maksimal untuk mencetak suatu report, tetapi anda ingin memberi kesempatan pada user tersebut untuk mencetak report sekali lagi.

Tentu saja jika anda ingin agar hak akses di atas berefek pada semua user, anda tinggal mencentang field Apply to All User.

Membuat User XXX tidak Bisa Mencetak Report YYY Jika Kondisi ZZZ Terpenuhi

Contoh paling mudah dari skenario ini adalah, misal jika anda ingin agar user XXX tidak bisa mencetak invoice jika partner (customer atau vendor) di invoice tersebut memiliki nama Azure Interior. Untuk melakukan ini, pada field Type pilih By Condition kemudian sebuah field baru denga nama Condition akan muncul. Klik tombol Edit Domain, sebuah jendela akan muncul, kemudian buat sebuah domain sebagai kondisinya.

Cara membuat sebuah domain sama dengan saat anda membuat kondisi pada menu Promotion Program untuk mengatur kupon atau diskon pada sales order. Anda dapat membuat domain dengan cara melakukan beberapa klik dengan cara klik tombol Add Filter kemudian sebuah baris dengan 3 field akan muncul. Pada field sebelah kiri, anda dapat memilih field apa yang akan anda jadikan dasar sebagai filter. Misal pilih partner_id. Field yang ada di tengah-tengah digunakan untuk membandingkan antara field yang ada di kiri dan kanan, misal untuk membandingkan apakah field sebelah kiri lebih kecil dari field sebelah kanan, apakah field sebelah kiri mengandung kata seperti pada field sebelah kanan dan kondisi-kondisi lainnya. Pilihan yang dapat anda pilih pada field sebelah tengah ini tergantung pada jenis field yang anda pilih pada field sebelah kiri. Sedangkan field sebelah kanan sendiri adalah nilai yang akan digunakan sebagai perbandingan, isi sesuai kebutuhan.

Anda juga dapat menulis domain langsung pada bagian Code Editor.

Sama dengan skenario-skenario sebelumnya, jika user yang terkena hak akses mencoba untuk mencetak transaksi dan kondisi terpenuhi, dalam kasus ini mencoba mencetak invoice dengan partner bernama Azure Interior sebuah pesan error akan muncul.

Tentu saja jika user mencoba mencetak invoice dengan partner selain Azure Interior pesan error tidak akan muncul, normal seperti biasa.

Field yang dapat anda pilih sebagai kondisi adalah field yang berada di form atau model utama yang terkait dengan report yang anda atur, misal jika anda ingin agar user XXX tidak bisa mencetak invoice jika pada invoice tersebut ada baris dengan produk YYY, maka hal ini tidak bisa dilakukan.

Membuat User XXX Tidak Bisa Mencetak Report YYY Jika Kondisi ZZZ Terpenuhi dan Dia Sudah Mencetak Report Tersebut Sebanyak AAA Kali

Ini adalah skenario terakhir yang dapat anda lakukan dengan module ini. Skenario ini sebenarnya adalah gabungan dari skenario-skenario sebelumnya, yaitu gabungan antara type By Condition dan Fixed Print Count. Sebagai contoh kasus, misal jika anda ingin agar user XXX hanya bisa mencetak dokumen Purchase Order dengan nama vendor Deco Addict sebanyak YYY kali.

Pada field Type pilih By Condition and Print Count maka 2 buah field baru akan muncul yaitu field Max Print Count dan field Condition. Isi batasan berapa kali user dapat mencetak dokumen di field Max Print Count. Kemudian isi field Condition dengan kondisi yang anda inginkan.

Tulisan Serupa

Leave a Reply