Skip to content

Commit 2e71ec2

Browse files
committed
[IMP] estate: ch9 actions to modify property status and accept offers added
1 parent b28ab2f commit 2e71ec2

File tree

4 files changed

+52
-6
lines changed

4 files changed

+52
-6
lines changed

estate/models/estate_property.py

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

34

45
class EstateProperty(models.Model):
@@ -45,14 +46,14 @@ class EstateProperty(models.Model):
4546
)
4647

4748
salesperson_id = fields.Many2one(
48-
'res.partner',
49+
'res.users',
4950
string='Salesman',
5051
ondelete='restrict',
5152
default=lambda self: self.env.user.partner_id,
5253
)
5354

5455
buyer_id = fields.Many2one(
55-
'res.users', string='Buyer', ondelete='restrict', copy=False
56+
'res.partner', string='Buyer', ondelete='restrict', copy=False, readonly=True
5657
)
5758

5859
property_tags_ids = fields.Many2many("estate.property.tag", string="Tags")
@@ -79,3 +80,17 @@ def _onchange_garden(self):
7980
self.garden_area, self.garden_orientation = 10, "north"
8081
else:
8182
self.garden_area, self.garden_orientation = 0, None
83+
84+
def action_mark_as_sold(self):
85+
for record in self:
86+
if record.state == "cancelled":
87+
raise UserError(_("Canceled properties cannot be sold."))
88+
record.state = "sold"
89+
return True
90+
91+
def action_mark_as_cancelled(self):
92+
for record in self:
93+
if record.state == "sold":
94+
raise UserError(_("Sold properties cannot be cancelled."))
95+
record.state = "cancelled"
96+
return True

estate/models/estate_property_offer.py

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

34

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

9+
@api.model_create_multi
10+
def create(self, vals_list):
11+
records = super().create(vals_list)
12+
for record in records:
13+
if record.property_id.state == "new":
14+
record.property_id.state = "offer_received"
15+
return records
16+
817
price = fields.Float("Expected Price")
918
status = fields.Selection(
1019
string="Status", selection=[("yes", "Accepted"), ("no", "Refused")], copy=False
@@ -17,7 +26,7 @@ class EstatePropertyOffer(models.Model):
1726

1827
partner_id = fields.Many2one(
1928
'res.partner',
20-
string='Salesman',
29+
string='Buyer',
2130
ondelete='restrict',
2231
default=lambda self: self.env.user.partner_id,
2332
required=True,
@@ -36,3 +45,21 @@ def _compute_deadline(self):
3645
def _inverse_deadline(self):
3746
for record in self:
3847
record.validity = (record.deadline - record.offer_creation_date).days
48+
49+
def action_accept_offer(self):
50+
for record in self:
51+
for offer in record.property_id.offer_ids:
52+
if offer.status == "yes":
53+
raise UserError(_("Already accepted an offer for this property."))
54+
record.status = "yes"
55+
record.property_id.buyer_id = record.partner_id
56+
record.property_id.selling_price = record.price
57+
record.property_id.state = "offer_accepted"
58+
return True
59+
60+
def action_reject_offer(self):
61+
for record in self:
62+
record.property_id.buyer_id = None
63+
record.property_id.selling_price = 0
64+
record.status = "no"
65+
return True

estate/views/estate_property_offer_view.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
<field name="validity"/>
3232
<field name="deadline"/>
3333
<field name="status"/>
34+
<button name="action_accept_offer" string="Accept" type="object" icon="fa-check"/>
35+
<button name="action_reject_offer" string="Reject" type="object" icon="fa-remove"/>
3436
</list>
3537
</field>
3638
</record>

estate/views/estate_property_view.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
<field name="arch" type="xml">
1919
<form string="Estate Property Form">
2020
<header>
21-
<field name="state" widget="statusbar" options="{'clickable': '1'}"/>
21+
<button name="action_mark_as_sold" type="object" string="SOLD"/>
22+
<button name="action_mark_as_cancelled" type="object" string="CANCEL"/>
23+
<field name="state" widget="statusbar"/>
2224
</header>
2325
<sheet>
2426
<div>

0 commit comments

Comments
 (0)