Skip to content

Commit edaf208

Browse files
committed
[IMP] estate: Chapter 8 - Computed, Inverse, and Onchange Fields
- Added computed, inverse, and onchange fields to improve user convenience and automation: total_area, best_price, validity, date_deadline, and garden
1 parent fe7da46 commit edaf208

File tree

4 files changed

+48
-5
lines changed

4 files changed

+48
-5
lines changed

estate/models/estate_property.py

Lines changed: 25 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 fields, models, api
22

33

44
class EstateProperty(models.Model):
@@ -34,3 +34,27 @@ class EstateProperty(models.Model):
3434
buyer_id = fields.Many2one("res.partner", copy=False)
3535
tag_ids = fields.Many2many("estate.property.tag")
3636
offer_ids = fields.One2many("estate.property.offer", "property_id")
37+
total_area = fields.Integer(compute="_compute_total_area")
38+
best_price = fields.Float(compute="_compute_best_price")
39+
40+
@api.depends("living_area", "garden_area")
41+
def _compute_total_area(self):
42+
for record in self:
43+
record.total_area = record.living_area + record.garden_area
44+
45+
@api.depends("offer_ids")
46+
def _compute_best_price(self):
47+
for record in self:
48+
if record.offer_ids:
49+
record.best_price = max(self.offer_ids.mapped("price"))
50+
else:
51+
record.best_price = 0.0
52+
53+
@api.onchange("garden")
54+
def _onchange_garden(self):
55+
if self.garden:
56+
self.garden_area = 10
57+
self.garden_orientation = "north"
58+
else:
59+
self.garden_area = 0
60+
self.garden_orientation = ""

estate/models/estate_property_offer.py

Lines changed: 12 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):
@@ -12,3 +12,14 @@ class EstatePropertyOffer(models.Model):
1212
)
1313
partner_id = fields.Many2one("res.partner", required=True)
1414
property_id = fields.Many2one("estate.property", required=True)
15+
validity = fields.Integer(default=7)
16+
date_deadline = fields.Date(compute="_compute_date_deadline", inverse="_inverse_date_deadline")
17+
18+
@api.depends("create_date", "validity")
19+
def _compute_date_deadline(self):
20+
for record in self:
21+
record.date_deadline = fields.Date.add(record.create_date or fields.Date.today(), days=record.validity)
22+
23+
def _inverse_date_deadline(self):
24+
for record in self:
25+
record.validity = (record.date_deadline - record.create_date.date()).days

estate/views/estate_property_offer_views.xml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,13 @@
66
<field name="arch" type="xml">
77
<form string="New property offer">
88
<sheet>
9-
<field name="price"/>
10-
<field name="partner_id"/>
11-
<field name="status"/>
9+
<group>
10+
<field name="price"/>
11+
<field name="partner_id"/>
12+
<field name="validity" string="Validity (days)"/>
13+
<field name="date_deadline" string="Deadline"/>
14+
<field name="status"/>
15+
</group>
1216
</sheet>
1317
</form>
1418
</field>
@@ -21,6 +25,8 @@
2125
<list string="Properties">
2226
<field name="price"/>
2327
<field name="partner_id"/>
28+
<field name="validity" string="Validity (days)"/>
29+
<field name="date_deadline" string="Deadline"/>
2430
<field name="status"/>
2531
</list>
2632
</field>

estate/views/estate_property_views.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
</group>
4242
<group>
4343
<field name="expected_price"/>
44+
<field name="best_price" string="Best offer"/>
4445
<field name="selling_price"/>
4546
</group>
4647
</group>
@@ -54,6 +55,7 @@
5455
<field name="garden"/>
5556
<field name="garden_area"/>
5657
<field name="garden_orientation"/>
58+
<field name="total_area"/>
5759
</group>
5860
</page>
5961
<page string="Offers">

0 commit comments

Comments
 (0)