Skip to content

Commit 407eb5d

Browse files
committed
[IMP] estate: Add total_area, best_price and validity date.
Chapter 8 - Computed Fields and Onchanges
1 parent c2e3f0c commit 407eb5d

File tree

4 files changed

+46
-3
lines changed

4 files changed

+46
-3
lines changed

estate/models/estate_property.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from dateutil.relativedelta import relativedelta
22

3-
from odoo import models, fields
3+
from odoo import api, models, fields
44

55

66
class EstateProperty(models.Model):
@@ -37,3 +37,25 @@ class EstateProperty(models.Model):
3737
salesman_id = fields.Many2one('res.users', default=lambda self: self.env.user)
3838
tag_ids = fields.Many2many('estate.property.tag')
3939
offer_ids = fields.One2many('estate.property.offer', 'property_id')
40+
41+
total_area = fields.Integer(compute="_compute_total_area")
42+
best_price = fields.Float(string='Best Offer', compute="_compute_best_price")
43+
44+
@api.depends('living_area', 'garden_area')
45+
def _compute_total_area(self):
46+
for line in self:
47+
line.total_area = line.living_area + line.garden_area
48+
49+
@api.depends('offer_ids.price')
50+
def _compute_best_price(self):
51+
for record in self:
52+
record.best_price = max(self.offer_ids.mapped('price'), default=0)
53+
54+
@api.onchange('garden')
55+
def _onchange_garden(self):
56+
if self.garden:
57+
self.garden_area = 10
58+
self.garden_orientation = 'north'
59+
else:
60+
self.garden_area = False
61+
self.garden_orientation = False
Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
from odoo import fields, models
1+
from dateutil.relativedelta import relativedelta
2+
3+
from odoo import api, fields, models
24

35

46
class EstatePropertyOffer(models.Model):
@@ -7,6 +9,19 @@ class EstatePropertyOffer(models.Model):
79

810
price = fields.Float()
911
status = fields.Selection(copy=False, selection=[('accepted', 'Accepted'), ('refused', 'Refused')])
12+
validity = fields.Integer(string='Validity (days)', default=7)
13+
date_deadline = fields.Date(string='Deadline', compute='_compute_deadline', inverse='_inverse_deadline')
1014

1115
partner_id = fields.Many2one('res.partner', required=True)
1216
property_id = fields.Many2one('estate.property', required=True)
17+
18+
@api.depends('validity')
19+
def _compute_deadline(self):
20+
for record in self:
21+
if not record.create_date:
22+
record.create_date = fields.Date.today()
23+
record.date_deadline = record.create_date + relativedelta(days=record.validity)
24+
25+
def _inverse_deadline(self):
26+
for record in self:
27+
record.validity = (record.date_deadline - record.create_date.date()).days

estate/views/estate_property_offer_views.xml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@
55
<field name="name">estate.property.offers.view.list</field>
66
<field name="model">estate.property.offer</field>
77
<field name="arch" type="xml">
8-
<list string="Offer" editable="top">
8+
<list string="Offer">
99
<field name="price"/>
1010
<field name="partner_id"/>
11+
<field name="validity"/>
12+
<field name="date_deadline"/>
1113
<field name="status"/>
1214
</list>
1315
</field>
@@ -21,6 +23,8 @@
2123
<sheet>
2224
<field name="price"/>
2325
<field name="partner_id"/>
26+
<field name="validity"/>
27+
<field name="date_deadline"/>
2428
<field name="status"/>
2529
</sheet>
2630
</form>

estate/views/estate_property_views.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
</group>
4343
<group>
4444
<field name="expected_price"/>
45+
<field name="best_price"/>
4546
<field name="selling_price"/>
4647
</group>
4748
</group>
@@ -56,6 +57,7 @@
5657
<field name="garden"/>
5758
<field name="garden_area"/>
5859
<field name="garden_orientation"/>
60+
<field name="total_area"/>
5961
</group>
6062
</page>
6163
<page name="Offers">

0 commit comments

Comments
 (0)