Skip to content

18.0 tutorial importable modules aras #811

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 12 commits into
base: 18.0
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file added estate/__init__.py
Empty file.
31 changes: 31 additions & 0 deletions estate/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{
'name': 'Estate',
'version': '1.0',
'category': 'Estate',
'summary': 'Tutorial module',
'depends': [
'website'
],
'data': [
'data/estate_models.xml',
'data/estate_property_type.xml',
'data/estate_property_tag.xml',
'data/estate_property_offer.xml',
'data/estate_property.xml',
'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',
'controllers/estate_controller.xml',
'security/ir.model.access.csv',
'security/estate_security.xml',
'data/estate_tour.xml',
],
"assets": {
"web.assets_backend": [
"estate/static/src/js/tour.js",
],
},
'license': 'OEEL-1',
}
18 changes: 18 additions & 0 deletions estate/controllers/estate_controller.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?xml version='1.0' encoding='UTF-8'?>

<odoo>
<record id="server_action_estate_list" model="ir.actions.server">
<field name="name">Estate List Controller</field>
<field name="model_id" ref="estate.model_estate_property"/>
<field name="website_published">True</field>
<field name="website_path">estate</field>
<field name="state">code</field>
<field name="code"><![CDATA[
html = '<html><body><h1>Properties</h1><ul>'
for property in request.env['x_estate.property'].search([]):
html += f'<li>{property.x_name}</li>'
html += '</ul></body></html>'
response = request.make_response(html)
]]></field>
</record>
</odoo>
22 changes: 22 additions & 0 deletions estate/data/estate_models.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="model_estate_property" model="ir.model">
<field name="name">Estate Property</field>
<field name="model">x_estate.property</field>
</record>

<record id="model_estate_property_type" model="ir.model">
<field name="name">Property Type</field>
<field name="model">x_estate.property.type</field>
</record>

<record id="model_estate_property_tag" model="ir.model">
<field name="name">Property Tag</field>
<field name="model">x_estate.property.tag</field>
</record>

<record id="model_estate_property_offer" model="ir.model">
<field name="name">Property Offer</field>
<field name="model">x_estate.property.offer</field>
</record>
</odoo>
191 changes: 191 additions & 0 deletions estate/data/estate_property.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="field_estate_property_name" model="ir.model.fields">
<field name="model_id" ref="model_estate_property" />
<field name="name">x_name</field>
<field name="field_description">Name</field>
<field name="ttype">char</field>
<field name="required">True</field>
</record>

<record id="field_estate_property_selling_price" model="ir.model.fields">
<field name="model_id" ref="model_estate_property" />
<field name="name">x_selling_price</field>
<field name="field_description">Selling Price</field>
<field name="ttype">float</field>
<field name="required">True</field>
</record>

<record id="field_estate_property_description" model="ir.model.fields">
<field name="model_id" ref="model_estate_property" />
<field name="name">x_description</field>
<field name="field_description">Description</field>
<field name="ttype">html</field>
</record>

<record id="field_estate_property_postcode" model="ir.model.fields">
<field name="model_id" ref="model_estate_property" />
<field name="name">x_postcode</field>
<field name="field_description">Postcode</field>
<field name="ttype">char</field>
</record>

<record id="field_estate_property_date_availability" model="ir.model.fields">
<field name="model_id" ref="model_estate_property" />
<field name="name">x_date_availability</field>
<field name="field_description">Date Availability</field>
<field name="ttype">date</field>
</record>

<record id="field_estate_property_expected_price" model="ir.model.fields">
<field name="model_id" ref="model_estate_property" />
<field name="name">x_expected_price</field>
<field name="field_description">Expected Price</field>
<field name="ttype">float</field>
<field name="required">True</field>
</record>

<record id="field_estate_property_bedrooms" model="ir.model.fields">
<field name="model_id" ref="model_estate_property" />
<field name="name">x_bedrooms</field>
<field name="field_description">Bedrooms</field>
<field name="ttype">integer</field>
</record>

<record id="field_estate_property_living_area" model="ir.model.fields">
<field name="model_id" ref="model_estate_property" />
<field name="name">x_living_area</field>
<field name="field_description">Living Area</field>
<field name="ttype">integer</field>
</record>

<record id="field_estate_property_facades" model="ir.model.fields">
<field name="model_id" ref="model_estate_property" />
<field name="name">x_facades</field>
<field name="field_description">Facades</field>
<field name="ttype">integer</field>
</record>

<record id="field_estate_property_garage" model="ir.model.fields">
<field name="model_id" ref="model_estate_property" />
<field name="name">x_garage</field>
<field name="field_description">Garage</field>
<field name="ttype">boolean</field>
</record>

<record id="field_estate_property_garden" model="ir.model.fields">
<field name="model_id" ref="model_estate_property" />
<field name="name">x_garden</field>
<field name="field_description">Garden</field>
<field name="ttype">boolean</field>
</record>

