Dalam pengembangan aplikasi Odoo kita akan mendapati kebutuhan stat button yang menunjukkan suatu angka yang menunjukkan jumlah record dari model lain yang berelasi dengan model saat ini.
Penambahan tombol stat pada pengembangan aplikasi Odoo adalah seperti berikut ini
- Start SSH file system


- Source code pada model
from odoo import api, fields, models class Hostel(models.Model): _name = 'asrama.hostel' _description = 'Informasi tentang asrama-hostel' _order = 'id desc, name' _rec_name = 'hostel_code' name = fields.Char(string='Nama Hostel',required=True) hostel_code = fields.Char(string='Kode',required=True) street = fields.Char(string='Jalan') street2 = fields.Char(string='Jalan2') zip = fields.Char('Zip',change_default=True) city = fields.Char('Kota') state_id = fields.Many2one('res.country.state', string='State') country_id = fields.Many2one('res.country', string='Negara') phone = fields.Char('Phone',required=True) mobile = fields.Char('Mobile',required=True) email = fields.Char('Email') hostel_floors = fields.Integer(string='Jml Lantai') image = fields.Binary("Gambar Hostel") active = fields.Boolean("Active",default=True, help="Aktifkan/Nonaktifkan data hostel") type = fields.Selection([('male','Laki-laki'),('female','Perempuan'),('common','Umum')] , 'Tipe', help='Tipe Hostel',required=True, default='common' ) other_info = fields.Text('Informasi lain',help='Masukkan informasi lain') description = fields.Html('Description') hostel_rating = fields.Float('Rata-rata rating hostel',digits='Nilai Rating') category_id = fields.Many2one('asrama.category') rooms_count = fields.Integer(compute="_compute_rooms_count") def _compute_rooms_count(self): room_obj = self.env['asrama.room'] for hostel in self: hostel.rooms_count = room_obj.search_count([('hostel_id','=',hostel.id)]) @api.depends('hostel_code') def _compute_display_name(self): for record in self: name = record.name if record.hostel_code: name = f'{name} ({record.hostel_code})' record.display_name = name - Source code view pada model pertama
<?xml version="1.0" encoding="utf-8"?> <odoo> <!-- asrama.hostel search view --> <record id="view_hostel_search_view" model="ir.ui.view"> <field name="name">Hostel Search</field> <field name="model">asrama.hostel</field> <field name="arch" type="xml"> <search> <field name="name" /> <field name="hostel_code" /> </search> </field> </record> <!-- asrama.hostel tree view --> <record id="View_hostel_tree_view" model="ir.ui.view"> <field name="name">asrama.hostel.view.tree</field> <field name="model">asrama.hostel</field> <field name="arch" type="xml"> <tree> <field name="name" /> <field name="hostel_code" /> <!-- Add your fields here --> </tree> </field> </record> <!-- asrama.hostel form view --> <record id="view_hostel_form_view" model="ir.ui.view"> <field name="name">asrama.hostel.view.form</field> <field name="model">asrama.hostel</field> <field name="arch" type="xml"> <form string="Hostel"> <sheet> <div class="oe_button_box" name="button_box" > <button class="oe_stat_button" name="%(asramaku.asrama_room_action)d" type="action" icon="fa-building" context="{'search_default_hostel_id':active_id}" > <field string="Rooms" name="rooms_count" widget="statinfo" /> </button> </div> <div class="oe_title"> <h3> <table> <tr> <td style="padding-right:10px;"> <field name="name" required="1" placeholder="Name" /> </td> <td style="padding-right:10px;"> <field name="hostel_code" placeholder="Code" /> </td> </tr> </table> </h3> </div> <field name="image" widget="image" class="oe_avatar"/> <group> <group> <label for="street" string="Address"/> <div class="o_address_format"> <field name="street" placeholder="Street..." class="o_address_street"/> <field name="street2" placeholder="Street 2..." class="o_address_street"/> <field name="city" placeholder="City" class="o_address_city"/> <field name="state_id" class="o_address_state" placeholder="State" options='{"no_open": True}'/> <field name="zip" placeholder="ZIP" class="o_address_zip"/> <field name="country_id" placeholder="Country" class="o_address_country" options='{"no_open": True, "no_create": True}'/> </div> </group> <group> <field name="phone" widget="phone"/> <field name="mobile" widget="phone"/> <field name="email" widget="email" context="{'gravatar_image': True}"/> </group> <group> <field name="hostel_floors"/> <field name="active"/> <field name="type"/> <field name="hostel_rating"/> <field name="other_info"/> </group> </group> <group> <field name="description"/> </group> </sheet> </form> </field> </record> <!-- asrama.hostel action window --> <record id="action_hostel" model="ir.actions.act_window"> <field name="name">Hostel</field> <field name="type">ir.actions.act_window</field> <field name="res_model">asrama.hostel</field> <field name="view_mode">tree,form</field> <field name="help" type="html"> <p class="oe_view_nocontent_create"> Membuat Hostel </p> </field> </record> <menuitem id="hostel_main_menu" name="Hostel" sequence="1"/> <menuitem id="hostel_type_menu" name="Hostel" parent="hostel_main_menu" action="action_hostel" groups="group_hostel_manager" sequence="10"/> <menuitem id="hostel_sub1" name="Menu-01" parent="hostel_main_menu" sequence="1"/> </odoo> - Source code view pada model kedua
<?xml version='1.0' encoding='utf-8'?> <odoo> <!-- asrama.room tree view --> <record id="asrama_room_view_tree" model="ir.ui.view"> <field name="name">asrama.room.view.tree</field> <field name="model">asrama.room</field> <field name="arch" type="xml"> <tree string='Room'> <field name="name"/> <field name="room_no" /> <field name="floor_no" /> <field name="stage_id" /> </tree> </field> </record> <!-- asrama.room form view --> <record id="asrama_room_view_form" model="ir.ui.view"> <field name="name">asrama.room.view.form</field> <field name="model">asrama.room</field> <field name="arch" type="xml"> <form string="Room"> <sheet> <header> <field name="stage_id" widget='statusbar' options="{'clickable': '1', 'fold_field':'fold'}" /> </header> <header> <button name="make_available" string="Make Available" type="object"/> <button name="make_closed" string="Make Closed" type="object"/> <button name="log_all_room_members" string="Log semua kamar members" type="object"/> <button name="average_rent" string="Rata-rata sewa" type="object"/> </header> <header> <button name="create_categories" string="Create categories" type="object"/> <button name="update_room_no" string="Update Room No" type="object"/> <button name="find_room" string="Find Room" type="object"/> <button name="action_remove_room_members" string="Remove Room Members" type="object"/> </header> <header> <button name="filter_members" string="Filter Members" type="object"/> <button name="mapped_rooms" string="Mapped Rooms" type="object"/> <button name="sort_room" string="Sort Room" type="object"/> <button name="action_category_with_amounts" string="LOG dengan SQL Query" type="object"/> </header> <group> <group description='Kamar'> <field name="name" /> <field name="room_no" /> <field name="hostel_id" required="1"/> <field name="floor_no" /> <field name="active" /> <field name="category_id" /> <field name="date_terminate" /> </group> <group description='Harga'> <field name="student_per_room"/> <field name="availability"/> <field name="rent_amount" /> <field name="currency_id" /> <field name="remarks" /> </group> </group> <notebook> <page name="room_studennt" string="Para Pelajar"> <field name="student_ids"/> </page> <page name="asrama_amenities" string="Room Amenities"> <group> <field name="asrama_amenities_ids" widget="many2many_tags"/> </group> </page> </notebook> </sheet> </form> </field> </record> <!-- asrama.room minimal form view --> <record id="asrama_room_view_form_minimal" model="ir.ui.view"> <field name="name">Asrama Room Minimal</field> <field name="model">asrama.room</field> <field name="arch" type="xml"> <form> <group> <field name="name" /> <field name="room_no" /> <field name="hostel_id" required="1" /> <field name="floor_no" /> <field name="student_per_room" /> <field name="asrama_amenities_ids" widget="many2many_tags" options="{'color_field': 'color','no_create_edit': True}" /> </group> </form> </field> </record> <!-- asrama.room kanban view --> <record id="asrama_room_view_kanban" model="ir.ui.view"> <field name="name">Asrama Room Kanban</field> <field name="model">asrama.room</field> <field name="arch" type="xml"> <kanban default_group_by="stage_id" on_create="quick_create" quick_create_view="asramaku.asrama_room_view_form_minimal"> <field name="stage_id" /> <field name="color" /> <field name="activity_state" /> <progressbar field="popularity" colors='{"low":"success","medium":"warning","high":"danger"}' /> <templates> <t t-name="kanban-menu" groups="base.group_user"> <a t-if="widget.editable" role="menuitem" type="edit" class="dropdown-item">Edit</a> <a t-if="widget.deletable" role="menuitem" type="delete" class="dropdown-item">Delete</a> <ul class="oe_kanban_colorpicker" data-field="color" /> <div role="separator" class="dropdown-divider"></div> </t><!--kanban-menu--> <t t-name="kanban-box"> <div t-attf-class="{{'oe_kanban_color_' + kanban_getcolor(record.color.raw_value) }} oe_kanban_card oe_kanban_global_click oe_semantic_html_overide" > <div class="oe_kanban_card oe_kanban_global_click"> <strong class="o_kanban_record_title"> <field name="name" /> </strong> <div class="text-muted"> <field name="hostel_id" /> </div> <span class="oe_kanban_list_many2many"> <field name="asrama_amenities_ids" widget="many2many_tags" options="{'color_field':'color'}" /> </span> <div> <field name="popularity" widget='priority' /> </div> <div> <field name="activity_ids" widget="kanban_activity" /> </div> </div><!--oe_kanban_card--> </div><!--oe_kanban_color--> </t><!--kanban-box--> </templates> </kanban> </field> </record> <record id="asrama_room_action_kanban" model="ir.actions.act_window.view"> <field name="act_window_id" ref="asrama_room_action"/> <field name="view_id" ref="asrama_room_view_kanban"/> <field name="view_mode">kanban</field> <field name="sequence" eval="1"/> </record> <record id="asrama_room_action_tree" model="ir.actions.act_window.view"> <field name="act_window_id" ref="asrama_room_action"/> <field name="view_id" ref="asrama_room_view_tree"/> <field name="view_mode">tree</field> <field name="sequence" eval="2"/> </record> <record id="asrama_room_action_form" model="ir.actions.act_window.view"> <field name="act_window_id" ref="asrama_room_action"/> <field name="view_id" ref="asrama_room_view_form"/> <field name="view_mode">form</field> <field name="sequence" eval="3"/> </record> <!-- asrama.room action window --> <record id="asrama_room_action" model="ir.actions.act_window"> <field name="name">Room</field> <field name="type">ir.actions.act_window</field> <field name="res_model">asrama.room</field> <field name="view_mode">kanban,tree,form</field> <field name="domain">[]</field> <field name="context">{}</field> <field name="help" type="html"> <p class="oe_view_nocontent_create"> Tambah kamar </p> </field> </record> <!-- This Menu Item must have a parent and an action --> <menuitem id="asrama_room_menu" name="Room Asrama" parent="hostel_main_menu" action="asrama_room_action" sequence="2"/> </odoo> - Start Odoo dengan upgrade modul



- Tampilan smart button dengan statistik


Kunjungi https://www.proweb.co.id/implementasi-odoo/ untuk menambah wawasan anda mengenai Odoo.
