Skip to content

Commit 5efbebc

Browse files
committed
[IMP] estate: Implemented inheritance logic
-implemented inheritance in models,views -implemented some ui changes
1 parent 43dc098 commit 5efbebc

File tree

10 files changed

+91
-71
lines changed

10 files changed

+91
-71
lines changed

Estate/__manifest__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
'views/estate_property_offer_views.xml',
1313
'views/estate_property_tags_views.xml',
1414
'views/estate_property_views.xml',
15+
'views/res_users_view.xml',
1516
'views/estate_menus.xml',
1617
],
1718
}

Estate/models/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
from . import estate_property_offer
33
from . import estate_property_type
44
from . import estate_property_tag
5+
from . import res_users

Estate/models/estate_property.py

Lines changed: 16 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
from odoo import models, fields, api
21
from datetime import timedelta
2+
3+
from odoo import models, fields, api
34
from odoo.exceptions import ValidationError
45

56

67
class EstateProperty(models.Model):
78
_name = "estate.property"
89
_description = "Real Estate Property"
910
_order = "id desc"
10-
1111
name = fields.Char(required=True)
1212
description = fields.Text()
1313
postcode = fields.Char()
@@ -20,22 +20,9 @@ class EstateProperty(models.Model):
2020
garage = fields.Boolean()
2121
garden = fields.Boolean()
2222
garden_area = fields.Integer()
23-
garden_orientation = fields.Selection([
24-
("north", "North"),
25-
("south", "South"),
26-
("east", "East"),
27-
("west", "West"),
28-
])
23+
garden_orientation = fields.Selection([("north", "North"),("south", "South"),("east", "East"),("west", "West"),])
2924
active = fields.Boolean(default=True)
30-
31-
state = fields.Selection([
32-
("new", "New"),
33-
("offer_received", "Offer Received"),
34-
("offer_accepted", "Offer Accepted"),
35-
("sold", "Sold"),
36-
("canceled", "Canceled"),
37-
], string="Status", required=True, copy=False, default="new")
38-
25+
state = fields.Selection([("new", "New"),("offer_received", "Offer Received"),("offer_accepted", "Offer Accepted"),("sold", "Sold"),("canceled", "Canceled")], required=True, copy=False , )
3926
property_type_id = fields.Many2one("estate.property.type", string="Property Type")
4027
buyer_id = fields.Many2one("res.partner", string="Buyer")
4128
salesperson_id = fields.Many2one("res.users", string="Salesperson")
@@ -44,11 +31,9 @@ class EstateProperty(models.Model):
4431
total_area = fields.Float(compute="_compute_total_area", string="Total Area", store=True)
4532
best_price = fields.Float(compute="_compute_best_price", string="Best Offer", store=True)
4633
validity_days = fields.Integer(default=7)
47-
date_deadline = fields.Date(
48-
compute="_compute_date_deadline",
49-
inverse="_inverse_date_deadline",
50-
store=True,
51-
)
34+
date_deadline = fields.Date(compute="_compute_date_deadline",inverse="_inverse_date_deadline",store=True,)
35+
property_type_id = fields.Many2one("estate.property.type", string="Property Type")
36+
5237

5338
@api.depends("living_area", "garden_area")
5439
def _compute_total_area(self):
@@ -110,21 +95,16 @@ def action_back_to_new(self):
11095
@api.constrains("selling_price", "expected_price")
11196
def _check_selling_price_ratio(self):
11297
for record in self:
113-
if record.selling_price <= 0:
114-
raise ValidationError("Selling price must be greater than or equal to 0")
11598
if record.selling_price < 0.9 * record.expected_price:
11699
raise ValidationError("Selling price must be at least 90% of the expected price")
117-
if record.expected_price < 0:
118-
raise ValidationError("Expected price must be greater than 0")
119100

120-
_check_expected_price = models.Constraint(
121-
'CHECK(expected_price < 0)',
101+
def _unlink(self):
102+
for record in self:
103+
if record.state in ["new"]:
104+
raise ValidationError("You cannot delete a new or canceled property.")
105+
return super().unlink()
106+
107+
_check_price = models.Constraint(
108+
'CHECK(expected_price > 0 AND selling_price >= 0)',
122109
'The expected price of a property must be strictly positive.'
123-
)
124-
125-
_check_selling_price = models.Constraint(
126-
'CHECK(selling_price < 0)',
127-
'The selling price of a property must be positive.'
128-
)
129-
130-
property_type_id = fields.Many2one("estate.property.type", string="Property Type")
110+
)

Estate/models/estate_property_tag.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
from odoo import models, fields, api
2-
from odoo.exceptions import ValidationError
1+
from odoo import models, fields
32

43

54
class EstatePropertyTag(models.Model):

Estate/models/estate_property_type.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,9 @@ class EstatePropertyType(models.Model):
88
_order="name desc"
99

1010
name = fields.Char(required=True)
11-
property_ids = fields.One2many(
12-
"estate.property", "property_type_id", string="Properties")
11+
property_ids = fields.One2many("estate.property", "property_type_id", string="Properties")
1312
sequence = fields.Integer('Sequence', default=7)
14-
offer_count = fields.Integer(
15-
string="Number of Offers",
16-
compute="_compute_offer_count"
17-
)
13+
offer_count = fields.Integer(string="Number of Offers",compute="_compute_offer_count")
1814

1915
@api.depends('property_ids.offer_ids')
2016
def _compute_offer_count(self):
@@ -33,4 +29,5 @@ def _check_type_name_unique(self):
3329
_check_type_name_unique_ratio = models.Constraint(
3430
'CHECK(name)',
3531
'The property name must be unique.'
36-
)
32+
)
33+

