Skip to content

Commit 3108bd3

Browse files
committed
[ADD] estate: added adjustments following Chapter 11
1 parent 2390818 commit 3108bd3

9 files changed

+95
-19
lines changed

estate/models/estate_property.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ class EstateProperty(models.Model):
2020
"Selling price of a property should be positive",
2121
),
2222
]
23+
_order = "id desc"
2324

2425
name = fields.Char(required=True)
2526
description = fields.Text()

estate/models/estate_property_offer.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class EstatePropertyOffer(models.Model):
1515
"Price of an offer should be only positive",
1616
),
1717
]
18+
_order = "price desc"
1819

1920
price = fields.Float()
2021
status = fields.Selection(
@@ -27,6 +28,7 @@ class EstatePropertyOffer(models.Model):
2728
)
2829
partner_id = fields.Many2one("res.partner", string="Buyer", required=True)
2930
property_id = fields.Many2one("estate.property", string="Property", required=True)
31+
property_type_id = fields.Many2one(related="property_id.property_type_id", store=True)
3032
validity = fields.Integer(default=7, string="Validity (days)")
3133
date_deadline = fields.Date(
3234
compute="_compute_date_deadline",
@@ -72,7 +74,5 @@ def _action_check_offers(self):
7274
@api.depends("status")
7375
def action_offer_refuse(self):
7476
for offer in self:
75-
if offer.status == "accepted":
76-
self.property_id.state = "offer-received"
7777
offer.status = "refused"
7878
return True

estate/models/estate_property_tag.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,7 @@ class EstatePropertyTag(models.Model):
1111
"Property Tag already exists.",
1212
),
1313
]
14+
_order = "name"
15+
1416
name = fields.Char(required=True)
17+
color = fields.Integer()

estate/models/estate_property_type.py

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

33

44
class EstatePropertyType(models.Model):
@@ -11,5 +11,23 @@ class EstatePropertyType(models.Model):
1111
"Property Type already exists.",
1212
),
1313
]
14+
_order = "sequence, name"
1415

1516
name = fields.Char(required=True)
17+
property_ids = fields.One2many(
18+
"estate.property", "property_type_id", string="Properties"
19+
)
20+
sequence = fields.Integer(
21+
"Sequence", default=1, help="Used to order stages. Lower is better."
22+
)
23+
offer_ids = fields.One2many(
24+
"estate.property.offer", "property_type_id", string="Offers"
25+
)
26+
offer_count = fields.Integer(
27+
compute="_compute_offer_count", string="Number of Offers"
28+
)
29+
30+
@api.depends("offer_ids")
31+
def _compute_offer_count(self):
32+
for property_type in self:
33+
property_type.offer_count = len(property_type.offer_ids)

estate/views/estate_menus.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<menuitem id="estate_menu_root" name="Real Estate">
44
<menuitem id="estate_ads_menu" name="Advertisements">
55
<menuitem id="estate_property_menu_action" action="estate_property_action"/>
6+
<menuitem id="estate_property_offers_menu_action" action="estate_property_offer_action"/>
67
</menuitem>
78
<menuitem id="estate_settings_menu" name="Settings">
89
<menuitem id="estate_property_type_menu_action" action="estate_property_type_action"/>

estate/views/estate_offer_views.xml

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,22 @@
1919
<field name="name">estate.property.offer.list</field>
2020
<field name="model">estate.property.offer</field>
2121
<field name="arch" type="xml">
22-
<list string="Offers">
22+
<list string="Offers" editable="top" decoration-success="status == 'accepted'" decoration-danger="status == 'refused'">
2323
<field name="price"/>
2424
<field name="partner_id" string="Partner"/>
2525
<field name="validity"/>
2626
<field name="date_deadline"/>
27-
<button name="action_offer_accept" type="object" icon="fa-check" title="accept"/>
28-
<button name="action_offer_refuse" type="object" icon="fa-times" title="refuse"/>
29-
<field name="status"/>
27+
<button name="action_offer_accept" type="object" icon="fa-check" title="accept" invisible="status in ['accepted', 'refused']"/>
28+
<button name="action_offer_refuse" type="object" icon="fa-times" title="refuse" invisible="status in ['accepted', 'refused']"/>
29+
<field name="status" optional="hidden" invisible="1"/>
3030
</list>
3131
</field>
3232
</record>
33+
34+
<record id="estate_property_offer_action" model="ir.actions.act_window">
35+
<field name="name">Offers</field>
36+
<field name="res_model">estate.property.offer</field>
37+
<field name="view_mode">list,form</field>
38+
<field name="domain">[('property_type_id', '=', active_id)]</field>
39+
</record>
3340
</odoo>

estate/views/estate_property_tags_views.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,16 @@
1414
</field>
1515
</record>
1616

17+
<record id="estate_property_tag_view_list" model="ir.ui.view">
18+
<field name="name">estate.property.tag.list</field>
19+
<field name="model">estate.property.tag</field>
20+
<field name="arch" type="xml">
21+
<list string="Type" editable="top">
22+
<field name="name"/>
23+
</list>
24+
</field>
25+
</record>
26+
1727
<record id="estate_property_tag_action" model="ir.actions.act_window">
1828
<field name="name">Property Tags</field>
1929
<field name="res_model">estate.property.tag</field>

