Skip to content

Commit e9e2d4c

Browse files
committed
[IMP] Tutorial - Chapter 7 - Relations Between Models
1 parent 1d80309 commit e9e2d4c

12 files changed

+157
-14
lines changed

estate/__manifest__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
"data": [
88
"security/ir.model.access.csv",
99
"views/estate_property_views.xml",
10+
"views/estate_property_type_views.xml",
11+
"views/estate_property_tag_views.xml",
12+
"views/estate_property_offer_views.xml",
1013
"views/estate_menus.xml",
1114
]
1215
}

estate/models/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
11
from . import estate_property
2+
from . import estate_property_type
3+
from . import estate_property_tag
4+
from . import estate_property_offer

estate/models/estate_property.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from dateutil.relativedelta import relativedelta
33

44

5-
class RecurringPlan(models.Model):
5+
class EstateProperty(models.Model):
66
_name = "estate.property"
77
_description = "A specific property"
88

@@ -42,3 +42,9 @@ class RecurringPlan(models.Model):
4242
copy=False,
4343
default='new'
4444
)
45+
property_type_id = fields.Many2one('estate.property.type', string='Property Type')
46+
salesperson_id = fields.Many2one('res.users', string='Salesperson', default=lambda self: self.env.uid)
47+
buyer_id = fields.Many2one('res.partner', string='Buyer', copy=False)
48+
tag_ids = fields.Many2many('estate.property.tag', string='Tags')
49+
offer_ids = fields.One2many('estate.property.offer', 'property_id', string='Offers')
50+
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from odoo import fields, models
2+
3+
4+
class EstatePropertyType(models.Model):
5+
_name = 'estate.property.offer'
6+
_description = "An offer made on a property"
7+
8+
price = fields.Float(string='Price')
9+
status = fields.Selection(copy=False, selection=[
10+
('accepted', 'Accepted'),
11+
('refused', 'Refused'),
12+
],)
13+
partner_id = fields.Many2one('res.partner', string='Partner', required=True)
14+
property_id = fields.Many2one('estate.property', string='Property', required=True)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from odoo import fields, models
2+
3+
4+
class EstatePropertyType(models.Model):
5+
_name = 'estate.property.tag'
6+
_description = "A property tag"
7+
8+
name = fields.Char(string='Tag Name', required=True)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from odoo import fields, models
2+
3+
4+
class EstatePropertyType(models.Model):
5+
_name = 'estate.property.type'
6+
_description = "A type of property"
7+
8+
name = fields.Char(string='Title', required=True)
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
11
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
2-
access.estate.property.user,access_estate_property_user,estate.model_estate_property,base.group_user,1,1,1,1
2+
access.estate.property.user,access_estate_property_user,estate.model_estate_property,base.group_user,1,1,1,1
3+
access.estate.property.type.user,access_estate_property_type_user,estate.model_estate_property_type,base.group_user,1,1,1,1
4+
access.estate.property.tag.user,access_estate_property_tag_user,estate.model_estate_property_tag,base.group_user,1,1,1,1
5+
access.estate.property.offer.user,access_estate_property_offer_user,estate.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,8 +1,12 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<odoo>
33
<menuitem id="estate_property_menu_root" name="Estate Properties">
4-
<menuitem id="estate_properties_menu" name="Properties">
5-
<menuitem id="estate_property_action" action="estate_property_action"/>
4+
<menuitem id="estate_properties_menu" name="Advertisements">
5+
<menuitem id="estate_property_menu_action" action="estate_property_action"/>
6+
</menuitem>
7+
<menuitem id="estate_properties_settings_menu" name="Settings">
8+
<menuitem id="estate_property_type_menu_action" action="estate_property_type_action"/>
9+
<menuitem id="estate_property_tag_menu_action" action="estate_property_tag_action"/>
610
</menuitem>
711
</menuitem>
812
</odoo>
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<odoo>
3+
<record id="estate_property_offer_list_view" model="ir.ui.view">
4+
<field name="name">estate.property.offer.list</field>
5+
<field name="model">estate.property.offer</field>
6+
<field name="arch" type="xml">
7+
<list string="Offers">
8+
<field name="price"/>
9+
<field name="partner_id"/>
10+
<field name="status"/>
11+
</list>
12+
</field>
13+
</record>
14+
15+
<record id="estate_property_offer_form_view" model="ir.ui.view">
16+
<field name="name">estate.property.offer.form</field>
17+
<field name="model">estate.property.offer</field>
18+
<field name="arch" type="xml">
19+
<form string="Properties">
20+
<sheet>
21+
<h1 class="mb32">
22+
<field name="property_id" class="mb16"/>
23+
</h1>
24+
<group>
25+
<field name="price"/>
26+
<field name="partner_id"/>
27+
<field name="status"/>
28+
</group>
29+
</sheet>
30+
</form>
31+
</field>
32+
</record>
33+
</odoo>
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<odoo>
3+
<record id="estate_property_tag_action" model="ir.actions.act_window">
4+
<field name="name">View Property Tags</field>
5+
<field name="res_model">estate.property.tag</field>
6+
<field name="view_mode">list,form</field>
7+
</record>
8+
</odoo>

0 commit comments

Comments
 (0)