Skip to content

Commit 4dd2cd8

Browse files
committed
[IMP] estate: Added computed fields
Added an onchange field and some compute fields, following Chapter 8 rules. Also refactored different views to separate them
1 parent cef161e commit 4dd2cd8

7 files changed

+132
-56
lines changed

estate/__manifest__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
"base",
77
],
88
"data": [
9+
"views/estate_offer_views.xml",
10+
"views/estate_property_type_views.xml",
11+
"views/estate_property_tags_views.xml",
912
"views/estate_property_views.xml",
1013
"views/estate_menus.xml",
1114
"security/ir.model.access.csv",

estate/models/estate_property.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
from odoo import fields, models
1+
from odoo import fields, models, api
22
from odoo.tools import date_utils as du
33
from datetime import date
44

55

66
class EstateProperty(models.Model):
77
_name = "estate.property"
88
_description = "A property module that adds the property as a listing"
9+
910
name = fields.Char(required=True)
1011
description = fields.Text()
1112
postcode = fields.Char()
@@ -27,6 +28,7 @@ class EstateProperty(models.Model):
2728
("west", "West"),
2829
],
2930
)
31+
total_area = fields.Float(compute="_compute_area")
3032
active = fields.Boolean(default=True)
3133
state = fields.Selection(
3234
string="State",
@@ -50,3 +52,28 @@ class EstateProperty(models.Model):
5052
offers_ids = fields.One2many(
5153
"estate.property.offer", "property_id", string="Offers"
5254
)
55+
best_price = fields.Float(
56+
compute="_compute_best_price", readonly=True, string="Best Offer"
57+
)
58+
59+
@api.depends("living_area", "garden", "garden_area")
60+
def _compute_area(self):
61+
for record in self:
62+
record.total_area = record.living_area + record.garden_area
63+
64+
@api.depends("offers_ids.price")
65+
def _compute_best_price(self):
66+
for record in self:
67+
if record.offers_ids:
68+
record.best_price = max(record.offers_ids.mapped("price"))
69+
else:
70+
record.best_price = 0
71+
72+
@api.onchange("garden")
73+
def _onchange_garden(self):
74+
if self.garden:
75+
self.garden_area = 10
76+
self.garden_orientation = "north"
77+
else:
78+
self.garden_area = 0
79+
self.garden_orientation = None

estate/models/estate_property_offer.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
from odoo import fields, models
1+
from odoo import fields, models, api
2+
from odoo.tools import date_utils as du
3+
from datetime import date
24

35

46
class EstatePropertyOffer(models.Model):
@@ -15,3 +17,24 @@ class EstatePropertyOffer(models.Model):
1517
)
1618
partner_id = fields.Many2one("res.partner", string="Buyer", required=True)
1719
property_id = fields.Many2one("estate.property", string="Property", required=True)
20+
validity = fields.Integer(default=7, string="Validity (days)")
21+
date_deadline = fields.Date(
22+
compute="_compute_date_deadline",
23+
inverse="_inverse_date_deadline",
24+
string="Deadline",
25+
)
26+
27+
@api.depends("validity")
28+
def _compute_date_deadline(self):
29+
for record in self:
30+
create_date_actual = (
31+
date.today() if not record.create_date else record.create_date.date()
32+
)
33+
record.date_deadline = du.add(create_date_actual, days=record.validity)
34+
35+
def _inverse_date_deadline(self):
36+
for record in self:
37+
create_date_actual = (
38+
date.today() if not record.create_date else record.create_date.date()
39+
)
40+
record.validity = (record.date_deadline - create_date_actual).days
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<odoo>
3+
<record id="estate_property_offer_view_form" model="ir.ui.view">
4+
<field name="name">estate.property.offer.form</field>
5+
<field name="model">estate.property.offer</field>
6+
<field name="arch" type="xml">
7+
<form string="Type">
8+
<group>
9+
<field name="price"/>
10+
<field name="partner_id" string="Partner"/>
11+
<field name="validity"/>
12+
<field name="date_deadline"/>
13+
<field name="status"/>
14+
</group>
15+
</form>
16+
</field>
17+
</record>
18+
<record id="estate_property_offer_view_list" model="ir.ui.view">
19+
<field name="name">estate.property.offer.list</field>
20+
<field name="model">estate.property.offer</field>
21+
<field name="arch" type="xml">
22+
<list string="Offers">
23+
<field name="price"/>
24+
<field name="partner_id" string="Partner"/>
25+
<field name="validity"/>
26+
<field name="date_deadline"/>
27+
<field name="status"/>
28+
</list>
29+
</field>
30+
</record>
31+
</odoo>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<odoo>
3+
<record id="estate_property_tag_view_form" model="ir.ui.view">
4+
<field name="name">estate.property.tag.form</field>
5+
<field name="model">estate.property.tag</field>
6+
<field name="arch" type="xml">
7+
<form string="Type">
8+
<sheet>
9+
<h1>
10+
<field name="name"/>
11+
</h1>
12+
</sheet>
13+
</form>
14+
</field>
15+
</record>
16+
17+
<record id="estate_property_tag_action" model="ir.actions.act_window">
18+
<field name="name">Property Tags</field>
19+
<field name="res_model">estate.property.tag</field>
20+
<field name="view_mode">list,form</field>
21+
</record>
22+
</odoo>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<odoo>
3+
<record id="estate_property_type_view_form" model="ir.ui.view">
4+
<field name="name">estate.property.type.form</field>
5+
<field name="model">estate.property.type</field>
6+
<field name="arch" type="xml">
7+
<form string="Type">
8+
<sheet>
9+
<h1>
10+
<field name="name"/>
11+
</h1>
12+
</sheet>
13+
</form>
14+
</field>
15+
</record>
16+
17+
<record id="estate_property_type_action" model="ir.actions.act_window">
18+
<field name="name">Property Types</field>
19+
<field name="res_model">estate.property.type</field>
20+
<field name="view_mode">list,form</field>
21+
</record>
22+
</odoo>

