1
- from odoo import models , fields
1
+ from odoo import models , fields , api
2
2
from datetime import timedelta
3
3
4
+
4
5
class EstateModel (models .Model ):
5
6
_name = "estate.property"
6
7
_description = "Real Estate Advertisement Model"
@@ -9,10 +10,9 @@ class EstateModel(models.Model):
9
10
description = fields .Text ()
10
11
postcode = fields .Char ()
11
12
date_availability = fields .Date (
12
- copy = False ,
13
- default = fields .Date .today () + timedelta (days = 90 )
14
- )
15
- active = fields .Boolean (default = True )
13
+ copy = False , default = fields .Date .today () + timedelta (days = 90 )
14
+ )
15
+ active = fields .Boolean (default = True )
16
16
expected_price = fields .Float (required = True )
17
17
selling_price = fields .Float (readonly = True , copy = False )
18
18
bedrooms = fields .Integer (default = 2 )
@@ -21,22 +21,53 @@ class EstateModel(models.Model):
21
21
garage = fields .Boolean ()
22
22
garden = fields .Boolean ()
23
23
garden_area = fields .Integer ()
24
- state = fields .Selection (
25
- string = ' state' ,
24
+ state = fields .Selection (
25
+ string = " state" ,
26
26
default = "New" ,
27
27
required = True ,
28
28
copy = False ,
29
- selection = [('New' , 'New' ),('Offer Received' , 'Offer Received' ),('Offer Accepted' , 'Offer Accepted' ),('Sold' , 'Sold' ), ('Cancelled' , 'Cancelled' ),
30
- ]
29
+ selection = [
30
+ ("New" , "New" ),
31
+ ("Offer Received" , "Offer Received" ),
32
+ ("Offer Accepted" , "Offer Accepted" ),
33
+ ("Sold" , "Sold" ),
34
+ ("Cancelled" , "Cancelled" ),
35
+ ],
31
36
)
32
37
garden_orientation = fields .Selection (
33
- string = 'Garden Orientation' ,
34
- selection = [('north' , 'North' ),('south' , 'South' ),('east' , 'East' ),('west' , 'West' ),
38
+ string = "Garden Orientation" ,
39
+ selection = [
40
+ ("north" , "North" ),
41
+ ("south" , "South" ),
42
+ ("east" , "East" ),
43
+ ("west" , "West" ),
35
44
],
36
- help = "Select the direction the garden faces"
45
+ help = "Select the direction the garden faces" ,
37
46
)
38
- property_type_id = fields .Many2one ("estate.property.type" )
39
- buyer = fields .Many2one ("res.partner" )
40
- salesman = fields .Many2one ("res.users" )
41
- tag_ids = fields .Many2many ("estate.property.tag" )
42
- offer_ids = fields .One2many ("estate.property.offer" , inverse_name = "property_id" )
47
+ property_type_id = fields .Many2one ("estate.property.type" )
48
+ buyer = fields .Many2one ("res.partner" )
49
+ salesman = fields .Many2one ("res.users" )
50
+ tag_ids = fields .Many2many ("estate.property.tag" )
51
+ offer_ids = fields .One2many ("estate.property.offer" , inverse_name = "property_id" )
52
+ total_area = fields .Float (compute = "_compute_total_area" )
53
+ best_price = fields .Float (compute = "_compute_best_price" )
54
+
55
+ @api .depends ("living_area" , "garden_area" )
56
+ def _compute_total_area (self ):
57
+ for record in self :
58
+ record .total_area = record .living_area + record .garden_area
59
+
60
+ @api .depends ("offer_ids.price" )
61
+ def _compute_best_price (self ):
62
+ for record in self :
63
+ record .best_price = max (record .offer_ids .mapped ("price" ), default = 0.0 )
64
+
65
+ # the onchange method will access self which will hold the current form value object not all the value objects
66
+ @api .onchange ("garden" )
67
+ def _set_garden_default_values (self ):
68
+ if self .garden :
69
+ self .garden_area = 10
70
+ self .garden_orientation = "north"
71
+ else :
72
+ self .garden_area = 0
73
+ self .garden_orientation = ""
0 commit comments