Skip to content

Commit 859c071

Browse files
committed
[IMP] estate: Add compute fields and onchanges for offer and garden
Added compute logic for offer validity and deadline_date Implemented onchange methods to set default garden area values Chapter 8
1 parent 502ebb0 commit 859c071

File tree

9 files changed

+63
-21
lines changed

9 files changed

+63
-21
lines changed

estate/__manifest__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
2-
'name': "Real Estate",
2+
'name': 'Real Estate',
33
'version': '1.0',
44
'depends': ['base'],
5-
'author': "Shivam Saksham(shsak)",
5+
'author': 'Shivam Saksham(shsak)',
66
'category': 'Sales',
77
'description': """
88
An Real Estate App to buy, sell, and rent properties.

estate/models/estate_property.py

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
from odoo import models, fields
1+
from odoo import models, fields, api
22

33

44
class EstateProperty(models.Model):
5-
_name = "estate_property"
6-
_description = "Estate Property details"
5+
_name = 'estate_property'
6+
_description = 'Estate Property details'
77

88
name = fields.Char(required=True)
99
description = fields.Text()
@@ -32,8 +32,29 @@ class EstateProperty(models.Model):
3232
copy=False
3333
)
3434
active = fields.Boolean(default=True)
35-
property_type_id = fields.Many2one("estate.property.type", string="Type")
36-
buyer = fields.Many2one("res.partner", copy=False)
37-
salesperson = fields.Many2one("res.users", string="Salesman", default=lambda self: self.env.user)
38-
tag_ids = fields.Many2many("estate.property.tag", string="Tag")
35+
property_type_id = fields.Many2one('estate.property.type', string='Type')
36+
buyer = fields.Many2one('res.partner', copy=False)
37+
salesperson = fields.Many2one('res.users', string='Salesman', default=lambda self: self.env.user)
38+
tag_ids = fields.Many2many('estate.property.tag', string='Tag')
3939
offer_ids = fields.One2many('estate.property.offer', 'property_id')
40+
total_area = fields.Integer(compute='_compute_total_area')
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.price')
49+
def _compute_best_price(self):
50+
for record in self:
51+
record.best_price = max(record.offer_ids.mapped('price') or [0])
52+
53+
@api.onchange('garden')
54+
def _onchange_garden(self):
55+
if self.garden:
56+
self.garden_orientation = 'north'
57+
self.garden_area = 10
58+
else:
59+
self.garden_orientation = None
60+
self.garden_area = 0
Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,29 @@
1-
from odoo import models, fields
1+
from odoo import models, fields, api
22

33

44
class EstatePropertyOffer(models.Model):
5-
_name = "estate.property.offer"
6-
_description = "Offer to buy the property"
5+
_name = 'estate.property.offer'
6+
_description = 'Offer to buy the property'
77

88
price = fields.Float()
99
status = fields.Selection(
10-
string="Status",
10+
string='Status',
1111
selection=[('accepted', 'Accepted'), ('refused', 'Refused')],
1212
copy=False,
1313
)
14-
partner_id = fields.Many2one("res.partner", required=True)
15-
property_id = fields.Many2one("estate_property", required=True)
14+
partner_id = fields.Many2one('res.partner', required=True)
15+
property_id = fields.Many2one('estate_property', required=True)
16+
validity = fields.Integer(default=7)
17+
date_deadline = fields.Date(compute='_compute_offer_date_deadline', inverse='_inverse_offer_date_deadline')
18+
19+
@api.depends('create_date', 'validity')
20+
def _compute_offer_date_deadline(self):
21+
for record in self:
22+
if record.create_date:
23+
record.date_deadline = fields.Date.add(record.create_date.date(), days=record.validity)
24+
else:
25+
record.date_deadline = fields.Date.add(fields.Date.today(), days=record.validity)
26+
27+
def _inverse_offer_date_deadline(self):
28+
for record in self:
29+
record.validity = (record.date_deadline - record.create_date.date()).days

estate/security/ir.model.access.csv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
22
estate.access_estate_property,access_estate_property,estate.model_estate_property,base.group_user,1,1,1,1
33
estate.access_estate_property_type,access_estate_property_type,estate.model_estate_property_type,base.group_user,1,1,1,1
44
estate.access_estate_property_tag,access_estate_property_tag,estate.model_estate_property_tag,base.group_user,1,1,1,1
5-
estate.access_estate_property_offer,access_estate_property_offer,estate.model_estate_property_offer,base.group_user,1,1,1,1
5+
estate.access_estate_property_offer,access_estate_property_offer,estate.model_estate_property_offer,base.group_user,1,1,1,1

estate/views/estate_menus.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
<menuitem id="estate_first_level_menu" name="Advertisement">
44
<menuitem id="estate_property_model_menu_action" action="estate_property_action" />
55
</menuitem>
6+
67
<menuitem id="estate_first_level_setting_menu" name="Settings">
78
<menuitem id="estate_property_type_model_menu_action"
89
action="estate_property_type_action" />
910
<menuitem id="estate_property_tag_model_menu_action"
1011
action="estate_property_tag_action" />
1112
</menuitem>
1213
</menuitem>
13-
</odoo>
14+
</odoo>

estate/views/estate_property_offer_views.xml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
<list string="Offers">
77
<field name="price" />
88
<field name="partner_id" string="Partner" />
9+
<field name="validity" string="Validity (days)" />
10+
<field name="date_deadline" />
911
<field name="status" />
1012
</list>
1113
</field>
@@ -20,10 +22,12 @@
2022
<group>
2123
<field name="price" />
2224
<field name="partner_id" string="Partener" />
25+
<field name="validity" string="Validity (days)" />
26+
<field name="date_deadline" />
2327
<field name="status" />
2428
</group>
2529
</sheet>
2630
</form>
2731
</field>
2832
</record>
29-
</odoo>
33+
</odoo>

estate/views/estate_property_tag_views.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@
44
<field name="res_model">estate.property.tag</field>
55
<field name="view_mode">list,form</field>
66
</record>
7-
</odoo>
7+
</odoo>

estate/views/estate_property_type_views.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@
44
<field name="res_model">estate.property.type</field>
55
<field name="view_mode">list,form</field>
66
</record>
7-
</odoo>
7+
</odoo>

estate/views/estate_property_views.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
<group>
1919
<field name="expected_price" />
2020
<field name="selling_price" />
21+
<field name="best_price"/>
2122
</group>
2223
</group>
2324
<notebook>
@@ -32,6 +33,7 @@
3233
<field name="garden_area" string="Garden Area (sqm)" />
3334
<field name="garden_orientation" />
3435
<field name="state" />
36+
<field name="total_area"/>
3537
</group>
3638
</page>
3739
<page string="Offers">
@@ -92,4 +94,4 @@
9294
<field name="res_model">estate_property</field>
9395
<field name="view_mode">list,form</field>
9496
</record>
95-
</odoo>
97+
</odoo>

0 commit comments

Comments
 (0)