Skip to content

Commit d6392eb

Browse files
committed
[IMP] estate: implement property offer validation and enhance user model with property relationship
1 parent 6fc8809 commit d6392eb

File tree

6 files changed

+49
-0
lines changed

6 files changed

+49
-0
lines changed

estate/__manifest__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,6 @@
1515
'views/estate_property_type_views.xml',
1616
'views/estate_property_tag_views.xml',
1717
'views/estate_menus.xml',
18+
'views/res_users.xml',
1819
],
1920
}

estate/models/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@
33
estate_property_type,
44
estate_property_tag,
55
estate_property_offer,
6+
res_users,
67
)

estate/models/estate_property.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,14 @@ def _check_selling_price(self):
103103
'Selling cannot be less than 90% of the expected price.'
104104
)
105105

106+
@api.ondelete(at_uninstall=False)
107+
def delete(self):
108+
for property in self:
109+
if property.state not in ('new', 'canceled'):
110+
raise UserError(
111+
'Only properties in New or Canceled state can be deleted.'
112+
)
113+
106114
def action_set_property_as_sold(self):
107115
for property in self:
108116
if property.state == 'canceled':

estate/models/estate_property_offer.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,21 @@ def _inverse_date_deadline(self):
4646
offer.date_deadline - (offer.create_date.date() or fields.Date.today())
4747
).days
4848

49+
@api.model
50+
def create(self, offers_list):
51+
for offer in offers_list:
52+
linked_property = self.env['estate.property'].browse(offer['property_id'])
53+
54+
lowest_price = min(linked_property.offer_ids.mapped('price'), default=0.0)
55+
if offer['price'] < lowest_price:
56+
raise UserError(
57+
'You cannot create an offer with a lower amount than a existing one.'
58+
)
59+
60+
if linked_property.state == 'new':
61+
linked_property.state = 'offer_received'
62+
return super().create(offers_list)
63+
4964
def action_accept(self):
5065
for offer in self:
5166
other_offers = offer.property_id.offer_ids - offer

estate/models/res_users.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
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', 'salesperson_id', string='Real Estate Properties'
9+
)

estate/views/res_users.xml

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

0 commit comments

Comments
 (0)