Skip to content

Commit bcfadc1

Browse files
author
youness benbraitit (yoben)
committed
[IMG] estate: Chapter 12: Inheritance
1 parent e79b517 commit bcfadc1

File tree

6 files changed

+66
-14
lines changed

6 files changed

+66
-14
lines changed

estate/__manifest__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
'views/estate_list.xml',
1919
'views/estate_view_form.xml',
2020
'views/estate_view_search.xml',
21+
'views/estate_res_users_views.xml',
2122
'views/estate_menus.xml',
2223
],
2324
}

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: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -68,20 +68,6 @@ class EstateProperty(models.Model):
6868
"Best Offer", compute="_compute_best_price", readonly=True
6969
)
7070

71-
# 💡 REPLACED deprecated models.Constraint with _sql_constraints
72-
_sql_constraints = [
73-
(
74-
'check_expected_price',
75-
'CHECK(expected_price > 0)',
76-
'The expected price must be strictly positive.',
77-
),
78-
(
79-
'check_selling_price',
80-
'CHECK(selling_price >= 0)',
81-
'The selling price must be positive or zero.',
82-
),
83-
]
84-
8571
@api.depends('living_area', 'garden_area')
8672
def _compute_total_area(self):
8773
for rec in self:
@@ -135,3 +121,9 @@ def _check_selling_price_constraint(self):
135121
_check_selling_price = models.Constraint(
136122
'CHECK(selling_price >= 0)', 'The selling price must be positive or zero.'
137123
)
124+
125+
@api.ondelete(at_uninstall=False)
126+
def _ondelete_check_state(self):
127+
for prop in self:
128+
if prop.state not in ('new', 'cancelled'):
129+
raise UserError('Only properties in New or Cancelled state can be deleted.')

estate/models/estate_property_offer.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
from odoo import api, fields, models
2+
from odoo.exceptions import ValidationError
3+
from odoo.tools.float_utils import float_compare
24
from datetime import timedelta
35

46

@@ -57,3 +59,28 @@ def action_refuse(self):
5759
for offer in self:
5860
offer.state = 'refused'
5961
return True
62+
63+
@api.model
64+
def create(self, vals_list):
65+
if isinstance(vals_list, dict):
66+
vals_list = [vals_list]
67+
68+
for vals in vals_list:
69+
prop_id = vals.get('property_id')
70+
price = vals.get('price')
71+
if prop_id and price is not None:
72+
prop = self.env['estate.property'].browse(prop_id)
73+
existing_prices = prop.offer_ids.mapped('price')
74+
if existing_prices:
75+
best = max(existing_prices)
76+
if float_compare(price, best, precision_digits=2) < 0:
77+
raise ValidationError(
78+
'You cannot create an offer lower than an existing offer.'
79+
)
80+
81+
offers = super(EstatePropertyOffer, self).create(vals_list)
82+
83+
for offer in offers:
84+
if offer.property_id:
85+
offer.property_id.state = 'received'
86+
return offers

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", "user_id", string="Properties", domain="[('state', '=', 'new')]"
9+
)
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<odoo>
2+
<data>
3+
<record id="view_users_form_inherit_estate_properties" model="ir.ui.view">
4+
<field name="name">res.users.form.inherit.estate.properties</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="//notebook" position="inside">
9+
<page string="Properties">
10+
<field name="property_ids">
11+
<tree editable="bottom">
12+
<field name="name"/>
13+
<field name="state"/>
14+
<field name="expected_price"/>
15+
</tree>
16+
</field>
17+
</page>
18+
</xpath>
19+
</field>
20+
</record>
21+
</data>
22+
</odoo>

0 commit comments

Comments
 (0)