estate/views/estate_property_views.xml

Lines changed: 2 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
</group>
3939
<group>
4040
<field name="expected_price"/>
41+
<field name="best_price"/>
4142
<field name="selling_price"/>
4243
</group>
4344
</group>
@@ -52,6 +53,7 @@
5253
<field name="garden"/>
5354
<field name="garden_area" string="Garden Area (sqm)"/>
5455
<field name="garden_orientation"/>
56+
<field name="total_area" string="Total Area (sqm)"/>
5557
</group>
5658
</page>
5759
<page string="Offers">
@@ -90,58 +92,4 @@
9092
<field name="res_model">estate.property</field>
9193
<field name="view_mode">list,form</field>
9294
</record>
93-
94-
95-
96-
<record id="estate_property_type_view_form" model="ir.ui.view">
97-
<field name="name">estate.property.type.form</field>
98-
<field name="model">estate.property.type</field>
99-
<field name="arch" type="xml">
100-
<form string="Type">
101-
<sheet>
102-
<h1>
103-
<field name="name"/>
104-
</h1>
105-
</sheet>
106-
</form>
107-
</field>
108-
</record>
109-
110-
<record id="estate_property_type_action" model="ir.actions.act_window">
111-
<field name="name">Property Types</field>
112-
<field name="res_model">estate.property.type</field>
113-
<field name="view_mode">list,form</field>
114-
</record>
115-
116-
<record id="estate_property_tag_view_form" model="ir.ui.view">
117-
<field name="name">estate.property.tag.form</field>
118-
<field name="model">estate.property.tag</field>
119-
<field name="arch" type="xml">
120-
<form string="Type">
121-
<sheet>
122-
<h1>
123-
<field name="name"/>
124-
</h1>
125-
</sheet>
126-
</form>
127-
</field>
128-
</record>
129-
130-
<record id="estate_property_tag_action" model="ir.actions.act_window">
131-
<field name="name">Property Tags</field>
132-
<field name="res_model">estate.property.tag</field>
133-
<field name="view_mode">list,form</field>
134-
</record>
135-
136-
<record id="estate_property_offer_view_list" model="ir.ui.view">
137-
<field name="name">estate.property.offer.list</field>
138-
<field name="model">estate.property.offer</field>
139-
<field name="arch" type="xml">
140-
<list string="Offers">
141-
<field name="price"/>
142-
<field name="partner_id" string="Partner"/>
143-
<field name="status"/>
144-
</list>
145-
</field>
146-
</record>
14795
</odoo>

0 commit comments

Comments
 (0)