File tree Expand file tree Collapse file tree 3 files changed +42
-0
lines changed Expand file tree Collapse file tree 3 files changed +42
-0
lines changed Original file line number Diff line number Diff line change 11from odoo import api , fields , models
2+ from odoo .exceptions import UserError
23from dateutil .relativedelta import relativedelta
34
45
@@ -84,3 +85,16 @@ def _onchange_garden(self):
8485 self .garden_area = 10
8586 if not self .garden_orientation :
8687 self .garden_orientation = "north"
88+
89+ # Action methods and other business logic
90+ def action_set_sold (self ):
91+ for record in self :
92+ if record .status == "canceled" :
93+ raise UserError ("A cancelled property cannot be set as sold." )
94+ record .status = "sold"
95+
96+ def action_set_canceled (self ):
97+ for record in self :
98+ if record .status == "sold" :
99+ raise UserError ("A sold property cannot be cancelled." )
100+ record .status = "canceled"
Original file line number Diff line number Diff line change 11from datetime import timedelta
22
33from odoo import api , fields , models
4+ from odoo .exceptions import UserWarning
45
56
67class EstatePropertyOffer (models .Model ):
@@ -35,3 +36,23 @@ def _inverse_date_deadline(self):
3536 offer .validity = (offer .date_deadline - offer .create_date .date ()).days
3637 elif offer .date_deadline : # Fallback if create_date is not set
3738 offer .validity = (offer .date_deadline - fields .Date .today ()).days
39+
40+ def action_accept_offer (self ):
41+ for offer in self :
42+ # Check if there's already an accepted offer
43+ other_offers = offer .property_id .offer_ids - offer
44+ if any (other_offers .filtered (lambda o : o .status == "accepted" )):
45+ raise UserWarning ("An offer has already been accepted for this property." )
46+ offer .status = "accepted"
47+ # Refuse other offers for the same property
48+ other_offers .write ({"status" : "refused" })
49+ # Update the property status
50+ offer .property_id .status = "offer_accepted"
51+ offer .property_id .selling_price = offer .price
52+ offer .property_id .partner_id = offer .partner_id
53+ return True
54+
55+ def action_refuse_offer (self ):
56+ for offer in self :
57+ offer .status = "refused"
58+ return True
Original file line number Diff line number Diff line change 3030 <field name =" arch" type =" xml" >
3131 <form string =" Property" >
3232 <sheet >
33+ <header >
34+ <button name =" action_set_sold" type =" object" string =" Sold" class =" btn-primary" />
35+ <button name =" action_set_canceled" type =" object" string =" Cancel" class =" btn-secondary" />
36+ </header >
3337 <div class =" oe_title" >
3438 <h1 >
3539 <field name =" name" />
3842 </div >
3943 <group >
4044 <group >
45+ <field name =" status" string =" Status" />
4146 <field name =" property_type_id" string =" Property Type" />
4247 <field name =" postcode" string =" Postcode" />
4348 <field name =" date_availability" string =" Available From" />
7075 <field name =" partner_id" string =" Partner" />
7176 <field name =" validity" string =" Validity (days)" />
7277 <field name =" date_deadline" string =" Deadline" />
78+ <button name =" action_accept_offer" type =" object" icon =" fa-check" />
79+ <button name =" action_refuse_offer" type =" object" icon =" fa-times" />
7380 <field name =" status" string =" Status" />
7481 </list >
7582 <form string =" Offer" >
You can’t perform that action at this time.
0 commit comments