Setelah kita membuat button dan actionnya pada pemrograman dengan Odoo ERP maka kita melanjutkan dengan pembuatan button pada tree atau list view pada pembuatan aplikasi dengan Odoo ERP.
Pembuatan button dalam list view pada pengembangan aplikasi Odoo ERP adalah seperti pada penjelasan-penjelasan berikut ini
- Update model
Kita masuk ke Virtualmin dari Webmin dan masuk ke File Manager kemudian melakukan edit pada model seperti pada gambar di atas.
- Update view
Kita kemudian melanjutkan pengubahan pada view seperti pada gambar di atas.
- Restart Odoo
Setelah kita melakukan perubahan pada model maka kita melakukan restart Odoo seperti pada gambar di atas.
- Upgrade modul
Setelah kita melakukan update pada view maka kita melanjutkan dengan upgrade modul seperti pada gambar di atas.
- Menggunakan button pada list view
Kita kemudian masuk ke list view dan melakukan accept pada salah satunya.
Tampak property sudah diupdate.
- Source code pada model estate_property_offer.py
from dateutil.relativedelta import relativedelta from odoo import api, fields, models class EstatePropertyOffer(models.Model): _name = "estate.property.offer" _description = "Property Offer" price = fields.Float() status = fields.Selection( [ ('a', 'Accepted'), ('r', 'Refused'), ], 'Status', copy=False ) partner_id = fields.Many2one("res.partner") property_id = fields.Many2one("estate.property") validity = fields.Integer(string="Validity (days)", default=7) # Computed date_deadline = fields.Date(string="Deadline", compute="_compute_date_deadline", inverse="_inverse_date_deadline") @api.depends("create_date", "validity") def _compute_date_deadline(self): for offer in self: date = offer.create_date.date() if offer.create_date else fields.Date.today() offer.date_deadline = date + relativedelta(days=offer.validity) def _inverse_date_deadline(self): for offer in self: date = offer.create_date.date() if offer.create_date else fields.Date.today() offer.validity = (offer.date_deadline - date).days def action_accept(self): if "a" in self.mapped("property_id.offer_ids.status"): raise UserError("An offer as already been accepted.") self.write( { "status": "a", } ) return self.mapped("property_id").write( { "state": "a", "selling_price": self.price, "buyer_id": self.partner_id.id, } ) def action_refuse(self): return self.write( { "status": "r", } )
- Source code pada view estate_property_offer_views.xml
<?xml version="1.0"?> <odoo> <record id="estate_property_offer_view_tree" model="ir.ui.view"> <field name="name">estate.property.offer.tree</field> <field name="model">estate.property.offer</field> <field name="arch" type="xml"> <tree string="Offernya" > <field name="price"/> <field name="partner_id"/> <field name="validity"/> <field name="date_deadline"/> <button name="action_accept" type="object" title="Accept" icon="fa-check" attrs="{'invisible': [('status', '!=', False)]}"/> <button name="action_refuse" type="object" title="Refuse" icon="fa-times" attrs="{'invisible': [('status', '!=', False)]}"/> <field name="status" invisible="1"/> </tree> </field> </record> <record id="estate_property_offer_view_form" model="ir.ui.view"> <field name="name">estate.property.offer.form</field> <field name="model">estate.property.offer</field> <field name="arch" type="xml"> <form string="Offernya"> <sheet> <group> <group> <field name="price"/> <field name="partner_id"/> <field name="validity"/> <field name="date_deadline"/> <field name="status"/> </group> </group> </sheet> </form> </field> </record> </odoo>
Informasi lebih lanjut silahkan mengunjungi
1. https://www.odoo.com/documentation/16.0/developer/howtos/rdtraining/10_actions.html .
2. https://github.com/odoo/technical-training-solutions/tree/16.0-core/estate .
Kunjungi www.proweb.co.id untuk menambah wawasan anda.
Jika anda tertarik mengenai aplikasi Odoo ERP silahkan mengisi form di bawah ini
Pembuatan Button dalam List View pada Kustomisasi Odoo ERP