1-
2- from odoo import models , fields , api
1+ from odoo import models , fields , api
32from datetime import timedelta
43
54
@@ -10,7 +9,7 @@ class EstateProperty(models.Model):
109 name = fields .Char (required = True )
1110 description = fields .Text ()
1211 postcode = fields .Char ()
13- create_date = fields .Date ()
12+ create_date = fields .Datetime ()
1413 expected_price = fields .Float (required = True )
1514 selling_price = fields .Float ()
1615 bedrooms = fields .Integer ()
@@ -20,66 +19,90 @@ class EstateProperty(models.Model):
2019 garden = fields .Boolean ()
2120 garden_area = fields .Integer ()
2221 garden_orientation = fields .Selection ([
23- (' north' , ' North' ),
24- (' south' , ' South' ),
25- (' east' , ' East' ),
26- (' west' , ' West' ),
22+ (" north" , " North" ),
23+ (" south" , " South" ),
24+ (" east" , " East" ),
25+ (" west" , " West" ),
2726 ])
28- state = fields .Selection (
29- [
30- ('new' , 'New' ),
31- ('offer_received' , 'Offer Received' ),
32- ('offer_accepted' , 'Offer Accepted' ),
33- ('sold' , 'Sold' ),
34- ('canceled' , 'Canceled' ),
35- ],
36- string = "Status" ,
37- required = True ,
38- copy = False ,
39- default = 'new'
40- )
4127 active = fields .Boolean (default = True )
42- property_type_id = fields .Many2one ("estate.property.type" , string = "Property Type" )
28+
29+ state = fields .Selection ([
30+ ("new" , "New" ),
31+ ("offer_received" , "Offer Received" ),
32+ ("offer_accepted" , "Offer Accepted" ),
33+ ("sold" , "Sold" ),
34+ ("canceled" , "Canceled" ),
35+ ], string = "Status" , required = True , copy = False , default = "new" )
36+
37+ property_type_id = fields .Many2one ("estate.property.type" , string = "Property Type" )
4338 buyer_id = fields .Many2one ("res.partner" , string = "Buyer" )
4439 salesperson_id = fields .Many2one ("res.users" , string = "Salesperson" )
4540 tag_ids = fields .Many2many ("estate.property.tag" , string = "Tags" )
4641 offer_ids = fields .One2many ("estate.property.offer" , "property_id" , string = "Offers" )
42+
4743 total_area = fields .Float (compute = "_compute_total_area" , string = "Total Area" , store = True )
4844 best_price = fields .Float (compute = "_compute_best_price" , string = "Best Offer" , store = True )
49- validity_days = fields .Integer (default = 7 )
50- deadline_date = fields .Date (compute = "_compute_validity_date" , string = "Validity Date" , store = True )
51- @api .depends ('living_area' , 'garden_area' )
45+
46+ validity = fields .Integer (default = 7 )
47+ date_deadline = fields .Date (
48+ compute = "_compute_date_deadline" ,
49+ inverse = "_inverse_date_deadline" ,
50+ store = True ,
51+ )
52+
53+ @api .depends ("living_area" , "garden_area" )
5254 def _compute_total_area (self ):
5355 for record in self :
54- record .total_area = record .living_area + (record .garden_area or 0 )
55- @api .depends ('offer_ids.price' )
56+ record .total_area = (record .living_area or 0 ) + (record .garden_area or 0 )
57+
58+ @api .depends ("offer_ids.price" )
5659 def _compute_best_price (self ):
5760 for record in self :
58- if record .offer_ids :
59- record .best_price = max (record .offer_ids .mapped ('price' ))
60- else :
61- record .best_price = 0.0
62-
63- @api .depends ('create_date' , 'validity_days' )
64- def _compute_validity_date (self ):
65- if self .create_date :
66- for record in self :
67- record .deadline_date = record .create_date + timedelta (days = record .validity_days )
68- else :
69- for record in self :
70- record .deadline_date = fields .Date .today () + timedelta (days = record .validity_days )
71-
72- @api .onchange ('garden_area' )
73- def _onchange_garden (self ):
61+ record .best_price = max (record .offer_ids .mapped ("price" )) if record .offer_ids else 0.0
62+
63+ @api .depends ("create_date" , "validity" )
64+ def _compute_date_deadline (self ):
7465 for record in self :
75- if self .garden_area == 10 :
76- self .garden_orientation = 'north'
77- if self .garden_area == 20 :
78- self .garden_orientation = 'south'
79- if self .garden_area == 30 :
80- self .garden_orientation = 'east'
81- if self .garden_area == 40 :
82- self .garden_orientation = 'west'
66+ create_date = record .create_date or fields .Date .today ()
67+ if hasattr (create_date , "date" ):
68+ create_date = create_date .date ()
69+ record .date_deadline = create_date + timedelta (days = record .validity )
70+
71+ def _inverse_date_deadline (self ):
72+ for record in self :
73+ create_date = record .create_date or fields .Date .today ()
74+ if hasattr (create_date , "date" ):
75+ create_date = create_date .date ()
76+ delta = (record .date_deadline - create_date ).days if record .date_deadline else 0
77+ record .validity = delta
78+
79+ @api .onchange ("garden" )
80+ def _onchange_garden (self ):
81+ for record in self :
82+ if record .garden :
83+ record .garden_area = 10
84+ record .garden_orientation = "north"
8385 else :
84- self .garden_area = 0
85- self .garden_orientation = False
86+ record .garden_area = 0
87+ record .garden_orientation = False
88+
89+ def action_set_sold (self ):
90+ for record in self :
91+ record .state = "sold"
92+
93+ def action_set_canceled (self ):
94+ for record in self :
95+ record .state = "canceled"
96+
97+ def action_set_next_status (self ):
98+ for record in self :
99+ if record .state == "new" :
100+ record .state = "offer_received"
101+ elif record .state == "offer_received" :
102+ record .state = "offer_accepted"
103+ elif record .state == "offer_accepted" :
104+ record .state = "sold"
105+
106+ def action_back_to_new (self ):
107+ for record in self :
108+ record .state = "new"
0 commit comments