77class real_estate_property_offer (models .Model ):
88 _name = 'real.estate.property.offer'
99 _description = 'Real Estate Property Offer'
10+ _order = "price desc"
1011
1112 price = fields .Float (required = True )
12- property_id = fields .Many2one ('real.estate' , string = 'Property' , ondelete = 'cascade' )
13+ property_id = fields .Many2one ('real.estate' , string = 'Property' , ondelete = 'restrict' )
14+ property_type_id = fields .Many2one (
15+ related = "property_id.property_type_id" ,
16+ store = True
17+ )
1318 status = fields .Selection ([
1419 ('accepted' , 'Accepted' ),
1520 ('refused' , 'Refused' ),
@@ -27,6 +32,23 @@ class real_estate_property_offer(models.Model):
2732 'The offer price must be strictly positive.' ,
2833 )
2934
35+ @api .model
36+ def create (self , vals ):
37+ # property_id = vals.get('property_id')
38+ # price = vals.get('price')
39+ # if property_id and price:
40+ # property_rec = self.env['estate.property'].browse(property_id)
41+ # if property_rec.offer_ids:
42+ # max_offer = max(property_rec.offer_ids.mapped('price'))
43+ # if price < max_offer:
44+ # raise UserError(
45+ # "The offer must be higher than existing offers."
46+ # )
47+ offer = super ().create (vals )
48+ if offer .property_id and offer .property_id .stage == 'new' :
49+ offer .property_id .stage = 'offer_received'
50+ return offer
51+
3052 @api .depends ('create_date' , 'validity' )
3153 def _compute_date_deadline (self ):
3254 for offer in self :
@@ -40,6 +62,12 @@ def _inverse_date_deadline(self):
4062 if offer .create_date and offer .date_deadline :
4163 offer .validity = (offer .date_deadline - offer .create_date .date ()).days
4264
65+ @api .ondelete (at_uninstall = False )
66+ def _unlink_if_accepted_offer (self ):
67+ accepted_offer = self .filtered_domain ([('status' , '=' , 'accepted' )])
68+ if accepted_offer :
69+ raise UserError ("Can't delete an active record!" )
70+
4371 def action_accept (self ):
4472 # accepted_offer = self.search([
4573 # ('property_id', '=', self.property_id.id),
@@ -51,14 +79,24 @@ def action_accept(self):
5179 accepted_offer = self .property_id .offer_ids .filtered_domain ([
5280 ('status' , '=' , 'accepted' )
5381 ])
82+ maintenace_request = self .property_id .maintenance_request_ids .filtered_domain ([('status' , '!=' , 'done' )])
5483 if accepted_offer :
5584 raise UserError (
56- "Only one offer can be accepted for a property."
57- )
85+ "Only one offer can be accepted for a property." )
86+ if maintenace_request :
87+ raise UserError ("Property cannot be sold , there is any maintenance request not done" )
5888 self .status = 'accepted'
59- self .property_id .selling_price = self .price
60- self .property_id .stage = 'sold'
61- self .property_id .buyer_id = self .partner_id .id
89+ self .property_id .write ({
90+ 'selling_price' : self .price ,
91+ 'stage' : 'sold' ,
92+ 'buyer_id' : self .partner_id .id ,
93+ })
94+ refused_offer = self .property_id .offer_ids .filtered_domain ([
95+ ('id' , '!=' , 'self.id' ),
96+ ('status' , '!=' , 'accepted' )
97+ ])
98+ for refuse in refused_offer :
99+ refuse .status = 'refused'
62100
63101 def action_refuse (self ):
64102 self .status = 'refused'
0 commit comments