diff --git a/estate/__manifest__.py b/estate/__manifest__.py
index 41179d6..42f7839 100644
--- a/estate/__manifest__.py
+++ b/estate/__manifest__.py
@@ -10,6 +10,8 @@
],
'data': [
'views/estate_property_offer_views.xml',
+ 'views/estate_property_type_views.xml',
+ 'views/estate_property_tag_views.xml',
'views/estate_property_views.xml',
'views/estate_menus_view.xml',
'security/ir.model.access.csv'
diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py
index 2b0365e..b837358 100644
--- a/estate/models/estate_property.py
+++ b/estate/models/estate_property.py
@@ -8,6 +8,7 @@ class EstateProperty(models.Model):
_name = "estate.property"
_description = "Properties for the Estate module"
+ _order = "id desc"
_sql_constraints = [
('check_expected_price', 'CHECK (expected_price > 0)', 'Expected rice should be superior to 0'),
diff --git a/estate/models/estate_property_offer.py b/estate/models/estate_property_offer.py
index 792461f..496c4a2 100644
--- a/estate/models/estate_property_offer.py
+++ b/estate/models/estate_property_offer.py
@@ -3,8 +3,18 @@ from odoo import api, fields, models, exceptions
from odoo.tools import float_utils as floatTool
class EstatePropertyOffer(models.Model):
+
+ # ------------- Private attributes ------------------------- #
+
_name = "estate.property.offer"
_description = "Offers made on properties"
+ _order = "price desc"
+
+ _sql_constraints = [
+ ('check_price', 'CHECK (price > 0)', 'Expected price should be superior to 0'),
+ ]
+
+ # ------------- Fields ------------------------- #
price = fields.Float()
state = fields.Selection(copy=False, selection=[('accepted', 'Accepted'), ('refused', 'Refused')])
@@ -12,10 +22,9 @@ class EstatePropertyOffer(models.Model):
property_id = fields.Many2one("estate.property", required=True)
validity = fields.Integer(default=7, string='validity (days)')
date_deadline = fields.Date(compute="_compute_date_deadline", inverse="_inverse_date_deadline")
-
- _sql_constraints = [
- ('check_price', 'CHECK (price > 0)', 'Expected price should be superior to 0'),
- ]
+ property_type_id = fields.Many2one(related="property_id.property_type_id", store="True")
+
+ # ------------- Compute methods ------------------------- #
@api.depends('validity', 'create_date')
def _compute_date_deadline(self):
@@ -26,6 +35,8 @@ class EstatePropertyOffer(models.Model):
for record in self:
record.validity = (record.date_deadline - (record.create_date.date() or fields.Date.today())).days
+ # ------------- Actions ------------------------- #
+
def action_accept(self):
if self.exists():
if "accepted" in self.mapped("property_id.offer_ids.state"):
diff --git a/estate/models/estate_property_tag.py b/estate/models/estate_property_tag.py
index 0221d7f..27da22f 100644
--- a/estate/models/estate_property_tag.py
+++ b/estate/models/estate_property_tag.py
@@ -4,5 +4,8 @@ from odoo import fields, models
class EstatePropertyTag(models.Model):
_name = "estate.property.tag"
_description = "Tags for properties"
+ _order = "sequence asc, name asc"
- name = fields.Char(required=True)
\ No newline at end of file
+ name = fields.Char(required=True)
+ sequence = fields.Integer('Order', default=1)
+ color = fields.Integer()
\ No newline at end of file
diff --git a/estate/models/estate_property_type.py b/estate/models/estate_property_type.py
index 4d4b655..1402d42 100644
--- a/estate/models/estate_property_type.py
+++ b/estate/models/estate_property_type.py
@@ -1,9 +1,26 @@
# -*- coding: utf-8 -*-
-from odoo import fields, models
+from itertools import count
+from odoo import fields, models, api
class EstatePropertyType(models.Model):
+
+ # ------------------ Private attributes ----------------------
+
_name = "estate.property.type"
_description = "Types of properties"
+ _order = "name asc"
- name = fields.Char(required=True)
\ No newline at end of file
+ # ------------------ Fields ----------------------
+
+ name = fields.Char(required=True)
+ property_ids = fields.One2many(comodel_name="estate.property", inverse_name="property_type_id")
+ offer_ids = fields.One2many(comodel_name="estate.property.offer", inverse_name="property_type_id")
+ offer_count = fields.Integer(compute="_compute_offer_count")
+
+ # ------------------ Computed fields ----------------------
+
+ @api.depends('offer_ids')
+ def _compute_offer_count(self):
+ for record in self:
+ record.offer_count = len(record.mapped('offer_ids'))
diff --git a/estate/views/estate_property_offer_views.xml b/estate/views/estate_property_offer_views.xml
index d43a079..5cb7520 100644
--- a/estate/views/estate_property_offer_views.xml
+++ b/estate/views/estate_property_offer_views.xml
@@ -4,14 +4,14 @@
estate.property.offer.tree
estate.property.offer
-
+
-
-
-
+
+
+
diff --git a/estate/views/estate_property_tag_views.xml b/estate/views/estate_property_tag_views.xml
new file mode 100644
index 0000000..5f0478b
--- /dev/null
+++ b/estate/views/estate_property_tag_views.xml
@@ -0,0 +1,19 @@
+
+
+
+ Property Tags
+ estate.property.tag
+ tree,form
+
+
+
+ estate.property.tag.tree
+ estate.property.tag
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/estate/views/estate_property_type_views.xml b/estate/views/estate_property_type_views.xml
new file mode 100644
index 0000000..2df645a
--- /dev/null
+++ b/estate/views/estate_property_type_views.xml
@@ -0,0 +1,38 @@
+
+
+
+ Property Types
+ estate.property.type
+ tree,form
+
+
+
+ estate.property.type.form
+ estate.property.type
+
+
+
+
+
\ No newline at end of file
diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml
index 370c32c..d652a76 100644
--- a/estate/views/estate_property_views.xml
+++ b/estate/views/estate_property_views.xml
@@ -4,21 +4,25 @@
Properties
estate.property
tree,form
+ {'search_default_available': True}
+ [('property_type_id', '=', active_id)]
estate.property.tree
estate.property
-
+
+
-
+
+
@@ -29,18 +33,18 @@
-
-
- Property Types
- estate.property.type
- tree,form
-
-
-
- Property Tags
- estate.property.tag
- tree,form
-
\ No newline at end of file