Skip to content

Commit 41768c1

Browse files
committed
[IMP] estate: added validity & deadline in estate property offer model.
1) Define two fields validity and deadline. 2) Create compute & inverse method for them 3) Also added search functionality in the estate property model for best offers.
1 parent 3677135 commit 41768c1

3 files changed

Lines changed: 37 additions & 11 deletions

File tree

estate/models/estate_property.py

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,18 @@ class EstateProperty(models.Model):
88
_description = 'Real Estate Property'
99

1010
name = fields.Char(string="Title", required=True)
11-
description = fields.Text(string="Description")
12-
postcode = fields.Char(string="Postcode")
11+
description = fields.Text()
12+
postcode = fields.Char()
1313
date_availability = fields.Date(string="Available From", copy=False, default=lambda self: fields.Date.today() + relativedelta(months=3))
1414
expected_price = fields.Float(string="Expected Price", required=True)
1515
selling_price = fields.Float(string="Selling Price", copy=False)
16-
bedrooms = fields.Integer(string="Bedrooms", default=2)
16+
bedrooms = fields.Integer(default=2)
1717
living_area = fields.Integer(string="Living Area (spm)")
18-
facades = fields.Integer(string="Facades")
19-
garage = fields.Boolean(string="Garage")
20-
garden = fields.Boolean(string="Garden")
18+
facades = fields.Integer()
19+
garage = fields.Boolean()
20+
garden = fields.Boolean()
2121
garden_area = fields.Integer(string="Garden Area (spm)")
22-
total_area = fields.Float(string="Total Area (sqm)", compute="_computed_total_area", store=True)
22+
total_area = fields.Float(string="Total Area (sqm)", compute="_computed_total_area")
2323
garden_orientation = fields.Selection([
2424
('north', "North"),
2525
('east', "East"),
@@ -33,13 +33,13 @@ class EstateProperty(models.Model):
3333
('offer_accepted', "Offer Accepted"),
3434
('sold', "Sold"),
3535
('cancelled', "Cancelled")
36-
], string="State", copy=False, default='new')
36+
], copy=False, default='new')
3737
property_type_id = fields.Many2one('estate.property.type', string="Property Type", ondelete="cascade")
3838
sales_person_id = fields.Many2one('res.users', string='Salesman', ondelete='cascade')
3939
buyer_id = fields.Many2one('res.partner', string='Buyer', ondelete='cascade')
4040
property_tag_ids = fields.Many2many('estate.property.tag')
4141
offer_ids = fields.One2many('estate.property.offer', 'property_id', string="Offers")
42-
best_price = fields.Float(string="Best Offer", compute="_computed_best_offer", store=True)
42+
best_price = fields.Float(string="Best Offer", compute="_computed_best_offer", search="_search_best_offer", store=False)
4343

4444
@api.depends("living_area", "garden_area")
4545
def _computed_total_area(self):
@@ -51,3 +51,10 @@ def _computed_best_offer(self):
5151
for rec in self:
5252
prices = rec.offer_ids.mapped("price")
5353
rec.best_price = max(prices) if prices else 0.0
54+
55+
def _search_best_offer(self, operator, value):
56+
return [
57+
'&',
58+
('offer_ids.price', '>', 10000),
59+
('offer_ids.price', operator, value)
60+
]

estate/models/estate_property_offer.py

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

35

46
class EstatePropertyOffer(models.Model):
@@ -9,6 +11,19 @@ class EstatePropertyOffer(models.Model):
911
status = fields.Selection([
1012
('accepted', 'Accepted'),
1113
('refused', 'Refused')
12-
], string='Status', copy=False)
14+
], copy=False)
1315
partner_id = fields.Many2one('res.partner', required=True)
1416
property_id = fields.Many2one('estate.property', required=True)
17+
validity = fields.Integer(default=7)
18+
date_deadline = fields.Date(string="Deadline", compute="_compute_deadline_method", inverse="_inverse_deadline_method")
19+
20+
@api.depends("create_date", "validity")
21+
def _compute_deadline_method(self):
22+
for rec in self:
23+
create_date = rec.create_date.date() if rec.create_date else fields.Date.today()
24+
rec.date_deadline = create_date + relativedelta(days=rec.validity)
25+
26+
def _inverse_deadline_method(self):
27+
for rec in self:
28+
create_date = rec.create_date.date() if rec.create_date else fields.Date.today()
29+
rec.validity = relativedelta(rec.date_deadline, 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
<form>
88
<field name='price'/>
99
<field name='partner_id'/>
10+
<field name='validity' string="Validity (days)"/>
11+
<field name='date_deadline'/>
1012
<field name='status'/>
1113
</form>
1214
</field>
@@ -19,6 +21,8 @@
1921
<list string="Offers">
2022
<field name='price'/>
2123
<field name='partner_id'/>
24+
<field name='validity' string="Validity (days)"/>
25+
<field name='date_deadline'/>
2226
<field name='status'/>
2327
</list>
2428
</field>

0 commit comments

Comments
 (0)