Skip to content

Commit 204b4bc

Browse files
committed
[ADD] estate: Real Estate App for tutorials
Added Real estate app built up to the end of chapter 6 of the v18 tutorials
1 parent b509c0d commit 204b4bc

File tree

8 files changed

+148
-0
lines changed

8 files changed

+148
-0
lines changed

estate/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from . import models

estate/__manifest__.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
'name': 'Real Estate',
3+
'version': '1.0',
4+
'category': 'Tutorials',
5+
'depends': [
6+
'base'
7+
],
8+
'data': [
9+
'security/ir.model.access.csv',
10+
11+
'views/estate_property_views.xml',
12+
'views/estate_menu_views.xml'
13+
],
14+
'installable': True,
15+
'application': True,
16+
'auto_install': False
17+
}

estate/models/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from . import property

estate/models/property.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from dateutil.relativedelta import relativedelta
2+
from odoo import models, fields
3+
4+
5+
class TestModel(models.Model):
6+
_name = 'estate.property'
7+
_description = 'Property'
8+
9+
name = fields.Char(string='Title', required=True)
10+
description = fields.Text()
11+
postcode = fields.Char()
12+
date_availability = fields.Date(string='Available From', copy=False, default=lambda self: fields.Datetime.today() + relativedelta(months=3))
13+
expected_price = fields.Float(required=True)
14+
selling_price = fields.Float(readonly=True, copy=False)
15+
bedrooms = fields.Integer(default=2)
16+
living_area = fields.Integer(string='Living Area (m²)')
17+
facades = fields.Integer()
18+
garage = fields.Boolean()
19+
garden = fields.Boolean()
20+
garden_area = fields.Integer(string='Garden Area (m²)')
21+
garden_orientation = fields.Selection([
22+
('north', 'North'),
23+
('east', 'East'),
24+
('south', 'South'),
25+
('west', 'West')
26+
])
27+
active = fields.Boolean(default=True)
28+
state = fields.Selection([
29+
('new', 'New'),
30+
('offer_received', 'Offer Received'),
31+
('offer_accepted', 'Offer Accepted'),
32+
('sold', 'Sold'),
33+
('cancelled', 'Cancelled')
34+
])
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
2+
access_estate_property,access_estate_property,model_estate_property,base.group_user,1,1,1,1

estate/static/description/icon.png

5.48 KB
Loading

estate/views/estate_menu_views.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<odoo>
3+
<menuitem id="estate_menu_root" name="Real Estate" web_icon="estate,static/description/icon.png">
4+
<menuitem id="estate_advertisements_menu" name="Advertisements">
5+
<menuitem id="estate_properties_menu" action="estate_property_action"/>
6+
</menuitem>
7+
</menuitem>
8+
</odoo>
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<odoo>
3+
<record id="estate_property_view_list" model="ir.ui.view">
4+
<field name="name">estate.property.list</field>
5+
<field name="model">estate.property</field>
6+
<field name="arch" type="xml">
7+
<list string="Properties">
8+
<field name="name"/>
9+
<field name="postcode"/>
10+
<field name="bedrooms"/>
11+
<field name="living_area"/>
12+
<field name="expected_price"/>
13+
<field name="selling_price"/>
14+
<field name="date_availability"/>
15+
</list>
16+
</field>
17+
</record>
18+
19+
<record id="estate_property_view_form" model="ir.ui.view">
20+
<field name="name">estate.property.form</field>
21+
<field name="model">estate.property</field>
22+
<field name="arch" type="xml">
23+
<form string="Properties">
24+
<sheet>
25+
<div class="oe_title">
26+
<h1>
27+
<field name="name"/>
28+
</h1>
29+
</div>
30+
<group>
31+
<group>
32+
<field name="postcode"/>
33+
<field name="date_availability"/>
34+
</group>
35+
<group>
36+
<field name="expected_price"/>
37+
<field name="selling_price"/>
38+
</group>
39+
</group>
40+
<notebook>
41+
<page string="Description">
42+
<group>
43+
<field name="description"/>
44+
<field name="bedrooms"/>
45+
<field name="living_area"/>
46+
<field name="facades"/>
47+
<field name="garage"/>
48+
<field name="garden"/>
49+
<field name="garden_area"/>
50+
<field name="garden_orientation"/>
51+
</group>
52+
</page>
53+
</notebook>
54+
</sheet>
55+
</form>
56+
</field>
57+
</record>
58+
59+
<record id="estate_property_view_filter" model="ir.ui.view">
60+
<field name="name">estate.property.list.select</field>
61+
<field name="model">estate.property</field>
62+
<field name="arch" type="xml">
63+
<search string="Search Property">
64+
<field name="name"/>
65+
<field name="postcode"/>
66+
<field name="expected_price"/>
67+
<field name="bedrooms"/>
68+
<field name="living_area"/>
69+
<field name="facades"/>
70+
71+
<filter name="available" string="Available" domain="[('date_availability', '&lt;=', context_today().strftime('%Y-%m-%d'))]"/>
72+
73+
<group expand="0" string="Group By">
74+
<filter string="Postcode" name="postcode" domain="[]" context="{'group_by': 'postcode'}"/>
75+
</group>
76+
</search>
77+
</field>
78+
</record>
79+
80+
<record id="estate_property_action" model="ir.actions.act_window">
81+
<field name="name">Properties</field>
82+
<field name="res_model">estate.property</field>
83+
<field name="view_mode">list,form</field>
84+
</record>
85+
</odoo>

0 commit comments

Comments
 (0)