From 956e40e954b801e8a26f92c5989c23b9d05e5ca0 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Thu, 2 Jul 2026 16:40:58 +0530 Subject: [PATCH 01/27] [ADD] estate: Initialize the real estate busniess The estate busniess has huge number of data thats needs to be manage and track. here we are creating an platfrom to mange the Real estate busniess This provides the base structure of the model. Chapter: 2 --- estate/__init__.py | 0 estate/__manifest__.py | 14 ++++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 estate/__init__.py create mode 100644 estate/__manifest__.py diff --git a/estate/__init__.py b/estate/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/estate/__manifest__.py b/estate/__manifest__.py new file mode 100644 index 00000000000..f1e0e3932e0 --- /dev/null +++ b/estate/__manifest__.py @@ -0,0 +1,14 @@ +{ + "name": "Real Estate", + "version": "1.0", + "summary": "Real Estate Management", + "description": """ + Real Estate Tutorial Module + """, + "author": "Piyush", + "category": "Tutorials", + "depends": ["base"], + "data": [], + "application": True, + "installable": True, +} \ No newline at end of file From 8718bafadde79ca5165dfd237a5cde6fe47d16c5 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Thu, 2 Jul 2026 18:43:33 +0530 Subject: [PATCH 02/27] [ADD] estate: add estate property model A real estate business needs to manage and track a large amount of property information in a structured way. Introduce the property model for storing and managing real estate data. This provides the base structure required to build the property management workflow. Chapter: 3 --- estate/models/__init__.py | 0 estate/models/estate_property.py | 10 ++++++++++ 2 files changed, 10 insertions(+) create mode 100644 estate/models/__init__.py create mode 100644 estate/models/estate_property.py diff --git a/estate/models/__init__.py b/estate/models/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py new file mode 100644 index 00000000000..88f2df97caa --- /dev/null +++ b/estate/models/estate_property.py @@ -0,0 +1,10 @@ +from odoo import fields,models + + +class EstateProperty(models.Model): + _name = "estate.property" + _description = "Real Estate Property" + + name = fields.Char() + expected_price = fields.Float() + bedrooms = fields.Integer() \ No newline at end of file From bb27eb2485a2900c2084422301947b67430c259d Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Fri, 3 Jul 2026 11:20:59 +0530 Subject: [PATCH 03/27] [LINT] estate: ensure consistent coding style Consistent coding conventions make the estate module easier to read, review, and maintain as its functionality grows. Resolve the reported linting issues to keep the implementation aligned with the expected coding standards by the odoo runbot. Chapter: 3 --- estate/__init__.py | 1 + estate/__manifest__.py | 3 ++- estate/models/__init__.py | 1 + estate/models/estate_property.py | 32 +++++++++++++++++++++++++++----- 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/estate/__init__.py b/estate/__init__.py index e69de29bb2d..0650744f6bc 100644 --- a/estate/__init__.py +++ b/estate/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/estate/__manifest__.py b/estate/__manifest__.py index f1e0e3932e0..d3eebb7b27b 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -8,7 +8,8 @@ "author": "Piyush", "category": "Tutorials", "depends": ["base"], + "license": "LGPL-3", "data": [], "application": True, "installable": True, -} \ No newline at end of file +} diff --git a/estate/models/__init__.py b/estate/models/__init__.py index e69de29bb2d..5e1963c9d2f 100644 --- a/estate/models/__init__.py +++ b/estate/models/__init__.py @@ -0,0 +1 @@ +from . import estate_property diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 88f2df97caa..bf182c4231d 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -1,10 +1,32 @@ -from odoo import fields,models +from odoo import fields, models class EstateProperty(models.Model): _name = "estate.property" _description = "Real Estate Property" - - name = fields.Char() - expected_price = fields.Float() - bedrooms = fields.Integer() \ No newline at end of file + + name = fields.Char(required=True) + description = fields.Text() + postcode = fields.Char() + date_availability = fields.Date() + + expected_price = fields.Float(required=True) + selling_price = fields.Float() + + bedrooms = fields.Integer() + living_area = fields.Integer() + facades = fields.Integer() + + garage = fields.Boolean() + garden = fields.Boolean() + garden_area = fields.Integer() + + garden_orientation = fields.Selection( + selection=[ + ("north", "North"), + ("south", "South"), + ("east", "East"), + ("west", "West"), + ], + string="Garden Orientation", +) From 157ce4bb2163b25096516ce788a9ef47bacae068 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Fri, 3 Jul 2026 14:06:33 +0530 Subject: [PATCH 04/27] [LINT] estate: resolve remaining lint errors The estate module should remain free of linting violations to ensure that new changes comply with the project's code quality requirements. Resolve the remaining reported lint errors so that the affected code passes the expected checks without changing its functional behavior. Chapter: 3 --- estate/models/estate_property.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index bf182c4231d..1ee01deefc3 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -28,5 +28,5 @@ class EstateProperty(models.Model): ("east", "East"), ("west", "West"), ], - string="Garden Orientation", + string="Garden Orientation", ) From c218672f8440840630b8015173b425c8496626c8 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Fri, 3 Jul 2026 15:18:43 +0530 Subject: [PATCH 05/27] [ADD] estate: add access control for property model Add access control rules for the estate property model to define the required permissions for creating, reading, updating, and deleting property records. This makes the model accessible through the application while following Odoo's model security mechanism. Chapter: 4 --- estate/__manifest__.py | 4 +++- estate/security/ir.model.access.csv | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 estate/security/ir.model.access.csv diff --git a/estate/__manifest__.py b/estate/__manifest__.py index d3eebb7b27b..ffff1be3ad5 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -9,7 +9,9 @@ "category": "Tutorials", "depends": ["base"], "license": "LGPL-3", - "data": [], + "data": [ + "security/ir.model.access.csv", + ], "application": True, "installable": True, } diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv new file mode 100644 index 00000000000..0e11f47e58d --- /dev/null +++ b/estate/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_estate_property,access_estate_property,model_estate_property,base.group_user,1,1,1,1 \ No newline at end of file From dce4853f6625871f3c778460095039e4e5a582bc Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Fri, 3 Jul 2026 17:03:38 +0530 Subject: [PATCH 06/27] [LINT] estate: resolve security file issues The security configuration needs to follow the expected conventions to ensure access rights are defined consistently and pass the required validation checks. Correct the reported issues in the estate security file while preserving the intended access permissions and functional behavior. Chapter: 4 --- estate/models/estate_property.py | 2 +- estate/security/ir.model.access.csv | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 1ee01deefc3..26ada06338b 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -4,7 +4,7 @@ class EstateProperty(models.Model): _name = "estate.property" _description = "Real Estate Property" - + name = fields.Char(required=True) description = fields.Text() postcode = fields.Char() diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv index 0e11f47e58d..32389642d4f 100644 --- a/estate/security/ir.model.access.csv +++ b/estate/security/ir.model.access.csv @@ -1,2 +1,2 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_estate_property,access_estate_property,model_estate_property,base.group_user,1,1,1,1 \ No newline at end of file +access_estate_property,access_estate_property,model_estate_property,base.group_user,1,1,1,1 From 648424fb782dbdeaf557d66a70755fc20f06f3f6 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Fri, 3 Jul 2026 17:12:17 +0530 Subject: [PATCH 07/27] [LINT] estate: fix spacing inconsistencies Standerd spacing keeps the estate module readable and prevents style violations errors from the odoo runbot. Correct the affected formatting to follow the expected coding conventions without changing the module's functional behavior. Chapter: 4 --- estate/models/estate_property.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 26ada06338b..1ee01deefc3 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -4,7 +4,7 @@ class EstateProperty(models.Model): _name = "estate.property" _description = "Real Estate Property" - + name = fields.Char(required=True) description = fields.Text() postcode = fields.Char() From bf6508245a58fa0c50d65ab7e6bba07b3854a717 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Mon, 6 Jul 2026 16:32:39 +0530 Subject: [PATCH 08/27] [ADD] estate: add property views and menus Property records need a user interface so users can access and manage real estate data without interacting directly with the underlying model. Added the required property views and menu entries for the property records through the estate application Chapter: 5 --- estate/__manifest__.py | 4 +++- estate/models/estate_property.py | 23 ++++++++++++++++++++--- estate/views/estate_menus.xml | 11 +++++++++++ estate/views/estate_property_views.xml | 10 ++++++++++ 4 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 estate/views/estate_menus.xml create mode 100644 estate/views/estate_property_views.xml diff --git a/estate/__manifest__.py b/estate/__manifest__.py index ffff1be3ad5..5168c1131ef 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -11,7 +11,9 @@ "license": "LGPL-3", "data": [ "security/ir.model.access.csv", - ], + "views/estate_property_views.xml", + "views/estate_menus.xml" + ], "application": True, "installable": True, } diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 1ee01deefc3..a78e05df8e7 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -8,10 +8,12 @@ class EstateProperty(models.Model): name = fields.Char(required=True) description = fields.Text() postcode = fields.Char() - date_availability = fields.Date() + date_availability = fields.Date( + copy=False, + ) expected_price = fields.Float(required=True) - selling_price = fields.Float() + selling_price = fields.Float(readonly=True, copy=False) bedrooms = fields.Integer() living_area = fields.Integer() @@ -29,4 +31,19 @@ class EstateProperty(models.Model): ("west", "West"), ], string="Garden Orientation", -) + ) + + active = fields.Boolean(default=True) + + state = fields.Selection( + selection=[ + ("new", "New"), + ("offer_received", "Offer Received"), + ("offer_accepted", "Offer Accepted"), + ("sold", "Sold"), + ("canceled", "Canceled"), + ], + copy=False, + default="new", + required=True, + ) diff --git a/estate/views/estate_menus.xml b/estate/views/estate_menus.xml new file mode 100644 index 00000000000..43fd2117852 --- /dev/null +++ b/estate/views/estate_menus.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml new file mode 100644 index 00000000000..3c257dc4165 --- /dev/null +++ b/estate/views/estate_property_views.xml @@ -0,0 +1,10 @@ + + + + + Properties + estate.property + list,form + + + From ac5be22d944256e7afb98031acd2e780982b91c2 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Mon, 6 Jul 2026 17:38:42 +0530 Subject: [PATCH 09/27] [FIX] estate: correct property default values New property records should start with some default values to reduce repetitive input and ensure consistent initialization. Added the default bedroom count and availability date computation so that newly created properties receive the expected values automatically. Chapter: 5 --- estate/models/estate_property.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index a78e05df8e7..6e920a46a0a 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -9,13 +9,13 @@ class EstateProperty(models.Model): description = fields.Text() postcode = fields.Char() date_availability = fields.Date( - copy=False, + copy=False, default=lambda self: fields.Date.add(fields.Date.today(), months=3) ) expected_price = fields.Float(required=True) selling_price = fields.Float(readonly=True, copy=False) - bedrooms = fields.Integer() + bedrooms = fields.Integer(default=2) living_area = fields.Integer() facades = fields.Integer() From 69fc96aacea1485691e5e922d1cb719635e040d9 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Tue, 7 Jul 2026 14:08:08 +0530 Subject: [PATCH 10/27] [IMP] estate: improve property form and search As property records contain more information, users need a structured form and efficient search options to navigate and manage them easily. Improve the property form layout to organize related information and add search filters to help users quickly narrow down properties based on relevant criteria. Chapter: 6 --- estate/views/estate_property_views.xml | 81 ++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 3c257dc4165..3e96eff808e 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -7,4 +7,85 @@ list,form + + estate.property.list + estate.property + + + + + + + + + + + + + + + estate.property.view.form + estate.property + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + estate.property.view.search + estate.property + + + + + + + + + + + + + + + + + + + + + + + + From ec93d3a9603ef14f3b7126ed14d31e2627872c27 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Tue, 7 Jul 2026 17:35:43 +0530 Subject: [PATCH 11/27] [IMP] estate: filter expensive properties Users need a convenient way to identify higher-priced properties without manually reviewing individual records or repeatedly applying the same price criteria. Add a dedicated search filter for expensive properties so that users can quickly narrow the property list to records matching the defined price threshold. Chapter: 6 --- estate/views/estate_property_views.xml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 3e96eff808e..04b1878a085 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -75,8 +75,9 @@ - - + + + @@ -87,5 +88,7 @@ + + From afdd419f9e107dae1a8d35ce1bcfdd86d2d3cf27 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Thu, 9 Jul 2026 17:34:37 +0530 Subject: [PATCH 12/27] [ADD] estate: add property types and tags Add property type and property tag models to provide structured classification of estate properties. Integrate the new relational fields into the property model and enhance the property form so users can assign types and tags while managing property records. Chapter: 7 --- estate/__manifest__.py | 6 +++- estate/models/__init__.py | 2 ++ estate/models/estate_property.py | 9 ++++++ estate/models/estate_property_tag.py | 8 +++++ estate/models/estate_property_type.py | 8 +++++ estate/security/ir.model.access.csv | 2 ++ estate/views/estate_menus.xml | 5 +++ estate/views/estate_property_tag_view.xml | 11 +++++++ estate/views/estate_property_type_views.xml | 11 +++++++ estate/views/estate_property_views.xml | 36 +++++++++++++++++---- 10 files changed, 90 insertions(+), 8 deletions(-) create mode 100644 estate/models/estate_property_tag.py create mode 100644 estate/models/estate_property_type.py create mode 100644 estate/views/estate_property_tag_view.xml create mode 100644 estate/views/estate_property_type_views.xml diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 5168c1131ef..f08bae2da17 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -12,7 +12,11 @@ "data": [ "security/ir.model.access.csv", "views/estate_property_views.xml", - "views/estate_menus.xml" + "views/estate_property_type_views.xml", + "views/estate_property_tag_view.xml", + "views/estate_menus.xml", + + ], "application": True, "installable": True, diff --git a/estate/models/__init__.py b/estate/models/__init__.py index 5e1963c9d2f..c620ac481a3 100644 --- a/estate/models/__init__.py +++ b/estate/models/__init__.py @@ -1 +1,3 @@ from . import estate_property +from . import estate_property_type +from . import estate_property_tag diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 6e920a46a0a..7924dc57259 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -47,3 +47,12 @@ class EstateProperty(models.Model): default="new", required=True, ) + + property_type = fields.Many2one("estate.property.type", string="Type") + seller_id = fields.Many2one( + "res.users", + string="Salesperson", + default=lambda self: self.env.user, + ) + buyer_id = fields.Many2one("res.partner", string="Buyer", copy=False) + tag_id = fields.Many2many("estate.property.tag", string="Tags") diff --git a/estate/models/estate_property_tag.py b/estate/models/estate_property_tag.py new file mode 100644 index 00000000000..e685fb3c4d4 --- /dev/null +++ b/estate/models/estate_property_tag.py @@ -0,0 +1,8 @@ +from odoo import fields, models + +class EstatePropertyTags(models.Model): + _name = "estate.property.tag" + _description = "This model will have tags" + + name = fields.Char(required=True) + diff --git a/estate/models/estate_property_type.py b/estate/models/estate_property_type.py new file mode 100644 index 00000000000..cbcb9034318 --- /dev/null +++ b/estate/models/estate_property_type.py @@ -0,0 +1,8 @@ +from odoo import fields, models + + +class EstatePropertyType(models.Model): + _name = "estate.property.type" + _description = "It stores the property types" + + name = fields.Char(required=True) diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv index 32389642d4f..1493eab4011 100644 --- a/estate/security/ir.model.access.csv +++ b/estate/security/ir.model.access.csv @@ -1,2 +1,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_estate_property,access_estate_property,model_estate_property,base.group_user,1,1,1,1 +access_estate_property_type,access_estate_property_type,model_estate_property_type,base.group_user,1,1,1,1 +access_estate_property_tag,access_estate_property_tag,model_estate_property_tag,base.group_user,1,1,1,1 diff --git a/estate/views/estate_menus.xml b/estate/views/estate_menus.xml index 43fd2117852..0ef1932cd03 100644 --- a/estate/views/estate_menus.xml +++ b/estate/views/estate_menus.xml @@ -6,6 +6,11 @@ + + + + + diff --git a/estate/views/estate_property_tag_view.xml b/estate/views/estate_property_tag_view.xml new file mode 100644 index 00000000000..bff793c29ce --- /dev/null +++ b/estate/views/estate_property_tag_view.xml @@ -0,0 +1,11 @@ + + + + + Property Tags + estate.property.tag + list,form + + + + diff --git a/estate/views/estate_property_type_views.xml b/estate/views/estate_property_type_views.xml new file mode 100644 index 00000000000..9c0f1a2b6bd --- /dev/null +++ b/estate/views/estate_property_type_views.xml @@ -0,0 +1,11 @@ + + + + + Property Types + estate.property.type + list,form + + + + diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 04b1878a085..c375fc900aa 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -27,7 +27,7 @@ estate.property.view.form estate.property -
+ @@ -35,6 +35,7 @@ + @@ -42,6 +43,7 @@ + @@ -49,11 +51,31 @@ - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + @@ -88,7 +110,7 @@ - + From d5bc7b6aeb77d17e994f174f18514bf5c41ca0eb Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Thu, 9 Jul 2026 17:39:01 +0530 Subject: [PATCH 13/27] [LINT] estate: resolve Runbot lint errors The estate module needs to comply with the expected coding standards to pass Runbot validation. Resolve the reported linting issues so that the module passes the automated checks without affecting its functional behavior. --- estate/__manifest__.py | 2 -- estate/models/estate_property_tag.py | 4 ++-- estate/views/estate_property_tag_view.xml | 2 +- estate/views/estate_property_type_views.xml | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index f08bae2da17..cf23e0220d6 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -15,8 +15,6 @@ "views/estate_property_type_views.xml", "views/estate_property_tag_view.xml", "views/estate_menus.xml", - - ], "application": True, "installable": True, diff --git a/estate/models/estate_property_tag.py b/estate/models/estate_property_tag.py index e685fb3c4d4..a31849f86cc 100644 --- a/estate/models/estate_property_tag.py +++ b/estate/models/estate_property_tag.py @@ -1,8 +1,8 @@ from odoo import fields, models + class EstatePropertyTags(models.Model): _name = "estate.property.tag" _description = "This model will have tags" - - name = fields.Char(required=True) + name = fields.Char(required=True) diff --git a/estate/views/estate_property_tag_view.xml b/estate/views/estate_property_tag_view.xml index bff793c29ce..ed58451d809 100644 --- a/estate/views/estate_property_tag_view.xml +++ b/estate/views/estate_property_tag_view.xml @@ -5,7 +5,7 @@ Property Tags estate.property.tag list,form - + diff --git a/estate/views/estate_property_type_views.xml b/estate/views/estate_property_type_views.xml index 9c0f1a2b6bd..4faeebc7371 100644 --- a/estate/views/estate_property_type_views.xml +++ b/estate/views/estate_property_type_views.xml @@ -5,7 +5,7 @@ Property Types estate.property.type list,form - + From 31cbc6a9c713199c5b58d66df5ebccae8899a59b Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Fri, 10 Jul 2026 18:42:44 +0530 Subject: [PATCH 14/27] [ADD] estate: add property offer model Properties receive multiple offers from multiple buyers, so each proposal needs to be tracked independently. Added the property offer model and link it to the property model. This allows multiple offers to be managed separately while keeping them accessible from their corresponding property record. Chapter: 7 --- estate/models/__init__.py | 1 + estate/models/estate_property.py | 5 +++ estate/models/estate_property_offer.py | 19 ++++++++++ estate/security/ir.model.access.csv | 1 + estate/views/estate_property_views.xml | 51 ++++++++++++++++++-------- 5 files changed, 62 insertions(+), 15 deletions(-) create mode 100644 estate/models/estate_property_offer.py diff --git a/estate/models/__init__.py b/estate/models/__init__.py index c620ac481a3..2f1821a39c1 100644 --- a/estate/models/__init__.py +++ b/estate/models/__init__.py @@ -1,3 +1,4 @@ from . import estate_property from . import estate_property_type from . import estate_property_tag +from . import estate_property_offer diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 7924dc57259..8ea7e0a60df 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -56,3 +56,8 @@ class EstateProperty(models.Model): ) buyer_id = fields.Many2one("res.partner", string="Buyer", copy=False) tag_id = fields.Many2many("estate.property.tag", string="Tags") + offer_ids = fields.One2many( + "estate.property.offer", + "property_id", + string="Offers", + ) diff --git a/estate/models/estate_property_offer.py b/estate/models/estate_property_offer.py new file mode 100644 index 00000000000..435ff74ec91 --- /dev/null +++ b/estate/models/estate_property_offer.py @@ -0,0 +1,19 @@ +from odoo import fields, models + + +class EstatePropertyOffer(models.Model): + _name = "estate.property.offer" + _description = "its for the offers that we recive in the estate" + + price = fields.Float() + + status = fields.Selection( + selection=[ + ("accepted", "Accepted"), + ("refused", "Refused"), + ], + copy=True, + ) + + partner_id = fields.Many2one("res.partner", required=True) + property_id = fields.Many2one("estate.property", required=True, readonly="1") diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv index 1493eab4011..89f97c50842 100644 --- a/estate/security/ir.model.access.csv +++ b/estate/security/ir.model.access.csv @@ -2,3 +2,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_estate_property,access_estate_property,model_estate_property,base.group_user,1,1,1,1 access_estate_property_type,access_estate_property_type,model_estate_property_type,base.group_user,1,1,1,1 access_estate_property_tag,access_estate_property_tag,model_estate_property_tag,base.group_user,1,1,1,1 +access_estate_property_offer,access_estate_property_offer,model_estate_property_offer,base.group_user,1,1,1,1 diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index c375fc900aa..bea2d01df83 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -51,31 +51,40 @@ - - - - + + + + + + + + + + - + + + + - + + + - + + + + - - - - - + + - + - - @@ -83,6 +92,18 @@ + + estate.property.offer.list + estate.property.offer + + + + + + + + + estate.property.view.search estate.property From 1bd0e1c377b4d3d5863d7bf53b4e4d0e69c786a4 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Mon, 13 Jul 2026 10:19:34 +0530 Subject: [PATCH 15/27] [FIX] estate: prevent changing offer property An offer belongs to the property for which it was originally created and should not be reassigned afterward, as this could associate the offer with an unrelated property. Make the property relation readonly to preserve the association between a property and its offers throughout the offer lifecycle. Chapter: 7 --- estate/models/estate_property_offer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/estate/models/estate_property_offer.py b/estate/models/estate_property_offer.py index 435ff74ec91..f1f6643826d 100644 --- a/estate/models/estate_property_offer.py +++ b/estate/models/estate_property_offer.py @@ -16,4 +16,4 @@ class EstatePropertyOffer(models.Model): ) partner_id = fields.Many2one("res.partner", required=True) - property_id = fields.Many2one("estate.property", required=True, readonly="1") + property_id = fields.Many2one("estate.property", required=True, readonly=True) From 53b19390cf165798519661bfbd945ba9ea58e158 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Mon, 20 Jul 2026 17:09:23 +0530 Subject: [PATCH 16/27] [REF] estate: clean up whitespace and formatting Inconsistent formatting introduces unnecessary issues in the code reviews and makes the estate module harder to read and maintain. here we removed the unnecessay whitespace and formatting across the property and offer models, menus, and views to keep the implementation consistent with the expected coding conventions. Chapter: 7 --- estate/models/estate_property.py | 7 ----- estate/models/estate_property_offer.py | 3 -- estate/views/estate_menus.xml | 4 --- estate/views/estate_property_tag_view.xml | 3 -- estate/views/estate_property_type_views.xml | 3 -- estate/views/estate_property_views.xml | 32 --------------------- 6 files changed, 52 deletions(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 8ea7e0a60df..1f6e0414934 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -11,18 +11,14 @@ class EstateProperty(models.Model): date_availability = fields.Date( copy=False, default=lambda self: fields.Date.add(fields.Date.today(), months=3) ) - expected_price = fields.Float(required=True) selling_price = fields.Float(readonly=True, copy=False) - bedrooms = fields.Integer(default=2) living_area = fields.Integer() facades = fields.Integer() - garage = fields.Boolean() garden = fields.Boolean() garden_area = fields.Integer() - garden_orientation = fields.Selection( selection=[ ("north", "North"), @@ -32,9 +28,7 @@ class EstateProperty(models.Model): ], string="Garden Orientation", ) - active = fields.Boolean(default=True) - state = fields.Selection( selection=[ ("new", "New"), @@ -47,7 +41,6 @@ class EstateProperty(models.Model): default="new", required=True, ) - property_type = fields.Many2one("estate.property.type", string="Type") seller_id = fields.Many2one( "res.users", diff --git a/estate/models/estate_property_offer.py b/estate/models/estate_property_offer.py index f1f6643826d..8ed52fb5c43 100644 --- a/estate/models/estate_property_offer.py +++ b/estate/models/estate_property_offer.py @@ -4,9 +4,7 @@ class EstatePropertyOffer(models.Model): _name = "estate.property.offer" _description = "its for the offers that we recive in the estate" - price = fields.Float() - status = fields.Selection( selection=[ ("accepted", "Accepted"), @@ -14,6 +12,5 @@ class EstatePropertyOffer(models.Model): ], copy=True, ) - partner_id = fields.Many2one("res.partner", required=True) property_id = fields.Many2one("estate.property", required=True, readonly=True) diff --git a/estate/views/estate_menus.xml b/estate/views/estate_menus.xml index 0ef1932cd03..9cb998bc2c9 100644 --- a/estate/views/estate_menus.xml +++ b/estate/views/estate_menus.xml @@ -1,16 +1,12 @@ - - - - diff --git a/estate/views/estate_property_tag_view.xml b/estate/views/estate_property_tag_view.xml index ed58451d809..0ec3dc550e0 100644 --- a/estate/views/estate_property_tag_view.xml +++ b/estate/views/estate_property_tag_view.xml @@ -1,11 +1,8 @@ - Property Tags estate.property.tag list,form - - diff --git a/estate/views/estate_property_type_views.xml b/estate/views/estate_property_type_views.xml index 4faeebc7371..6384061b8ee 100644 --- a/estate/views/estate_property_type_views.xml +++ b/estate/views/estate_property_type_views.xml @@ -1,11 +1,8 @@ - Property Types estate.property.type list,form - - diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index bea2d01df83..51e56292872 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -1,12 +1,10 @@ - Properties estate.property list,form - estate.property.list estate.property @@ -22,14 +20,12 @@ - estate.property.view.form estate.property - @@ -39,7 +35,6 @@ - @@ -50,48 +45,32 @@ - - - - - - - - - - - - - - - - estate.property.offer.list estate.property.offer @@ -103,35 +82,24 @@
- estate.property.view.search estate.property - - - - - - - - - - From 781a2c802e1067adc6c277efbc36d45110bcb8b7 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Fri, 24 Jul 2026 17:25:42 +0530 Subject: [PATCH 17/27] [IMP] estate: complete property offer setup To maintain the Strcture of the offer form and make sure to follow the UI consistency in this model Added the missing offer form view while keeping the property field hidden, as offers are managed directly from their related property. Chapter: 7 --- estate/models/estate_property.py | 4 ++-- estate/models/estate_property_offer.py | 3 ++- estate/views/estate_property_views.xml | 20 ++++++++++++++++++-- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 1f6e0414934..eee6c6f5d28 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -41,14 +41,14 @@ class EstateProperty(models.Model): default="new", required=True, ) - property_type = fields.Many2one("estate.property.type", string="Type") + property_type_id = fields.Many2one("estate.property.type", string="Type") seller_id = fields.Many2one( "res.users", string="Salesperson", default=lambda self: self.env.user, ) buyer_id = fields.Many2one("res.partner", string="Buyer", copy=False) - tag_id = fields.Many2many("estate.property.tag", string="Tags") + tag_ids = fields.Many2many("estate.property.tag", string="Tags") offer_ids = fields.One2many( "estate.property.offer", "property_id", diff --git a/estate/models/estate_property_offer.py b/estate/models/estate_property_offer.py index 8ed52fb5c43..9cdc2f6ca44 100644 --- a/estate/models/estate_property_offer.py +++ b/estate/models/estate_property_offer.py @@ -4,13 +4,14 @@ class EstatePropertyOffer(models.Model): _name = "estate.property.offer" _description = "its for the offers that we recive in the estate" + price = fields.Float() status = fields.Selection( selection=[ ("accepted", "Accepted"), ("refused", "Refused"), ], - copy=True, + copy=False, ) partner_id = fields.Many2one("res.partner", required=True) property_id = fields.Many2one("estate.property", required=True, readonly=True) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 51e56292872..73acad21a98 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -31,14 +31,14 @@ - +
- + @@ -82,6 +82,22 @@ + + estate.property.offer.form + estate.property.offer + +
+ + + + + + + + +
+
+
estate.property.view.search estate.property From b0df03f457fe8ea124db72ac16cdcdda478a408c Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Fri, 24 Jul 2026 17:54:03 +0530 Subject: [PATCH 18/27] [LINT] estate: document invisible property field Always invisible fields need an explicit explanation in the view so that their purpose is clear and the view passes the corresponding validation checks. Document why the property relation is intentionally kept invisible in the offer form without changing its existing behavior. Chapter: 7 --- estate/views/estate_property_views.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 73acad21a98..d7996f2f220 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -92,6 +92,7 @@ +
From c42e855e7e20a21414fc9607bbe71d18c364b626 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Fri, 24 Jul 2026 18:28:59 +0530 Subject: [PATCH 19/27] [LINT] estate: removed the invisible property field The offer form needs to keep the property relation hidden while making its purpose explicit for view validation. This keeps the existing offer behavior unchanged while satisfying the expected view conventions. Chapter: 7 --- estate/views/estate_property_views.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index d7996f2f220..39a512c6127 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -92,8 +92,6 @@ - -
From 1c376a8dd912b7ed04da497a353cacd0071b0edc Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Tue, 28 Jul 2026 15:41:23 +0530 Subject: [PATCH 20/27] [ADD] estate: automate total area calculation Properties store the living and garden areas separately, requiring users to manually calculate the total area for each property. here we computing the total area automatically and remove the need for manual calculations and ensures the displayed value always remains consistent. Chapter: 8 --- estate/models/estate_property.py | 7 ++++++- estate/views/estate_property_views.xml | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index eee6c6f5d28..f86794623d4 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -1,4 +1,4 @@ -from odoo import fields, models +from odoo import api, fields, models class EstateProperty(models.Model): @@ -54,3 +54,8 @@ class EstateProperty(models.Model): "property_id", string="Offers", ) + total_area = fields.Integer(compute ="_compute_total_area", string ="Total Area") + @api.depends("living_area", "garden_area") + def _compute_total_area(self): + for record in self: + record.total_area = record.living_area + record.garden_area diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 39a512c6127..52aa02d4a7d 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -34,6 +34,8 @@ + + From 5705b98bed3dc3a9e0c882cb99943ccf6ce2fc56 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Tue, 28 Jul 2026 16:05:44 +0530 Subject: [PATCH 21/27] [LINT] estate: fix computed field style Clean up style issues reported by the linter in the computed field implementation. Improve code consistency and comply with the project's coding standards without changing the existing behavior. Chapter: 8 --- estate/models/estate_property.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index f86794623d4..fc013aa627f 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -54,7 +54,8 @@ class EstateProperty(models.Model): "property_id", string="Offers", ) - total_area = fields.Integer(compute ="_compute_total_area", string ="Total Area") + total_area = fields.Integer(compute="_compute_total_area", string="Total Area") + @api.depends("living_area", "garden_area") def _compute_total_area(self): for record in self: From 7a544ec3d759560d182b6e2deb44c046a69b41b5 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Thu, 30 Jul 2026 12:28:47 +0530 Subject: [PATCH 22/27] [IMP] estate: display highest offer on properties TO get the highest offer amount for each property to provide a quick overview of its current best offer without requiring users to check every related offer manually By calculating the highest offer directly on the property, important pricing information becomes immediately available Chapter: 8 --- estate/models/estate_property.py | 9 ++++++++- estate/views/estate_property_views.xml | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index fc013aa627f..00a61f3d1cf 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -44,7 +44,7 @@ class EstateProperty(models.Model): property_type_id = fields.Many2one("estate.property.type", string="Type") seller_id = fields.Many2one( "res.users", - string="Salesperson", + string="Sales Person", default=lambda self: self.env.user, ) buyer_id = fields.Many2one("res.partner", string="Buyer", copy=False) @@ -60,3 +60,10 @@ class EstateProperty(models.Model): def _compute_total_area(self): for record in self: record.total_area = record.living_area + record.garden_area + + best_price = fields.Float(compute="_compute_best_price", string="Best Offer") + + @api.depends("offer_ids.price") + def _compute_best_price(self): + for record in self: + record.best_price = max(record.offer_ids.mapped("price"), default=0.0) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 52aa02d4a7d..b09dd6d285e 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -34,6 +34,7 @@ + From d7cc3edacedbc5e6692ebb3cd3d5e08ff40bf302 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Fri, 31 Jul 2026 18:14:28 +0530 Subject: [PATCH 23/27] [IMP] estate: compute offer deadline from validity Offers need a consistent way to determine their expiration date while allowing users to modify either the validity period or the deadline. Compute the deadline from the offer creation date and validity period, and implement the inverse computation so that changing the deadline automatically updates the corresponding validity. Chapter: 8 --- estate/models/estate_property_offer.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/estate/models/estate_property_offer.py b/estate/models/estate_property_offer.py index 9cdc2f6ca44..92a2ba9c2aa 100644 --- a/estate/models/estate_property_offer.py +++ b/estate/models/estate_property_offer.py @@ -1,4 +1,4 @@ -from odoo import fields, models +from odoo import api, fields, models class EstatePropertyOffer(models.Model): @@ -15,3 +15,22 @@ class EstatePropertyOffer(models.Model): ) partner_id = fields.Many2one("res.partner", required=True) property_id = fields.Many2one("estate.property", required=True, readonly=True) + validity = fields.Integer(default=7) + + @api.depends("create_date", "validity") + def _compute_date_deadline(self): + for offer in self: + base_date = ( + offer.create_date.date() if offer.create_date else fields.Date.today() + ) + offer.date_deadline = fields.Date.add(base_date, days=offer.validity) + + def _inverse_date_deadline(self): + for offer in self: + if offer.date_deadline: + base_date = ( + offer.create_date.date() + if offer.create_date + else fields.Date.today() + ) + offer.validity = (offer.date_deadline - base_date).days From a2e8f2825a24377388f573f60564fceef90d6135 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Mon, 3 Aug 2026 14:55:53 +0530 Subject: [PATCH 24/27] [IMP] estate: add deadline computation for property offers The validity period and deadline represent the same perpuse information from different perspectives. They should remain consistent regardless of which value users choose to edit. Compute the deadline from the offer creation date and validity period, and provide an inverse computation so that changing the deadline automatically updates the corresponding validity. Also clean up the property offer xml formatting to keep the file consistent with the expected coding conventions without changing its existing behavior. Chapter: 8 --- estate/__manifest__.py | 1 + estate/models/estate_property_offer.py | 5 +++ estate/views/estate_property_offer_view.xml | 38 +++++++++++++++++++++ estate/views/estate_property_views.xml | 27 +-------------- 4 files changed, 45 insertions(+), 26 deletions(-) create mode 100644 estate/views/estate_property_offer_view.xml diff --git a/estate/__manifest__.py b/estate/__manifest__.py index cf23e0220d6..e0f47e65529 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -14,6 +14,7 @@ "views/estate_property_views.xml", "views/estate_property_type_views.xml", "views/estate_property_tag_view.xml", + "views/estate_property_offer_view.xml", "views/estate_menus.xml", ], "application": True, diff --git a/estate/models/estate_property_offer.py b/estate/models/estate_property_offer.py index 92a2ba9c2aa..cd9319bf283 100644 --- a/estate/models/estate_property_offer.py +++ b/estate/models/estate_property_offer.py @@ -17,6 +17,11 @@ class EstatePropertyOffer(models.Model): property_id = fields.Many2one("estate.property", required=True, readonly=True) validity = fields.Integer(default=7) + date_deadline = fields.Date( + compute="_compute_date_deadline", + inverse="_inverse_date_deadline", + ) + @api.depends("create_date", "validity") def _compute_date_deadline(self): for offer in self: diff --git a/estate/views/estate_property_offer_view.xml b/estate/views/estate_property_offer_view.xml new file mode 100644 index 00000000000..448ce87aab6 --- /dev/null +++ b/estate/views/estate_property_offer_view.xml @@ -0,0 +1,38 @@ + + + + Estate Property Offers + estate.property.offer + tree,form + + + estate.property.offer.list + estate.property.offer + + + + + + + + + + + + estate.property.offer.form + estate.property.offer + +
+ + + + + + + + + +
+
+
+
diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index b09dd6d285e..1845d9fc441 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -74,32 +74,7 @@
- - estate.property.offer.list - estate.property.offer - - - - - - - - - - estate.property.offer.form - estate.property.offer - -
- - - - - - - -
-
-
+ estate.property.view.search estate.property From d247bd07ed7ee8360e8e6621dd98f8236dea6817 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Wed, 5 Aug 2026 10:52:20 +0530 Subject: [PATCH 25/27] [IMP] estate: automate property and offer fields Property information should stay consistent while reducing manual updates. Implement computed fields for the total area, best offer, and offer deadline. Add an inverse method to keep the deadline and validity in sync, and an onchange method to update garden-related fields based on user input. Chapter: 8 --- estate/models/estate_property.py | 10 ++++++++++ estate/views/estate_property_views.xml | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 00a61f3d1cf..4a0d166ead3 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -67,3 +67,13 @@ def _compute_total_area(self): def _compute_best_price(self): for record in self: record.best_price = max(record.offer_ids.mapped("price"), default=0.0) + + @api.onchange("garden") + def _onchange_garden(self): + for record in self: + if record.garden: + record.garden_area = 10 + record.garden_orientation = "north" + else: + record.garden_area = False + record.garden_orientation = False diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 1845d9fc441..b68253844d5 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -9,7 +9,7 @@ estate.property.list estate.property - + From de627600619220ad0110c758c4fb6bce1c21841c Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Wed, 5 Aug 2026 18:46:59 +0530 Subject: [PATCH 26/27] [REF] estate: reuse base date calculation for offer deadlines Extract the common base date calculation into a dedicated helper method to avoid duplicated logic in the deadline compute and inverse methods. This improves code readability, simplifies maintenance, and centralizes the fallback behavior for offers without a creation date without changing the existing functionality. Chapter: 8 --- estate/models/estate_property_offer.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/estate/models/estate_property_offer.py b/estate/models/estate_property_offer.py index cd9319bf283..33aa3dd8015 100644 --- a/estate/models/estate_property_offer.py +++ b/estate/models/estate_property_offer.py @@ -22,20 +22,19 @@ class EstatePropertyOffer(models.Model): inverse="_inverse_date_deadline", ) + def _get_base_date(self): + self.ensure_one() + return self.create_date.date() if self.create_date else fields.Date.today() + @api.depends("create_date", "validity") def _compute_date_deadline(self): for offer in self: - base_date = ( - offer.create_date.date() if offer.create_date else fields.Date.today() + offer.date_deadline = fields.Date.add( + offer._get_base_date(), + days=offer.validity, ) - offer.date_deadline = fields.Date.add(base_date, days=offer.validity) def _inverse_date_deadline(self): for offer in self: if offer.date_deadline: - base_date = ( - offer.create_date.date() - if offer.create_date - else fields.Date.today() - ) - offer.validity = (offer.date_deadline - base_date).days + offer.validity = (offer.date_deadline - offer._get_base_date()).days From 5ac9b7d15b1f1011e84a27f6599a83e92be55f8d Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Thu, 6 Aug 2026 14:57:47 +0530 Subject: [PATCH 27/27] [CLN] estate: remove temporary list ordering The default list ordering was added only for testing and is not part of the intended behavior of the estate module. Remove the temporary ordering configuration to restore the default view definition and avoid keeping unnecessary test changes. Chapter: 8 --- estate/views/estate_property_views.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index b68253844d5..1845d9fc441 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -9,7 +9,7 @@ estate.property.list estate.property - +