[Part 17]Membuat Smart Button Odoo type Object

Ade Setiawan
3 min readDec 28, 2020

--

Smart Button

Kali ini saya akan bahas Salah satu widget di odoo lagi yang mungkin paling populer diantara widget yang lainya, sebab hampir setiap module terdapat widget ini. apa itu ?? Smart Button.

terdapat dua type smart button di odoo ada type Object dan type Action. menu smart button biasanya terletak di odoo form view sejajar dengan tag title dengan nama class oe_button_box, baiklah kita akan implementasi pada menu patient form,

buka kembali file patient_view.xml edit pada bagian form view setelah tag sheet dan sebelum tag image, lalu tambahkan code berikut.

<div class="oe_button_box" name="button_box"><button name="open_patient_appointment" string="open" type="object" class="oe_stat_button" icon="fa-archive"/></div>
button box

lakukan upgrade module lalu liat perubahanya seperti berikut

smart button

sejauh ini button blum ada event nya jadi akan ada error ketika kita click

error action button

untuk menambahkan action nya create sebuah function di file patient.py lalu ketikan code berikut

@api.multidef open_patient_appointment(self):return {'name':_('Appointments'),'domain':[],'view_type':'form','res_model':'hospital.appointment','view_id':False,'view_mode':'tree,form','type':'ir.actions.act_window',}
fungtion get appointment from smart button

restart service lalu upgrade module maka kalau berhasil akan tampil berikut

action from smartbutton

coba perhatikan setiap form patient memiliki smartbutton di kanan atas ketika kita klik satu persatu maka akan selalu tampi list dari appointment supaya relevan artinya untuk patient A kita klik maka yang di appointment model tampil patient A. untuk itu kita perlu sebuah domain. edit lagi patient.py tambahkan domain sebagai berikut.

'domain':[('patient_id','=',self.id)],

restart service dan upgrade module, tampilanya akan berubah sebagai berikut ketika smart button di klik

untuk menambah variasi kita lakukan counting perhitungan untuk breadcumb di icon smart button yang berguna untuk notif berapa kali pasien yang bersangkutan di appointment.

buat satu field untuk menampung appointment terlebih dahulu

appointment_count= fields.Integer("Appointment", compute='get_appointment_count')

lalu buat function untuk menghitung appointment_count nya

def get_appointment_count(self):count = self.env['hospital.appointment'].search_count([('patient_id','=', self.id)])self.appointment_count = count

dan edit patient_view.xml lalu modifikasi button box nya sebagai berikut

<div class="oe_button_box" name="button_box"><button name="open_patient_appointment" type="object" class="oe_stat_button" icon="fa-calendar"><field name="appointment_count" string="Appointment" widget="statinfo"/></button></div>

setelah itu lakukan restart service dan upgrade module jika berhasil tampilan akan seperti berikut.

appointment count smart button

--

--

No responses yet