Skip to content

Commit 44f5059

Browse files
committed
[IMP] chapter7_estate: Added relations between property, type and offer models
1 parent 7409421 commit 44f5059

12 files changed

+160
-66
lines changed

estate/__manifest__.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,13 @@
88
'data': [
99
'security/ir.model.access.csv',
1010
'views/estate_property_views.xml',
11+
'views/estate_property_type_views.xml',
12+
'views/estate_property_tag_views.xml',
13+
'views/estate_property_offer_views.xml',
1114
'views/estate_menus.xml',
12-
],
15+
],
1316
'category': 'Sales/Real Estate',
1417
'installable': True,
1518
'auto_install': False,
16-
'description': """Description text""",
19+
'description': """Real estate management tutorial module with properties, offers, types and tags.""",
1720
}

estate/models/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
1-
from . import estate_property # noqa: F401
1+
from . import estate_property
22
from . import estate_property_type
3+
from . import estate_property_tag
4+
from . import estate_property_offer

estate/models/estate_property.py

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,37 @@
1-
from odoo import models, fields
21
from dateutil.relativedelta import relativedelta
32
from datetime import date
3+
from odoo import models, fields, api
44

55

66
class EstateProperty(models.Model):
77
_name = "estate.property"
88
_description = "Real Estate Property"
99

10-
name = fields.Char(string="Property Title", required=True)
11-
description = fields.Text(string="Description")
12-
postcode = fields.Char(string="Postcode")
10+
name = fields.Char(required=True)
11+
description = fields.Text()
12+
postcode = fields.Char()
1313
date_availability = fields.Date(
14-
string="Available From",
1514
default=lambda sself: date.today() + relativedelta(months=3),
1615
copy=False
1716
)
1817
expected_price = fields.Float(string="Expected Price", required=True)
1918
selling_price = fields.Float(
20-
string="Selling Price",
2119
readonly=True,
2220
copy=False
2321
)
24-
25-
bedrooms = fields.Integer(string="Bedrooms", default=2)
26-
living_area = fields.Integer(string="Living Area (sqm)")
27-
facades = fields.Integer(string="Number of Facades")
28-
garage = fields.Boolean(string="Has Garage")
29-
garden = fields.Boolean(string="Has Garden")
30-
garden_area = fields.Integer(string="Garden Area (sqm)")
22+
bedrooms = fields.Integer(default=2)
23+
living_area = fields.Integer()
24+
facades = fields.Integer()
25+
garage = fields.Boolean()
26+
garden = fields.Boolean()
27+
garden_area = fields.Integer()
3128
garden_orientation = fields.Selection(
3229
selection=[
3330
('north', 'North'),
3431
('south', 'South'),
3532
('east', 'East'),
3633
('west', 'West'),
3734
],
38-
string="Garden Orientation"
3935
)
4036
active = fields.Boolean(default=True)
4137
state = fields.Selection(
@@ -46,12 +42,33 @@ class EstateProperty(models.Model):
4642
('sold', 'Sold'),
4743
('cancelled', 'Cancelled'),
4844
],
49-
string="Status",
5045
required=True,
5146
copy=False,
5247
default='new',
5348
)
5449
property_type_id = fields.Many2one(
5550
"estate.property.type",
56-
string="Property Type",
5751
)
52+
salesperson_id = fields.Many2one(
53+
"res.users",
54+
default=lambda self: self.env.user,
55+
)
56+
buyer_id = fields.Many2one(
57+
"res.partner",
58+
copy=False,
59+
)
60+
tag_ids = fields.Many2many(
61+
"estate.property.tag",
62+
)
63+
offer_ids = fields.One2many(
64+
"estate.property.offer",
65+
"property_id",
66+
)
67+
total_area = fields.Float(
68+
compute="_compute_total_area"
69+
)
70+
71+
@api.depends('living_area', 'garden_area')
72+
def _compute_total_area(self):
73+
for record in self:
74+
record.total_area = record.living_area + record.garden_area
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from odoo import models, fields
2+
3+
4+
class EstatePropertyOffer(models.Model):
5+
_name = "estate.property.offer"
6+
_description = "Real Estate Property Offer"
7+
price = fields.Float(string="Price")
8+
status = fields.Selection(
9+
[
10+
("accepted", "Accepted"),
11+
("refused", "Refused"),
12+
],
13+
copy=False,
14+
)
15+
partner_id = fields.Many2one(
16+
"res.partner",
17+
required=True,
18+
)
19+
property_id = fields.Many2one(
20+
"estate.property",
21+
required=True,
22+
)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from odoo import models, fields
2+
3+
4+
class EstatePropertyTag(models.Model):
5+
_name = "estate.property.tag"
6+
_description = "Real Estate Property Tag"
7+
name = fields.Char(required=True)

