Skip to content

Commit bfa5035

Browse files
committed
[IMP] estate: chapter12 - inheritance
- Property ondelete method - Offer creation method - Inherited user model and view
1 parent 0647fef commit bfa5035

6 files changed

Lines changed: 51 additions & 3 deletions

File tree

estate/__manifest__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@
88
'security/ir.model.access.csv',
99
'views/estate_property_views.xml',
1010
'views/estate_property_tag_views.xml',
11-
'views/estate_property_type_views.xml',
1211
'views/estate_property_offer_views.xml',
12+
'views/estate_property_type_views.xml',
13+
'views/estate_user_views.xml',
1314
'views/estate_menus.xml',
1415
]
1516
}

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_tag
33
from . import estate_property_type
44
from . import estate_property_offer
5+
from . import estate_user

estate/models/estate_property.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,14 @@ def _check_selling_above_90(self):
8383
compare = tools.float_utils.float_compare(record.selling_price, record.expected_price*0.9, precision_digits=2)
8484
if offer_accepted and compare != 1:
8585
raise exceptions.ValidationError("Cannot sell bellow 90% of expected price!")
86-
86+
87+
@api.ondelete(at_uninstall=False)
88+
def _unlink_if_new_or_canceled(self):
89+
for record in self:
90+
if record.state not in ['new', 'canceled']:
91+
raise exceptions.UserError('Cannot delete a property with offers or that is sold!')
92+
return True
93+
8794
def property_set_sold(self):
8895
for record in self:
8996
if record.state == 'canceled':

estate/models/estate_property_offer.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,18 @@ def _inverse_deadline(self):
3333
for record in self:
3434
record.validity = (record.date_deadline - record.date_create).days
3535

36+
@api.model
37+
def create(self, vals):
38+
for record in vals:
39+
id = record.get('property_id')
40+
price = record.get('price')
41+
property = self.env['estate_property'].browse(id)
42+
if property.offer_ids:
43+
if price < max(property.offer_ids.mapped('price')):
44+
raise exceptions.UserError('New offer price must be higher or equal to the existing offers!')
45+
property.state = 'offer_received'
46+
return super().create(vals)
47+
3648
def offer_accept(self):
3749
for record in self:
3850
for offer in record.property_id.offer_ids:
@@ -47,5 +59,4 @@ def offer_accept(self):
4759
def offer_refuse(self):
4860
for record in self:
4961
record.status = 'refused'
50-
record.property_id.state = 'offer_recieved'
5162
return True

estate/models/estate_user.py

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

estate/views/estate_user_views.xml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0"?>
2+
<odoo>
3+
4+
<record id="estate_user_form_view" model="ir.ui.view">
5+
<field name="name">estate.user.form.inherit</field>
6+
<field name="model">res.users</field>
7+
<field name="inherit_id" ref="base.view_users_form"/>
8+
<field name="arch" type="xml">
9+
<xpath expr="//page[@name='page_security']" position="after">
10+
<page string="Properties">
11+
<field name="property_ids"/>
12+
</page>
13+
</xpath>
14+
</field>
15+
</record>
16+
17+
</odoo>

0 commit comments

Comments
 (0)