From 064c8b618629fc63f84235145abbbd1c6679665f Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Thu, 2 Jul 2026 16:40:58 +0530 Subject: [PATCH 01/13] [ADD] estate: add real estate module --- 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 ce23a4d2888bf24e7a79cf6441057d0abb97a3b5 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Thu, 2 Jul 2026 18:43:33 +0530 Subject: [PATCH 02/13] [ADD] estate: add property model --- 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 19e03bdbab79230c28f0e183de775518a2d739b5 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Fri, 3 Jul 2026 11:20:59 +0530 Subject: [PATCH 03/13] [LINT] estate: fix coding style issues --- 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 60e1b806d2343074f480cdac63d29a36b48df540 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Fri, 3 Jul 2026 14:06:33 +0530 Subject: [PATCH 04/13] [LINT] estate: fix the lint error --- 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 3356b1afb4d734cc843470527323b42842fa75ac Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Fri, 3 Jul 2026 15:18:43 +0530 Subject: [PATCH 05/13] [ADD] estate: add access control for estate property model --- 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 34a9ee245781d627b8b028de5938203ec73f94e5 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Fri, 3 Jul 2026 17:03:38 +0530 Subject: [PATCH 06/13] [LINT] estate: Fix the issues --- 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 f8a252cbb01287d0e188e71f2f29bd0eaf45d536 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Fri, 3 Jul 2026 17:12:17 +0530 Subject: [PATCH 07/13] [LINT] estate: Fix spacing issue --- 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 cdbaa7f9e22719254c960aaf37e48edfd1724d4f Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Mon, 6 Jul 2026 16:32:39 +0530 Subject: [PATCH 08/13] [ADD] estate: add views and menus for estate property management --- 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 3cd746f4d45c17beddba53fe4a984bb51e9bfbfe Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Mon, 6 Jul 2026 17:38:42 +0530 Subject: [PATCH 09/13] [FIX] estate: set default value for bedrooms and fix date_availability default --- 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 11817355f1691d20ec86a82bb55962be9c73656b Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Tue, 7 Jul 2026 14:08:08 +0530 Subject: [PATCH 10/13] [ADD] estate: enhance property views with detailed form and search options --- 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 a7322764f614400cd8837c9a58e5d0b3e7a8d7de Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Tue, 7 Jul 2026 17:35:43 +0530 Subject: [PATCH 11/13] [ADD] estate: add filter for expensive properties and done with 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 c50b316062a54c3dbe7546ebb29cad6f7e691a24 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Thu, 9 Jul 2026 17:34:37 +0530 Subject: [PATCH 12/13] [ADD] estate: implement property types and tags, enhance property form with new fields --- 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 24e0f40345bfc0bca1513ca898ab2cf1f2ae9e45 Mon Sep 17 00:00:00 2001 From: Piyush11204 Date: Thu, 9 Jul 2026 17:39:01 +0530 Subject: [PATCH 13/13] [FIX] estate: fix the runbot lint error --- 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 - +