Skip to content
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.
22 changes: 22 additions & 0 deletions estate/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"name": "Estate Tutorial",
"author": "joemo",
"license": "LGPL-3",
"application": True,
"depends": ["base", "base_import_module", "website"],
"data": [
"models/estate_property_type.xml",
"models/estate_property_tag.xml",
"models/estate_property.xml",
"models/estate_property_offer.xml",
"security/ir.model.access.csv",
"security/record_rules.xml",
"views/estate_property_offer_views.xml",
"views/estate_property_type_views.xml",
"views/estate_property_tag_views.xml",
"views/estate_property_views.xml",
"views/estate_menus.xml",
"controllers/estate_property_controllers.xml",
"data/x_estate.property.type.csv",
]
}
18 changes: 18 additions & 0 deletions estate/controllers/estate_property_controllers.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<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>
5 changes: 5 additions & 0 deletions estate/data/x_estate.property.type.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
id,x_name
property_type_0,Residential
property_type_1,Commercial
property_type_2,Industrial
property_type_3,Land
178 changes: 178 additions & 0 deletions estate/models/estate_property.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
<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="field_estate_property_name" model="ir.model.fields">
<field name="model_id" ref="estate.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="estate.model_estate_property"/>
<field name="name">x_selling_price</field>
<field name="field_description">Selling Price</field>
<field name="ttype">float</field>
</record>

<record id="field_estate_property_description" model="ir.model.fields">
<field name="model_id" ref="estate.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="estate.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_available" model="ir.model.fields">
<field name="model_id" ref="estate.model_estate_property"/>
<field name="name">x_date_available</field>
<field name="field_description">Date available</field>
<field name="ttype">date</field>
</record>

<record id="field_estate_property_expected_price" model="ir.model.fields">
<field name="model_id" ref="estate.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="estate.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="estate.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="estate.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="estate.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="estate.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="estate.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="estate.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_type_id" model="ir.model.fields">
<field name="model_id" ref="estate.model_estate_property"/>
<field name="name">x_property_type_id</field>
<field name="field_description">Property 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.users</field>
</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">Property Tags</field>
<field name="ttype">many2many</field>
<field name="relation">x_estate.property.tag</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>
<field name="field_description">Total Area</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_api_published" model="ir.model.fields">
<field name="model_id" ref="estate.model_estate_property"/>
<field name="name">x_api_published</field>
<field name="field_description">Api Published</field>
<field name="ttype">boolean</field>
</record>

</odoo>
63 changes: 63 additions & 0 deletions estate/models/estate_property_offer.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<odoo>
<record id="model_estate_property_offer" model="ir.model">
<field name="name">Estate Property Offer</field>
<field name="model">x_estate.property.offer</field>
</record>

<record id="field_estate_property_offer_price" model="ir.model.fields">
<field name="model_id" ref="estate.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="estate.model_estate_property_offer"/>
<field name="name">x_status</field>
<field name="field_description">Status</field>
<field name="ttype">selection</field>
</record>


<record id="selection_estate_property_offer_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="selection_estate_property_offer_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="estate.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">restrict</field>
</record>

<record id="field_estate_property_offer_property_id" model="ir.model.fields">
<field name="model_id" ref="estate.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">restrict</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_offer_ids</field>
<field name="field_description">Property Offers</field>
<field name="ttype">one2many</field>
<field name="relation">x_estate.property.offer</field>
<field name="relation_field">x_property_id</field>
</record>

</odoo>
14 changes: 14 additions & 0 deletions estate/models/estate_property_tag.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<odoo>
<record id="model_estate_property_tag" model="ir.model">
<field name="name">Estate Property Type</field>
<field name="model">x_estate.property.tag</field>
</record>

