77class EstateProperty (models .Model ):
88 _name = "estate.property"
99 _description = "Real Estate Property"
10- _order = "id desc"
10+ _order = "id desc "
1111 name = fields .Char (required = True )
1212 description = fields .Text ()
1313 postcode = fields .Char ()
@@ -20,9 +20,27 @@ class EstateProperty(models.Model):
2020 garage = fields .Boolean ()
2121 garden = fields .Boolean ()
2222 garden_area = fields .Integer ()
23- garden_orientation = fields .Selection ([("north" , "North" ),("south" , "South" ),("east" , "East" ),("west" , "West" ),])
23+ garden_orientation = fields .Selection (
24+ [
25+ ("north" , "North" ),
26+ ("south" , "South" ),
27+ ("east" , "East" ),
28+ ("west" , "West" ),
29+ ]
30+ )
2431 active = fields .Boolean (default = True )
25- state = fields .Selection ([("new" , "New" ),("offer_received" , "Offer Received" ),("offer_accepted" , "Offer Accepted" ),("sold" , "Sold" ),("canceled" , "Canceled" )], required = True , copy = False , )
32+ state = fields .Selection (
33+ [
34+ ("new" , "New" ),
35+ ("offer_received" , "Offer Received" ),
36+ ("offer_accepted" , "Offer Accepted" ),
37+ ("sold" , "Sold" ),
38+ ("canceled" , "Canceled" ),
39+ ],
40+ required = True ,
41+ copy = False ,
42+ default = "new"
43+ )
2644 property_type_id = fields .Many2one ("estate.property.type" , string = "Property Type" )
2745 buyer_id = fields .Many2one ("res.partner" , string = "Buyer" )
2846 salesperson_id = fields .Many2one ("res.users" , string = "Salesperson" )
@@ -31,20 +49,19 @@ class EstateProperty(models.Model):
3149 total_area = fields .Float (compute = "_compute_total_area" , string = "Total Area" , store = True )
3250 best_price = fields .Float (compute = "_compute_best_price" , string = "Best Offer" , store = True )
3351 validity_days = fields .Integer (default = 7 )
34- date_deadline = fields .Date (compute = "_compute_date_deadline" ,inverse = "_inverse_date_deadline" ,store = True ,)
35- property_type_id = fields .Many2one ("estate.property.type" , string = "Property Type" )
36-
52+ date_deadline = fields .Date (compute = "_compute_date_deadline" , inverse = "_inverse_date_deadline" , store = True )
53+
3754 _check_price = models .Constraint (
3855 'CHECK(expected_price > 0 AND selling_price >= 0)' ,
39- 'The expected price of a property must be strictly positive.'
56+ 'The Price of a property must be strictly positive.' ,
4057 )
41-
58+
4259 @api .depends ("living_area" , "garden_area" )
4360 def _compute_total_area (self ):
4461 for record in self :
4562 record .total_area = (record .living_area or 0 ) + (record .garden_area or 0 )
4663
47- @api .depends ("offer_ids.price" )
64+ @api .depends ("offer_ids.price" , "state" )
4865 def _compute_best_price (self ):
4966 for record in self :
5067 record .best_price = max (record .offer_ids .mapped ("price" )) if record .offer_ids else 0.0
@@ -74,7 +91,16 @@ def _onchange_garden(self):
7491 else :
7592 record .garden_area = 0
7693 record .garden_orientation = False
77-
94+
95+ def write (self , vals ):
96+ if 'offer_ids' in vals :
97+ result = super ().write (vals )
98+ for record in self :
99+ if record .offer_ids and record .state == 'new' :
100+ record .state = 'offer_received'
101+ return result
102+ return super ().write (vals )
103+
78104 def action_set_sold (self ):
79105 for record in self :
80106 record .state = "sold"
@@ -83,15 +109,6 @@ def action_set_canceled(self):
83109 for record in self :
84110 record .state = "canceled"
85111
86- def action_set_next_status (self ):
87- for record in self :
88- if record .state == "new" :
89- record .state = "offer_received"
90- elif record .state == "offer_received" :
91- record .state = "offer_accepted"
92- elif record .state == "offer_accepted" :
93- record .state = "sold"
94-
95112 def action_back_to_new (self ):
96113 for record in self :
97114 record .state = "new"
0 commit comments