Skip to content

Commit 49bb741

Browse files
committed
[ADD] estate: added Cancel and Sold buttons to property, Accept/Refuse to offer
1 parent ceeae76 commit 49bb741

10 files changed

+64
-48
lines changed

estate/models/estate_property.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
from odoo import models, fields, api
21
from datetime import timedelta
2+
from odoo import api, fields, models
3+
from odoo.exceptions import UserError
34

45

56
class EstateModel(models.Model):
@@ -45,7 +46,7 @@ class EstateModel(models.Model):
4546
help="Select the direction the garden faces",
4647
)
4748
property_type_id = fields.Many2one("estate.property.type")
48-
buyer = fields.Many2one("res.partner")
49+
buyer = fields.Many2one("res.partner", readonly=True)
4950
salesman = fields.Many2one("res.users")
5051
tag_ids = fields.Many2many("estate.property.tag")
5152
offer_ids = fields.One2many("estate.property.offer", inverse_name="property_id")
@@ -62,7 +63,6 @@ def _compute_best_price(self):
6263
for record in self:
6364
record.best_price = max(record.offer_ids.mapped("price"), default=0.0)
6465

65-
# the onchange method will access self which will hold the current form value object not all the value objects
6666
@api.onchange("garden")
6767
def _set_garden_default_values(self):
6868
if self.garden:
@@ -71,3 +71,13 @@ def _set_garden_default_values(self):
7171
else:
7272
self.garden_area = 0
7373
self.garden_orientation = ""
74+
75+
def action_property_sold(self):
76+
if self.state in ["Sold", "Cancelled"]:
77+
raise UserError(f"Property is already {self.state}")
78+
self.state = "Sold"
79+
80+
def action_property_cancelled(self):
81+
if self.state in ["Sold", "Cancelled"]:
82+
raise UserError(f"Property is already {self.state}")
83+
self.state = "Cancelled"

estate/models/estate_property_offer.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
from odoo import models, fields, api
21
from datetime import timedelta
2+
from odoo import api, fields, models
3+
from odoo.exceptions import UserError
34

45

56
class EstateOfferModel(models.Model):
@@ -29,3 +30,23 @@ def _inverse_date_deadline(self):
2930
if record.date_deadline
3031
else 0
3132
)
33+
34+
def action_offer_confirm(self):
35+
for record in self:
36+
if record.status in ["Accepted", "Refused"]:
37+
raise UserError(f"Offer is already {record.status}")
38+
39+
for offer in record.property_id.offer_ids:
40+
if offer.id == record.id:
41+
record.status = "Accepted"
42+
record.property_id.state = "Offer Accepted"
43+
record.property_id.buyer = record.partner_id
44+
record.property_id.selling_price = record.price
45+
else:
46+
offer.status = "Refused"
47+
48+
def action_offer_cancel(self):
49+
for record in self:
50+
if record.status in ["Accepted", "Refused"]:
51+
raise UserError(f"Offer is already {record.status}")
52+
record.status = "Refused"

estate/models/estate_property_tag.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from odoo import models, fields
1+
from odoo import fields, models
22

33

44
class EstateTagModel(models.Model):

estate/models/estate_property_type.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from odoo import models, fields
1+
from odoo import fields, models
22

33

44
class EstateTypeModel(models.Model):

estate/security/ir.model.access.csv

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,3 @@ access_estate_property_user,model_estate_property,model_estate_property,base.gro
33
access_estate_property_type_user,model_estate_property_type,model_estate_property_type,base.group_user,1,1,1,1
44
access_estate_property_tag_user,model_estate_property_tag,model_estate_property_tag,base.group_user,1,1,1,1
55
access_estate_property_offer_user,model_estate_property_offer,model_estate_property_offer,base.group_user,1,1,1,1
6-

estate/views/estate_menus.xml

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,13 @@
22

33
<odoo>
44
<menuitem id="estate_menu_root" name="Real Estate">
5-
65
<menuitem id="estate_advertisements_menu" name="Advertisements">
7-
<menuitem id="estate_property_adv_menu_action" action="action_estate_property"
8-
name="Property" />
6+
<menuitem id="estate_property_adv_menu_action" action="action_estate_property" name="Property" />
97
</menuitem>
10-
118
<menuitem id="estate_settings_menu" name="Settings">
12-
<menuitem id="estate_property_menu_action" action="action_estate_property"
13-
name="Property" />
14-
<menuitem id="estate_property_type_menu_action" action="action_estate_property_type"
15-
name="Property Types" />
16-
<menuitem id="estate_property_tag_menu_action" action="action_estate_property_tag"
17-
name="Property Tags" />
9+
<menuitem id="estate_property_menu_action" action="action_estate_property" name="Property" />
10+
<menuitem id="estate_property_type_menu_action" action="action_estate_property_type" name="Property Types" />
11+
<menuitem id="estate_property_tag_menu_action" action="action_estate_property_tag" name="Property Tags" />
1812
</menuitem>
19-
2013
</menuitem>
21-
</odoo>
14+
</odoo>

