Skip to content

Commit e3c7e92

Browse files
committed
[IMP] estate: added computed fields and inverse functions and onchange functions to estate property model and estate property offer model
1 parent 92e14f3 commit e3c7e92

File tree

4 files changed

+49
-2
lines changed

4 files changed

+49
-2
lines changed

estate/models/estate_property.py

Lines changed: 23 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
from datetime import date
33
from dateutil.relativedelta import relativedelta
44

@@ -13,12 +13,14 @@ class EstateProperty(models.Model):
1313
date_availability = fields.Date(copy=False, default=date.today() + relativedelta(months=3))
1414
expected_price = fields.Float()
1515
selling_price = fields.Float(readonly=True, copy=False)
16+
best_offer = fields.Float(compute='_compute_best_offer', readonly=True)
1617
bedrooms = fields.Integer('# Bedrooms', default=2)
1718
living_area = fields.Integer('living area size')
1819
facades = fields.Integer('# Facades')
1920
garage = fields.Boolean()
2021
garden = fields.Boolean()
2122
garden_area = fields.Integer('garden size')
23+
total_area = fields.Integer(readonly=True, compute='_compute_area')
2224
garden_orientation = fields.Selection(
2325
string='Orientation',
2426
selection=[('North', 'North'), ('West', 'West'), ('East', 'East'), ('South', 'South')]
@@ -36,3 +38,23 @@ class EstateProperty(models.Model):
3638
salesperson_id = fields.Many2one("res.users", string="salesperson", default=lambda self: self.env.user)
3739
tag_ids = fields.Many2many("estate.property.tag", string="tag")
3840
offer_ids = fields.One2many("estate.property.offer", "property_id", string="offer")
41+
42+
@api.depends('living_area', 'garden_area')
43+
def _compute_area(self):
44+
for property in self:
45+
property.total_area = property.living_area + property.garden_area
46+
47+
@api.depends('offer_ids.price')
48+
def _compute_best_offer(self):
49+
for property in self:
50+
prices = property.offer_ids.mapped('price')
51+
property.best_offer = max(prices, default=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: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
from odoo import fields, models
1+
from odoo import api, fields, models
2+
from datetime import date
3+
from dateutil.relativedelta import relativedelta
24

35

46
class EstatePropertyOffer(models.Model):
@@ -10,5 +12,22 @@ class EstatePropertyOffer(models.Model):
1012
string='status',
1113
selection=[('Accepted', 'Accepted'), ('Refused', 'Refused')],
1214
copy=False)
15+
validity = fields.Integer(default=7)
16+
date_deadline = fields.Date(compute="_compute_date_deadline", inverse="_inverse_date_deadline")
1317
partner_id = fields.Many2one("res.partner", string="partner", required=True)
1418
property_id = fields.Many2one("estate.property", required=True)
19+
20+
@api.depends('validity')
21+
def _compute_date_deadline(self):
22+
for offer in self:
23+
if offer.create_date:
24+
offer.date_deadline = offer.create_date + relativedelta(days=offer.validity)
25+
else:
26+
offer.date_deadline = date.today() + relativedelta(days=offer.validity)
27+
28+
@api.depends()
29+
def _inverse_date_deadline(self):
30+
for offer in self:
31+
offer.validity = (offer.date_deadline - date.today()).days
32+
if offer.validity < 0:
33+
offer.validity = 0

estate/views/estate_property_offer_views.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
<field name="price"/>
1010
<field name="partner_id"/>
1111
<field name="status"/>
12+
<field name="validity"/>
13+
<field name="date_deadline"/>
1214
</list>
1315
</field>
1416
</record>
@@ -23,6 +25,8 @@
2325
<field name="price"/>
2426
<field name="partner_id"/>
2527
<field name="status"/>
28+
<field name="validity"/>
29+
<field name="date_deadline"/>
2630
</group>
2731
</sheet>
2832
</form>

estate/views/estate_property_views.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
</group>
6262
<group>
6363
<field name="expected_price"/>
64+
<field name="best_offer"/>
6465
<field name="selling_price"/>
6566
</group>
6667
</group>
@@ -78,6 +79,7 @@
7879
<field name="state"/>
7980
<field name="type_id"/>
8081
<field name="tag_ids" widget="many2many_tags"/>
82+
<field name="total_area"/>
8183
</group>
8284
</page>
8385
<page string="Offers">

0 commit comments

Comments
 (0)