Skip to content

Commit 532c013

Browse files
committed
[IMP] estate: add module data and restrict data access
Added demo data and security data to the estate module., Implemented record rules and access rights to restrict data access based on user groups., Updated manifest.py to load new data files.
1 parent 4cd0123 commit 532c013

File tree

12 files changed

+228
-25
lines changed

12 files changed

+228
-25
lines changed

estate/__manifest__.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
{
22
"name": "Real Estate",
3-
"category": "Tutorials/RealEstate",
3+
"category": "Real Estate/Brokerage",
44
"application": True,
55
"installable": True,
66
"data": [
7+
"security/security.xml",
8+
"data/property_type.xml",
79
"views/estate_property_views.xml",
810
"views/estate_property_tag_views.xml",
911
"views/estate_property_offer_views.xml",
@@ -12,5 +14,9 @@
1214
"views/inherit_res_users_view.xml",
1315
"security/ir.model.access.csv",
1416
],
17+
"demo": [
18+
"demo/property.xml",
19+
"demo/property_offer.xml",
20+
],
1521
"license": "AGPL-3",
1622
}

estate/data/property_type.xml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
2+
<odoo>
3+
<data noupdate="0">
4+
5+
<record id="property_type_residential" model="estate.property.type">
6+
<field name="name">Residential</field>
7+
</record>
8+
9+
<record id="property_type_commercial" model="estate.property.type">
10+
<field name="name">Commercial</field>
11+
</record>
12+
13+
<record id="property_type_industrial" model="estate.property.type">
14+
<field name="name">Industrial</field>
15+
</record>
16+
17+
<record id="property_type_land" model="estate.property.type">
18+
<field name="name">Land</field>
19+
</record>
20+
21+
</data>
22+
</odoo>

estate/demo/property.xml

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
2+
<odoo>
3+
<record id="property_id1" model="estate.property">
4+
<field name="name">Big Villa</field>
5+
<field name="state">new</field>
6+
<field name="description">A nice and big villa</field>
7+
<field name="postcode">12345</field>
8+
<field name="date_availability">2020-02-02</field>
9+
<field name="expected_price">1600000</field>
10+
<field name="bedrooms">6</field>
11+
<field name="living_area">100</field>
12+
<field name="facades">4</field>
13+
<field name="garage">True</field>
14+
<field name="garden">True</field>
15+
<field name="garden_area">100000</field>
16+
<field name="garden_orientation">south</field>
17+
</record>
18+
19+
<record id="property_id2" model="estate.property">
20+
<field name="name">Trailer home</field>
21+
<field name="state">cancelled</field>
22+
<field name="description">Home in a trailer park</field>
23+
<field name="postcode">54321</field>
24+
<field name="date_availability">1970-01-01</field>
25+
<field name="expected_price">100000</field>
26+
<field name="selling_price">120000</field>
27+
<field name="bedrooms">1</field>
28+
<field name="living_area">10</field>
29+
<field name="facades">4</field>
30+
<field name="garage">False</field>
31+
</record>
32+
33+
<record id="property_id3" model="estate.property">
34+
<field name="name">Small home</field>
35+
<field name="state">new</field>
36+
<field name="description">Home in a trailer park</field>
37+
<field name="postcode">54321</field>
38+
<field name="date_availability">1970-01-01</field>
39+
<field name="expected_price">100000</field>
40+
<field name="selling_price">120000</field>
41+
<field name="bedrooms">1</field>
42+
<field name="living_area">10</field>
43+
<field name="facades">4</field>
44+
<field name="garage">False</field>
45+
<field name="offer_ids" eval="[
46+
Command.create({
47+
'partner_id': ref('base.res_partner_12'),
48+
'price': 1200000,
49+
'validity': 14,
50+
'date_deadline': (datetime.now() + timedelta(days=14)).date(),
51+
}),
52+
Command.create({
53+
'partner_id': ref('base.res_partner_12'),
54+
'price': 1300000,
55+
'validity': 14,
56+
'date_deadline': (datetime.now() + timedelta(days=14)).date(),
57+
}),
58+
Command.create({
59+
'partner_id': ref('base.res_partner_10'),
60+
'price': 1500000,
61+
'validity': 14,
62+
'date_deadline': (datetime.now() + timedelta(days=14)).date(),
63+
})
64+
]"/>
65+
</record>
66+
</odoo>

