Skip to content

Commit b8c4800

Browse files
committed
[IMP] estate: add compute fields and onchange to add some automation
1 parent 6c74d7b commit b8c4800

File tree

4 files changed

+45
-6
lines changed

4 files changed

+45
-6
lines changed

estate/models/estate_property.py

Lines changed: 26 additions & 5 deletions
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 EstateProperty(models.Model):
@@ -8,8 +8,8 @@ class EstateProperty(models.Model):
88
name = fields.Char(required=True)
99
description = fields.Text()
1010
postcode = fields.Char()
11-
date_availability = fields.Date("Available from", default=lambda _: fields.Date().add(fields.Date().today(), months=3),
12-
copy=False)
11+
date_availability = fields.Date("Available from",
12+
default=lambda _: fields.Date().add(fields.Date().today(), months=3), copy=False)
1313
expected_price = fields.Float(required=True)
1414
selling_price = fields.Float(readonly=True, copy=False)
1515
bedrooms = fields.Integer(default=2)
@@ -19,8 +19,8 @@ class EstateProperty(models.Model):
1919
garden = fields.Boolean()
2020
garden_area = fields.Integer("Garden Area (sqm)")
2121
garden_orientation = fields.Selection(string="Garden Orientation",
22-
selection=[("north", "North"), ("south", "South"), ("east", "East"),
23-
("west", "West")])
22+
selection=[("north", "North"), ("south", "South"),
23+
("east", "East"), ("west", "West")])
2424
active = fields.Boolean("Active", default=True)
2525
state = fields.Selection(string="State", default="new", copy=False, required=True,
2626
selection=[("new", "New"), ("offer received", "Offer Received"),
@@ -31,3 +31,24 @@ class EstateProperty(models.Model):
3131
salesperson_id = fields.Many2one("res.users", string="Salesperson", index=True, default=lambda self: self.env.user)
3232
property_tag_ids = fields.Many2many("estate.property.tag", string="Tag")
3333
offer_ids = fields.One2many("estate.property.offer", "property_id", string="Offer")
34+
total_area = fields.Integer("Total Area (sqm)", compute="_compute_total_area")
35+
best_price = fields.Float(compute="_compute_best_price")
36+
37+
@api.depends("living_area", "garden_area")
38+
def _compute_total_area(self):
39+
for estate in self:
40+
estate.total_area = estate.living_area + estate.garden_area
41+
42+
@api.depends("offer_ids")
43+
def _compute_best_price(self):
44+
for estate in self:
45+
estate.best_price = max(estate.offer_ids.mapped("price")) if estate.offer_ids else 0
46+
47+
@api.onchange("garden")
48+
def _onchange_garden(self):
49+
if self.garden:
50+
self.garden_area = 10
51+
self.garden_orientation = "north"
52+
else:
53+
self.garden_area = 0
54+
self.garden_orientation = ""

estate/models/estate_property_offer.py

Lines changed: 13 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):
@@ -9,3 +9,15 @@ class EstatePropertyOffer(models.Model):
99
status = fields.Selection(string="Status", copy=False, selection=[("accepted", "Accepted"),("refused", "Refused")])
1010
partner_id = fields.Many2one("res.partner", string="Partner", required=True)
1111
property_id = fields.Many2one("estate.property", string="Property", required=True)
12+
validity = fields.Integer(default=7)
13+
14+
date_deadline = fields.Date(compute="_compute_date_deadline", inverse="_inverse_date_deadline")
15+
create_date = fields.Date(default=lambda _: fields.Date().today())
16+
@api.depends("validity", "create_date")
17+
def _compute_date_deadline(self):
18+
for offer in self:
19+
offer.date_deadline = fields.Date().add(offer.create_date, days=offer.validity)
20+
21+
def _inverse_date_deadline(self):
22+
for offer in self:
23+
offer.validity = (offer.date_deadline - offer.create_date).days

estate/views/estate_property_offer_views.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
<field name="price"/>
1313
<field name="partner_id"/>
1414
<field name="status"/>
15+
<field name="validity"/>
16+
<field name="date_deadline"/>
1517
</group>
1618
</page>
1719
</notebook>
@@ -28,6 +30,8 @@
2830
<field name="price"/>
2931
<field name="partner_id"/>
3032
<field name="status"/>
33+
<field name="validity"/>
34+
<field name="date_deadline"/>
3135
</tree>
3236
</field>
3337
</record>

estate/views/estate_property_views.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040

4141
<group>
4242
<field name="expected_price"/>
43+
<field name="best_price"/>
4344
<field name="selling_price"/>
4445
</group>
4546

@@ -57,6 +58,7 @@
5758
<field name="garden_area"/>
5859
<field name="garden_orientation"/>
5960
<field name="state"/>
61+
<field name="total_area"/>
6062
</group>
6163
</page>
6264

0 commit comments

Comments
 (0)