Skip to content

Commit 78e37cc

Browse files
committed
[IMP] estate: add python, model, view inheritance
restrict user to delete property which is not in new or sold state add property id field in user model using inheritance
1 parent 315e008 commit 78e37cc

File tree

8 files changed

+63
-6
lines changed

8 files changed

+63
-6
lines changed

estate/__manifest__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
'views/estate_property_type_views.xml',
1010
'views/estate_property_tag_views.xml',
1111
'views/estate_property_offer_views.xml',
12+
'views/res_users_views.xml',
1213
'views/estate_menus.xml'
1314
],
1415
'application': True,

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: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,3 +101,21 @@ def _check_selling_price(self):
101101
if record.state in ['sold', 'offer_accepted']:
102102
if float_compare(record.selling_price, 0.9 * record.expected_price, precision_digits=2) < 0:
103103
raise ValidationError("the selling price is lower")
104+
105+
@api.ondelete(at_uninstall=True)
106+
def _unlink_check_state_of_property(self):
107+
for record in self:
108+
if record.state in ('offer_received', 'offer_accepted', 'sold'):
109+
raise UserError("You cannot delete a new or cancelled property !")
110+
111+
@api.model
112+
def write(self, vals):
113+
for record in self:
114+
if 'state' in vals:
115+
new_state = vals['state']
116+
current_state = record.state
117+
if current_state == 'sold' and new_state == 'cancelled':
118+
raise UserError("sold property cannot be cancelled.")
119+
if current_state == 'cancelled' and new_state == 'sold':
120+
raise UserError("cancelled property cannot be sold.")
121+
return super().write(vals)

estate/models/estate_property_offer.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,13 @@ def action_refuse(self):
5454
'CHECK(price>=0)',
5555
'offer price must be positive',
5656
)
57+
58+
@api.model
59+
def create(self,value):
60+
for record in value:
61+
property = self.env['estate.property'].browse(record['property_id'])
62+
if property.state == 'new':
63+
property.state = 'offer_received'
64+
if record['price'] < property.best_offer:
65+
raise UserError("Offer must be higher or equal than %d" % property.best_offer)
66+
return super().create(value)

estate/models/estate_property_type.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ class EstatePropertyType(models.Model):
99
name = fields.Char(required=True)
1010
property_ids = fields.One2many('estate.property', 'type_id')
1111
sequence = fields.Integer(string="Sequence", default=1)
12-
offer_count = fields.Integer(compute="_compute_total_offers")
13-
offer_ids = fields.One2many("estate.property.offer","property_type_id")
12+
offer_count = fields.Integer(compute="_compute_total_offers")
13+
offer_ids = fields.One2many("estate.property.offer", "property_type_id")
1414

1515
@api.depends("offer_ids")
1616
def _compute_total_offers(self):

estate/models/res_users.py

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

estate/views/estate_property_type_views.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
<field name="arch" type="xml">
1717
<form>
1818
<sheet>
19-
<header>
20-
<button type="action" name="%(estate.estate_property_offer_action)d" class="oe_stat_button" icon="fa-money">
19+
<div class="oe_button_box" name="button_box">
20+
<button name="%(estate.estate_property_offer_action)d" type="action" class="oe_stat_button" icon="fa-money">
2121
<field name="offer_count" widget="statinfo" string="Offers"/>
2222
</button>
23-
</header>
23+
</div>
2424
<group>
2525
<group>
2626
<field name="name"/>
@@ -30,7 +30,7 @@
3030
<page name="Properties">
3131
<group>
3232
<field name="property_ids"/>
33-
</group>
33+
</group>
3434
</page>
3535
</notebook>
3636
</sheet>

estate/views/res_users_views.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?xml version="1.0"?>
2+
<odoo>
3+
<record id="res_users_view_form_inherit" model="ir.ui.view">
4+
<field name="name">res.users.view.form.inherit</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+
<notebook>
9+
<page name="Properties">
10+
<field name="property_ids"/>
11+
</page>
12+
</notebook>
13+
</field>
14+
</record>
15+
</odoo>

0 commit comments

Comments
 (0)