Skip to content

Commit 8d01b45

Browse files
committed
[IMP] estate: Added demo data
I have added demo data and started working on PDF reports.
1 parent a4b2e36 commit 8d01b45

23 files changed

+263
-114
lines changed

estate/__init__.py

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1 @@
1-
from . import models
2-
3-
4-
1+
from . import models

estate/__manifest__.py

+10-8
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,26 @@
11
{
22
'name': 'estate',
3-
43
'category': 'real estate',
5-
64
'summary': 'create a estate property',
7-
85
'website': 'https://www.odoo.com',
9-
106
'depends': ['base'],
117
'installable': True,
128
'application': True,
139
'license': 'LGPL-3',
14-
1510
'data': [
1611
'security/ir.model.access.csv',
1712
'views/estate_property_views.xml',
13+
'views/estate_property_offer_views.xml',
1814
'views/estate_property_type_views.xml',
1915
'views/estate_property_tags_views.xml',
20-
'views/estate_property_offer_views.xml',
21-
'views/estate_menus.xml'
16+
'views/estate_property_resusers_views.xml',
17+
'views/estate_menus.xml',
18+
'data/estate_property_type_data.xml',
19+
'report/ estate_property_reports.xml',
20+
'report/ estate_property_templates.xml'
21+
],
22+
'demo':[
23+
'demo/estate_demo_data.xml',
24+
'demo/estate_offer_demo_data.xml',
2225
],
23-
2426
}
+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<odoo>
3+
<record id="property_type_residential" model="estate.property.type">
4+
<field name="name">Residential</field>
5+
</record>
6+
<record id="property_type_commercial" model="estate.property.type">
7+
<field name="name">Commercial</field>
8+
</record>
9+
<record id="property_type_industrial" model="estate.property.type">
10+
<field name="name">Industrial</field>
11+
</record>
12+
<record id="property_type_land" model="estate.property.type">
13+
<field name="name">Land</field>
14+
</record>
15+
</odoo>

estate/demo/estate_demo_data.xml

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<odoo>
3+
<record id="estate_property_big_villa" 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="estate_property_trailer_home" 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="bedrooms">1</field>
27+
<field name="living_area">10</field>
28+
<field name="facades">4</field>
29+
<field name="garage">False</field>
30+
<field name="garden">False</field>
31+
</record>
32+
<record id="estate_property_modern_apartment" model="estate.property">
33+
<field name="name">Modern Apartment</field>
34+
<field name="expected_price" eval="500000"/>
35+
<field name="offer_ids" eval="[(0, 0, {
36+
'partner_id': ref('base.res_partner_10'),
37+
'price': 620000,
38+
'validity': 15,
39+
}), (0, 0, {
40+
'partner_id': ref('base.res_partner_12'),
41+
'price': 630000,
42+
'validity': 10,
43+
})]"/>
44+
</record>
45+
</odoo>
+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<odoo>
3+
<record id="offer_azure_10000" model="estate.property.offer">
4+
<field name="partner_id" ref="base.res_partner_10" />
5+
<field name="property_id" ref="estate.estate_property_big_villa" />
6+
<field name="price">10000</field>
7+
<field name="validity">14</field>
8+
</record>
9+
10+
<record id="offer_azure_1500000" model="estate.property.offer">
11+
<field name="partner_id" ref="base.res_partner_12" />
12+
<field name="property_id" ref="estate.estate_property_big_villa" />
13+
<field name="price">1500000</field>
14+
<field name="validity">14</field>
15+
</record>
16+
17+
<record id="offer_deco_1500001" model="estate.property.offer">
18+
<field name="partner_id" ref="base.res_partner_18" />
19+
<field name="property_id" ref="estate.estate_property_big_villa" />
20+
<field name="price">1500001</field>
21+
<field name="validity">14</field>
22+
</record>
23+
</odoo>

estate/models/__init__.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from . import estate_property
2-
from . import estate_property_type
3-
from . import estate_property_tags
42
from . import estate_property_offer
3+
from . import estate_property_resusers
4+
from . import estate_property_tags
5+
from . import estate_property_type

estate/models/estate_property.py

+16-27
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
1-
from odoo import models, fields
2-
from datetime import timedelta, date
31
from odoo import models, fields, api
2+
from datetime import timedelta, date
43
from odoo.exceptions import UserError
54
from odoo.exceptions import ValidationError
65
from odoo.tools.float_utils import float_compare, float_is_zero
76

87