estate/demo/property_offer.xml

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<odoo>
2+
<record id="offer_azure_villa_1" model="estate.property.offer">
3+
<field name="price">10000</field>
4+
<field name="validity">14</field>
5+
<field name="partner_id" ref="base.res_partner_12"/>
6+
<field name="property_id" ref="property_id1"/>
7+
<field name="date_deadline" eval="datetime.now().date() + timedelta(days=14)"/>
8+
</record>
9+
10+
<record id="offer_azure_villa_2" model="estate.property.offer">
11+
<field name="price">1500000</field>
12+
<field name="validity">14</field>
13+
<field name="partner_id" ref="base.res_partner_12"/>
14+
<field name="property_id" ref="property_id1"/>
15+
<field name="date_deadline" eval="datetime.now().date() + timedelta(days=14)"/>
16+
</record>
17+
18+
<record id="offer_azure_villa_3" model="estate.property.offer">
19+
<field name="price">1500001</field>
20+
<field name="validity">14</field>
21+
<field name="partner_id" ref="base.res_partner_12"/>
22+
<field name="property_id" ref="property_id1"/>
23+
<field name="date_deadline" eval="datetime.now().date() + timedelta(days=14)"/>
24+
</record>
25+
26+
<function model="estate.property.offer" name="action_offer_confirm">
27+
<value eval="[ref('offer_azure_villa_2')]"/>
28+
</function>
29+
30+
<function model="estate.property.offer" name="action_offer_refuse">
31+
<value eval="[ref('offer_azure_villa_1')]"/>
32+
</function>
33+
34+
<function model="estate.property.offer" name="action_offer_refuse">
35+
<value eval="[ ref('offer_azure_villa_3')]"/>
36+
</function>
37+
</odoo>
38+
39+

estate/models/estate_property.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ class EstateProperty(models.Model):
5959
"res.users",
6060
string="Salesperson",
6161
copy=False,
62-
default=lambda self: self.env.user,
6362
)
6463

