Skip to content

Commit bfc8fbd

Browse files
committed
[ADD] estate: Chapter 9 - add buttons and correspoding actions
Implement action methods for property status and offer status
1 parent c6f97f3 commit bfc8fbd

File tree

3 files changed

+42
-0
lines changed

3 files changed

+42
-0
lines changed

estate/models/estate_property.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from odoo import api, fields, models
2+
from odoo.exceptions import UserError
23
from 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"

estate/models/estate_property_offer.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from datetime import timedelta
22

33
from odoo import api, fields, models
4+
from odoo.exceptions import UserWarning
45

56

67
class 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

estate/views/estate_property_views.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@
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"/>
@@ -38,6 +42,7 @@
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"/>
@@ -70,6 +75,8 @@
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">

0 commit comments

Comments
 (0)