9-
108
class EstateProperty(models.Model):
119
_name = "estate.property"
1210
_description = "Real Estate Property"
1311
_order = 'id desc'
12+
1413
name = fields.Char(required=True)
1514
description = fields.Text(string="Description")
1615
postcode = fields.Char(string="Postcode")
@@ -35,22 +34,18 @@ class EstateProperty(models.Model):
3534
)
3635
state = fields.Selection(selection=[
3736
('new', 'New'),
38-
('offer_received', 'Offer Received'),
37+
('offer_received', 'Offer Received'),
3938
('offer_accepted', 'Offer Accepted'),
4039
('sold', 'Sold'),
4140
('cancelled', 'Cancelled'),
4241
], default='new', string="Status", copy=False)
43-
property_type_id = fields.Many2one('estate.property.type', string="Property Type",required=True,
42+
property_type_id = fields.Many2one('estate.property.type', string="Property Type",
4443
options={'no_create': True, 'no_edit': True})
45-
buyer_id = fields.Many2one('res.partner', string="Buyer")
44+
buyer_id = fields.Many2one('res.partner', string="Buyer",copy=False)
4645
seller_id = fields.Many2one('res.users', string="Salesperson", default=lambda self: self.env.user,required=False)
4746
status = fields.Selection([('accepted', 'Accepted'), ('refused', 'Refused')], string="Status")
48-
partner_id = fields.Many2one('res.partner', string="Partner",required=True, ondelete='restrict')
49-
salesperson = fields.Char(string = "Salesperson", required=True)
50-
buyer = fields.Char(string = "Buyers", required=True)
47+
partner_id = fields.Many2one('res.partner', string="Partner", ondelete='restrict')
5148
price = fields.Float(string="Price")
52-
partners = fields.Char(string = "Partner", required=True)
53-
tag_ids = fields.Many2one('estate.property.tag' , string="Tags")
5449
total_area = fields.Float(string="Total Area (sqm)", compute="_compute_total_area", store=True,copy=False)
5550
best_offers = fields.Float(string="Best Offers")
5651
offer_ids = fields.One2many(
@@ -85,12 +80,14 @@ def _onchange_garden(self):
8580
self.garden_orientation = False
8681

8782
def action_cancel(self):
83+
self.state = 'canceled'
8884
for record in self:
8985
if record.state == 'sold':
9086
raise UserError("A sold property cannot be cancelled.")
9187
record.state = 'cancelled'
9288

9389
def action_sold(self):
90+
self.state = 'sold'
9491
for record in self:
9592
if record.state == 'cancelled':
9693
raise UserError("A cancelled property cannot be sold.")
@@ -130,30 +127,22 @@ def _check_selling_price(self):
130127
raise ValidationError(
131128
"The selling price cannot be lower than 90% of the expected price."
132129
)
133-
def action_sold(self):
134-
self.state = 'sold'
135-
136-
def action_cancel(self):
137-
self.state = 'canceled'
138-
139-
140-
@api.depends('state')
141-
def _compute_offer_received(self):
130+
131+
@api.depends('state')
132+
def _compute_offer_received(self):
142133
for record in self:
143134
record.offer_received = record.state == 'offer_received'
144135

145-
@api.depends('state')
146-
def _compute_offer_accepted(self):
136+
@api.depends('state')
137+
def _compute_offer_accepted(self):
147138
for record in self:
148139
record.offer_accepted = record.state == 'offer_accepted'
149140

150-
@api.ondelete(at_uninstall=False)
151-
def _check_state_on_delete(self):
141+
@api.ondelete(at_uninstall=False)
142+
def _check_state_on_delete(self):
152143
for record in self:
153144
if record.state not in ('new', 'cancelled'):
154145
raise UserError(
155146
"You cannot delete a property unless it is in 'New' or 'Cancelled' state."
156147
)
157-
158-
159-
148+

estate/models/estate_property_offer.py

+2-13
Original file line numberDiff line numberDiff line change
@@ -19,24 +19,15 @@ class EstatePropertyOffer(models.Model):
1919
readonly=True,
2020
store=True
2121
)
22-
buyer_id = fields.Many2one(
23-
'res.partner',
24-
string="Buyer",
25-
required=True
26-
)
27-
seller_id = fields.Many2one(
28-
'res.partner',
29-
string="Seller"
30-
)
22+
buyer_id = fields.Many2one('res.partner', string="Buyer", required=False)
23+
seller_id = fields.Many2one('res.partner', string="Salesperson", required=False)
3124
validity = fields.Integer(string="Validity (days)")
3225
date_deadline = fields.Date(
3326
string="Deadline",
3427
compute="_compute_date_deadline",
3528
inverse="_inverse_date_deadline",
3629
store=True
3730
)
38-
def action_offer_accepted(self):
39-
pass
4031

4132
@api.depends('create_date', 'validity')
4233
def _compute_date_deadline(self):
@@ -59,8 +50,6 @@ def action_offer_accepted(self):
5950
record.status = 'accepted'
6051
record.property_id.selling_price = record.price
6152
record.property_id.buyer_id = record.partner_id
62-
63-
# set status 'refused' in the other offers of that particular property
6453
for offer in record.property_id.offer_ids:
6554
if offer.id != record.id:
6655
offer.status = 'refused'

estate/models/estate_property_resusers.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
class ResUsers(models.Model):
33
_inherit = 'res.users'
44

5+
56
property_ids = fields.One2many(
67
'estate.property',
78
'seller_id',
89
string="Properties",
9-
domain=[('state', 'in', ['new', 'offer_received'])]
10-
)
10+
domain=[('state', 'in', ['new', 'offer_received'])] )

