Kita telah melakukan pemrograman dasar dengan relasi many2one, many2many dan one2many pada model Odoo ERP. Di sini kita akan memberikan source dari pemrograman dasar pada Odoo ERP ini.
Source code pemrograman dasar Odoo ERP adalah seperti pada penjelasan-penjelasan berikut ini
- Source code pada folder root:
__init__.py:
1from . import models
__manifest__.py:
12345678910111213141516{
'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_property_tag_views.xml'
,
'views/estate_property_offer_views.xml'
,
'views/estate_menus.xml'
,
],
}
- Source code pada folder models:
__init__.py:
1234from . import estate_property_offer
from . import estate_property_tag
from . import estate_property_type
from . import estate_property
estate_property.py:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647from 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"
)
tags_id = fields.Many2many(
"estate.property.tag"
, string=
"Property Tags"
)
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'
)
user_id = fields.Many2one(
"res.users"
, string=
"Salesman"
,
default
=lambda self: self.env.user)
buyer_id = fields.Many2one(
"res.partner"
, string=
"Buyer"
,
copy
=False)
offer_ids = fields.One2many(
"estate.property.offer"
,
"property_id"
, string=
"Offer"
)
estate_property_offer.py:
123456789101112131415161718from odoo import 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"
)
estate_property_tag.py:
1234567from odoo import fields, models
class
EstatePropertyTag(models.Model):
_name =
"estate.property.tag"
_description =
"Property Tag"
name = fields.Char(required=True)
estate_property_type.py:
12345678from odoo import fields, models
class
EstatePropertyType(models.Model):
_name =
"estate.property.type"
_description =
"Property Type"
name = fields.Char(required=True)
- Source code pada folder security:
ir.model.access.csv:12345id,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
acl_estate_tag,estate.estate_property_tag,model_estate_property_tag,base.group_user,1,1,1,1
acl_estate_offer,estate.estate_property_offer,model_estate_property_offer,base.group_user,1,1,1,1
- Source code pada folder views:
estate_menus.xml:
123456789101112<?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 id=
"estate_property_tag_menu_action"
action=
"estate_property_tag_action"
/>
</menuitem>
</menuitem>
</odoo>
estate_property_offer_views.xml:
123456789101112131415161718192021222324252627282930313233<?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=
"status"
/>
</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=
"status"
/>
</group>
</group>
</sheet>
</form>
</field>
</record>
</odoo>
estate_property_tag_views.xml:
12345678910111213141516171819202122232425262728293031323334<?xml version=
"1.0"
?>
<odoo>
<record id=
"estate_property_tag_action"
model=
"ir.actions.act_window"
>
<field name=
"name"
>Property Tag</field>
<field name=
"res_model"
>estate.property.tag</field>
<field name=
"view_mode"
>tree,form</field>
</record>
<record id=
"estate_property_tag_view_tree"
model=
"ir.ui.view"
>
<field name=
"name"
>estate.property.tag.tree</field>
<field name=
"model"
>estate.property.tag</field>
<field name=
"arch"
type=
"xml"
>
<tree string=
"Tagnya"
>
<field name=
"name"
/>
</tree>
</field>
</record>
<record id=
"estate_property_tag_view_form"
model=
"ir.ui.view"
>
<field name=
"name"
>estate.property.tag.form</field>
<field name=
"model"
>estate.property.tag</field>
<field name=
"arch"
type=
"xml"
>
<form string=
"Tagnya"
>
<sheet>
<group>
<group>
<field name=
"name"
/>
</group>
</group>
</sheet>
</form>
</field>
</record>
</odoo>
estate_property_type_views.xml:
1234567891011121314151617181920212223242526272829303132333435<?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:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293<?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"
/>
<field name=
"user_id"
/>
<field name=
"buyer_id"
/>
</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=
"tags_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>
<page string=
"Offers"
>
<group>
<field name=
"offer_ids"
/>
</group>
</page>
<page string=
"Other Info"
>
<group>
<field name=
"user_id"
/>
<field name=
"buyer_id"
/>
</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://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