Skip to content

Commit c3b4579

Browse files
author
Oussema Heni
committed
[IMP] real_estate: add ordering to property and offer models, update relationships and views
1 parent 99386a7 commit c3b4579

9 files changed

+124
-20
lines changed

estate/__manifest__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
'data': [
77
'security/ir.model.access.csv',
88
'views/estate_property_views.xml',
9+
'views/estate_property_offer_views.xml',
910
'views/estate_property_type_views.xml',
1011
'views/estate_property_tag_views.xml',
11-
'views/estate_property_offer_views.xml',
1212
'views/estate_menus_views.xml',
1313
],
1414
'author': 'Odoo S.A.',

estate/models/estate_property.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
class EstateProperty(models.Model):
88
_name = "estate.property"
99
_description = "Estate property"
10+
_order = "id desc"
1011

1112
_check_expected_price = models.Constraint(
1213
"CHECK(expected_price > 0)",

estate/models/estate_property_offer.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ class EstatePropertyOffer(models.Model):
66
_name = "estate.property.offer"
77
_description = "Estate Property Offer"
88

9+
_order = "price desc"
10+
911
_check_offer_price = models.Constraint(
1012
"CHECK(price > 0)",
1113
"The offer price must be strictly positive.",
@@ -40,6 +42,12 @@ class EstatePropertyOffer(models.Model):
4042
inverse="_inverse_date_deadline",
4143
)
4244

45+
property_type_id = fields.Many2one(
46+
string="estate.property.type",
47+
related="property_id.property_type_id",
48+
store=True
49+
)
50+
4351
@api.depends("create_date", "validity")
4452
def _compute_date_deadline(self):
4553
for record in self:

estate/models/estate_property_tag.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,13 @@
44
class EstatePropertyTag(models.Model):
55
_name = "estate.property.tag"
66
_description = "Estate Property Tag"
7+
_order = "name"
78

89
_unique_tag_name = models.Constraint(
910
"UNIQUE(name)",
1011
"The property tag name must be unique.",
1112
)
1213

1314
name = fields.Char(required=True)
15+
16+
color = fields.Integer()

estate/models/estate_property_type.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,32 @@ class EstatePropertyType(models.Model):
55
_name = "estate.property.type"
66
_description = "Estate property type"
77

8+
_order = "sequence, name"
9+
810
_unique_type_name = models.Constraint(
911
"UNIQUE(name)",
1012
"The property type name must be unique.",
1113
)
1214

1315
name = fields.Char('Name', required=True)
16+
17+
sequence = fields.Integer(default=1)
18+
19+
property_ids = fields.One2many(
20+
"estate.property",
21+
"property_type_id",
22+
string="Properties",
23+
)
24+
25+
offer_ids = fields.One2many(
26+
"estate.property.offer",
27+
"property_type_id"
28+
)
29+
30+
offer_count = fields.Integer(
31+
compute="_compute_offer_count"
32+
)
33+
34+
def _compute_offer_count(self):
35+
for record in self:
36+
record.offer_count = len(record.offer_ids)

estate/views/estate_property_offer_views.xml

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,31 @@
44
<field name="name">estate.property.offer.tree</field>
55
<field name="model">estate.property.offer</field>
66
<field name="arch" type="xml">
7-
<list>
7+
<list
8+
string="Offers"
9+
editable="bottom"
10+
decoration-danger="status == 'refused'"
11+
decoration-success="status == 'accepted'"
12+
>
813
<field name="price" />
914
<field name="partner_id" />
10-
<field name="status" />
1115
<field name="validity" />
16+
<field name="date_deadline" />
17+
<field name="status" invisible="1" />
1218
<button
13-
title="accept-btn"
1419
name="action_accept"
1520
type="object"
1621
icon="fa-check"
22+
invisible="status"
23+
title="action_accept_btn"
1724
/>
1825
<button
19-
title="refuse-btn"
2026
name="action_refuse"
2127
type="object"
2228
icon="fa-times"
29+
invisible="status"
30+
title="action_refuse_btn"
2331
/>
24-
<field name="date_deadline" />
2532
</list>
2633
</field>
2734
</record>
@@ -62,4 +69,21 @@
6269
</form>
6370
</field>
6471
</record>
72+
73+
<record id="estate_property_offer_action" model="ir.actions.act_window">
74+
<field name="name">Property Offers</field>
75+
<field name="res_model">estate.property.offer</field>
76+
<field name="view_mode">list,form</field>
77+
<field name="domain">[('property_type_id', '=', active_id)]</field>
78+
</record>
79+
80+
<record id="estate_property_offer_view_search" model="ir.ui.view">
81+
<field name="name">estate.property.offer.search</field>
82+
<field name="model">estate.property.offer</field>
83+
<field name="arch" type="xml">
84+
<search string="Search Offers">
85+
<field name="property_type_id" />
86+
</search>
87+
</field>
88+
</record>
6589
</odoo>

estate/views/estate_property_tag_views.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
<field name="arch" type="xml">
1313
<list string="Title">
1414
<field name="name" />
15+
<field name="color"/>
1516
</list>
1617
</field>
1718
</record>

estate/views/estate_property_type_views.xml

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
<field name="model">estate.property.type</field>
1212
<field name="arch" type="xml">
1313
<list string="Title">
14+
<field name="sequence" widget="handle" />
1415
<field name="name" />
1516
</list>
1617
</field>
@@ -20,14 +21,33 @@
2021
<field name="name">estate.property.type.form</field>
2122
<field name="model">estate.property.type</field>
2223
<field name="arch" type="xml">
23-
<form string="Estate Property">
24+
<form string="Estate Property Type">
2425
<sheet>
26+
<div class="oe_button_box" name="button_box">
27+
<button
28+
name="%(estate_property_offer_action)d"
29+
type="action"
30+
class="oe_stat_button"
31+
icon="fa-money"
32+
context="{'search_default_property_type_id': id}"
33+
title="estate_property_offer_action_btn"
34+
/>
35+
</div>
2536
<div class="oe_title mb32">
2637
<label class="oe_title" for="name">Name</label>
2738
<h1>
2839
<field name="name" />
2940
</h1>
3041
</div>
42+
<group string="Properties">
43+
<field name="property_ids">
44+
<list>
45+
<field name="name" />
46+
<field name="expected_price" />
47+
<field name="state" />
48+
</list>
49+
</field>
50+
</group>
3151
</sheet>
3252
</form>
3353
</field>

estate/views/estate_property_views.xml

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,26 @@
44
<field name="name">Property</field>
55
<field name="res_model">estate.property</field>
66
<field name="view_mode">list,form</field>
7+
<field name="context">{'search_default_available': True}</field>
78
</record>
89

910
<record id="estate_property_view_tree" model="ir.ui.view">
1011
<field name="name">estate.property.list</field>
1112
<field name="model">estate.property</field>
1213
<field name="arch" type="xml">
13-
<list string="Title">
14+
<list
15+
string="Properties"
16+
decoration-success="state in ['offer_received', 'offer_accepted']"
17+
decoration-bf="state == 'offer_accepted'"
18+
decoration-muted="state == 'sold'"
19+
>
1420
<field name="name" />
1521
<field name="description" />
1622
<field name="bedrooms" />
1723
<field name="living_area" />
1824
<field name="expected_price" />
1925
<field name="selling_price" />
20-
<field name="date_availability" />
26+
<field name="date_availability" optional="hide" />
2127
<field name="property_type_id" />
2228
<field name="tag_ids" widget="many2many_tags" />
2329
</list>
@@ -34,21 +40,18 @@
3440
name="action_sold"
3541
type="object"
3642
string="Sold"
37-
class="btn-primary"
38-
invisible="state in ('sold', 'cancelled')"
43+
invisible="state in ['sold', 'canceled']"
3944
/>
40-
4145
<button
4246
name="action_cancel"
4347
type="object"
4448
string="Cancel"
45-
invisible="state in ('sold', 'cancelled')"
49+
invisible="state in ['sold', 'canceled']"
4650
/>
47-
4851
<field
4952
name="state"
5053
widget="statusbar"
51-
statusbar_visible="new,offer_received,offer_accepted,sold,cancelled"
54+
statusbar_visible="new,offer_received,offer_accepted,sold"
5255
/>
5356
</header>
5457
<sheet>
@@ -58,11 +61,18 @@
5861
</h1>
5962
</div>
6063
<group>
61-
<field name="tag_ids" widget="many2many_tags" />
64+
<field
65+
name="tag_ids"
66+
widget="many2many_tags"
67+
options="{'color_field': 'color'}"
68+
/>
6269
</group>
6370
<group>
6471
<group>
65-
<field name="property_type_id" class="mb4" />
72+
<field
73+
name="property_type_id"
74+
options="{'no_create': True, 'no_edit': True}"
75+
/>
6676
<field name="postcode" class="mb16" />
6777
<field name="date_availability" class="mb16" />
6878
</group>
@@ -71,6 +81,11 @@
7181
<field name="selling_price" class="mb16" />
7282
<field name="best_price" readonly="1" />
7383
</group>
84+
<group>
85+
<field name="garden" />
86+
<field name="garden_area" invisible="not garden" />
87+
<field name="garden_orientation" invisible="not garden" />
88+
</group>
7489
</group>
7590

7691
<notebook>
@@ -83,14 +98,19 @@
8398
<field name="facades" class="mb4" />
8499
<field name="garage" class="mb4" />
85100
<field name="garden" class="mb4" />
86-
<field name="garden_area" class="mb4" />
101+
<field name="garden" />
102+
<field name="garden_area" invisible="not garden" />
103+
<field name="garden_orientation" invisible="not garden" />
87104
<field name="garden_orientation" class="mb4" />
88105
<field name="total_area" readonly="1" />
89106
</group>
90107
</group>
91108
</page>
92109
<page string="Offers">
93-
<field name="offer_ids" />
110+
<field
111+
name="offer_ids"
112+
readonly="state in ['offer_accepted', 'sold', 'canceled']"
113+
/>
94114
</page>
95115
<page string="Other Info">
96116
<group>
@@ -113,7 +133,11 @@
113133
<field name="postcode" string="Postcode" />
114134
<field name="expected_price" string="Expected Price" />
115135
<field name="bedrooms" string="Bedrooms" />
116-
<field name="living_area" string="Living Area" />
136+
<field
137+
name="living_area"
138+
string="Living Area"
139+
filter_domain="[('living_area', '>=', self)]"
140+
/>
117141

118142
<filter
119143
name="active"

0 commit comments

Comments
 (0)