1- from odoo import api , fields , models
1+ from odoo import api , fields , models , _
22from odoo .exceptions import UserError , ValidationError
33from odoo .tools import float_compare
44
@@ -10,21 +10,13 @@ class PropertyModel(models.Model):
1010 _name = "estate.property"
1111 _description = "Estate Property model"
1212 _order = "id desc"
13- _check_positive_expected_price = models .Constraint (
14- "CHECK(expected_price >= 0)" ,
15- "The expected price must be positive."
16- )
17- _check_positive_selling_price = models .Constraint (
18- "CHECK(selling_price >= 0)" ,
19- "The selling price must be positive"
20- )
2113
2214 name = fields .Char ("Title" , required = True )
2315 description = fields .Text ()
2416 postcode = fields .Char ()
2517 date_availability = fields .Date (default = fields .Date .add (fields .Date .today (), months = 3 ), copy = False )
2618 expected_price = fields .Float (required = True )
27- best_offer = fields .Float (compute = "_get_highest_price " )
19+ best_offer = fields .Float (compute = "_compute_highest_price " )
2820 selling_price = fields .Float (readonly = True , copy = False )
2921 bedrooms = fields .Integer (default = 2 )
3022 living_area = fields .Integer ("Living Area (sqm)" )
@@ -56,13 +48,22 @@ class PropertyModel(models.Model):
5648 tag_ids = fields .Many2many ("estate.property.tag" )
5749 offer_ids = fields .One2many ("estate.property.offer" , "property_id" )
5850
51+ _check_positive_expected_price = models .Constraint (
52+ "CHECK(expected_price >= 0)" ,
53+ "The expected price must be positive."
54+ )
55+ _check_positive_selling_price = models .Constraint (
56+ "CHECK(selling_price >= 0)" ,
57+ "The selling price must be positive"
58+ )
59+
5960 @api .depends ("living_area" , "garden_area" )
6061 def _compute_total_area (self ):
6162 for record in self :
6263 record .total_living_area = record .living_area + record .garden_area
6364
6465 @api .depends ("offer_ids" )
65- def _get_highest_price (self ):
66+ def _compute_highest_price (self ):
6667 for record in self :
6768 record .best_offer = max (record .offer_ids .mapped ("price" )) if record .offer_ids else 0
6869
@@ -75,27 +76,27 @@ def _onchange_garden(self):
7576 self .garden_area = 0
7677 self .garden_orientation = None
7778
78- def mark_as_sold (self ):
79+ @api .constrains ("selling_price" , "expected_price" )
80+ def _check_selling_price (self ):
81+ for record in self :
82+ if record .selling_price and float_compare (record .selling_price , record .expected_price * .9 , 0 ) == - 1 :
83+ raise ValidationError ("The selling price cannot be lower than 90% of the expected price." )
84+
85+ @api .ondelete (at_uninstall = False )
86+ def _unlink_if_new_or_cancelled (self ):
87+ if any (record .state not in ('new' , 'cancelled' ) for record in self ):
88+ raise UserError (_ ("Only 'New' and 'Cancelled' properties can be deleted." ))
89+
90+ def action_mark_as_sold (self ):
7991 self .ensure_one ()
8092 if self .state == "cancelled" :
8193 raise UserError ("A cancelled property cannot be set as sold." )
8294 self .state = "sold"
8395 return True
8496
85- def mark_as_cancelled (self ):
97+ def action_mark_as_cancelled (self ):
8698 self .ensure_one ()
8799 if self .state == "sold" :
88- raise UserError ("A sold property cannot be set as cancelled." )
100+ raise UserError (_ ( "A sold property cannot be set as cancelled." ) )
89101 self .state = "cancelled"
90102 return True
91-
92- @api .constrains ("selling_price" , "expected_price" )
93- def _check_selling_price (self ):
94- for record in self :
95- if record .selling_price and float_compare (record .selling_price , record .expected_price * .9 , 0 ) == - 1 :
96- raise ValidationError (r"The selling price cannot be lower than 90% of the expected price." )
97-
98- @api .ondelete (at_uninstall = False )
99- def _unlink_if_new_or_cancelled (self ):
100- if any (record .state not in ('new' , 'cancelled' ) for record in self ):
101- raise UserError ("Only 'New' and 'Cancelled' properties can be deleted." )
0 commit comments