Skip to content

Commit cb0c70a

Browse files
[IMP] Chapter 8: Added validity, date_deadline attributes for offers model. improved UX with compute and inverse methods
1 parent 0225b68 commit cb0c70a

File tree

3 files changed

+61
-3
lines changed

3 files changed

+61
-3
lines changed

estate/models/buildings_model.py

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

44

@@ -13,6 +13,8 @@ class buildings_model(models.Model):
1313
default=fields.Date.today() + timedelta(days=90), copy=False
1414
)
1515
number_of_rooms = fields.Integer(default=2)
16+
garden_area = fields.Integer()
17+
building_area = fields.Integer()
1618
garden_orientation = fields.Selection(
1719
[("north", "North"), ("south", "South"), ("east", "East"), ("west", "West")],
1820
"garden Orientation",
@@ -36,3 +38,34 @@ class buildings_model(models.Model):
3638
)
3739
tag_ids = fields.Many2many("estate.building_tags", string="Tags")
3840
offer_ids = fields.One2many("estate.offers", "building_id", string="Offers")
41+
42+
total_area = fields.Integer(
43+
string="Total Area", compute="_compute_total_area"
44+
)
45+
46+
best_price = fields.Integer(
47+
string="Best Offer Price",
48+
compute="_compute_best_price",
49+
)
50+
has_garden = fields.Boolean(string="Has Garden", default=False)
51+
52+
@api.depends("building_area", "garden_area")
53+
def _compute_total_area(self):
54+
for record in self:
55+
record.total_area = record.building_area + record.garden_area
56+
57+
@api.depends("offer_ids.price")
58+
def _compute_best_price(self):
59+
for record in self:
60+
if record.offer_ids:
61+
record.best_price = max(record.offer_ids.mapped("price"))
62+
else:
63+
record.best_price = 0
64+
@api.onchange("has_garden")
65+
def _onchange_garden_area(self):
66+
if self.has_garden:
67+
self.garden_area = 10
68+
self.garden_orientation = "north"
69+
else:
70+
self.garden_area = 0
71+
self.garden_orientation = False

estate/models/offers_model.py

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

34

45
class offers_model(models.Model):
@@ -13,3 +14,18 @@ class offers_model(models.Model):
1314
)
1415
building_id = fields.Many2one("estate.buildings", string="Building")
1516
partner_id = fields.Many2one("res.partner", string="Partner")
17+
validity = fields.Integer(
18+
string="Validity (days)", default=7
19+
)
20+
date_deadline = fields.Date(
21+
string="Deadline", compute="_compute_date_deadline", inverse="_inverse_date_deadline"
22+
)
23+
24+
@api.depends("validity")
25+
def _compute_date_deadline(self):
26+
for record in self:
27+
record.date_deadline = fields.Date.today() + timedelta(days=record.validity)
28+
29+
def _inverse_date_deadline(self):
30+
for record in self:
31+
record.validity = (record.date_deadline - fields.Date.today()).days

estate/views/views.xml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,18 @@
3636
</group>
3737
<group>
3838
<field name="number_of_rooms"/>
39-
<field name="garden_orientation"/>
4039
<field name="post_code"/>
4140
</group>
4241
</group>
4342
<notebook>
4443
<page string="Description">
4544
<group>
4645
<field name="description"/>
46+
<field name="building_area"/>
47+
<field name="has_garden"/>
48+
<field name="garden_area"/>
49+
<field name="garden_orientation"/>
50+
<field name="total_area"/>
4751
</group>
4852
</page>
4953
<page string="Info">
@@ -58,8 +62,13 @@
5862
<field name="price"/>
5963
<field name="status"/>
6064
<field name="partner_id"/>
65+
<field name="date_deadline"/>
66+
<field name="validity"/>
6167
</list>
6268
</field>
69+
<group>
70+
<field name="best_price"/>
71+
</group>
6372
</page>
6473
</notebook>
6574
</sheet>

0 commit comments

Comments
 (0)