Skip to content

Commit 2a00cff

Browse files
committed
[IMP] estate: Add create and delete conditions - user inheritance
1 parent 716c663 commit 2a00cff

File tree

7 files changed

+45
-1
lines changed

7 files changed

+45
-1
lines changed

estate/__manifest__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
'views/estate_property_offer_views.xml',
99
'views/estate_property_tag_views.xml',
1010
'views/estate_property_type_views.xml',
11+
'views/res_users_views.xml',
1112
'views/estate_menus.xml',
1213
],
1314
'author': "baje",

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: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,3 +95,8 @@ def _check_selling_price(self):
9595
for record in self:
9696
if not float_is_zero(record.selling_price, precision_rounding=0.01) and float_compare(record.selling_price, record.expected_price * 0.9, precision_rounding=0.01) < 0:
9797
raise ValidationError("the selling price cannot be lower than 90% of the expected price")
98+
99+
@api.ondelete(at_uninstall=False)
100+
def _unlink_if_state_is_new_or_cancelled(self):
101+
if any(record.state not in ('new', 'canceled') for record in self):
102+
raise UserError("Only new and canceled properties can be deleted.")

estate/models/estate_property_offer.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from odoo import fields, models, api
22
from dateutil.relativedelta import relativedelta
33
from odoo.exceptions import UserError
4+
from odoo.tools.float_utils import float_compare
45

56

67
class EstatePropertyOffer(models.Model):
@@ -50,3 +51,15 @@ def action_accept(self):
5051
def action_refuse(self):
5152
for record in self:
5253
record.status = 'refused'
54+
55+
@api.model_create_multi
56+
def create(self, values):
57+
for vals in values:
58+
if vals.get("property_id") and vals.get("price"):
59+
prop = self.env["estate.property"].browse(vals["property_id"])
60+
if prop.offer_ids:
61+
max_offer = max(prop.mapped("offer_ids.price"))
62+
if float_compare(vals["price"], max_offer, precision_rounding=0.01) <= 0:
63+
raise UserError(f"The offer must be higher than {max_offer}")
64+
prop.state = "offer_received"
65+
return super().create(values)

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 fields, models
2+
3+
4+
class ResUsers(models.Model):
5+
6+
_inherit = "res.users"
7+
8+
property_ids = fields.One2many(
9+
"estate.property", "user_id", string="Properties", domain=[("state", "in", ["new", "offer_received"])]
10+
)

estate/security/ir.model.access.csv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
22
access_estate_property,access_estate_property,model_estate_property,base.group_user,1,1,1,1
33
access_estate_property_type,access_estate_property_type,model_estate_property_type,base.group_user,1,1,1,1
44
access_estate_property_tag,access_estate_property_tag,model_estate_property_tag,base.group_user,1,1,1,1
5-
access_estate_property_offer,access_estate_property_offer,model_estate_property_offer,base.group_user,1,1,1,1
5+
access_estate_property_offer,access_estate_property_offer,model_estate_property_offer,base.group_user,1,1,1,1

estate/views/res_users_views.xml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<odoo>
2+
<record id="view_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+
<notebook position="inside">
8+
<page name="estate_properties" string="Real Estate Properties">
9+
<field name="property_ids"/>
10+
</page>
11+
</notebook>
12+
</field>
13+
</record>
14+
</odoo>

0 commit comments

Comments
 (0)