Skip to content

Commit a9406d3

Browse files
author
Oussema Heni
committed
[IMP] real_estate: add computed values and onchange to estate property and offer models
1 parent 9fea900 commit a9406d3

File tree

5 files changed

+112
-46
lines changed

5 files changed

+112
-46
lines changed

.vscode/settings.json

Lines changed: 0 additions & 3 deletions
This file was deleted.

estate/models/estate_property.py

Lines changed: 56 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from odoo import fields, models
1+
from odoo import fields, models, api
22
from datetime import timedelta
33

44

@@ -10,7 +10,7 @@ class EstateProperty(models.Model):
1010
description = fields.Text('Description')
1111
active = fields.Boolean(default=True)
1212
postcode = fields.Char('Postcode')
13-
date_availability = fields.Date('Available From',default=lambda self: fields.Date.today() + timedelta(days=90), copy=False)
13+
date_availability = fields.Date('Available From', default=lambda self: fields.Date.context_today(self) + timedelta(days=90), copy=False)
1414
expected_price = fields.Float('Expected Price', required=True)
1515
selling_price = fields.Float('Selling Price', readonly=True, copy=False)
1616
bedrooms = fields.Integer('Bedrooms', default=2)
@@ -20,13 +20,11 @@ class EstateProperty(models.Model):
2020
garden = fields.Boolean('Garden')
2121
garden_area = fields.Integer('Garden area')
2222

23-
garden_orientation = fields.Selection(
24-
string='type',
25-
selection=[
26-
('north', 'North'),
27-
('south', 'South'),
28-
('east', 'East'),
29-
('west', 'West')
23+
garden_orientation = fields.Selection([
24+
("north", "North"),
25+
("south", "South"),
26+
("east", "East"),
27+
("west", "West"),
3028
])
3129

3230
state = fields.Selection(
@@ -68,3 +66,52 @@ class EstateProperty(models.Model):
6866
"property_id",
6967
string="Offers",
7068
)
69+
70+
total_area = fields.Float(
71+
compute="_compute_total_area",
72+
string="Total Area",
73+
)
74+
75+
best_price = fields.Float(
76+
compute="_compute_best_price",
77+
string="Best Offer",
78+
)
79+
80+
@api.depends("living_area", "garden_area")
81+
def _compute_total_area(self):
82+
for record in self:
83+
record.total_area = record.living_area + record.garden_area
84+
85+
@api.depends("offer_ids.price")
86+
def _compute_best_price(self):
87+
for record in self:
88+
if record.offer_ids:
89+
record.best_price = max(record.offer_ids.mapped("price"))
90+
else:
91+
record.best_price = 0.0
92+
93+
@api.onchange("garden")
94+
def _onchange_garden(self):
95+
if self.garden:
96+
self.garden_area = 10
97+
self.garden_orientation = "north"
98+
else:
99+
self.garden_area = 0
100+
self.garden_orientation = False
101+
102+
@api.depends("create_date", "validity")
103+
def _compute_date_deadline(self):
104+
for record in self:
105+
if record.create_date:
106+
record.date_deadline = (
107+
record.create_date.date() + timedelta(days=record.validity)
108+
)
109+
else:
110+
record.date_deadline = fields.Date.context_today(self)
111+
112+
def _inverse_date_deadline(self):
113+
for record in self:
114+
if record.create_date and record.date_deadline:
115+
record.validity = (
116+
record.date_deadline - record.create_date.date()
117+
).days

estate/models/estate_property_offer.py

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
from odoo import models, fields
1+
from odoo import models, fields, api
2+
from datetime import timedelta
23

34

45
class EstatePropertyOffer(models.Model):
@@ -13,11 +14,50 @@ class EstatePropertyOffer(models.Model):
1314
],
1415
copy=False,
1516
)
17+
1618
partner_id = fields.Many2one(
1719
"res.partner",
1820
required=True,
1921
)
22+
2023
property_id = fields.Many2one(
2124
"estate.property",
2225
required=True,
2326
)
27+
28+
validity = fields.Integer(
29+
default=7,
30+
)
31+
32+
date_deadline = fields.Date(
33+
compute="_compute_date_deadline",
34+
inverse="_inverse_date_deadline",
35+
)
36+
37+
@api.depends("create_date", "validity")
38+
def _compute_date_deadline(self):
39+
for record in self:
40+
if record.create_date:
41+
record.date_deadline = (
42+
record.create_date.date()
43+
+ timedelta(days=record.validity)
44+
)
45+
else:
46+
record.date_deadline = False
47+
48+
@api.depends("create_date", "validity")
49+
def _compute_date_deadline(self):
50+
for record in self:
51+
if record.create_date:
52+
record.date_deadline = (
53+
record.create_date.date() + timedelta(days=record.validity)
54+
)
55+
else:
56+
record.date_deadline = fields.Date.context_today(self)
57+
58+
def _inverse_date_deadline(self):
59+
for record in self:
60+
if record.create_date and record.date_deadline:
61+
record.validity = (
62+
record.date_deadline - record.create_date.date()
63+
).days

