Skip to content

Commit 0fec157

Browse files
committed
[IMP] estate: res.user inheritance for properties - Chapter 12
CRUD inheritance (ondelete for offer, create for estate property) inherit res.user and add property_ids to it view inheritance: from res.user and add properties of the user to the new page in the form view
1 parent a1670fa commit 0fec157

File tree

8 files changed

+74
-8
lines changed

8 files changed

+74
-8
lines changed

estate/__manifest__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"views/estate_property_tag_views.xml",
1414
"views/estate_property_offer_views.xml",
1515
"views/estate_property_type_views.xml",
16+
"views/res_users_views.xml",
1617
"views/estate_menus.xml",
1718
],
1819
"assets": {},

estate/models/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
from . import estate_property_type
33
from . import estate_property_tag
44
from . import estate_property_offer
5+
from . import res_users

estate/models/estate_property.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class EstateProperty(models.Model):
4646
required=True,
4747
copy=False,
4848
store=True,
49-
compute="_compute_state",
49+
# compute="_compute_state",
5050
)
5151
type_id = fields.Many2one("estate.property.type", string="Property Type")
5252
salesperson_id = fields.Many2one(
@@ -77,11 +77,12 @@ def _compute_best_price(self):
7777
for record in self:
7878
record.best_price = max(record.offer_ids.mapped("price") or [0])
7979

80-
@api.depends("offer_ids")
81-
def _compute_state(self):
82-
for record in self:
83-
if len(record.offer_ids) == 1 and record.state == "new":
84-
record.state = "offer_received"
80+
# @api.depends("offer_ids")
81+
# def _compute_state(self):
82+
# for record in self:
83+
# if len(record.offer_ids) == 1 and record.state == "new":
84+
# # record.state = "offer_received" OPEN here do not forget!!!
85+
# record.state = record.state
8586

8687
@api.onchange("garden")
8788
def _onchange_garden(self):
@@ -120,3 +121,16 @@ def _check_selling_price(self):
120121
raise ValidationError(
121122
"The selling price cannot be lower than the 90% of the expected price"
122123
)
124+
125+
@api.ondelete(at_uninstall=False)
126+
def _unlink_except_few_states(self):
127+
if any(
128+
(record.state != "new" and record.state != "cancelled") for record in self
129+
):
130+
raise UserError(
131+
"You cannot remove the property except when the state is new or cancelled!"
132+
)
133+
134+
def offer_received(self):
135+
if self.state == "new":
136+
self.state = "offer_received"

estate/models/estate_property_offer.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,21 @@ class EstatePropertyOffer(models.Model):
2121
)
2222
_order = "price desc"
2323

24+
@api.model
25+
def create(self, vals_list):
26+
an_estate_property = self.env["estate.property"].browse(
27+
vals_list[0]["property_id"]
28+
)
29+
if any(
30+
vals_list[0]["price"] < offer_id.price
31+
for offer_id in an_estate_property.offer_ids
32+
):
33+
raise UserError("Offer cannot be lower than any of previous offers!")
34+
35+
an_estate_property.offer_received()
36+
37+
return super().create(vals_list)
38+
2439
@api.depends("validity", "create_date")
2540
def _compute_date_deadline(self):
2641
for record in self:

estate/models/res_users.py

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

estate/views/estate_menus.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<menuitem id="estate_settings_menu" name="Settings">
88
<menuitem id="estate_property_type_menu" action="estate_property_type_action" />
99
<menuitem id="estate_property_tag_menu" action="estate_property_tag_action" />
10-
10+
<!-- <menuitem id="res_users_menu" action="res_users_action" /> -->
1111
</menuitem>
1212
</menuitem>
1313
</odoo>

estate/views/estate_property_views.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@
3333
<field name="facades" />
3434
<field name="type_id" />
3535
<filter string="Available Properties" name="available_properties"
36-
domain="['|', ('state', '=', 'new'), ('state', '=', 'offer_received')]" />
36+
domain="['|', ('state', '=', 'new'), ('state', '=', 'offer_received')]"
37+
/>
3738
<filter name="group_by_postcode" context="{'group_by': 'postcode'}" />
3839
</search>
3940
</field>

estate/views/res_users_views.xml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<odoo>
2+
<data>
3+
<record id="res_users_view_form" model="ir.ui.view">
4+
<field name="name">res_users.form.inherit.view</field>
5+
<field name="model">res.users</field>
6+
<field name="inherit_id" ref="base.view_users_form" />
7+
<field name="arch" type="xml">
8+
<xpath expr="//page[@name='preferences']" position="after">
9+
<page name="Real Estate Properties">
10+
<group>
11+
<field name="property_ids" />
12+
</group>
13+
</page>
14+
</xpath>
15+
</field>
16+
</record>
17+
<!-- <record id="res_users_action" model="ir.actions.act_window">
18+
<field name="name">Users&amp;Companies</field>
19+
<field name="res_model">res.users</field>
20+
<field name="view_mode">list,form</field>
21+
</record> -->
22+
</data>
23+
</odoo>

0 commit comments

Comments
 (0)