<record id="field_estate_property_tag_name" model="ir.model.fields">
<field name="model_id" ref="estate.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>
</odoo>
14 changes: 14 additions & 0 deletions estate/models/estate_property_type.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<odoo>
<record id="model_estate_property_type" model="ir.model">
<field name="name">Estate Property Type</field>
<field name="model">x_estate.property.type</field>
</record>

<record id="field_estate_property_type_name" model="ir.model.fields">
<field name="model_id" ref="estate.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>
6 changes: 6 additions & 0 deletions estate/security/ir.model.access.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_estate_property,access_estate_property,model_estate_property,base.group_user,1,1,1,1
access_estate_property_public,access_estate_property,model_estate_property,base.group_public,1,1,0,0
access_estate_property_type,access_estate_property_type,model_estate_property_type,base.group_user,1,1,1,1
access_estate_property_tag,access_estate_property_tag,model_estate_property_tag,base.group_user,1,1,1,1
access_estate_property_offer,access_estate_property_offer,model_estate_property_offer,base.group_user,1,1,1,1
17 changes: 17 additions & 0 deletions estate/security/record_rules.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<odoo>
<record id="rule_estate_public_no_edit" model="ir.rule">
<field name="name">Public no edit</field>
<field name="model_id" ref="estate.model_estate_property"/>
<field name="domain_force">[('id', '=', False)]</field>
<field name="groups" eval="[Command.link(ref('base.group_public'))]"/>
<field name="perm_write" eval="True"/>
</record>

<record id="rule_estate_public_only_see_api_published" model="ir.rule">
<field name="name">Public only see api published</field>
<field name="model_id" ref="estate.model_estate_property"/>
<field name="domain_force">[('x_api_published', '=', True)]</field>
<field name="groups" eval="[Command.link(ref('base.group_public'))]"/>
<field name="perm_read" eval="True"/>
</record>
</odoo>
11 changes: 11 additions & 0 deletions estate/views/estate_menus.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<odoo>
<menuitem id="estate_menu_root" name="Real Estate">
<menuitem id="estate_advertisement_menu" name="Advertisement">
<menuitem id="estate_property_menu" name="Properties" action="estate_property_action"/>
</menuitem>
<menuitem id="estate_settings_menu" name="Settings">
<menuitem id="estate_property_type_menu" name="Property Types" action="estate_property_type_action"/>
<menuitem id="estate_property_tag_menu" name="Property Tags" action="estate_property_tag_action"/>
</menuitem>
</menuitem>
</odoo>
38 changes: 38 additions & 0 deletions estate/views/estate_property_offer_views.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<odoo>
<record id="action_x_estate_property_accept_offer_refuse_others" model="ir.actions.server">
<field name="name">Accept offer and refuse all others</field>
<field name="model_id" ref="estate.model_estate_property_offer"/>
<field name="state">code</field>
<field name="binding_model_id" ref="estate.model_estate_property"/>
<field name="binding_view_types">form</field>
<field name="code">
<![CDATA[
record.x_property_id["x_selling_price"] = record.x_price
record.x_property_id["x_partner_id"] = record.x_partner_id
for offer in record.x_property_id.x_offer_ids:
offer["x_status"] = "accepted" if offer.id == record.id else "refused"
]]>
</field>
</record>


<record id="estate_property_offer_view_list" model="ir.ui.view">
<field name="name">estate.property.offer.view.list</field>
<field name="model">x_estate.property.offer</field>
<field name="arch" type="xml">
<list string="Offers" editable="bottom">
<field name="x_price"/>
<field name="x_partner_id"/>
<field name="x_status"/>
<button name="estate.action_x_estate_property_accept_offer_refuse_others" type="action" title="Accept" icon="fa-check" string="Accept"/>
</list>
</field>
</record>

<record id="estate_property_offer_action" model="ir.actions.act_window">
<field name="name">Offers</field>
<field name="res_model">x_estate.property.offer</field>
<field name="view_mode">list</field>
<field name="domain">[('property_type_id', '=', active_id)]</field>
</record>
</odoo>
Loading