estate/models/estate_property_type.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,4 @@
44
class EstatePropertyType(models.Model):
55
_name = "estate.property.type"
66
_description = "Real Estate Property Type"
7-
8-
name = fields.Char(string="Name", required=True)
7+
name = fields.Char(required=True)
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
22
access_estate_property_user,access_estate_property_user,model_estate_property,base.group_user,1,1,1,1
33
access_estate_property_type_user,access_estate_property_type_user,model_estate_property_type,base.group_user,1,1,1,1
4+
access_estate_property_tag_user,access_estate_property_tag_user,model_estate_property_tag,base.group_user,1,1,1,1
5+
access_estate_property_offer_user,access_estate_property_offer_user,model_estate_property_offer,base.group_user,1,1,1,1

estate/views/estate_menus.xml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
1-
<!-- /home/odoo/odoo19/tutorials/estate/views/estate_menus.xml -->
21
<odoo>
32
<menuitem id="menu_estate_root" name="Real Estate"/>
43
<menuitem id="menu_estate_advertisements" name="Advertisements" parent="menu_estate_root" sequence="10"/>
54
<menuitem id="menu_estate_properties" name="Properties" parent="menu_estate_advertisements" action="action_estate_property" sequence="10"/>
6-
<!-- Settings / Property Types -->
5+
76
<menuitem id="menu_estate_settings" name="Settings" parent="menu_estate_root" sequence="20"/>
7+
88
<menuitem id="menu_estate_property_types" name="Property Types"
99
parent="menu_estate_settings"
1010
action="action_estate_property_type"
1111
sequence="10"/>
12+
13+
<menuitem id="menu_estate_property_tags" name="Property Tags"
14+
parent="menu_estate_settings"
15+
action="action_estate_property_tag"/>
1216
</odoo>
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<odoo>
2+
<record id="view_estate_property_offer_list" model="ir.ui.view">
3+
<field name="name">estate.property.offer.list</field>
4+
<field name="model">estate.property.offer</field>
5+
<field name="arch" type="xml">
6+
<list string="Offers">
7+
<field name="price"/>
8+
<field name="partner_id"/>
9+
<field name="status"/>
10+
</list>
11+
</field>
12+
</record>
13+
14+
<record id="view_estate_property_offer_form" model="ir.ui.view">
15+
<field name="name">estate.property.offer.form</field>
16+
<field name="model">estate.property.offer</field>
17+
<field name="arch" type="xml">
18+
<form string="Offer">
19+
<sheet>
20+
<group>
21+
<field name="price"/>
22+
<field name="partner_id"/>
23+
<field name="status"/>
24+
</group>
25+
</sheet>
26+
</form>
27+
</field>
28+
</record>
29+
</odoo>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<odoo>
2+
<record id="action_estate_property_tag" model="ir.actions.act_window">
3+
<field name="name">Property Tags</field>
4+
<field name="res_model">estate.property.tag</field>
5+
<field name="view_mode">list,form</field>
6+
<field name="help" type="html">
7+
<p>Create and manage tags for your properties.</p>
8+
</field>
9+
</record>
10+
</odoo>

0 commit comments

Comments
 (0)