Skip to content

Commit b9a1488

Browse files
committed
[IMP] estate: Property Maintenance Requests Task(1,2,3) done
1 parent c80da02 commit b9a1488

12 files changed

+135
-10
lines changed

estate/__manifest__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
'security/ir.model.access.csv',
1313
'views/estate_property_tag.xml',
1414
'views/estate_property_views.xml',
15+
'views/estate_property_offer.xml',
1516
'views/estate_property_type.xml',
1617
'views/estate_menus.xml',
18+
'views/estate_maintenance.xml'
1719
],
1820
}

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_type
33
from . import estate_property_tag
44
from . import estate_property_offer
5+
from .import estate_property_maintenance

estate/models/estate_property.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,15 @@ class homePlan(models.Model):
2626
garden_area = fields.Integer("Garden area", default=0)
2727
total_area = fields.Float("Total area", compute='_compute_total_area', store=True)
2828
best_price = fields.Float("Best price", compute='_compute_best_price', store=True)
29+
total_maintenance_cost = fields.Float( compute='_compute_total_maintenance', store=True)
2930
active = fields.Boolean("Active", default=True)
3031
property_type_id = fields.Many2one("estate.property.type")
3132
salesman_id = fields.Many2one("res.users", default=lambda self: self.env.user)
3233
buyer_id = fields.Many2one("res.partner", copy=False)
3334
property_tag_ids = fields.Many2many("estate.property.tag")
3435
offer_ids = fields.One2many("estate.property.offer", "property_id")
3536
sequence = fields.Integer('Sequence', help="Used to order stages. Lower is better.")
36-
37-
37+
maintenance_ids = fields.One2many("estate.property.maintenance", "property_id")
3838
state = fields.Selection(
3939
[
4040
('new', "New"),
@@ -93,6 +93,8 @@ def action_sold(self):
9393
for record in self:
9494
if record.state == 'cancelled':
9595
raise UserError(message="You can't sold once you have cancelled")
96+
elif record.maintenance_ids.filtered(lambda r : r.status != 'Done'):
97+
raise UserError("maintamce remain")
9698
else:
9799
record.state = 'sold'
98100
return True
@@ -105,3 +107,10 @@ def action_Cancel(self):
105107
record.state = 'cancelled'
106108

107109
return True
110+
111+
@api.depends('maintenance_ids.cost')
112+
def _compute_total_maintenance(self):
113+
for record in self:
114+
record.total_maintenance_cost = sum(record.maintenance_ids.mapped('cost'))
115+
116+
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from odoo import fields, models, api
2+
from odoo.exceptions import UserError, ValidationError
3+
4+
class EstatePropertyMaintenanceRequest(models.Model):
5+
_name = 'estate.property.maintenance'
6+
_description = "this is property maintenance model"
7+
8+
title = fields.Char("Title", required=True, default="Unknown")
9+
cost = fields.Float('Price')
10+
status = fields.Selection(
11+
[
12+
('new', "New"),
13+
('approved', "Approved"),
14+
('Done', "Done"),
15+
],
16+
default='new',
17+
)
18+
19+
property_id = fields.Many2one('estate.property', required=True)
20+
21+
# _check_cost = models.Constraint(
22+
# 'CHECK(cost > 0)', "The expected cost must be Strictly positive"
23+
# )
24+
25+
@api.constrains('status')
26+
def _check_cost(self):
27+
for record in self:
28+
if record.status == 'approved' and record.cost <= 0:
29+
raise ValidationError(
30+
"The Cost must be Positive"
31+
)
32+
33+
def action_approved(self):
34+
self.status = 'Done'
35+

estate/models/estate_property_offer.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,17 @@ class EstatePropertyOffer(models.Model):
1616
)
1717
partner_id = fields.Many2one('res.partner', required=True)
1818
property_id = fields.Many2one('estate.property', readonly=True)
19+
property_type_id = fields.Many2one(
20+
"estate.property.type",
21+
related="property_id.property_type_id",
22+
store=True,
23+
string="Property Type"
24+
)
1925

2026
_check_offer_price = models.Constraint(
2127
'CHECK( price > 0)', "The offer price must be Strictly positive"
2228
)
23-
29+
2430
@api.depends('validity')
2531
def _compute_date_deadline(self):
2632
for record in self:
@@ -43,8 +49,7 @@ def action_confirm(self):
4349
record.property_id.state = 'offer_accepted'
4450
for offer in record.property_id.offer_ids:
4551
if record.id != offer.id:
46-
offer.status="refused"
47-
52+
offer.status='refused'
4853
return True
4954

5055
def action_cancel(self):

estate/models/estate_property_type.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from odoo import fields, models
1+
from odoo import fields, models, api
22

33
class EstatePropertyType(models.Model):
44
_name = 'estate.property.type'
@@ -11,3 +11,18 @@ class EstatePropertyType(models.Model):
1111
_check_unique_propertyType = models.Constraint(
1212
"UNIQUE(name)", "The Property type must be unique"
1313
)
14+
offer_ids = fields.One2many(
15+
"estate.property.offer",
16+
"property_type_id",
17+
string="Offers"
18+
)
19+
20+
offer_count = fields.Integer(
21+
string="Offer count",
22+
compute="_compute_offer_count"
23+
)
24+
25+
@api.depends("offer_ids")
26+
def _compute_offer_count(self):
27+
for record in self:
28+
record.offer_count = len(record.offer_ids)

estate/security/ir.model.access.csv

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
22
access_estate_property,access_estate_property,model_estate_property,base.group_user,1,1,1,1
33
access_estate_property_type,access_estate_property_type,model_estate_property_type,base.group_user,1,1,1,1
44
access_estate_property_tag,access_estate_property_tag,model_estate_property_tag,base.group_user,1,1,1,1
5-
access_estate_property_offer,access_estate_property_offer,model_estate_property_offer,base.group_user,1,1,1,1
5+
access_estate_property_offer,access_estate_property_offer,model_estate_property_offer,base.group_user,1,1,1,1
6+
access_estate_property_maintenance,access_estate_property_maintenance,model_estate_property_maintenance,base.group_user,1,1,1,1
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0"?>
2+
<odoo>
3+
<record id="model_maintenance_action" model="ir.actions.act_window">
4+
<field name="name">maintenance</field>
5+
<field name="res_model">estate.property.maintenance</field>
6+
<field name="view_mode">list,form</field>
7+
</record>
8+
<record id="estate_property_tag_view_list" model="ir.ui.view">
9+
<field name="name">estate.property.maintenance.list</field>
10+
<field name="model">estate.property.maintenance</field>
11+
<field name="arch" type="xml" >
12+
<list string="Channel" editable="bottom" >
13+
<field string="title" name="title"/>
14+
<field string="cost" name="cost"/>
15+
<field string="title" name="status"/>
16+
</list>
17+
</field>
18+
</record>
19+
</odoo>

estate/views/estate_menus.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<menuitem id="menu_root" name="Estate">
44
<menuitem id="first_level_menu" name="Menu">
55
<menuitem id="estate_model_menu_action" action="model_menu_action"/>
6+
<menuitem id="estate_model_maintenance" action="model_maintenance_action"/>
67
</menuitem>
78
<menuitem id="first_level_menu_estate_property_type" name="Setting">
89
<menuitem id="estate_property_action" action="estate_property_type_action"/>
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<odoo>
3+
<record id="estate_property_offer_action" model="ir.actions.act_window">
4+
<field name="name">Offers</field>
5+
<field name="res_model">estate.property.offer</field>
6+
<field name="view_mode">list,form</field>
7+
</record>
8+
<record id="estate_property_offer_view_list" model="ir.ui.view">
9+
<field name="name">estate.property.offer.list</field>
10+
<field name="model">estate.property.offer</field>
11+
<field name="arch" type="xml" >
12+
<list string="Channel" editable="bottom" >
13+
<field name="price"/>
14+
<field name="partner_id"/>
15+
<field name ="validity"/>
16+
<field name ="date_deadline"/>
17+
</list>
18+
</field>
19+
</record>
20+
</odoo>

0 commit comments

Comments
 (0)