Skip to content

Commit 0e57fac

Browse files
committed
[ADD] estate: add compute/inverse fields and onchange for property automation
- Added computed fields with inverse methods for dynamic data synchronization. - Implemented onchange methods to auto-fill related fields in the form view. - Reduced manual input, improved accuracy, and streamlined data handling.
1 parent 343fdf9 commit 0e57fac

File tree

4 files changed

+55
-8
lines changed

4 files changed

+55
-8
lines changed

estate/models/estate_property.py

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
from odoo import fields, models
1+
from odoo import api,fields, models
22

33

44
class EstateProperty(models.Model):
55
_name = "estate.property"
66
_description = "Estate Property"
77

8-
8+
99

1010
name = fields.Char(required=True)
1111
description = fields.Text()
@@ -35,8 +35,29 @@ class EstateProperty(models.Model):
3535
buyer = fields.Many2one("res.partner", copy=False)
3636
tag_ids = fields.Many2many("estate.property.tag", string="Tags")
3737
offers_ids = fields.One2many("estate.property.offers", "property_id")
38-
39-
40-
38+
total_area = fields.Integer(compute= "_compute_area")
39+
best_price = fields.Float(compute="_compute_bestprice")
40+
41+
#it's calculate the total area
42+
@api.depends('living_area','garden_area')
43+
def _compute_area(self):
44+
for area in self:
45+
area.total_area = area.living_area + area.garden_area
46+
47+
#it's taking the best offer from among all
48+
@api.depends('offers_ids.price')
49+
def _compute_bestprice(self):
50+
for record in self:
51+
record.best_price = max(record.offers_ids.mapped('price'), default = 0)
52+
53+
#change the values on the basis of the garden True or False
54+
@api.onchange('garden')
55+
def _onchnage_garden(self):
56+
if self.garden==True:
57+
self.garden_area = 10
58+
self.garden_orientation = "North"
59+
else:
60+
self.garden_area = 0
61+
self.garden_orientation = ""
4162

4263

estate/models/estate_property_offers.py

Lines changed: 22 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 fields, models, api
22

33

44
class EstatePropertyOffer(models.Model):
@@ -9,4 +9,25 @@ class EstatePropertyOffer(models.Model):
99
status = fields.Selection([("Accepted","accepted"),("refused","Refused")], copy=False)
1010
partner_id = fields.Many2one("res.partner", required=True)
1111
property_id = fields.Many2one("estate.property", required=True)
12+
validity = fields.Integer(default=7)
13+
date_deadline = fields.Date(compute = "_compute_deadline", inverse = "_inverse_deadline", store=True)
14+
15+
#date_deadline
16+
@api.depends("create_date","validity")
17+
def _compute_deadline(self):
18+
for record in self:
19+
if record.create_date:
20+
record.date_deadline = fields.Date.add(record.create_date, days=record.validity)
21+
#if user adding new data then their is no available of create_date then use today
22+
else:
23+
record.date_deadline = fields.Date.add(fields.Date.today(), days=record.validity)
24+
25+
def _inverse_deadline(self):
26+
for record in self:
27+
if record.create_date:
28+
record.validity = (record.date_deadline - record.create_date.date()).days
29+
else:
30+
record.validity = (record.date_deadline - record.fields.Date.today()).days
31+
32+
1233

estate/views/estate_property_offers_views.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
<list>
1414
<field name="partner_id"/>
1515
<field name="price"/>
16+
<field name="validity"/>
17+
<field name="date_deadline"/>
1618
<field name="status"/>
1719
</list>
1820
</field>
@@ -26,6 +28,8 @@
2628
<group>
2729
<field name="partner_id"/>
2830
<field name="price"/>
31+
<field name="validity"/>
32+
<field name="date_deadline"/>
2933
<field name="status"/>
3034
</group>
3135
</form>

estate/views/estate_property_views.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,13 @@
6363
</group>
6464
<group>
6565
<group>
66+
<field name="property_type"/>
6667
<field name="postcode" />
6768
<field name="date_availaility" string="Available From" />
6869
</group>
6970
<group>
7071
<field name="expected_price" />
71-
72+
<field name="best_price"/>
7273
<field name="selling_price" />
7374
</group>
7475
</group>
@@ -83,9 +84,9 @@
8384
<field name="garden" />
8485
<field name="garden_area" string="Garden Area (sqm)" />
8586
<field name="garden_orientation" string="Garden Orientation" />
86-
<field name="property_type" />
8787
<field name="active"/>
8888
<field name="state"/>
89+
<field name="total_area"/>
8990
</group>
9091
</page>
9192
<page string="Offers">

0 commit comments

Comments
 (0)