Estate/models/res_users.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from odoo import models, fields
2+
3+
4+
class ResUsers(models.Model):
5+
_inherit = "res.users"
6+
7+
estate_property_ids = fields.One2many(
8+
"estate.property", "salesperson_id", string="Properties as Salesperson"
9+
)
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
22
estate.access_estate_property,access_estate_property,model_estate_property,base.group_user,1,1,1,1
3-
3+
estate.access_estate_property_offer,access_estate_property_offer,model_estate_property_offer,base.group_user,1,1,1,1
44
estate.access_estate_property_type,access_estate_property_type,model_estate_property_type,base.group_user,1,1,1,1
5-
estate.access_estate_property_tag,access_estate_property_tag,model_estate_property_tag,base.group_user,1,1,1,1
5+
estate.access_estate_property_tag,access_estate_property_tag,model_estate_property_tag,base.group_user,1,1,1,1
6+
estate.access_res_users,access_res_users,model_res_users,base.group_user,1,1,1,1

Estate/views/estate_menus.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
<?xml version="1.0" encoding="utf-8"?>
12
<odoo>
23

34
<menuitem id="estate_root_menu" name="Estate"/>
@@ -31,4 +32,9 @@
3132
name="Property Tags"
3233
parent="menu_estate_settings"
3334
action="action_estate_property_tag" />
35+
36+
<menuitem id="menu_estate_users_action_settings"
37+
name="Users"
38+
parent="menu_estate_settings"
39+
action="action_res_users_estate_properties" />
3440
</odoo>

Estate/views/estate_property_views.xml

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,18 @@
2727
<field name="model">estate.property</field>
2828
<field name="arch" type="xml">
2929
<form string="Property">
30+
<header>
31+
<button name="action_set_next_status" string="Next" type="object"/>
32+
<button name="action_back_to_new" string="Reset to New" type="object"/>
33+
<button name="action_set_sold" string="Mark as Sold" type="object"/>
34+
<button name="action_set_canceled" string="Cancel" type="object"/>
35+
<field name="state" widget="statusbar" options="{'clickable': '1'}" statusbar_visible="new,offer_received,offer_accepted,sold,canceled"/>
36+
</header>
3037
<sheet>
3138
<h1>
3239
<field name="name" placeholder="Property Name"/>
3340
</h1>
34-
<header>
35-
<button name="action_set_next_status" string="Next" type="object"/>
36-
<button name="action_back_to_new" string="Reset to New" type="object"/>
37-
<button name="action_set_sold" string="Mark as Sold" type="object"/>
38-
<button name="action_set_canceled" string="Cancel" type="object"/>
39-
<field name="state" widget="statusbar" statusbar_visible="new,offer_received,offer_accepted,sold,canceled"/>
40-
</header>
41-
<group col="2">
41+
<group>
4242
<group string="Property Details">
4343
<field name="postcode"/>
4444
<field name="create_date"/>
@@ -52,25 +52,26 @@
5252
<field name="garden_area" invisible="garden == False"/>
5353
<field name="garden_orientation" invisible="garden == False"/>
5454
</group>
55-
56-
<group string="Extra Information">
57-
<field name="buyer_id"/>
58-
<field name="salesperson_id"/>
59-
<field name="property_type_id"/>
60-
<field name="tag_ids" widget="many2many_tags"/>
61-
<separator string="Summary"/>
62-
<field name="total_area" readonly="1"/>
63-
<field name="best_price" readonly="1"/>
64-
<field name="state"/>
65-
<field name="validity_days"/>
66-
<field name= "date_deadline"/>
67-
</group>
68-
6955
</group>
70-
7156
<notebook>
7257
<page string="Description">
73-
<field name="description" placeholder="Add property description..."/>
58+
<field name="description" placeholder="Add property description..."/>
59+
</page>
60+
<page string="Details">
61+
<form>
62+
<group string="Details">
63+
<field name="buyer_id"/>
64+
<field name="salesperson_id"/>
65+
<field name="property_type_id"/>
66+
<field name="tag_ids" widget="many2many_tags"/>
67+
<separator string="Summary"/>
68+
<field name="total_area" readonly="1"/>
69+
<field name="best_price" readonly="1"/>
70+
<field name="state"/>
71+
<field name="validity_days"/>
72+
<field name= "date_deadline"/>
73+
</group>
74+
</form>
7475
</page>
7576
<page string="Offers">
7677
<field name="offer_ids">

Estate/views/res_users_view.xml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<odoo>
2+
<record id="view_users_form_inherit_properties" model="ir.ui.view">
3+
<field name="name">res.users.form.inherit.properties</field>
4+
<field name="model">res.users</field>
5+
<field name="inherit_id" ref="base.view_users_form"/>
6+
<field name="arch" type="xml">
7+
<xpath expr="//field[@name='company_id']" position="after">
8+
<field name="estate_property_ids" widget="one2many_list" string="Properties as Salesperson">
9+
<list>
10+
<field name="name"/>
11+
<field name="expected_price"/>
12+
<field name="state"/>
13+
</list>
14+
</field>
15+
</xpath>
16+
</field>
17+
</record>
18+
19+
<record id="action_res_users_estate_properties" model="ir.actions.act_window">
20+
<field name="name">Users</field>
21+
<field name="res_model">res.users</field>
22+
<field name="view_mode">form</field>
23+
<field name="view_id" ref="view_users_form_inherit_properties"/>
24+
</record>
25+
</odoo>

0 commit comments

Comments
 (0)