[Part 17]Membuat Smart Button Odoo type Object
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>
lakukan upgrade module lalu liat perubahanya seperti berikut
sejauh ini button blum ada event nya jadi akan ada error ketika kita click
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',}
restart service lalu upgrade module maka kalau berhasil akan tampil berikut
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.
tutorial selanjutanya