Skip to content

Commit 27e01ee

Browse files
committed
[IMP] estate: implement chapter 8
Chapter 8 about computed fields and onclick
1 parent 8012ccd commit 27e01ee

File tree

4 files changed

+50
-3
lines changed

4 files changed

+50
-3
lines changed

estate/models/property.py

Lines changed: 27 additions & 2 deletions
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 models, fields, api
44

55

66
class Property(models.Model):
@@ -10,7 +10,8 @@ class Property(models.Model):
1010
name = fields.Char(string='Title', required=True)
1111
description = fields.Text()
1212
postcode = fields.Char()
13-
date_availability = fields.Date(string='Available From', copy=False, default=lambda self: fields.Datetime.today() + relativedelta(months=3))
13+
date_availability = fields.Date(string='Available From', copy=False,
14+
default=lambda self: fields.Datetime.today() + relativedelta(months=3))
1415
expected_price = fields.Float(required=True)
1516
selling_price = fields.Float(readonly=True, copy=False)
1617
bedrooms = fields.Integer(default=2)
@@ -38,3 +39,27 @@ class Property(models.Model):
3839
salesperson_id = fields.Many2one('res.users', string='Sales Person', default=lambda self: self.env.user)
3940
tag_ids = fields.Many2many('estate.property.tag', string='Tags')
4041
offer_ids = fields.One2many('estate.property.offer', 'property_id', string='Offers')
42+
total_area = fields.Integer(string='Total Area (m²)', compute='_compute_total_area')
43+
best_price = fields.Float(compute='_compute_best_price')
44+
45+
@api.depends('living_area', 'garden_area')
46+
def _compute_total_area(self):
47+
for record in self:
48+
record.total_area = record.living_area + record.garden_area
49+
50+
@api.depends('offer_ids.price')
51+
def _compute_best_price(self):
52+
for record in self:
53+
if len(record.offer_ids) == 0:
54+
record.best_price = 0
55+
else:
56+
record.best_price = max(record.offer_ids.mapped('price'))
57+
58+
@api.onchange('garden')
59+
def _onchange_garden(self):
60+
if self.garden:
61+
self.garden_orientation = 'north'
62+
self.garden_area = 10
63+
else:
64+
self.garden_orientation = None
65+
self.garden_area = 0

estate/models/property_offer.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
from odoo import models, fields
1+
from dateutil.relativedelta import relativedelta
2+
3+
from odoo import models, fields, api
24

35

46
class PropertyOffer(models.Model):
@@ -13,3 +15,17 @@ class PropertyOffer(models.Model):
1315
partner_id = fields.Many2one('res.partner', string='Partner', required=True)
1416
price = fields.Float()
1517
property_id = fields.Many2one('estate.property', string='Property', required=True)
18+
create_date = fields.Date(string='Create Date', default=lambda self: fields.Datetime.now())
19+
validity = fields.Integer(string='Validity (days)', default=7)
20+
deadline_date = fields.Date(string='Deadline Date', compute='_compute_deadline_date',
21+
inverse='_inverse_deadline_date')
22+
23+
@api.depends('validity', 'deadline_date', 'create_date')
24+
def _compute_deadline_date(self):
25+
for record in self:
26+
record.deadline_date = record.create_date + relativedelta(days=record.validity)
27+
28+
@api.depends('validity', 'deadline_date', 'create_date')
29+
def _inverse_deadline_date(self):
30+
for record in self:
31+
record.validity = (record.deadline_date - record.create_date).days

estate/views/estate_property_offer_views.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
<list string="Property offers">
88
<field name="price"/>
99
<field name="partner_id"/>
10+
<field name="deadline_date"/>
11+
<field name="validity"/>
1012
<field name="state"/>
1113
</list>
1214
</field>
@@ -21,6 +23,8 @@
2123
<group>
2224
<field name="price"/>
2325
<field name="partner_id"/>
26+
<field name="deadline_date"/>
27+
<field name="validity"/>
2428
<field name="state"/>
2529
</group>
2630
</sheet>

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
<group>
4141
<field name="expected_price"/>
4242
<field name="selling_price"/>
43+
<field name="best_price"/>
4344
</group>
4445
</group>
4546
<notebook>
@@ -53,6 +54,7 @@
5354
<field name="garden"/>
5455
<field name="garden_area"/>
5556
<field name="garden_orientation"/>
57+
<field name="total_area"/>
5658
</group>
5759
</page>
5860
<page string="Offers">

0 commit comments

Comments
 (0)