Skip to content

Commit a96a6a6

Browse files
committed
[IMP] Chapter-8-estate: Compute field and OnChanges Implemented for Estate Application
1 parent 986b9f1 commit a96a6a6

File tree

4 files changed

+43
-2
lines changed

4 files changed

+43
-2
lines changed

estate/models/estate_property.py

Lines changed: 22 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

33

44
class EstateProperty(models.Model):
@@ -37,3 +37,24 @@ class EstateProperty(models.Model):
3737
salesperson = fields.Many2one("res.users", string="Salesman", default=lambda self: self.env.user)
3838
tag_ids = fields.Many2many("estate.property.tag", string="Tag")
3939
offer_ids = fields.One2many('estate.property.offer', 'property_id')
40+
total_area = fields.Integer(compute="_compute_total_area")
41+
best_price = fields.Float(compute="_compute_best_price")
42+
43+
@api.depends("living_area", "garden_area")
44+
def _compute_total_area(self):
45+
for record in self:
46+
record.total_area = record.living_area + record.garden_area
47+
48+
@api.depends("offer_ids.price")
49+
def _compute_best_price(self):
50+
for record in self:
51+
record.best_price = max(record.offer_ids.mapped('price') or [0])
52+
53+
@api.onchange("garden")
54+
def _onchange_garden(self):
55+
if self.garden:
56+
self.garden_orientation = 'north'
57+
self.garden_area = 10
58+
else:
59+
self.garden_orientation = ''
60+
self.garden_area = 0

estate/models/estate_property_offer.py

Lines changed: 15 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

33

44
class EstatePropertyOffer(models.Model):
@@ -13,3 +13,17 @@ class EstatePropertyOffer(models.Model):
1313
)
1414
partner_id = fields.Many2one("res.partner", required=True)
1515
property_id = fields.Many2one("estate_property", required=True)
16+
validity = fields.Integer(default=7)
17+
date_deadline = fields.Date(compute="_compute_offer_date_deadline", inverse="_inverse_offer_date_deadline")
18+
19+
@api.depends("create_date", "validity")
20+
def _compute_offer_date_deadline(self):
21+
for record in self:
22+
if record.create_date:
23+
record.date_deadline = fields.Date.add(record.create_date.date(), days=record.validity)
24+
else:
25+
record.date_deadline = fields.Date.add(fields.Date.today(), days=record.validity)
26+
27+
def _inverse_offer_date_deadline(self):
28+
for record in self:
29+
record.validity = (record.date_deadline - record.create_date.date()).days

estate/views/estate_property_offer_views.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
<list string="Offers">
77
<field name="price" />
88
<field name="partner_id" string="Partner" />
9+
<field name="validity" string="Validity (days)" />
10+
<field name="date_deadline" />
911
<field name="status" />
1012
</list>
1113
</field>
@@ -20,6 +22,8 @@
2022
<group>
2123
<field name="price" />
2224
<field name="partner_id" string="Partener" />
25+
<field name="validity" string="Validity (days)" />
26+
<field name="date_deadline" />
2327
<field name="status" />
2428
</group>
2529
</sheet>

estate/views/estate_property_views.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
<group>
1919
<field name="expected_price" />
2020
<field name="selling_price" />
21+
<field name="best_price"/>
2122
</group>
2223
</group>
2324
<notebook>
@@ -32,6 +33,7 @@
3233
<field name="garden_area" string="Garden Area (sqm)" />
3334
<field name="garden_orientation" />
3435
<field name="state" />
36+
<field name="total_area"/>
3537
</group>
3638
</page>
3739
<page string="Offers">

0 commit comments

Comments
 (0)