estate/views/estate_property_offer_views.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
<field name="price"/>
99
<field name="partner_id"/>
1010
<field name="status"/>
11+
<field name="validity"/>
12+
<field name="date_deadline"/>
1113
</list>
1214
</field>
1315
</record>
@@ -21,6 +23,8 @@
2123
<group>
2224
<field name="price"/>
2325
<field name="partner_id"/>
26+
<field name="validity"/>
27+
<field name="date_deadline"/>
2428
<field name="status"/>
2529
</group>
2630
</sheet>

estate/views/estate_property_views.xml

Lines changed: 11 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -35,28 +35,19 @@
3535
<field name="name" class="mb16" />
3636
</h1>
3737
</div>
38-
<group class="d-flex justify-content-between">
38+
<group>
39+
<field name="tag_ids" widget="many2many_tags" />
40+
</group>
41+
<group>
3942
<group>
4043
<field name="property_type_id" class="mb4" />
41-
</group>
42-
<group>
43-
<field name="tag_ids" widget="many2many_tags" />
44-
</group>
45-
<group>
4644
<field name="postcode" class="mb16" />
47-
</group>
48-
<group>
49-
<field name="expected_price" class="mb16" />
50-
</group>
51-
</group>
52-
53-
<group class="d-flex justify-content-between mb32">
54-
<group>
5545
<field name="date_availability" class="mb16" />
5646
</group>
57-
5847
<group>
48+
<field name="expected_price" class="mb16" />
5949
<field name="selling_price" class="mb16" />
50+
<field name="best_price" readonly="1" />
6051
</group>
6152
</group>
6253

@@ -65,39 +56,26 @@
6556
<group class="d-flex flex-column">
6657
<group>
6758
<field name="description" class="mb4" />
68-
</group>
69-
<group>
7059
<field name="bedrooms" class="mb4" />
71-
</group>
72-
<group>
7360
<field name="living_area" class="mb4" />
74-
</group>
75-
<group>
7661
<field name="facades" class="mb4" />
77-
</group>
78-
<group>
7962
<field name="garage" class="mb4" />
80-
</group>
81-
<group>
8263
<field name="garden" class="mb4" />
83-
</group>
84-
<group>
8564
<field name="garden_area" class="mb4" />
86-
</group>
87-
<group>
8865
<field name="garden_orientation" class="mb4" />
66+
<field name="total_area" readonly="1" />
8967
</group>
9068
</group>
9169
</page>
70+
<page string="Offers">
71+
<field name="offer_ids" />
72+
</page>
9273
<page string="Other Info">
9374
<group>
9475
<field name="salesperson_id" />
9576
<field name="buyer_id" />
9677
</group>
9778
</page>
98-
<page string="Offers">
99-
<field name="offer_ids" />
100-
</page>
10179
</notebook>
10280
</sheet>
10381
</form>
@@ -111,7 +89,7 @@
11189
<search string="Search Properties">
11290
<field name="name" string="Title" />
11391
<field name="postcode" string="Postcode" />
114-
<field name="expected_price" string="Postcode" />
92+
<field name="expected_price" string="Expected Price" />
11593
<field name="bedrooms" string="Bedrooms" />
11694
<field name="living_area" string="Living Area" />
11795

0 commit comments

Comments
 (0)