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

  1. 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.
  2. 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.
  3. 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.
  4. Pengisian property

    Kita kemudian menambahkan informasi properti seperti pada gambar di atas.


    Tampak daftar property yang sudah kita masukkan.
  5. 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.
  6. 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
    
  7. 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')
    
  8. 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
    
  9. 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

 

Pemrograman Relasi Many2one Model pada Odoo ERP