Skip to content

Commit 2c59655

Browse files
committed
[IMP] estate: add computed fields and onchanges - Chapter 8
computed fields: deadline of the offer, best price from many offers onchange: garden affects garden_area and garden_orientation
1 parent 40660a8 commit 2c59655

File tree

4 files changed

+58
-3
lines changed

4 files changed

+58
-3
lines changed

estate/models/estate_property.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from odoo import fields, models
1+
from odoo import api, fields, models
22
from dateutil.relativedelta import relativedelta
33
from datetime import datetime
44

@@ -31,6 +31,7 @@ class EstateProperty(models.Model):
3131
)
3232
active = fields.Boolean(default=True)
3333
state = fields.Selection(
34+
string="State",
3435
selection=[
3536
("new", "New"),
3637
("offer_received", "Offer Received"),
@@ -49,3 +50,28 @@ class EstateProperty(models.Model):
4950
buyer_id = fields.Many2one("res.partner", string="Buyer", copy=False)
5051
tag_ids = fields.Many2many("estate_property_tag")
5152
offer_ids = fields.One2many("estate_property_offer", "property_id", string="Offers")
53+
total_area = fields.Integer("Total Area (sqm)", compute="_compute_area")
54+
best_price = fields.Float("Best Price", compute="_compute_best_price")
55+
56+
@api.depends("living_area", "garden_area")
57+
def _compute_area(self):
58+
for record in self:
59+
record.total_area = record.living_area + record.garden_area
60+
61+
@api.depends("offer_ids.price")
62+
def _compute_best_price(self):
63+
for record in self:
64+
record.best_price = (
65+
0
66+
if len(record.offer_ids) == 0
67+
else max(offer.price for offer in record.offer_ids)
68+
)
69+
70+
@api.onchange("garden")
71+
def _onchange_garden(self):
72+
if self.garden:
73+
self.garden_area = 10
74+
self.garden_orientation = "north"
75+
else:
76+
self.garden_area = False
77+
self.garden_orientation = False

estate/models/estate_property_offer.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
from odoo import fields, models
1+
from odoo import api, fields, models
2+
from datetime import timedelta
23

34

45
class EstatePropertyOffer(models.Model):
@@ -10,3 +11,23 @@ class EstatePropertyOffer(models.Model):
1011
)
1112
partner_id = fields.Many2one("res.partner", required=True)
1213
property_id = fields.Many2one("estate_property", required=True)
14+
validity = fields.Integer("Validity", default=7)
15+
date_deadline = fields.Date(
16+
"Deadline", compute="_compute_date_deadline", inverse="_inverse_date_deadline"
17+
)
18+
19+
@api.depends("validity", "create_date")
20+
def _compute_date_deadline(self):
21+
for record in self:
22+
record.date_deadline = (
23+
record.create_date or fields.Datetime.now()
24+
) + timedelta(days=record.validity)
25+
26+
# @api.depends("create_date", "date_deadline") Not working right now!!!
27+
# def _inverse_date_deadline(self):
28+
# print("Hello!")
29+
# for record in self:
30+
# record.validity = (
31+
# (record.date_deadline or fields.Datetime.now())
32+
# - (record.create_date or fields.Datetime.now())
33+
# ).days

estate/views/estate_property_offer_views.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
<field name="price" />
88
<field name="partner_id" />
99
<field name="status" />
10+
<field name="validity" />
11+
<field name="date_deadline" />
1012
</list>
1113
</field>
1214
</record>
@@ -21,6 +23,8 @@
2123
<field name="price" />
2224
<field name="partner_id" />
2325
<field name="status" />
26+
<field name="validity" />
27+
<field name="date_deadline" />
2428
</group>
2529
</group>
2630
</sheet>

estate/views/estate_property_views.xml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
<group>
5151
<field name="tag_ids" widget="many2many_tags" />
5252
<field name="postcode" string="Postcode" />
53+
<field name="best_price" />
5354
</group>
5455
<group>
5556
<field name="expected_price" string="Expected Price" />
@@ -92,7 +93,10 @@
9293
<group>
9394
<field name="garden_orientation" string="Garden Orientation" />
9495
</group>
95-
<field name="state" />
96+
<group>
97+
<field name="state" />
98+
<field name="total_area" />
99+
</group>
96100
</page>
97101
<page string="Offers">
98102
<field name="offer_ids" />

0 commit comments

Comments
 (0)