Dalam pengembangan aplikasi kita pasti memiliki banyak tabel yang terhubung satu dengan yang lain. Hubungan ini diimplentasikan dalam relasi antar model.
Pemrograman relasi antar model pada Odoo ERP adalah seperti pada penjelasan-penjelasan berikut ini
- Update model dan hak akses ke model
Kita login dengan menggunakan user biasa ke Virtualmin dari Webmin, nasuk ke File Manaager dan melihat isi folder models seperti pada gambar di atas.
Kita kemudian meliaht file init untuk models seperti pada gambar di atas.
Kita kemudian melihat isi model dari property type seperti pada gambar di atas.
Kita kemudian mengupdate source model property seperti pada gambar di atas.
Kita kemudian melihat isi folder security seperti pada gambar di atas.
Tampak isi dari model access dalam security.
Kita melakukan restart odoo karena kita mengupdate model.
- Mengupdate view
Kita kemudian melihat folder views.
Kita kemudian mengupdate menu seperti pada gambar di atas.
Tampak view dari property type.
Kita kemudian melakukan update dari property seperti pada gambar di atas.
Tampak daftar file dari modul.
Kita kemudian mengupdate manifest seperti pada gambar di atas.
Setelah kita melakukan update pada view maka kita melakukan Upgrade modul seperti pada gambar di atas.
- Pengisian Property Type
Kita kemudian masuk ke menu Settings | Property Type seperti pada gambar di atas.
Kita kemudian melakukan pengisian property type seperti pada gambar di atas.
- Pengisian property
Kita kemudian menambahkan informasi properti seperti pada gambar di atas.
Tampak daftar property yang sudah kita masukkan.
- Melihat model
Kita kemudian masuk ke aplikasi Settings dan masuk ke menu Technical | Models dan mencari modul kita seperti pada gambar di atas.
Tampak ada tambahan field untuk relasi antar model ini.
Tampak informasi detil dari field untuk relasi model.
- Source code pada folder root dari modul
__manifest__.py:{ 'name': "Estate 01", 'version': '1.0', 'depends': ['base'], 'author': "Proweb Indonesia", 'category': 'Estate', 'application': True, 'data':[ 'security/ir.model.access.csv', 'views/estate_property_views.xml', 'views/estate_property_type_views.xml', 'views/estate_menus.xml', ], }
__init__.py:
from . import models
- Source code pada folder model
__init__.py:from . import estate_property_type from . import estate_property
estate_property_type.py:
from odoo import fields, models class EstatePropertyType(models.Model): _name = "estate.property.type" _description = "Property Type" name = fields.Char(required=True)
estate_property.py:
from odoo import fields, models class EstateProperty(models.Model): _name = "estate.property" _description = "Real Estate Property" active = fields.Boolean(default=True) state = fields.Selection([ ('n', 'New'),('o', 'Offer Received'),('a', 'Offer Accepted'),('s', 'Sold'),('c', 'Cancelled'),],'State', default='n') name = fields.Char(required=True,default='Rumah Baru') description = fields.Text() property_type_id = fields.Many2one("estate.property.type", string="Property Type") postcode = fields.Char() date_availability = fields.Date(copy=False) expected_price = fields.Float() selling_price = fields.Float(readonly=True,copy=False) bedrooms = fields.Integer(default=2) living_area = fields.Integer() facades = fields.Integer() garage = fields.Boolean() garden = fields.Boolean() garden_area = fields.Integer() garden_orientation = fields.Selection([ ('n', 'North'),('s', 'South'),('e', 'East'),('w', 'West'),],'Garden Orientation', default='e')
- Source code pada folder security
ir.model.access.csv:id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink acl_estate,estate.estate_property,model_estate_property,base.group_user,1,1,1,1 acl_estate_type,estate.estate_property_type,model_estate_property_type,base.group_user,1,1,1,1
- Source code pada folder views
estate_menus.xml:<?xml version="1.0"?> <odoo> <menuitem id="estate_menu_root" name="Estate"> <menuitem id="estate_first_level_menu_listing" name="Listing"> <menuitem id="estate_property_menu_action" action="estate_property_action"/> </menuitem> <menuitem id="estate_first_level_menu_settings" name="Settings"> <menuitem id="estate_property_type_menu_action" action="estate_property_type_action"/> </menuitem> </menuitem> </odoo>
estate_property_type_views.xml:
<?xml version="1.0"?> <odoo> <record id="estate_property_type_action" model="ir.actions.act_window"> <field name="name">Property Type</field> <field name="res_model">estate.property.type</field> <field name="view_mode">tree,form</field> </record> <record id="estate_property_type_view_tree" model="ir.ui.view"> <field name="name">estate.property.type.tree</field> <field name="model">estate.property.type</field> <field name="arch" type="xml"> <tree string="Tipe" > <field name="name"/> </tree> </field> </record> <record id="estate_property_type_view_form" model="ir.ui.view"> <field name="name">estate.property.type.form</field> <field name="model">estate.property.type</field> <field name="arch" type="xml"> <form string="Tipe"> <sheet> <group> <group> <field name="name"/> </group> </group> </sheet> </form> </field> </record> </odoo>
estate_property_views.xml:
<?xml version="1.0"?> <odoo> <record id="estate_property_action" model="ir.actions.act_window"> <field name="name">Property</field> <field name="res_model">estate.property</field> <field name="view_mode">tree,form</field> </record> <record id="estate_property_view_tree" model="ir.ui.view"> <field name="name">estate.property.tree</field> <field name="model">estate.property</field> <field name="arch" type="xml"> <tree string="Rumahan" > <field name="name"/> <field name="property_type_id"/> <field name="postcode"/> <field name="bedrooms"/> <field name="living_area"/> <field name="expected_price"/> <field name="selling_price"/> <field name="date_availability"/> </tree> </field> </record> <record id="estate_property_view_form" model="ir.ui.view"> <field name="name">estate.property.form</field> <field name="model">estate.property</field> <field name="arch" type="xml"> <form string="Rumahan"> <sheet> <group> <group> <field name="name"/> <field name="property_type_id"/> <field name="postcode"/> <field name="date_availability"/> </group> <group> <field name="expected_price"/> <field name="selling_price"/> </group> </group> <notebook> <page string="Description"> <group> <field name="description"/> <field name="bedrooms"/> <field name="living_area"/> <field name="facades"/> <field name="garage"/> <field name="garden"/> <field name="garden_area"/> <field name="garden_orientation"/> </group> </page> </notebook> </sheet> </form> </field> </record> <record id="estate_property_view_search" model="ir.ui.view"> <field name="name">estate.property.tree</field> <field name="model">estate.property</field> <field name="arch" type="xml"> <search string="Rumahan" > <field name="name"/> <field name="postcode"/> <field name="expected_price"/> <field name="bedrooms"/> <field name="living_area"/> <field name="facades"/> <filter string="Archived" name="inactive" domain="[('active', '=', False)]"/> </search> </field> </record> </odoo>
Informasi lebih lanjut silahkan mengunjungi
1. https://www.odoo.com/documentation/16.0/developer/howtos/rdtraining/08_relations.html .
2. https://www.odoo.com/documentation/16.0/developer/reference/backend/orm.html#odoo.fields.Many2one .
3. 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