Skip to content

Commit bb394d2

Browse files
committed
[IMP] estate: added computed and onchange fields to property and offer models
1 parent b901a20 commit bb394d2

File tree

7 files changed

+60
-18
lines changed

7 files changed

+60
-18
lines changed

estate/__manifest__.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
{
22
'name': 'Real Estate',
33
'depends': ['base'],
4-
'data': ['security/ir.model.access.csv',
5-
'views/estate_property_views.xml',
6-
'views/estate_property_type_views.xml',
7-
'views/estate_property_tag_views.xml',
8-
'views/estate_property_offer_views.xml',
9-
'views/estate_menus.xml'],
4+
'data': [
5+
'security/ir.model.access.csv',
6+
'views/estate_property_views.xml',
7+
'views/estate_property_type_views.xml',
8+
'views/estate_property_tag_views.xml',
9+
'views/estate_property_offer_views.xml',
10+
'views/estate_menus.xml',
11+
],
1012
'application': True,
11-
'author': 'leker',
13+
'author': 'Odoo S.A.',
1214
'license': 'LGPL-3',
1315
}

estate/models/__init__.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
from . import (
2-
estate_property,
3-
estate_property_offer,
4-
estate_property_tag,
5-
estate_property_type,
6-
)
1+
from . import estate_property
2+
from . import estate_property_offer
3+
from . import estate_property_tag
4+
from . import estate_property_type

estate/models/estate_property.py

Lines changed: 25 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 Property(models.Model):
@@ -32,8 +32,32 @@ class Property(models.Model):
3232
('east', 'East'),
3333
('west', 'West'),
3434
], string='Garden Orientation')
35+
total_area = fields.Integer(compute="_compute_total_area")
3536
property_type_id = fields.Many2one('estate.property.type', string="Property Type")
3637
salesperson_id = fields.Many2one('res.users', string="Salesperson", default=lambda self: self.env.user)
3738
buyer_id = fields.Many2one('res.partner', string="Buyer", copy=False)
3839
tag_ids = fields.Many2many('estate.property.tag', string="Tags")
3940
offer_ids = fields.One2many('estate.property.offer', 'property_id', string="Offers")
41+
best_price = fields.Float(compute="_compute_best_price")
42+
43+
@api.depends('living_area', 'garden_area')
44+
def _compute_total_area(self):
45+
for record in self:
46+
record.total_area = record.living_area + record.garden_area
47+
48+
@api.depends('offer_ids')
49+
def _compute_best_price(self):
50+
for record in self:
51+
if record.offer_ids:
52+
record.best_price = max(record.offer_ids.mapped('price'))
53+
else:
54+
record.best_price = 0
55+
56+
@api.onchange('garden')
57+
def _onchange_partner(self):
58+
if self.garden:
59+
self.garden_area = 10
60+
self.garden_orientation = 'north'
61+
else:
62+
self.garden_area = None
63+
self.garden_orientation = None

estate/models/estate_property_offer.py

Lines changed: 15 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 PropertyOffer(models.Model):
@@ -12,3 +12,17 @@ class PropertyOffer(models.Model):
1212
], string='Status', copy=False)
1313
partner_id = fields.Many2one('res.partner', string="Partner", required=True)
1414
property_id = fields.Many2one('estate.property', string="Property", required=True)
15+
validity = fields.Integer(string="Validity (days)", default=7)
16+
date_deadline = fields.Date(string="Deadline", compute="_compute_date_deadline", inverse="_inverse_date_deadline")
17+
18+
@api.depends('create_date', 'validity')
19+
def _compute_date_deadline(self):
20+
for record in self:
21+
if record.create_date:
22+
record.date_deadline = fields.Date.add(record.create_date, days=record.validity)
23+
else:
24+
record.date_deadline = fields.Date.add(lambda self: fields.Date.today(), days=record.validity)
25+
26+
def _inverse_date_deadline(self):
27+
for record in self:
28+
record.validity = (record.date_deadline - record.create_date).days

estate/views/estate_menus.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@
99
<menuitem id="property_tags_model_menu_action" action="estate_property_tag_action"/>
1010
</menuitem>
1111
</menuitem>
12-
</odoo>
12+
</odoo>

estate/views/estate_property_offer_views.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77
<list string="Offer">
88
<field name="price"/>
99
<field name="partner_id"/>
10+
<field name="validity"/>
11+
<field name="date_deadline"/>
1012
<field name="status"/>
1113
</list>
1214
</field>
1315
</record>
14-
</odoo>
16+
</odoo>

estate/views/estate_property_views.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
<group>
6767
<field name="expected_price"/>
6868
<field name="selling_price"/>
69+
<field name="best_price"/>
6970
</group>
7071
</group>
7172
<notebook>
@@ -79,6 +80,7 @@
7980
<field name="garden"/>
8081
<field name="garden_area"/>
8182
<field name="garden_orientation"/>
83+
<field name="total_area"/>
8284
</group>
8385
</page>
8486
<page string="Offers">
@@ -95,4 +97,4 @@
9597
</form>
9698
</field>
9799
</record>
98-
</odoo>
100+
</odoo>

0 commit comments

Comments
 (0)