estate/views/estate_property_type_views.xml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,49 @@
66
<field name="arch" type="xml">
77
<form string="Type">
88
<sheet>
9+
<header>
10+
<button name="%(estate_property_offer_action)d"
11+
type="action"
12+
class="oe_stat_btn"
13+
style="display: flex"
14+
icon="fa-money">
15+
<div class="o_field_widget o_stat_info">
16+
<div class="o_stat_value" style="margin-left: 5px">
17+
<field name="offer_count" widget="statinfo" string=""/> Offers
18+
</div>
19+
</div>
20+
</button>
21+
</header>
922
<h1>
1023
<field name="name"/>
1124
</h1>
25+
<notebook>
26+
<page string= "Properties">
27+
<field name="property_ids">
28+
<list>
29+
<field name="name" string="Title"/>
30+
<field name="expected_price" string="Expected Price"/>
31+
<field name="state" string="Status"/>
32+
</list>
33+
</field>
34+
</page>
35+
</notebook>
1236
</sheet>
1337
</form>
1438
</field>
1539
</record>
1640

41+
<record id="estate_property_type_view_list" model="ir.ui.view">
42+
<field name="name">estate.property.type.list</field>
43+
<field name="model">estate.property.type</field>
44+
<field name="arch" type="xml">
45+
<list string="Types">
46+
<field name="sequence" widget="handle"/>
47+
<field name="name" string="Name"/>
48+
</list>
49+
</field>
50+
</record>
51+
1752
<record id="estate_property_type_action" model="ir.actions.act_window">
1853
<field name="name">Property Types</field>
1954
<field name="res_model">estate.property.type</field>

estate/views/estate_property_views.xml

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
<field name="name">estate.property.search</field>
55
<field name="model">estate.property</field>
66
<field name="arch" type="xml">
7-
<search string="Apartments">
7+
<search string="Properties">
88
<field name="name" string="Title"/>
99
<field name="postcode"/>
1010
<field name="expected_price"/>
1111
<field name="bedrooms"/>
12-
<field name="living_area" string="Living Area (sqm)"/>
12+
<field name="living_area" string="Living Area (sqm)" filter_domain="[('living_area', '>=', self)]"/>
1313
<field name="facades"/>
1414
<separator/>
1515
<filter string="Available" name="state" domain="[('state', 'in', ['new', 'offer-received'])]"/>
@@ -26,18 +26,18 @@
2626
<field name="arch" type="xml">
2727
<form string="Listing">
2828
<header>
29-
<button name="action_property_cancel" string="Cancel" type="object" class="oe_highlight"/>
30-
<button name="action_property_sold" string="Sold" type="object" class="oe_highlight"/>
29+
<button name="action_property_sold" string="Sold" type="object" invisible="state == 'sold'"/>
30+
<button name="action_property_cancel" string="Cancel" type="object" invisible="state == 'sold'"/>
31+
<field name="state" widget="statusbar" statusbar_visible="new,offer-received,offer-accepted,sold"/>
3132
</header>
3233
<sheet>
3334
<h1>
3435
<field name="name"/>
3536
</h1>
36-
<field name="tag_ids" widget="many2many_tags"/>
37+
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
3738
<group>
3839
<group>
39-
<field name="state" string="Status"/>
40-
<field name="property_type_id"/>
40+
<field name="property_type_id" options="{'no_create': true}"/>
4141
<field name="postcode"/>
4242
<field name="date_availability" string="Available From"/>
4343
</group>
@@ -56,13 +56,13 @@
5656
<field name="facades"/>
5757
<field name="garage"/>
5858
<field name="garden"/>
59-
<field name="garden_area" string="Garden Area (sqm)"/>
60-
<field name="garden_orientation"/>
59+
<field name="garden_area" string="Garden Area (sqm)" invisible="not garden"/>
60+
<field name="garden_orientation" invisible="not garden"/>
6161
<field name="total_area" string="Total Area (sqm)"/>
6262
</group>
6363
</page>
6464
<page string="Offers">
65-
<field name = "offers_ids"/>
65+
<field name = "offers_ids" readonly="state in ['offer-accepted', 'sold', 'cancelled']"/>
6666
</page>
6767
<page string="Other info">
6868
<group>
@@ -80,14 +80,14 @@
8080
<field name="name">estate.property.list</field>
8181
<field name="model">estate.property</field>
8282
<field name="arch" type="xml">
83-
<list string="Listings">
83+
<list string="Listings" decoration-success="state in ('offer-received', 'offer-accepted')" decoration-bf="state == 'offer-accepted'" decoration-muted="state == 'sold'">
8484
<field name="name" string="Title"/>
8585
<field name="postcode"/>
8686
<field name="bedrooms"/>
8787
<field name="living_area" string="Living Area (sqm)"/>
8888
<field name="expected_price"/>
8989
<field name="selling_price"/>
90-
<field name="date_availability" string="Available From"/>
90+
<field name="date_availability" string="Available From" optional="hidden"/>
9191
</list>
9292
</field>
9393
</record>
@@ -96,5 +96,6 @@
9696
<field name="name">Properties</field>
9797
<field name="res_model">estate.property</field>
9898
<field name="view_mode">list,form</field>
99+
<field name="context">{'search_default_state': True}</field>
99100
</record>
100101
</odoo>

0 commit comments

Comments
 (0)