Skip to content

Commit 1d073e0

Browse files
committed
[IMP] estate: Chapter 9 - Button Actions
- Added buttons to sell or cancel a property, and to accept or refuse an offer
1 parent edaf208 commit 1d073e0

File tree

4 files changed

+55
-13
lines changed

4 files changed

+55
-13
lines changed

estate/models/estate_property.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
from odoo import fields, models, api
2+
from odoo.exceptions import UserError
23

34

45
class EstateProperty(models.Model):
56
_name = "estate.property"
67
_description = "Estate Property"
78

8-
name = fields.Char(required=True)
9+
name = fields.Char(string="Title", required=True)
910
description = fields.Text()
1011
postcode = fields.Char()
1112
date_availability = fields.Date(string="Available From", copy=False, default=fields.Date.add(fields.Date.today(), months=3))
@@ -35,7 +36,7 @@ class EstateProperty(models.Model):
3536
tag_ids = fields.Many2many("estate.property.tag")
3637
offer_ids = fields.One2many("estate.property.offer", "property_id")
3738
total_area = fields.Integer(compute="_compute_total_area")
38-
best_price = fields.Float(compute="_compute_best_price")
39+
best_price = fields.Float(string="Best offer", compute="_compute_best_price")
3940

4041
@api.depends("living_area", "garden_area")
4142
def _compute_total_area(self):
@@ -58,3 +59,17 @@ def _onchange_garden(self):
5859
else:
5960
self.garden_area = 0
6061
self.garden_orientation = ""
62+
63+
def action_property_sold(self):
64+
for record in self:
65+
if record.state == "cancelled":
66+
raise UserError("Cancelled properties cannot be sold.")
67+
record.state = "sold"
68+
return True
69+
70+
def action_property_cancel(self):
71+
for record in self:
72+
if record.state == "sold":
73+
raise UserError("Sold properties cannot be cancelled.")
74+
record.state = "cancelled"
75+
return True

estate/models/estate_property_offer.py

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
from odoo import models, fields, api
1+
from odoo import models, fields, api, _
2+
from odoo.exceptions import UserError
23

34

45
class EstatePropertyOffer(models.Model):
@@ -10,10 +11,10 @@ class EstatePropertyOffer(models.Model):
1011
selection=[("accepted", "Accepted"), ("refused", "Refused")],
1112
copy=False,
1213
)
13-
partner_id = fields.Many2one("res.partner", required=True)
14+
partner_id = fields.Many2one("res.partner", string="Buyer", required=True)
1415
property_id = fields.Many2one("estate.property", required=True)
15-
validity = fields.Integer(default=7)
16-
date_deadline = fields.Date(compute="_compute_date_deadline", inverse="_inverse_date_deadline")
16+
validity = fields.Integer(string="Validity (days)", default=7)
17+
date_deadline = fields.Date(string="Deadline", compute="_compute_date_deadline", inverse="_inverse_date_deadline")
1718

1819
@api.depends("create_date", "validity")
1920
def _compute_date_deadline(self):
@@ -23,3 +24,23 @@ def _compute_date_deadline(self):
2324
def _inverse_date_deadline(self):
2425
for record in self:
2526
record.validity = (record.date_deadline - record.create_date.date()).days
27+
28+
def action_accept_offer(self):
29+
for record in self:
30+
if record.property_id.state not in ("accepted", "sold", "cancelled"):
31+
record.property_id.state = "accepted"
32+
record.status = "accepted"
33+
record.property_id.selling_price = self.price
34+
record.property_id.buyer_id = self.partner_id
35+
else:
36+
raise UserError(_("This offer can't be accepted because the property is currently %s.")% record.property_id.state)
37+
return True
38+
39+
def action_refuse_offer(self):
40+
for record in self:
41+
if record.property_id.state == "accepted":
42+
record.property_id.state = "new"
43+
record.status = "refused"
44+
record.property_id.selling_price = 0.0
45+
record.property_id.buyer_id = ""
46+
return True

estate/views/estate_property_offer_views.xml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
<group>
1010
<field name="price"/>
1111
<field name="partner_id"/>
12-
<field name="validity" string="Validity (days)"/>
13-
<field name="date_deadline" string="Deadline"/>
12+
<field name="validity"/>
13+
<field name="date_deadline"/>
1414
<field name="status"/>
1515
</group>
1616
</sheet>
@@ -25,8 +25,10 @@
2525
<list string="Properties">
2626
<field name="price"/>
2727
<field name="partner_id"/>
28-
<field name="validity" string="Validity (days)"/>
29-
<field name="date_deadline" string="Deadline"/>
28+
<field name="validity"/>
29+
<field name="date_deadline"/>
30+
<button name="action_accept_offer" type="object" icon="fa-check"/>
31+
<button name="action_refuse_offer" type="object" icon="fa-times"/>
3032
<field name="status"/>
3133
</list>
3234
</field>

estate/views/estate_property_views.xml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<field name="model">estate.property</field>
1212
<field name="arch" type="xml">
1313
<list string="Properties">
14-
<field name="name" string="Title"/>
14+
<field name="name"/>
1515
<field name="property_type_id"/>
1616
<field name="postcode"/>
1717
<field name="bedrooms"/>
@@ -28,6 +28,10 @@
2828
<field name="model">estate.property</field>
2929
<field name="arch" type="xml">
3030
<form string="New property">
31+
<header>
32+
<button name="action_property_sold" type="object" string="Sold"/>
33+
<button name="action_property_cancel" type="object" string="Cancel"/>
34+
</header>
3135
<sheet>
3236
<h1>
3337
<field name="name" placeholder="New property"/>
@@ -41,7 +45,7 @@
4145
</group>
4246
<group>
4347
<field name="expected_price"/>
44-
<field name="best_price" string="Best offer"/>
48+
<field name="best_price"/>
4549
<field name="selling_price"/>
4650
</group>
4751
</group>
@@ -78,7 +82,7 @@
7882
<field name="model">estate.property</field>
7983
<field name="arch" type="xml">
8084
<search string="Search">
81-
<field name="name" string="Title"/>
85+
<field name="name"/>
8286
<field name="property_type_id"/>
8387
<field name="postcode"/>
8488
<field name="expected_price"/>

0 commit comments

Comments
 (0)