Skip to content

Commit d490741

Browse files
committed
[IMP] estate: chapter11 (sprinkles)
1 parent 347453f commit d490741

9 files changed

+72
-21
lines changed

estate/__manifest__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
'data': [
1111
'security/ir.model.access.csv',
1212
'views/estate_property_views.xml',
13+
'views/estate_property_offer_views.xml',
1314
'views/estate_property_type_views.xml',
1415
'views/estate_property_tag_views.xml',
15-
'views/estate_property_offer_views.xml',
1616
'views/estate_menus.xml',
1717
],
1818
'demo': [

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
name = fields.Char('Title', required=True, default='Unknown', translate='True')
1213
active = fields.Boolean('Active', default=True)

estate/models/estate_property_offer.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
class EstatePropertyOffer(models.Model):
88
_name = 'estate.property.offer'
99
_description = 'Estate Property Offer'
10+
_order = "price desc"
1011

1112
price = fields.Float(string='Price')
1213
status = fields.Selection(string='Status', copy=False,
@@ -15,6 +16,7 @@ class EstatePropertyOffer(models.Model):
1516
property_id = fields.Many2one('estate.property', string='Property', required=True)
1617
validity = fields.Integer(string='Validity (days)', default=7)
1718
date_deadline = fields.Date(string='Deadline', compute='_compute_deadline', inverse='_inverse_deadline')
19+
property_type_id = fields.Many2one('estate.property.type', string='Property Type', related="property_id.property_type_id", store=True)
1820

1921
_check_price = models.Constraint(
2022
'CHECK(price > 0)',

estate/models/estate_property_tag.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66
class EstatePropertyTag(models.Model):
77
_name = 'estate.property.tag'
88
_description = 'Estate Property Tag'
9+
_order = "name"
910

1011
name = fields.Char(string='Property Tag', required=True)
12+
color = fields.Integer()
1113

1214
_tag_name_uniq = models.Constraint(
1315
'unique(name)',
Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,25 @@
11
# Part of Odoo. See LICENSE file for full copyright and licensing details.
22

3-
from odoo import fields, models
3+
from odoo import fields, models, api
44

55

66
class EstatePropertyType(models.Model):
77
_name = 'estate.property.type'
88
_description = 'Estate Property Type'
9+
_order = "sequence, name"
910

10-
name = fields.Char(string='Property Type', required=True)
11+
name = fields.Char('Property Type', required=True)
12+
property_ids = fields.One2many('estate.property', 'property_type_id', 'Properties')
13+
offer_ids = fields.One2many('estate.property.offer', 'property_type_id', 'Offers')
14+
offer_count = fields.Integer(compute='_compute_offer_count')
15+
sequence = fields.Integer()
1116

1217
_type_name_uniq = models.Constraint(
1318
'unique(name)',
1419
"The property type name must be unique",
1520
)
21+
22+
@api.depends('offer_ids')
23+
def _compute_offer_count(self):
24+
for record in self:
25+
record.offer_count = len(record.offer_ids)

estate/views/estate_property_offer_views.xml

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
<group>
1111
<field name="price"/>
1212
<field name="partner_id"/>
13-
<field name="property_id"/>
1413
</group>
1514
<group>
1615
<field name="validity"/>
@@ -27,16 +26,24 @@
2726
<field name="name">estate.property.offer.view.list</field>
2827
<field name="model">estate.property.offer</field>
2928
<field name="arch" type="xml">
30-
<list string="Estate Property Offer">
29+
<list string="Estate Property Offer" editable="bottom"
30+
decoration-success="status == 'accepted'"
31+
decoration-danger="status == 'refused'">
3132
<field name="price"/>
3233
<field name="partner_id"/>
3334
<field name="validity"/>
3435
<field name="date_deadline"/>
35-
<field name="status"/>
36-
<button name="action_accept" title="Accept" type="object" icon="fa-check"/>
37-
<button name="action_refuse" title="Refuse" type="object" icon="fa-close"/>
36+
<button name="action_accept" title="Accept" type="object" icon="fa-check" invisible="status"/>
37+
<button name="action_refuse" title="Refuse" type="object" icon="fa-close" invisible="status"/>
3838
</list>
3939
</field>
4040
</record>
4141

42+
<record id="estate_property_offer_action" model="ir.actions.act_window">
43+
<field name="name">Offers</field>
44+
<field name="res_model">estate.property.offer</field>
45+
<field name="view_mode">list,form</field>
46+
<field name="domain">[('property_type_id','=',active_id)]</field>
47+
</record>
48+
4249
</odoo>

estate/views/estate_property_tag_views.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<sheet>
99
<group>
1010
<field name="name"/>
11+
<field name="color" widget="color_picker"/>
1112
</group>
1213
</sheet>
1314
</form>
@@ -18,8 +19,9 @@
1819
<field name="name">estate.property.tag.view.list</field>
1920
<field name="model">estate.property.tag</field>
2021
<field name="arch" type="xml">
21-
<list string="Estate Property Tag">
22+
<list string="Estate Property Tag" editable="bottom">
2223
<field name="name"/>
24+
<field name="color" widget="color_picker"/>
2325
</list>
2426
</field>
2527
</record>

estate/views/estate_property_type_views.xml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,30 @@
66
<field name="arch" type="xml">
77
<form string="Estate Property Type">
88
<sheet>
9+
<div class="oe_button_box" name="button_box">
10+
<button name="%(estate_property_offer_action)d"
11+
type="action"
12+
class="oe_stat_button"
13+
icon="fa-users">
14+
<field name="offer_count" widget="statinfo" string="Offers"/>
15+
</button>
16+
</div>
917
<div class="oe_title">
1018
<h1 class="mb32">
1119
<field name="name" class="mb16"/>
1220
</h1>
1321
</div>
22+
<notebook>
23+
<page string="Properties">
24+
<field name="property_ids">
25+
<list>
26+
<field name="name"/>
27+
<field name="expected_price"/>
28+
<field name="state"/>
29+
</list>
30+
</field>
31+
</page>
32+
</notebook>
1433
</sheet>
1534
</form>
1635
</field>
@@ -21,6 +40,7 @@
2140
<field name="model">estate.property.type</field>
2241
<field name="arch" type="xml">
2342
<list string="Estate Property Type">
43+
<field name="sequence" widget="handle"/>
2444
<field name="name"/>
2545
</list>
2646
</field>

estate/views/estate_property_views.xml

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88
<field name="name"/>
99
<field name="postcode"/>
1010
<field name="expected_price"/>
11-
<field name="living_area"/>
11+
<field name="living_area" string="Living area from" filter_domain="[('living_area', '&gt;=', self)]"/>
1212
<field name="facades"/>
1313
<field name="bedrooms"/>
1414
<field name="property_type_id"/>
15-
<filter string="Available" name="available" domain="[('date_availability', '&lt;=', today)]"/>
15+
<filter string="Available" name="filter_available" domain="[('date_availability', '&lt;=', today)]"/>
1616
<separator/>
1717
<filter string="New" name="new_state" domain="[('state', '=', 'new')]"/>
1818
<filter string="Offer Received" name="offer_received_state"
@@ -32,20 +32,22 @@
3232
<field name="arch" type="xml">
3333
<form string="Estate Property">
3434
<header>
35-
<button name="property_sold" type="object" string="Sold"/>
36-
<button name="property_cancelled" type="object" string="Cancel"/>
35+
<button name="property_sold" type="object" string="Sold" invisible="state in ('cancelled','sold')"/>
36+
<button name="property_cancelled" type="object" string="Cancel"
37+
invisible="state in ('cancelled','sold')"/>
38+
<field name="state" widget="statusbar" statusbar_visible="new,offer_received,offer_accepted,sold"/>
3739
</header>
3840
<sheet>
3941
<div class="oe_title">
4042
<h1>
4143
<field name="name"/>
4244
</h1>
43-
<field name="property_tag_ids" widget="many2many_tags" class="mb16"/>
45+
<field name="property_tag_ids" widget="many2many_tags" class="mb16"
46+
options="{'color_field': 'color'}"/>
4447
</div>
4548
<group>
4649
<group>
47-
<field name="state"/>
48-
<field name="property_type_id"/>
50+
<field name="property_type_id" options="{'no_create_edit': True, 'no_create': True}"/>
4951
<field name="postcode"/>
5052
<field name="date_availability"/>
5153
</group>
@@ -64,13 +66,13 @@
6466
<field name="facades"/>
6567
<field name="garage"/>
6668
<field name="garden"/>
67-
<field name="garden_area"/>
68-
<field name="garden_orientation"/>
69+
<field name="garden_area" invisible="not garden"/>
70+
<field name="garden_orientation" invisible="not garden"/>
6971
<field name="total_area"/>
7072
</group>
7173
</page>
7274
<page string="Offers">
73-
<field name="offer_ids"/>
75+
<field name="offer_ids" readonly="state in ('offer_accepted','sold','cancelled')"/>
7476
</page>
7577
<page string="Other Info">
7678
<group>
@@ -88,15 +90,19 @@
8890
<field name="name">estate.property.view.list</field>
8991
<field name="model">estate.property</field>
9092
<field name="arch" type="xml">
91-
<list string="Estate Property">
93+
<list string="Estate Property"
94+
decoration-success="state in ('offer_received','offer_accepted')"
95+
decoration-bf="state=='offer_accepted'"
96+
decoration-muted="state=='cancelled'"
97+
>
9298
<field name="name" width="140px"/>
9399
<field name="postcode" width="100px"/>
94100
<field name="property_type_id" width="150px"/>
95101
<field name="bedrooms" width="100px"/>
96102
<field name="living_area"/>
97103
<field name="expected_price"/>
98104
<field name="selling_price"/>
99-
<field name="date_availability"/>
105+
<field name="date_availability" optional="hide"/>
100106
</list>
101107
</field>
102108
</record>
@@ -106,6 +112,7 @@
106112
<field name="res_model">estate.property</field>
107113
<field name="view_mode">list,form</field>
108114
<field name="search_view_id" ref="estate_property_view_search"/>
115+
<field name="context">{'search_default_filter_available':1}</field>
109116
</record>
110117

111118
</odoo>

0 commit comments

Comments
 (0)