Skip to content

Commit ffb8141

Browse files
author
Carolina Dziubek
committed
[IND] Add estate module
1 parent 93858d1 commit ffb8141

14 files changed

Lines changed: 386 additions & 0 deletions

real_estate/.vscode/settings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"python.languageServer": "None"
3+
}

real_estate/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from . import models

real_estate/__manifest__.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
##############################################################################
2+
#
3+
# Copyright (C) 2015 ADHOC SA (http://www.adhoc.com.ar)
4+
# All Rights Reserved.
5+
#
6+
# This program is free software: you can redistribute it and/or modify
7+
# it under the terms of the GNU Affero General Public License as
8+
# published by the Free Software Foundation, either version 3 of the
9+
# License, or (at your option) any later version.
10+
#
11+
# This program is distributed in the hope that it will be useful,
12+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
# GNU Affero General Public License for more details.
15+
#
16+
# You should have received a copy of the GNU Affero General Public License
17+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
18+
#
19+
##############################################################################
20+
{
21+
"name": "Real Estate Management",
22+
"version": "18.0.1.0.0",
23+
"author": "ADHOC SA",
24+
"website": "www.adhoc.com.ar",
25+
"license": "AGPL-3",
26+
"depends": [
27+
"sale_management",
28+
],
29+
"data": [
30+
"security/ir.model.access.csv",
31+
"views/estate_property_views.xml",
32+
"views/estate_property_types_views.xml",
33+
"views/estate_property_tags_views.xml",
34+
"views/estate_property_offer_views.xml",
35+
"views/estate_menus.xml",
36+
],
37+
"demo": [],
38+
"installable": True,
39+
"auto_install": False,
40+
"application": True,
41+
}

real_estate/models/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
from . import estate_property
2+
from . import estate_property_type
3+
from . import estate_property_tags
4+
from . import estate_property_offer
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
from odoo import api, fields, models
2+
3+
4+
class EstateProperty(models.Model):
5+
_name = "estate.property"
6+
_description = "Real Estate Properties"
7+
name = fields.Char(required=True)
8+
description = fields.Text()
9+
postcode = fields.Char()
10+
date_availability = fields.Date(copy=False, default=lambda self: fields.Date.add(fields.Date.today(), months=3))
11+
expected_price = fields.Float(required=True)
12+
selling_price = fields.Float(readonly=True, copy=False)
13+
bedrooms = fields.Integer(default=2)
14+
living_area = fields.Integer()
15+
facades = fields.Integer()
16+
garage = fields.Boolean()
17+
garden = fields.Boolean()
18+
# garden_area = fields.Boolean()
19+
garden_area_new = fields.Float(string="Garden Area")
20+
active = fields.Boolean(default=True)
21+
garden_orientation = fields.Selection(
22+
[("north", "North"), ("south", "South"), ("east", "East"), ("west", "West")],
23+
)
24+
state = fields.Selection(
25+
[
26+
("new", "New"),
27+
("offer_received", "Offer Received"),
28+
("offer_accepted", "Offer Accepted"),
29+
("sold", "Sold"),
30+
("canceled", "Canceled"),
31+
],
32+
required=True,
33+
copy=False,
34+
default="new",
35+
)
36+
37+
property_type_id = fields.Many2one("estate.property.type", string="Property Type")
38+
sales_man = fields.Many2one("res.partner", string="Sales man", default=lambda self: self.env.user)
39+
buyer = fields.Many2one("res.partner", string="Buyer")
40+
tags_id = fields.Many2many("estate.property.tags", string="Tags")
41+
offer_ids = fields.One2many("estate.property.offer", "property_id")
42+
total_area = fields.Float(compute="_compute_total_area")
43+
best_price = fields.Float(compute="_compute_best_price")
44+
45+
@api.depends("living_area", "garden_area_new")
46+
def _compute_total_area(self):
47+
for rec in self:
48+
rec.total_area = rec.living_area + rec.garden_area_new
49+
50+
@api.depends("offer_ids.price")
51+
def _compute_best_price(self):
52+
for rec in self:
53+
prices = rec.offer_ids.mapped("price")
54+
rec.best_price = max(prices) if prices else 0
55+
56+
@api.onchange("garden")
57+
def _onchange_garden(self):
58+
if self.garden:
59+
self.garden_area_new = 10
60+
self.garden_orientation = "north"
61+
else:
62+
self.garden_area_new = 0
63+
self.garden_orientation = 0
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from odoo import api, fields, models
2+
3+
4+
class EstatePropertyOffer(models.Model):
5+
_name = "estate.property.offer"
6+
_description = "Estate Property Offer"
7+
name = fields.Char(required=True)
8+
price = fields.Float()
9+
status = fields.Selection(
10+
[
11+
("accepted", "Accepted"),
12+
("refused", "Refused"),
13+
],
14+
copy=False,
15+
)
16+
partner_id = fields.Many2one("res.partner", string="Socio ID", required=True)
17+
property_id = fields.Many2one("estate.property", string="Property ID", required=True)
18+
validity = fields.Integer(default=7)
19+
date_deadline = fields.Date(compute="_compute_date_deadline", inverse="_inverse_date_deadline")
20+
21+
@api.depends("create_date", "validity")
22+
def _compute_date_deadline(self):
23+
for rec in self:
24+
rec.date_deadline = fields.Date.add(rec.date_deadline, days=rec.validity) if rec.create_date else False
25+
26+
def _inverse_date_deadline(self):
27+
for rec in self:
28+
rec.validity = (rec.date_deadline - rec.create_date()).days
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from odoo import fields, models
2+
3+
4+
class EstatePropertyTags(models.Model):
5+
_name = "estate.property.tags"
6+
_description = "Estate Property Tags"
7+
name = fields.Char(required=True)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from odoo import fields, models
2+
3+
4+
class EstatePropertyType(models.Model):
5+
_name = "estate.property.type"
6+
_description = "Estate Property Types"
7+
name = fields.Char(required=True)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
2+
real_estate.access_estate_property,access_estate_property,real_estate.model_estate_property,base.group_user,1,1,1,1
3+
real_estate.access_estate_property_type,access_estate_property_type,real_estate.model_estate_property_type,base.group_user,1,1,1,1
4+
real_estate.access_estate_property_tags,access_estate_property_tags,real_estate.model_estate_property_tags,base.group_user,1,1,1,1
5+
real_estate.access_estate_property_offer,access_estate_property_offer,real_estate.model_estate_property_offer,base.group_user,1,1,1,1

real_estate/views/estate_menus.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<odoo>
2+
<menuitem id="real_estate_menu" name="Real Estate"/>
3+
<menuitem id="advertisements_menu" name="Advertisements" parent="real_estate_menu"/>
4+
<menuitem id="properties_menu" action="estate_property_action" parent="advertisements_menu"/>
5+
<menuitem id="settings_menu" name="Settings" sequence="100" parent="real_estate_menu"/>
6+
<menuitem id="property_type_menu" action="estate_property_type_action" parent="settings_menu"/>
7+
<menuitem id="property_tags_menu" action="estate_property_tags_action" parent="settings_menu"/>
8+
</odoo>

0 commit comments

Comments
 (0)