<record id="field_estate_property_garden_area" model="ir.model.fields">
<field name="model_id" ref="model_estate_property" />
<field name="name">x_garden_area</field>
<field name="field_description">Garden Area</field>
<field name="ttype">integer</field>
</record>

<record id="field_estate_property_garden_orientation" model="ir.model.fields">
<field name="model_id" ref="model_estate_property" />
<field name="name">x_garden_orientation</field>
<field name="field_description">Garden Orientation</field>
<field name="ttype">selection</field>
</record>

<record id="field_estate_property_garden_orientation_north" model="ir.model.fields.selection">
<field name="field_id" ref="field_estate_property_garden_orientation" />
<field name="name">North</field>
<field name="value">north</field>
</record>

<record id="field_estate_property_garden_orientation_south" model="ir.model.fields.selection">
<field name="field_id" ref="field_estate_property_garden_orientation" />
<field name="name">South</field>
<field name="value">south</field>
</record>

<record id="field_estate_property_garden_orientation_east" model="ir.model.fields.selection">
<field name="field_id" ref="field_estate_property_garden_orientation" />
<field name="name">East</field>
<field name="value">east</field>
</record>

<record id="field_estate_property_garden_orientation_west" model="ir.model.fields.selection">
<field name="field_id" ref="field_estate_property_garden_orientation" />
<field name="name">West</field>
<field name="value">west</field>
</record>

<record id="field_estate_property_proprty_type_id" model="ir.model.fields">
<field name="model_id" ref="estate.model_estate_property" />

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ref to an id of the same module works without having to specify the complete xmlid

Suggested change
<field name="model_id" ref="estate.model_estate_property" />
<field name="model_id" ref="model_estate_property" />

This is not true when dealing with env.ref

<field name="name">x_property_type_id</field>
<field name="field_description">Type</field>
<field name="ttype">many2one</field>
<field name="relation">x_estate.property.type</field>
<field name="required">True</field>
<field name="on_delete">restrict</field>
</record>

<record id="field_estate_property_partner_id" model="ir.model.fields">
<field name="model_id" ref="estate.model_estate_property" />
<field name="name">x_partner_id</field>
<field name="field_description">Buyer</field>
<field name="ttype">many2one</field>
<field name="relation">res.partner</field>
</record>

<record id="field_estate_property_user_id" model="ir.model.fields">
<field name="model_id" ref="estate.model_estate_property" />
<field name="name">x_user_id</field>
<field name="field_description">Salesperson</field>
<field name="ttype">many2one</field>
<field name="relation">res.partner</field>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Salesperson is a user, no?

</record>

<record id="field_estate_property_tag_ids" model="ir.model.fields">
<field name="model_id" ref="estate.model_estate_property" />
<field name="name">x_property_tag_ids</field>
<field name="field_description">Tags</field>
<field name="ttype">many2many</field>
<field name="relation">x_estate.property.tag</field>
</record>

<record id="field_estate_property_offer_ids" model="ir.model.fields">
<field name="model_id" ref="estate.model_estate_property" />
<field name="name">x_property_offer_ids</field>
<field name="field_description">Offers</field>
<field name="ttype">one2many</field>
<field name="relation">x_estate.property.offer</field>
<field name="relation_field">x_property_id</field>
</record>

<record id="field_estate_property_total_area" model="ir.model.fields">
<field name="model_id" ref="estate.model_estate_property" />
<field name="name">x_total_area</field>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you need to store that field?

<field name="field_description">Total Area</field>
<field name="ttype">float</field>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since both areas are integers, you may want to stick with integers

Suggested change
<field name="ttype">float</field>
<field name="ttype">integer</field>

<field name="depends">x_living_area,x_garden_area</field>
<field name="compute"><![CDATA[
for property in self:
property['x_total_area'] = property.x_living_area + property.x_garden_area
]]></field>
</record>

<record id="field_estate_property_country_id" model="ir.model.fields">
<field name="model_id" ref="estate.model_estate_property" />
<field name="name">x_country_id</field>
<field name="field_description">Buyer's Country</field>
<field name="ttype">many2one</field>
<field name="relation">res.country</field>
<field name="related">x_partner_id.country_id</field>
</record>

<record id="field_estate_property_api_published" model="ir.model.fields">
<field name="model_id" ref="estate.model_estate_property" />
<field name="name">x_api_published</field>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you find out how to set a default value for this field?

<field name="field_description">Api Published</field>
<field name="ttype">boolean</field>
</record>
</odoo>
64 changes: 64 additions & 0 deletions estate/data/estate_property_offer.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>

