Cara hide filter, group by dan favourite button Odoo 14

Assalamualaikum warahmatullahi wabarakatuh pada kesempatan kali ini saya akan membagikan bagaimana cara meng hide dan juga memberi akses untuk button filter, group by dan favourite pada Odoo 14. Seperti yang kita ketahui button filter, group by dan favourite yang terletak dibawah search bar merupakan button bawaan odoo.


Kita akan hide button-button ini dengan cara meng-extend OWL component di odoo. OWL component yang digunakan untuk ketiga button tersebut yaitu ControlPanel.  Salah satu ara meng-extend OWL component yaitu dengan patch function. Jika suatu OWL component merupakan "patchable" komponen yang dimana return-nya dibungkus dengan patchMixin. Contohnya dapat kita lihat pada komponen messaging menu. 

odoo/addons/mail/static/src/components/messaging_menu/messaging_menu.js

// ...
const patchMixin = require('web.patchMixin');
const { Component } = owl;

class MessagingMenu extends Component {
// ...
// content of the file
// ...
}
return patchMixin(MessagingMenu);

Jika komponen nya merupakan “patchable” komponen maka kita dapat menggunakan syntax berikut untuk melakukan extend/patch

PatchableComponent.patch("name_of_the_patch", (T) => {
    class NewlyPatchedComponent extends T {
        //... go wild
    }
    return NewlyPatchedComponent
})

Perlu diingat untuk odoo 14 tidak semua component return dengan dibungkus PatchMixin ini sehingga perlu dicek terlebih dahulu di dalam source code Odoo apakah komponen yang ingin kita patch merupakan "patchable" komponen . Namun apabila komponen bukan "patchable" maka tetap dapat kita extend/patch/override dengan function patch dari web.utils untuk lebih detailnya dapat dilihat pada link berikut: https://codingdodo.com/owl-in-odoo-14-extend-and-patch-existing-owl-components/

Untuk meng hide ketiga button (filter, groupby, favourite) kita akan mengextend component control panel. Control panel merupakan komponen yang menampung beberapa komponen yang ada di bagian atas seperti title, search bar, action button, termasuk diantaranya filter, group by dan favourite. selanjutnya kita akan patch dengan kode berikut

odoo.define("bsm_inventory_customer.ControlPanel", function (require) {

   "use strict";


   const ControlPanel = require("web.ControlPanel");

   const session = require("web.session");


   // Patch the ControlPanel

   ControlPanel.patch("bsm_inventory_customer.ControlPanelPatch", (T) => {

       class ControlPanelPatched extends T {

           async willStart() {

               if (this.props.action) {

                   this.modelName = this.props.action.res_model;


                   this.isInGroup = await session.user_has_group('bsm_inventory_customer.group_filter_groupby_favourite');

               }

           }


           mounted() {

               super.mounted();


               // Check if the current model is 'stock.quant' and the user is not in the group

               if (this.modelName === 'stock.quant' && this.isInGroup) {

                   const searchOptions = this.el.querySelector('.o_search_options');

                   if (searchOptions) {

                       searchOptions.style.display = 'none';

                   }

               }

           }

       }

       return ControlPanelPatched;

   });

});


Untuk kasus yang saya dapatkan, user meminta meng hide button hanya untuk model stock quant dan memberikan hak akses untuk user tertentu saja yang di hide buttonnya. Jadi disini saya menambahkan function willstart() untuk mendapatkan nama model dan melakukan pengecekan apakah user termasuk ke dalam group bsm_inventory_customer. Selanjutnya melakukan override function mounted(). Jika dua kondisi sebelumnya True, maka class o_search_options yang mana merupakan nama class dari div yang menampung tiga button (filter, group by dan favourite) akan diset display = none. 

sekian dari saya wassalamualaikum warah matullahi wabarakatuh









CARA MERUBAH DATA ONE2MANY INVOICE LINES YANG TELAH DI SET READONLY KETIKA STATUS INVOICE/BILLS POSTED