Skip to content

Commit e577a81

Browse files
committed
[IMP] estate: Added User Inheritance and property listing
Chapter 12 : Add model inheritance to link properties with users Show available properties on the user form view Add view inheritance to display properties in a separate notebook tab
1 parent d59cb9b commit e577a81

File tree

7 files changed

+60
-5
lines changed

7 files changed

+60
-5
lines changed

estate/__manifest__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
'views/estate_property_type_views.xml',
1313
'views/estate_property_tag_views.xml',
1414
'views/estate_property_views.xml',
15+
'views/res_users_views.xml',
1516
'views/estate_menus.xml'
1617
],
1718
'category': 'Sales/Real Estate',

estate/models/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from . import estate_property
2+
from . import estate_property_offer
23
from . import estate_property_type
34
from . import estate_property_tag
4-
from . import estate_property_offer
5+
from . import res_users

estate/models/estate_property.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,3 +126,11 @@ def _check_selling_price(self):
126126
"The selling price must be at least 90% of the expected price!\n"
127127
"You must reduce the expected price if you want to accept this offer."
128128
))
129+
130+
@api.ondelete(at_uninstall=False)
131+
def _check_property_deletion(self):
132+
for rec in self:
133+
if rec.state not in ("new", "cancelled"):
134+
raise exceptions.UserError(_(
135+
"You can only delete properties in New or Cancelled state."
136+
))

estate/models/estate_property_offer.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from dateutil.relativedelta import relativedelta
22

3-
from odoo import models, fields, api
4-
from odoo.exceptions import UserError
3+
from odoo import models, fields, api, exceptions, _
54

65

76
class EstatePropertyOffer(models.Model):
@@ -66,3 +65,16 @@ def action_refuse(self):
6665
for offer in self:
6766
offer.status = 'refused'
6867
return True
68+
69+
@api.model
70+
def create(self, vals):
71+
for rec in vals:
72+
property_id = rec.get('property_id')
73+
price = rec.get('price', 0.0)
74+
if property_id:
75+
property_obj = self.env['estate.property'].browse(property_id)
76+
best_offer = property_obj.best_price or 0.0
77+
if price < best_offer:
78+
raise exceptions.UserError(_(
79+
'Offer price must be greater than or equal to the best offer price.'))
80+
return super().create(vals)

estate/models/res_users.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from odoo import models, fields
2+
3+
class ResUsers(models.Model):
4+
_inherit = "res.users"
5+
6+
property_ids = fields.One2many(
7+
"estate.property",
8+
"salesperson_id",
9+
domain=[("state", "=", "new")]
10+
)

estate/views/estate_property_type_views.xml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
<group>
2424
<field name="name" />
2525
</group>
26-
2726
<notebook>
2827
<page string="Properties">
2928
<field name="property_ids">
@@ -35,7 +34,6 @@
3534
</field>
3635
</page>
3736
</notebook>
38-
3937
</sheet>
4038
</form>
4139
</field>

estate/views/res_users_views.xml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<odoo>
2+
<record id="view_res_users_form" model="ir.ui.view">
3+
<field name="name">res.users.form.inherit.estate</field>
4+
<field name="model">res.users</field>
5+
<field name="inherit_id" ref="base.view_users_form" />
6+
<field name="arch" type="xml">
7+
<xpath expr="//notebook" position="inside">
8+
<page string="Real Estate Properties">
9+
<field name="property_ids">
10+
<list>
11+
<field name="name"/>
12+
<field name="property_type_id"/>
13+
<field name="postcode"/>
14+
<field name="tag_ids" widget="many2many_tags"/>
15+
<field name="bedrooms"/>
16+
<field name="living_area"/>
17+
<field name="expected_price"/>
18+
<field name="selling_price"/>
19+
</list>
20+
</field>
21+
</page>
22+
</xpath>
23+
</field>
24+
</record>
25+
</odoo>

0 commit comments

Comments
 (0)