6564
partner_id = fields.Many2one(
@@ -80,6 +79,13 @@ class EstateProperty(models.Model):
8079

8180
status = fields.Char(default="new", string="Status")
8281

82+
company_id = fields.Many2one(
83+
"res.company",
84+
string="Company",
85+
default=lambda self: self.env.company,
86+
required=True,
87+
)
88+
8389
_order = "id desc"
8490

8591
_sql_constraints = [

estate/models/estate_property_offer.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
# offers model that will offer us the offers
2-
3-
41
from odoo import fields, models, api
52
from datetime import datetime
63
from dateutil.relativedelta import relativedelta
@@ -29,10 +26,12 @@ class EstatePropertyOffer(models.Model):
2926
readonly=False,
3027
)
3128

32-
validity = fields.Integer(default=7)
29+
validity = fields.Integer(default=7, string="Validity")
3330

3431
date_deadline = fields.Date(
35-
compute="_compute_offer_deadline", inverse="_deadline_update"
32+
compute="_compute_offer_deadline",
33+
inverse="_deadline_update",
34+
string="Date deadline",
3635
)
3736

3837
# constrains of sql

estate/models/estate_property_type.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
from odoo import fields, models, api
22

33

4-
# Property type model for properties
5-
# prpoerties can be of type house, penthouse, etc.
64
class EstatePropertyType(models.Model):
75
_name = "estate.property.type"
86
_description = "Type of properties of estate model"

estate/security/ir.model.access.csv

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,19 @@
11
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
2-
estate.access_estate_property, ir.model.access,model_estate_property,base.group_user,1,1,1,1
3-
estate.access_estate_property_type,ir.model.access,model_estate_property_type,base.group_user,1,1,1,1
42

5-
estate.access_estate_property_tag,ir.model.access,model_estate_property_tag,base.group_user,1,1,1,1
3+
estate.access_estate_property,Estate Manager,model_estate_property,estate.estate_group_manager,1,1,1,1
4+
5+
estate.access_estate_property_type,Estate Manager,model_estate_property_type,estate.estate_group_manager,1,1,1,1
6+
7+
estate.access_estate_property_tag,Estate Manager,model_estate_property_tag,estate.estate_group_manager,1,1,1,1
8+
9+
estate.access_estate_property_offer,Estate Manager,model_estate_property_offer,estate.estate_group_manager,1,1,1,1
10+
11+
estate.access_estate_type_to_agent,Estate Agent,model_estate_property_type,estate.estate_group_user,1,0,0,0
12+
13+
estate.access_estate_property_tag_to_agent,Estate Agent,model_estate_property_tag,estate.estate_group_user,1,0,0,0
14+
15+
estate.access_estate_property_to_agent,Estate Agent,model_estate_property,estate.estate_group_user,1,1,1,0
16+
17+
access_estate_model_offer,estate.property.offer,model_estate_property_offer,base.group_user,1,1,1,1
18+
619

7-
estate.access_estate_property_offer,ir.model.access,model_estate_property_offer,base.group_user,1,1,1,1

estate/security/security.xml

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<odoo>
2+
<record id="estate_group_user" model="res.groups">
3+
<field name="name">Agent</field>
4+
<field name="category_id" ref="base.module_category_real_estate_brokerage"/>
5+
</record>
6+
7+
<record id="estate_group_manager" model="res.groups">
8+
<field name="name">Manager</field>
9+
<field name="category_id" ref="base.module_category_real_estate_brokerage"/>
10+
<field name="implied_ids" eval="[(4, ref('estate_group_user'))]"/>
11+
</record>
12+
13+
<record id="is_agent_property" model="ir.rule">
14+
<field name="name">Show properties that belongs to user</field>
15+
<field name="model_id" ref="estate.model_estate_property"/>
16+
<field name="perm_read" eval="True"/>
17+
<field name="groups" eval="[Command.link(ref('estate.estate_group_user'))]"/>
18+
<field name="domain_force">[
19+
'|', ('user_id', '=', user.id),
20+
('user_id', '=', False)
21+
]</field>
22+
</record>
23+
24+
<record id="estate_manager_rule" model="ir.rule">
25+
<field name="name">Show all properties for manager </field>
26+
<field name="model_id" ref="estate.model_estate_property"/>
27+
<field name="groups" eval="[(4, ref('estate.estate_group_manager'))]"/>
28+
<field name="perm_read" eval="True"/>
29+
<field name="perm_write" eval="True"/>
30+
<field name="perm_create" eval="True"/>
31+
<field name="domain_force">[(1, '=', 1)]</field>
32+
</record>
33+
34+
<record id="multi_company_rule" model="ir.rule">
35+
<field name="name">Estate property multi-company</field>
36+
<field name="model_id" ref="estate.model_estate_property"/>
37+
<field name="groups" eval="[(4, ref('estate.estate_group_manager'))]"/>
38+
<field name="domain_force">[
39+
'|', ('company_id', '=', False),
40+
('company_id', 'in', company_ids)
41+
]</field>
42+
</record>
43+
</odoo>

estate/views/estate_menus.xml

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
<odoo>
2-
<menuitem id="estate_property_menu_root" name="Real Estate">
3-
2+
<menuitem id="estate_property_menu_root" name="Real Estate">
43
<menuitem id="real_estate_menu" name="Advertisements">
54
<menuitem id="real_estate_model_menu_action" action="estate_property_id"/>
65
</menuitem>
76

8-
<menuitem id="real_estate_type_menu" name="Setting">
7+
<menuitem id="real_estate_type_menu" name="Setting" groups="estate_group_manager">
98
<menuitem id="real_estate_type_action" action="estate_property_type_id"/>
109
<menuitem id="real_estate_tag_action" action="estate_property_tag_id"/>
1110
</menuitem>
12-
1311
</menuitem>
14-
15-
</odoo>
12+
</odoo>

0 commit comments

Comments
 (0)