Skip to content

Commit 8efcb4c

Browse files
committed
[IMP] estate: chapter 8 (compute and onchange)
1 parent 9edbad8 commit 8efcb4c

File tree

3 files changed

+45
-6
lines changed

3 files changed

+45
-6
lines changed

estate/models/estate_property.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Part of Odoo. See LICENSE file for full copyright and licensing details.
22

3-
from odoo import fields, models
3+
from odoo import fields, models, api
44
from datetime import timedelta
55

66

@@ -41,3 +41,27 @@ class EstateProperty(models.Model):
4141
salesperson_id = fields.Many2one('res.users', string='Salesperson',
4242
default=lambda self: self.env.user)
4343
offer_ids = fields.Many2many('estate.property.offer', 'property_id', string='Offers')
44+
total_area = fields.Integer('Total Area (sqm)', compute='_compute_total_area')
45+
best_offer = fields.Float('Best Offer', compute='_compute_best_offer')
46+
47+
@api.depends('garden_area', 'living_area')
48+
def _compute_total_area(self):
49+
for record in self:
50+
record.total_area = record.garden_area + record.living_area
51+
52+
@api.depends('offer_ids.price')
53+
def _compute_best_offer(self):
54+
for record in self:
55+
if record.offer_ids:
56+
record.best_offer = max(record.offer_ids.mapped('price'))
57+
else:
58+
record.best_offer = 0
59+
60+
@api.onchange('garden')
61+
def _onchange_garden(self):
62+
if self.garden:
63+
self.garden_area = 10
64+
self.garden_orientation = 'north'
65+
else:
66+
self.garden_area = 0
67+
self.garden_orientation = ''
Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,26 @@
11
# Part of Odoo. See LICENSE file for full copyright and licensing details.
22

3-
from odoo import fields, models
3+
from odoo import fields, models, api
4+
from datetime import date, timedelta
45

56

67
class EstatePropertyOffer(models.Model):
78
_name = 'estate.property.offer'
89
_description = 'Estate Property Offer'
910

10-
1111
price = fields.Float(string='Price')
1212
status = fields.Selection(string='Status', copy=False,
1313
selection=[('accepted', 'Accepted'), ('refused', 'Refused')])
1414
partner_id = fields.Many2one('res.partner', string='Customer', required=True)
1515
property_id = fields.Many2one('estate.property', string='Property', required=True)
16+
validity = fields.Integer(string='Validity (days)', default=7)
17+
date_deadline = fields.Date(string='Deadline', compute='_compute_deadline', inverse='_inverse_deadline')
18+
19+
@api.depends('validity')
20+
def _compute_deadline(self):
21+
for record in self:
22+
record.date_deadline = (record.create_date if record.create_date else date.today()) + timedelta(days=record.validity)
23+
24+
def _inverse_deadline(self):
25+
for record in self:
26+
record.validity = (record.date_deadline - (record.create_date.date() if record.create_date else date.today())).days

estate/views/estate_property_views.xml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
</group>
4747
<group>
4848
<field name="expected_price"/>
49+
<field name="best_offer"/>
4950
<field name="selling_price"/>
5051
</group>
5152
</group>
@@ -60,13 +61,16 @@
6061
<field name="garden"/>
6162
<field name="garden_area"/>
6263
<field name="garden_orientation"/>
64+
<field name="total_area"/>
6365
</group>
6466
</page>
6567
<page string="Offers">
6668
<field name="offer_ids">
6769
<list>
6870
<field name="price"/>
6971
<field name="partner_id"/>
72+
<field name="validity"/>
73+
<field name="date_deadline"/>
7074
<field name="status"/>
7175
</list>
7276
</field>
@@ -89,9 +93,9 @@
8993
<field name="arch" type="xml">
9094
<list string="Estate Property">
9195
<field name="name" width="140px"/>
92-
<field name="postcode" width="40px"/>
93-
<field name="property_type_id"/>
94-
<field name="bedrooms"/>
96+
<field name="postcode" width="100px"/>
97+
<field name="property_type_id" width="150px"/>
98+
<field name="bedrooms" width="100px"/>
9599
<field name="living_area"/>
96100
<field name="expected_price"/>
97101
<field name="selling_price"/>

0 commit comments

Comments
 (0)