1- from odoo import models , fields
1+ from odoo import models , fields , api
22from dateutil .relativedelta import relativedelta
3+ from odoo .exceptions import UserError
34
45
56class EstateProperty (models .Model ):
@@ -13,11 +14,11 @@ class EstateProperty(models.Model):
1314 expected_price = fields .Float (required = True )
1415 selling_price = fields .Float (readonly = True , copy = False )
1516 bedrooms = fields .Integer (default = 2 )
16- living_area = fields .Integer (string = "Living Area (sqm)" )
17+ living_area = fields .Float (string = "Living Area (sqm)" )
1718 facades = fields .Integer ()
1819 garage = fields .Boolean ()
1920 garden = fields .Boolean ()
20- garden_area = fields .Integer (string = "Garden Area (sqm)" )
21+ garden_area = fields .Float (string = "Garden Area (sqm)" )
2122 garden_orientation = fields .Selection (
2223 string = "Garden Orientation" ,
2324 selection = [('north' , 'North' ),
@@ -38,6 +39,45 @@ class EstateProperty(models.Model):
3839 )
3940 property_type_id = fields .Many2one ("estate.property.type" )
4041 buyer = fields .Many2one ("res.partner" , copy = False )
41- salesperson = fields .Many2one ("res.users" )
42+ salesperson = fields .Many2one ("res.users" , default = lambda self : self . env . user )
4243 tag_ids = fields .Many2many ("estate.property.tag" )
4344 offer_ids = fields .One2many ("estate.property.offer" , "property_id" , string = "Offers" )
45+
46+ total_area = fields .Float (compute = "_compute_total_area" )
47+ @api .depends ('living_area' , 'garden_area' )
48+ def _compute_total_area (self ):
49+ for record in self :
50+ record .total_area = record .living_area + record .garden_area
51+
52+ best_offer = fields .Float (compute = "_compute_best_offer" )
53+ @api .depends ('offer_ids.price' )
54+ def _compute_best_offer (self ):
55+ for record in self :
56+ if not record .mapped ('offer_ids.price' ):
57+ record .best_offer = 0
58+ else :
59+ record .best_offer = max (record .mapped ('offer_ids.price' ))
60+
61+ @api .onchange ('garden' )
62+ def _onchange_garden (self ):
63+ if self .garden :
64+ self .garden_area = 10
65+ self .garden_orientation = 'north'
66+ else :
67+ self .garden_area = 0
68+ self .garden_orientation = None
69+
70+ def cancel_property (self ):
71+ for record in self :
72+ if record .state == 'sold' :
73+ raise UserError ("sold property cannot be cancelled." )
74+ else :
75+ record .state = 'cancelled'
76+
77+ def sold_property (self ):
78+ for record in self :
79+ if record .state == 'cancelled' :
80+ raise UserError ("cancelled property cannot be sold." )
81+ else :
82+ record .state = 'sold'
83+
0 commit comments