estate/models/estate_property_tags.py

-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ class EstatePropertyTag(models.Model):
1313
'tag_id2',
1414
string="Related Tags"
1515
)
16-
1716
_sql_constraints = [
1817
('unique_tag_name', 'UNIQUE(name)',
1918
'The tag name must be unique.')

estate/models/estate_property_type.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ class EstatePropertyType(models.Model):
44
_description = 'Real Estate Property Type'
55
_order = "sequence,name"
66

7-
sequence = fields.Integer(default=10)
7+
sequence = fields.Integer()
88
name = fields.Char(string="Type Name", required=True)
99
property_ids = fields.One2many('estate.property', 'property_type_id', string="Properties")
1010
offer_ids = fields.One2many('estate.property.offer', 'property_type_id', string="Offers")
@@ -15,7 +15,6 @@ class EstatePropertyType(models.Model):
1515
'The property type name must be unique.')
1616
]
1717

18-
1918
@api.depends('offer_ids')
2019
def _compute_offer_count(self):
2120
for record in self:
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<odoo>
2+
<record id="property_offer_report_action" model="ir.actions.report">
3+
<field name="name">Property Offers Report</field>
4+
<field name="model">estate.property</field>
5+
<field name="report_type">qweb-pdf</field>
6+
<field name="report_name">estate.report_property_offers</field>
7+
<field name="report_file">estate.report_property_offers</field>
8+
<field name="binding_model_id" ref="model_estate_property"/>
9+
</record>
10+
</odoo>
11+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<odoo>
2+
<template id="report_property_offers">
3+
<t t-foreach="docs" t-as="doc">
4+
<t t-call="web.html_container">
5+
<t t-call="web.external_layout">
6+
<div class="page">
7+
<h2>Property Offers Report</h2>
8+
<p><strong>Property Name:</strong> <t t-esc="doc.name"/></p>
9+
<p><strong>Expected Price:</strong> <t t-esc="doc.expected_price"/></p>
10+
11+
<t t-if="doc.offer_ids">
12+
<table class="table table-sm">
13+
<thead>
14+
<tr>
15+
<th>Buyer</th>
16+
<th>Offer Price</th>
17+
<th>Validity (Days)</th>
18+
<th>create_date</th>
19+
<th>Status</th>
20+
</tr>
21+
</thead>
22+
<tbody>
23+
<t t-foreach="doc.offer_ids" t-as="offer">
24+
<tr>
25+
<td><t t-esc="offer.partner_id.name"/></td>
26+
<td><t t-esc="offer.price"/></td>
27+
<td><t t-esc="offer.validity"/></td>
28+
<td><t t-esc="offer.create_date"/></td>
29+
<td><t t-esc="offer.state"/></td>
30+
</tr>
31+
</t>
32+
</tbody>
33+
</table>
34+
</t>
35+
<t t-else="">
36+
<p>No offers yet for this property.</p>
37+
</t>
38+
</div>
39+
</t>
40+
</t>
41+
</t>
42+
</template>
43+
</odoo>

estate/security/ir.model.access.csv

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +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,model_estate_property,base.group_user,1,1,1,1
2+
estate.access_property_user,access_estate_property_user,model_estate_property,base.group_user,1,1,1,1
33
estate.access_estate_property_type,access_estate_property_type,estate.model_estate_property_type,base.group_user,1,1,1,1
44
estate.access_estate_property_offer,access_estate_property_offer,estate.model_estate_property_offer,base.group_user,1,1,1,1
55
estate.access_estate_property_tag,access_estate_property_tag,estate.model_estate_property_tag,base.group_user,1,1,1,1

estate/views/estate_menus.xml

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<odoo>
3-
43
<menuitem id="estate_menu_root" name="Estate"/>
54
<menuitem id="estate_properties_menu" name="Advertisements" parent="estate_menu_root" action="estate_property_action"/>
65
<menuitem id="estate_properties_menu_two" name="Settings" parent="estate_menu_root"/>

0 commit comments

Comments
 (0)