Skip to content

Commit be3fe3d

Browse files
committed
[IMP] estate: add some actions to cancel or accept offer for properties and set properties as sold/cancelled
1 parent 8f8f934 commit be3fe3d

File tree

3 files changed

+50
-1
lines changed

3 files changed

+50
-1
lines changed

estate/models/estate_properties.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11

22
from dateutil.relativedelta import relativedelta
33
from odoo import fields, models, api
4+
from odoo.exceptions import UserError
45

56

67
class Properties(models.Model):
@@ -62,3 +63,19 @@ def _onchange_garden(self):
6263
else:
6364
self.garden_area = None
6465
self.garden_orientation = None
66+
67+
def action_sold(self):
68+
for a_property in self:
69+
if a_property.state not in ["cancelled"]:
70+
a_property.state = "sold"
71+
else:
72+
raise UserError("Property is already cancelled")
73+
return True
74+
75+
def action_cancel(self):
76+
for a_property in self:
77+
if a_property.state not in ["sold"]:
78+
a_property.state = "cancelled"
79+
else:
80+
raise UserError("Property is already sold")
81+
return True

estate/models/estate_property_offer.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from dateutil.relativedelta import relativedelta
22
from odoo import fields, models, api
3+
from odoo.exceptions import UserError
34

45

56
class PropertyOffer(models.Model):
@@ -24,3 +25,28 @@ def _update_validity(self):
2425
for offer in self:
2526
if offer.create_date:
2627
offer.validity = (offer.date_deadline - offer.create_date.date()).days
28+
29+
def action_confirm(self):
30+
for offer in self:
31+
32+
for other_offer in offer.property_id.offer_ids:
33+
if other_offer.status == "accepted":
34+
offer.status = "refused"
35+
36+
if offer.status == "refused":
37+
raise UserError("Offer already refused")
38+
39+
offer.status = "accepted"
40+
offer.property_id.buyer = offer.partner_id
41+
offer.property_id.selling_price = offer.price
42+
for other_offer in offer.property_id.mapped("offer_ids"):
43+
if other_offer.id != offer.id:
44+
other_offer.status = "refused"
45+
return True
46+
47+
def action_cancel(self):
48+
for offer in self:
49+
if offer.status == "accepted":
50+
raise UserError("Offer already accepted")
51+
offer.status = "refused"
52+
return True

estate/views/estate_property_views.xml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,16 @@
4747
</field>
4848
</record>
4949

50-
<!-- Usual view -->
50+
<!-- Form view -->
5151
<record id="estate_property_view_form" model="ir.ui.view">
5252
<field name="name">estate.property.form</field>
5353
<field name="model">estate_property</field>
5454
<field name="arch" type="xml">
5555
<form string="Property">
56+
<header>
57+
<button name="action_sold" type="object" string="Sold"/>
58+
<button name="action_cancel" type="object" string="Cancel"/>
59+
</header>
5660
<sheet>
5761
<h1><field name="name"/></h1>
5862
<field name="tag_ids" widget="many2many_tags"/>
@@ -88,6 +92,8 @@
8892
<list string="Offers">
8993
<field name="price"/>
9094
<field name="partner_id"/>
95+
<button name="action_confirm" string="Accept" states="draft" type="object" icon="fa-check"/>
96+
<button name="action_cancel" string="Refuse" states="draft,open" type="object" icon="fa-times"/>
9197
<field name="status"/>
9298
</list>
9399
</field>

0 commit comments

Comments
 (0)