Skip to content

Commit a8c1bd4

Browse files
author
youness benbraitit (yoben)
committed
[IMP] estate: added feature to compute fields
Chapter 8: Computed Fields And Onchanges count the oriontation depend of criteria using action
1 parent a5cf231 commit a8c1bd4

File tree

4 files changed

+51
-2
lines changed

4 files changed

+51
-2
lines changed

estate/models/estate_property.py

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from datetime import date
22
from dateutil.relativedelta import relativedelta
3-
from odoo import fields, models
3+
from odoo import api, fields, models
44

55

66
class EstateProperty(models.Model):
@@ -55,3 +55,33 @@ class EstateProperty(models.Model):
5555
buyer_id = fields.Many2one("res.partner", string="Buyer", readonly=True, copy=False)
5656
tag_ids = fields.Many2many("estate.property.tag", string="Tags")
5757
offer_ids = fields.One2many("estate.property.offer", "property_id", string="Offers")
58+
total_area = fields.Integer("Total Area (sqm)", compute="_compute_total_area")
59+
best_price = fields.Float(
60+
"Best Offer",
61+
compute="_compute_best_price", readonly=True
62+
)
63+
64+
@api.depends('living_area', 'garden_area')
65+
def _compute_total_area(self):
66+
for rec in self:
67+
rec.total_area = (rec.living_area or 0) + (rec.garden_area or 0)
68+
69+
@api.depends('offer_ids.price')
70+
def _compute_best_price(self):
71+
for rec in self:
72+
prices = rec.offer_ids.mapped('price')
73+
rec.best_price = max(prices) if prices else 0.0
74+
75+
@api.depends("living_area", "garden_area")
76+
def _compute_total_area(self):
77+
for prop in self:
78+
prop.total_area = prop.living_area + prop.garden_area
79+
80+
@api.onchange("garden")
81+
def _onchange_garden(self):
82+
if self.garden:
83+
self.garden_area = 10
84+
self.garden_orientation = "north"
85+
else:
86+
self.garden_area = 0
87+
self.garden_orientation = False

estate/models/estate_property_offer.py

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

33

44
class EstatePropertyOffer(models.Model):
@@ -15,3 +15,18 @@ class EstatePropertyOffer(models.Model):
1515
)
1616
partner_id = fields.Many2one("res.partner", string="Partner", required=True)
1717
property_id = fields.Many2one("estate.property", string="Property", required=True)
18+
validity = fields.Integer(
19+
"Validity (days)", default=7
20+
)
21+
date_deadline = fields.Date(
22+
"Deadline", compute="_compute_date_deadline", store=True
23+
)
24+
@api.depends('validity')
25+
def _compute_date_deadline(self):
26+
for offer in self:
27+
if offer._origin.validity:
28+
offer.date_deadline = fields.Date.add(
29+
offer.create_date.date(), days=offer.validity
30+
)
31+
else:
32+
offer.date_deadline = False

estate/views/estate_property_offer_views.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
<field name="price"/>
2222
<field name="partner_id"/>
2323
<field name="state"/>
24+
<field name="validity"/>
25+
<field name="date_deadline"/>
2426
</list>
2527
</field>
2628
</record>

estate/views/estate_view_form.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
<group>
2626
<field name="expected_price"/>
2727
<field name="selling_price"/>
28+
<field name="best_price"/>
2829
</group>
2930
</group>
3031
<notebook>
@@ -43,6 +44,7 @@
4344
<field name="garden"/>
4445
<field name="garden_area"/>
4546
<field name="garden_orientation"/>
47+
<field name="total_area"/>
4648
</group>
4749
</group>
4850
</page>

0 commit comments

Comments
 (0)