7
7
class EstateProperty (models .Model ):
8
8
_name = "estate.property"
9
9
_description = "Estate Property"
10
+ _sql_constraints = [
11
+ (
12
+ "check_expected_price" ,
13
+ "CHECK(expected_price > 0)" ,
14
+ "The expected price must be greater than 0." ,
15
+ ),
16
+ ]
10
17
_order = "id desc"
11
18
12
19
name = fields .Char (string = "Name" , required = True )
@@ -77,22 +84,6 @@ class EstateProperty(models.Model):
77
84
compute = "_compute_best_price" ,
78
85
)
79
86
80
- _sql_constraints = [
81
- (
82
- "check_expected_price" ,
83
- "CHECK(expected_price > 0)" ,
84
- "The expected price must be greater than 0." ,
85
- ),
86
- ]
87
-
88
- @api .ondelete (at_uninstall = False )
89
- def _unlink_check (self ):
90
- for property in self :
91
- if property .state not in ["new" , "cancelled" ]:
92
- raise UserError (
93
- "You cannot delete a property that is not new or cancelled."
94
- )
95
-
96
87
@api .depends ("living_area" , "garden_area" , "garden" )
97
88
def _compute_total_area (self ):
98
89
for property in self :
@@ -105,6 +96,24 @@ def _compute_best_price(self):
105
96
for property in self :
106
97
property .best_price = max (property .offer_ids .mapped ("price" ), default = 0.0 )
107
98
99
+ @api .constrains ("selling_price" , "expected_price" )
100
+ def _check_selling_price (self ):
101
+ for property in self :
102
+ if float_is_zero (property .selling_price , precision_rounding = 2 ):
103
+ continue
104
+
105
+ if (
106
+ float_compare (
107
+ property .selling_price ,
108
+ property .expected_price * 0.9 ,
109
+ precision_rounding = 2 ,
110
+ )
111
+ < 0
112
+ ):
113
+ raise ValidationError (
114
+ "The selling price cannot be lower than 90'%' of the expected price!"
115
+ )
116
+
108
117
@api .onchange ("garden" )
109
118
def _onchange_garden (self ):
110
119
for property in self :
@@ -115,6 +124,14 @@ def _onchange_garden(self):
115
124
property .garden_area = 0
116
125
property .garden_orientation = False
117
126
127
+ @api .ondelete (at_uninstall = False )
128
+ def _unlink_check (self ):
129
+ for property in self :
130
+ if property .state not in ["new" , "cancelled" ]:
131
+ raise UserError (
132
+ "You cannot delete a property that is not new or cancelled."
133
+ )
134
+
118
135
def action_set_sold (self ):
119
136
for property in self :
120
137
if property .selling_price > 0.0 and property .state != "cancelled" :
@@ -136,21 +153,3 @@ def action_set_cancelled(self):
136
153
raise UserError ("This property is already cancelled." )
137
154
elif property .state == "sold" :
138
155
raise UserError ("A sold property cannot be cancelled." )
139
-
140
- @api .constrains ("selling_price" , "expected_price" )
141
- def _check_selling_price (self ):
142
- for property in self :
143
- if float_is_zero (property .selling_price , precision_rounding = 2 ):
144
- continue
145
-
146
- if (
147
- float_compare (
148
- property .selling_price ,
149
- property .expected_price * 0.9 ,
150
- precision_rounding = 2 ,
151
- )
152
- < 0
153
- ):
154
- raise ValidationError (
155
- "The selling price cannot be lower than 90'%' of the expected price!"
156
- )
0 commit comments