Skip to content

Commit b473952

Browse files
committed
[IMP] estate: added automation logic
Enhanced property model and views with new fields and improved form layout
1 parent c9b3913 commit b473952

File tree

3 files changed

+99
-46
lines changed

3 files changed

+99
-46
lines changed

Estate/__manifest__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
'license': 'AGPL-3',
99
'data': [
1010
'security/ir.model.access.csv',
11-
'views/estate_property_views.xml',
1211
'views/estate_property_type_views.xml',
1312
'views/estate_property_offer_views.xml',
1413
'views/estate_property_tags_views.xml',
14+
'views/estate_property_views.xml',
1515
'views/estate_menus.xml',
1616
],
1717
}

Estate/models/estate_property.py

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11

2-
from odoo import models, fields
2+
from odoo import models, fields , api
3+
from datetime import timedelta
34

45

56
class EstateProperty(models.Model):
@@ -9,7 +10,7 @@ class EstateProperty(models.Model):
910
name = fields.Char(required=True)
1011
description = fields.Text()
1112
postcode = fields.Char()
12-
date_availability = fields.Date()
13+
create_date = fields.Date()
1314
expected_price = fields.Float(required=True)
1415
selling_price = fields.Float()
1516
bedrooms = fields.Integer()
@@ -43,3 +44,42 @@ class EstateProperty(models.Model):
4344
salesperson_id = fields.Many2one("res.users", string="Salesperson")
4445
tag_ids = fields.Many2many("estate.property.tag", string="Tags")
4546
offer_ids = fields.One2many("estate.property.offer", "property_id", string="Offers")
47+
total_area = fields.Float(compute="_compute_total_area", string="Total Area", store=True)
48+
best_price = fields.Float(compute="_compute_best_price", string="Best Offer", store=True)
49+
validity_days = fields.Integer(default=7)
50+
deadline_date = fields.Date(compute="_compute_validity_date", string="Validity Date", store=True)
51+
@api.depends('living_area', 'garden_area')
52+
def _compute_total_area(self):
53+
for record in self:
54+
record.total_area = record.living_area + (record.garden_area or 0)
55+
@api.depends('offer_ids.price')
56+
def _compute_best_price(self):
57+
for record in self:
58+
if record.offer_ids:
59+
record.best_price = max(record.offer_ids.mapped('price'))
60+
else:
61+
record.best_price = 0.0
62+
63+
@api.depends('create_date', 'validity_days')
64+
def _compute_validity_date(self):
65+
if self.create_date:
66+
for record in self:
67+
record.deadline_date = record.create_date + timedelta(days=record.validity_days)
68+
else:
69+
for record in self:
70+
record.deadline_date = fields.Date.today() + timedelta(days=record.validity_days)
71+
72+
@api.onchange('garden_area')
73+
def _onchange_garden(self):
74+
for record in self:
75+
if self.garden_area == 10:
76+
self.garden_orientation = 'north'
77+
if self.garden_area == 20:
78+
self.garden_orientation = 'south'
79+
if self.garden_area == 30:
80+
self.garden_orientation = 'east'
81+
if self.garden_area == 40:
82+
self.garden_orientation = 'west'
83+
else:
84+
self.garden_area = 0
85+
self.garden_orientation = False

Estate/views/estate_property_views.xml

Lines changed: 56 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -30,51 +30,64 @@
3030
</record>
3131

3232

33+
<record id="estate_property_form_view" model="ir.ui.view">
34+
<field name="name">estate.property.form</field>
35+
<field name="model">estate.property</field>
36+
<field name="arch" type="xml">
37+
<form string="Property">
38+
<sheet>
39+
<h1>
40+
<field name="name" placeholder="Property Name"/>
41+
</h1>
42+
<group col="2">
43+
<group string="Property Details">
44+
<field name="postcode"/>
45+
<field name="create_date"/>
46+
<field name="expected_price"/>
47+
<field name="selling_price"/>
48+
<field name="bedrooms"/>
49+
<field name="living_area"/>
50+
<field name="facades"/>
51+
<field name="garage"/>
52+
<field name="garden"/>
53+
<field name="garden_area"/>
54+
<field name="garden_orientation"/>
55+
</group>
3356

34-
<record id="estate_property_form_view" model="ir.ui.view">
35-
<field name="name">estate.property.form</field>
36-
<field name="model">estate.property</field>
37-
<field name="arch" type="xml">
38-
<form string="Property">
39-
<sheet>
40-
<h1>
41-
<field name="name"/>
42-
</h1>
43-
<group>
44-
<field name="postcode"/>
45-
<field name="date_availability"/>
46-
<field name="expected_price"/>
47-
<field name="selling_price"/>
48-
<field name="bedrooms"/>
49-
<field name="living_area"/>
50-
<field name="facades"/>
51-
<field name="garage"/>
52-
<field name="garden"/>
53-
<field name="garden_area"/>
54-
<field name="garden_orientation"/>
55-
<field name="state"/>
57+
<group string="Extra Information">
58+
<field name="buyer_id"/>
59+
<field name="salesperson_id"/>
60+
<field name="property_type_id"/>
61+
<field name="tag_ids" widget="many2many_tags"/>
62+
<separator string="Summary"/>
63+
<field name="total_area" readonly="1"/>
64+
<field name="best_price" readonly="1"/>
65+
<field name="state"/>
66+
<field name="validity_days"/>
67+
<field name= "deadline_date"/>
5668
</group>
57-
<notebook>
58-
<page string="Description">
59-
<field name="description"/>
60-
</page>
61-
<page string="Tags">
62-
<field name="tag_ids" widget="many2many_tags"/>
63-
</page>
64-
<page string="Offers">
65-
<field name="offer_ids">
66-
<list>
67-
<field name="price"/>
68-
<field name="partner_id"/>
69-
<field name="status"/>
70-
</list>
71-
</field>
72-
</page>
73-
</notebook>
74-
</sheet>
75-
</form>
76-
</field>
77-
</record>
69+
70+
</group>
71+
72+
<notebook>
73+
<page string="Description">
74+
<field name="description" placeholder="Add property description..."/>
75+
</page>
76+
<page string="Offers">
77+
<field name="offer_ids">
78+
<list editable="bottom">
79+
<field name="partner_id"/>
80+
<field name="price"/>
81+
<field name="status"/>
82+
</list>
83+
</field>
84+
</page>
85+
</notebook>
86+
</sheet>
87+
</form>
88+
</field>
89+
</record>
90+
7891

7992
<record id="estate_property_form_action" model="ir.actions.act_window">
8093
<field name="name">Property(Form)</field>

0 commit comments

Comments
 (0)