estate/views/estate_property_offer_views.xml

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,19 @@
1111
</p>
1212
</field>
1313
</record>
14-
15-
<!-- list view -->
1614
<record id="list_view_estate_property_offer" model="ir.ui.view">
1715
<field name="name">Estate Properties Offer list</field>
1816
<field name="model">estate.property.offer</field>
1917
<field name="arch" type="xml">
2018
<list>
2119
<field name="price" string="Price" />
2220
<field name="partner_id" string="Partner" />
23-
<field name="status" string="Status" />
24-
<field name="date_deadline" string="Deadline" />
2521
<field name="validity" string="Validity" />
22+
<field name="date_deadline" string="Deadline" />
23+
<button name="action_offer_confirm" type="object" icon="fa-check" />
24+
<button name="action_offer_cancel" type="object" icon="fa-times" />
25+
<field name="status" string="Status" />
2626
</list>
2727
</field>
2828
</record>
29-
30-
</odoo>
29+
</odoo>

estate/views/estate_property_tag_views.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,4 @@
1111
</p>
1212
</field>
1313
</record>
14-
15-
</odoo>
14+
</odoo>

estate/views/estate_property_type_views.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,4 @@
1111
</p>
1212
</field>
1313
</record>
14-
15-
</odoo>
14+
</odoo>

estate/views/estate_property_views.xml

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111
</p>
1212
</field>
1313
</record>
14-
15-
<!-- list view -->
1614
<record id="list_view_estate_property" model="ir.ui.view">
1715
<field name="name">Estate Properties list</field>
1816
<field name="model">estate.property</field>
@@ -28,26 +26,29 @@
2826
</list>
2927
</field>
3028
</record>
31-
32-
<!-- form view -->
3329
<record id="form_view_estate_property" model="ir.ui.view">
3430
<field name="name">Estate Property Form</field>
3531
<field name="model">estate.property</field>
3632
<field name="arch" type="xml">
3733
<form>
34+
<header>
35+
<button name="action_property_sold" type="object" string="Sold"/>
36+
<button name="action_property_cancelled" type="object" string="Cancelled"/>
37+
</header>
3838
<sheet>
3939
<div>
4040
<h1>
41-
<field name="name"/>
42-
</h1>
43-
<span>
44-
<field name="tag_ids" widget="many2many_tags" />
45-
</span>
41+
<field name="name"/>
42+
</h1>
43+
<span>
44+
<field name="tag_ids" widget="many2many_tags" />
45+
</span>
4646
</div>
4747
<group>
4848
<group>
49+
<field name="state" string="State" />
4950
<field name="postcode" string="Postcode" />
50-
<field name="property_type_id"/>
51+
<field name="property_type_id"/>
5152
<field name="date_availability" string="Available From" />
5253
</group>
5354
<group>
@@ -65,9 +66,8 @@
6566
<field name="facades" string="Facades" />
6667
<field name="garage" string="Garage" />
6768
<field name="garden" string="Garden" />
68-
<field name="garden_area" string="Garden Area (sqm)" />
69-
<field name="garden_orientation" string="Garden Orientation" />
70-
<field name="state" string="State" />
69+
<field name="garden_area" string="Garden Area (sqm)" invisible="not garden" />
70+
<field name="garden_orientation" string="Garden Orientation" invisible="not garden" />
7171
<field name="total_area" string="Total Area (sqm)" />
7272
</group>
7373
</page>
@@ -87,26 +87,22 @@
8787
</form>
8888
</field>
8989
</record>
90-
91-
<!-- search view -->
9290
<record id="search_view_estate_property" model="ir.ui.view">
9391
<field name="name">Estate Property Search</field>
9492
<field name="model">estate.property</field>
9593
<field name="arch" type="xml">
96-
<search string="Search Properties">
94+
<search string="Search Properties">
9795
<field name="name" string="Title" />
9896
<field name="postcode" string="Postcode" />
9997
<field name="expected_price" string="Expected Price" />
10098
<field name="bedrooms" string="Bedrooms" />
10199
<field name="living_area" string="Living Area (sqm)" />
102100
<field name="facades" string="Facades" />
103-
104101
<filter string="Available" name="state" domain="['|', ('state', '=', 'New'), ('state', '=', 'Offer Received')]"/>
105102
<group>
106103
<filter string="Postcode" name="postcode" context="{'group_by': 'postcode'}"/>
107104
</group>
108-
109105
</search>
110106
</field>
111107
</record>
112-
</odoo>
108+
</odoo>

0 commit comments

Comments
 (0)