<odoo>
<record id="field_estate_property_offer_price" model="ir.model.fields">
<field name="model_id" ref="model_estate_property_offer" />
<field name="name">x_price</field>
<field name="field_description">Price</field>
<field name="ttype">float</field>
<field name="required">True</field>
</record>

<record id="field_estate_property_offer_status" model="ir.model.fields">
<field name="model_id" ref="model_estate_property_offer" />
<field name="name">x_status</field>
<field name="field_description">Status</field>
<field name="ttype">selection</field>
</record>

<record id="field_estate_property_status_accepted" model="ir.model.fields.selection">
<field name="field_id" ref="field_estate_property_offer_status" />
<field name="name">Accepted</field>
<field name="value">accepted</field>
</record>

<record id="field_estate_property_status_refused" model="ir.model.fields.selection">
<field name="field_id" ref="field_estate_property_offer_status" />
<field name="name">Refused</field>
<field name="value">refused</field>
</record>

<record id="field_estate_property_offer_partner_id" model="ir.model.fields">
<field name="model_id" ref="model_estate_property_offer" />
<field name="name">x_partner_id</field>
<field name="field_description">Buyer</field>
<field name="ttype">many2one</field>
<field name="relation">res.partner</field>
<field name="required">True</field>
<field name="on_delete">cascade</field>
</record>

<record id="field_estate_property_offer_property_id" model="ir.model.fields">
<field name="model_id" ref="model_estate_property_offer" />
<field name="name">x_property_id</field>
<field name="field_description">Property</field>
<field name="ttype">many2one</field>
<field name="relation">x_estate.property</field>
<field name="required">True</field>
<field name="on_delete">cascade</field>
</record>

<record id="action_estate_property_offer_accept" model="ir.actions.server">
<field name="model_id" ref="model_estate_property_offer"/>
<field name="name">x_action_accept_offer</field>
<field name="state">code</field>
<field name="code"><![CDATA[
for offer in records:
offer.write({'x_status': 'accepted'})
offer.x_property_id.write({'x_selling_price': offer.x_price, 'x_partner_id': offer.x_partner_id})
for rejected_offer in offer.x_property_id.x_property_offer_ids:
if rejected_offer != offer:
rejected_offer.write({'x_status': 'refused'})
Comment on lines +56 to +61

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, but what if you accept two offers for the same property? It seems like only one will be accepted, but it is kind of magic, no? Shouldn't we take more care (and maybe raise in such cases)?

]]></field>
</record>
</odoo>
18 changes: 18 additions & 0 deletions estate/data/estate_property_tag.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>

<odoo>
<record id="field_estate_property_tag_name" model="ir.model.fields">
<field name="model_id" ref="model_estate_property_tag" />
<field name="name">x_name</field>
<field name="field_description">Name</field>
<field name="ttype">char</field>
<field name="required">True</field>
</record>

<record id="field_estate_property_tag_color" model="ir.model.fields">
<field name="model_id" ref="model_estate_property_tag" />
<field name="name">x_color</field>
<field name="field_description">Color</field>
<field name="ttype">integer</field>
</record>
</odoo>
11 changes: 11 additions & 0 deletions estate/data/estate_property_type.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>

<odoo>
<record id="field_estate_property_type_name" model="ir.model.fields">
<field name="model_id" ref="model_estate_property_type" />
<field name="name">x_name</field>
<field name="field_description">Name</field>
<field name="ttype">char</field>
<field name="required">True</field>
</record>
</odoo>
9 changes: 9 additions & 0 deletions estate/data/estate_tour.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>

<odoo>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

User probably don't want this tour to show up anytime they upgrade, so setting this as noupdate seems appropriate

<record id="estate_tour" model="web_tour.tour">
<field name="name">estate_tour</field>
<field name="sequence">2</field>
<field name="rainbow_man_message">Welcome! Happy exploring.</field>
</record>
</odoo>
20 changes: 20 additions & 0 deletions estate/security/estate_security.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="estate_property_public_public_write_record_rule" model="ir.rule">
<field name="name">Public user write rule</field>
<field name="model_id" ref="model_estate_property"/>
<field name="domain_force">[('id','=',False)]</field>
<field name="groups" eval="[(4, ref('base.group_public'))]"/>
<field name="perm_write" eval="False"/>
<field name="active" eval="True"/>
</record>

<record id="estate_property_public_read_record_rule" model="ir.rule">
<field name="name">Public user read rule</field>
<field name="model_id" ref="model_estate_property"/>
<field name="domain_force">[('x_api_published','=',True)]</field>
<field name="groups" eval="[(4, ref('base.group_public'))]"/>
<field name="perm_read" eval="True"/>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

By default the rule applies to all perm_* fields, so this one is not mandatory (and somehow misleading, because you are giving other rights too)

Suggested change
<field name="perm_read" eval="True"/>

<field name="active" eval="True"/>
</record>
</odoo>
Loading