From b2837d22a95061ead614598d8203865e6c6a09ee Mon Sep 17 00:00:00 2001 From: "Harsh Gavit (hagav)" Date: Fri, 3 Jul 2026 11:36:18 +0530 Subject: [PATCH 01/13] [ADD] estate: bare-minimum structure to make module -by following guide of odoo 19.0 docs chapter 2 --- .gitignore | 3 +++ estate/__init__.py | 0 estate/__manifest__.py | 4 ++++ 3 files changed, 7 insertions(+) create mode 100644 estate/__init__.py create mode 100644 estate/__manifest__.py diff --git a/.gitignore b/.gitignore index b6e47617de1..10840bf7e45 100644 --- a/.gitignore +++ b/.gitignore @@ -127,3 +127,6 @@ dmypy.json # Pyre type checker .pyre/ + +#estate +estate/.idea/ 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..efb0e81e78b --- /dev/null +++ b/estate/__manifest__.py @@ -0,0 +1,4 @@ +{ + 'name': "estate", + 'depends': ["base_setup"] +} From 7b8a6fe919b478680a95d94319aba771ff7f23da Mon Sep 17 00:00:00 2001 From: "Harsh Gavit (hagav)" Date: Fri, 3 Jul 2026 15:48:33 +0530 Subject: [PATCH 02/13] [IMP] estate: basic model for estate module --- estate/models/__init__.py | 0 estate/models/estate.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 estate/models/__init__.py create mode 100644 estate/models/estate.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.py b/estate/models/estate.py new file mode 100644 index 00000000000..e69de29bb2d From 82e58997da4fe2e4b4999f291c72dc615a681d22 Mon Sep 17 00:00:00 2001 From: "Harsh Gavit (hagav)" Date: Fri, 3 Jul 2026 17:07:40 +0530 Subject: [PATCH 03/13] [IMP] estate: add ir.model.access.csv file for security of access rights --- estate/security/ir.model.access.csv | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 estate/security/ir.model.access.csv diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv new file mode 100644 index 00000000000..e69de29bb2d From 01ff0fe3b353f2d6df429a35b9dd4371b0fa3391 Mon Sep 17 00:00:00 2001 From: "Harsh Gavit (hagav)" Date: Fri, 3 Jul 2026 17:20:03 +0530 Subject: [PATCH 04/13] [FIX] estate: update missing properties in manifest --- estate/__init__.py | 1 + estate/__manifest__.py | 9 +++++++-- estate/models/__init__.py | 1 + estate/models/estate.py | 13 +++++++++++++ estate/security/ir.model.access.csv | 2 ++ 5 files changed, 24 insertions(+), 2 deletions(-) diff --git a/estate/__init__.py b/estate/__init__.py index e69de29bb2d..9a7e03eded3 100644 --- a/estate/__init__.py +++ b/estate/__init__.py @@ -0,0 +1 @@ +from . import models \ No newline at end of file diff --git a/estate/__manifest__.py b/estate/__manifest__.py index efb0e81e78b..938ce86baa1 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -1,4 +1,9 @@ { - 'name': "estate", - 'depends': ["base_setup"] + "name": "estate", + "depends": ["base_setup"], + "author": "Havit", + "license": "LGPL-3", + "data": [ + "security/ir.model.access.csv", + ], } diff --git a/estate/models/__init__.py b/estate/models/__init__.py index e69de29bb2d..824d8713100 100644 --- a/estate/models/__init__.py +++ b/estate/models/__init__.py @@ -0,0 +1 @@ +from . import estate \ No newline at end of file diff --git a/estate/models/estate.py b/estate/models/estate.py index e69de29bb2d..6ec68837ed3 100644 --- a/estate/models/estate.py +++ b/estate/models/estate.py @@ -0,0 +1,13 @@ +from odoo import models, fields + + +class Estate(models.Model): + _name = "estate" + _description = "Real Estate Module" + + # fields + name = fields.Char(required=True) + description = fields.Text() + date = fields.Datetime(readonly=True) + + garden_area = fields.Selection(string="Type", selection=[("e", "w")]) diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv index e69de29bb2d..b3d4b09271f 100644 --- a/estate/security/ir.model.access.csv +++ 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,access_estate,model_estate,base.group_user,1,1,1,1 \ No newline at end of file From 385eb6233057c4dba95ee3ebfd91662cfb971867 Mon Sep 17 00:00:00 2001 From: "Harsh Gavit (hagav)" Date: Fri, 3 Jul 2026 17:41:45 +0530 Subject: [PATCH 05/13] [LINT] estate: add new line to fix type check errors --- estate/__init__.py | 2 +- estate/models/__init__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/estate/__init__.py b/estate/__init__.py index 9a7e03eded3..0650744f6bc 100644 --- a/estate/__init__.py +++ b/estate/__init__.py @@ -1 +1 @@ -from . import models \ No newline at end of file +from . import models diff --git a/estate/models/__init__.py b/estate/models/__init__.py index 824d8713100..e4f59229d23 100644 --- a/estate/models/__init__.py +++ b/estate/models/__init__.py @@ -1 +1 @@ -from . import estate \ No newline at end of file +from . import estate From fa64dd8e3de30824f82bf2a277a4ad8768559334 Mon Sep 17 00:00:00 2001 From: "Harsh Gavit (hagav)" Date: Tue, 7 Jul 2026 10:30:50 +0530 Subject: [PATCH 06/13] [IMP] estate: add Pyright and Odoo LS configs Introduce configuration files for Pyright and the Odoo Language Server directly inside the addon to optimize the development workflow. - for zed --- .gitignore | 5 +---- estate/odools.toml | 9 +++++++++ estate/pyrightconfig.json | 7 +++++++ 3 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 estate/odools.toml create mode 100644 estate/pyrightconfig.json diff --git a/.gitignore b/.gitignore index 10840bf7e45..9fe17bcebb3 100644 --- a/.gitignore +++ b/.gitignore @@ -126,7 +126,4 @@ venv.bak/ dmypy.json # Pyre type checker -.pyre/ - -#estate -estate/.idea/ +.pyre/ \ No newline at end of file diff --git a/estate/odools.toml b/estate/odools.toml new file mode 100644 index 00000000000..d0f84c9dfab --- /dev/null +++ b/estate/odools.toml @@ -0,0 +1,9 @@ +[[config]] +name = "default" +odoo_path = "/home/odoo/odoo19/community" +addons_paths = [ + "/home/odoo/odoo19/community/addons", + "/home/odoo/odoo19/enterprise", + "//home/odoo/odoo19/tutorials" +] +python_path = "python3" diff --git a/estate/pyrightconfig.json b/estate/pyrightconfig.json new file mode 100644 index 00000000000..4cc4e0980d9 --- /dev/null +++ b/estate/pyrightconfig.json @@ -0,0 +1,7 @@ +{ + "extraPaths": ["../../community"], + "typeCheckingMode": "basic", + "reportPrivateLocalImportUsage": "none", + "reportUnannotatedClassAttribute": "none", + "reportArgumentType": "none", +} From 7fa4c951e5b2de127239cdf9eeb421f301aef655 Mon Sep 17 00:00:00 2001 From: "Harsh Gavit (hagav)" Date: Tue, 7 Jul 2026 10:44:04 +0530 Subject: [PATCH 07/13] [IMP] estate: add missing fields to Estate Model --- estate/models/estate.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/estate/models/estate.py b/estate/models/estate.py index 6ec68837ed3..ef3e7dd7ce4 100644 --- a/estate/models/estate.py +++ b/estate/models/estate.py @@ -1,4 +1,4 @@ -from odoo import models, fields +from odoo import fields, models class Estate(models.Model): @@ -8,6 +8,21 @@ class Estate(models.Model): # fields name = fields.Char(required=True) description = fields.Text() - date = fields.Datetime(readonly=True) - - garden_area = fields.Selection(string="Type", selection=[("e", "w")]) + postcode = fields.Char() + date_availability = fields.Date() + expected_price = fields.Float() + 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"), + ] + ) From 1b44b46382e7c77cddf9d9a8680178c82e2018cc Mon Sep 17 00:00:00 2001 From: "Harsh Gavit (hagav)" Date: Tue, 7 Jul 2026 12:57:25 +0530 Subject: [PATCH 08/13] [IMP] estate: add views(actions) & menus - action defined in estate_views.xml and linked with esate model - three level menus added using nested menuitem element - updated manifest to include menus & views files --- estate/__manifest__.py | 4 +++- estate/views/estate_menus.xml | 7 +++++++ estate/views/estate_views.xml | 7 +++++++ 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 estate/views/estate_menus.xml create mode 100644 estate/views/estate_views.xml diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 938ce86baa1..f234e221e49 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -1,9 +1,11 @@ -{ +{ # pyright: ignore[reportUnusedExpression] "name": "estate", "depends": ["base_setup"], "author": "Havit", "license": "LGPL-3", "data": [ "security/ir.model.access.csv", + "views/estate_views.xml", + "views/estate_menus.xml", ], } diff --git a/estate/views/estate_menus.xml b/estate/views/estate_menus.xml new file mode 100644 index 00000000000..1231c054746 --- /dev/null +++ b/estate/views/estate_menus.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/estate/views/estate_views.xml b/estate/views/estate_views.xml new file mode 100644 index 00000000000..3bf3dc9d2d0 --- /dev/null +++ b/estate/views/estate_views.xml @@ -0,0 +1,7 @@ + + + Estate + estate + list,form + + From e68219c715c7207aa42b5662a9ceeb5b97faed44 Mon Sep 17 00:00:00 2001 From: "Harsh Gavit (hagav)" Date: Tue, 7 Jul 2026 17:59:31 +0530 Subject: [PATCH 09/13] [IMP] estate: set default values and other field customizations - set default value in date_availability (3 months from current date) - set selling_price to readonly - bedrooms have now default value of 2 --- estate/models/estate.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/estate/models/estate.py b/estate/models/estate.py index ef3e7dd7ce4..b67e0f25fd7 100644 --- a/estate/models/estate.py +++ b/estate/models/estate.py @@ -1,3 +1,4 @@ +from dateutil.relativedelta import relativedelta from odoo import fields, models @@ -9,10 +10,12 @@ class Estate(models.Model): name = fields.Char(required=True) description = fields.Text() postcode = fields.Char() - date_availability = fields.Date() + date_availability = fields.Date( + default=lambda self: fields.Date.today() + relativedelta(months=3) + ) expected_price = fields.Float() - selling_price = fields.Float() - bedrooms = fields.Integer() + selling_price = fields.Float(readonly=True, copy=False) + bedrooms = fields.Integer(default=2) living_area = fields.Integer() facades = fields.Integer() garage = fields.Boolean() From c2960880194b20a1872d7ab5227a369d8b457451 Mon Sep 17 00:00:00 2001 From: "Harsh Gavit (hagav)" Date: Tue, 7 Jul 2026 18:18:11 +0530 Subject: [PATCH 10/13] [IMP] estate: add state(selection) & active(bool) fields --- estate/models/estate.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/estate/models/estate.py b/estate/models/estate.py index b67e0f25fd7..250435dc3ec 100644 --- a/estate/models/estate.py +++ b/estate/models/estate.py @@ -29,3 +29,16 @@ class Estate(models.Model): ("west", "West"), ] ) + state = fields.Selection( + selection=[ + ("new", "New"), + ("offer_received", "Offer Received"), + ("offer_accepted", "Offer Accepted"), + ("sold", "Sold"), + ("cancelled", "Cancelled"), + ], + required=True, + copy=False, + default="new", + ) + active = fields.Boolean(default=True) From 8003e01e371c8f51fef7f6ed24db6f2400c0175d Mon Sep 17 00:00:00 2001 From: "Harsh Gavit (hagav)" Date: Tue, 7 Jul 2026 18:43:43 +0530 Subject: [PATCH 11/13] [IMP] estate: add list view - uses some useful fields from estate model --- estate/views/estate_views.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/estate/views/estate_views.xml b/estate/views/estate_views.xml index 3bf3dc9d2d0..53b83f33c10 100644 --- a/estate/views/estate_views.xml +++ b/estate/views/estate_views.xml @@ -4,4 +4,22 @@ estate list,form + + + Estate List + estate + + + + + + + + + + + + + + From 2e5fe6a419ec07b1d3533558cdd4938de1816ccd Mon Sep 17 00:00:00 2001 From: "Harsh Gavit (hagav)" Date: Tue, 7 Jul 2026 19:09:32 +0530 Subject: [PATCH 12/13] [IMP] estate: update form ui - define form_view in views xml --- estate/views/estate_views.xml | 38 +++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/estate/views/estate_views.xml b/estate/views/estate_views.xml index 53b83f33c10..6158d4db059 100644 --- a/estate/views/estate_views.xml +++ b/estate/views/estate_views.xml @@ -22,4 +22,42 @@ + + Estate Form + estate + +
+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ From 9738b9b2b4c214535613b0deea7f3375445ea867 Mon Sep 17 00:00:00 2001 From: "Harsh Gavit (hagav)" Date: Wed, 8 Jul 2026 12:49:24 +0530 Subject: [PATCH 13/13] [IMP] estate: add search shortcuts, filters & groupBy - searchbar now suggests search in different fields when user types. - filter using availability based on state - groupBy based on Postcode - addon PATH correction in odools.toml --- estate/odools.toml | 2 +- estate/views/estate_views.xml | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/estate/odools.toml b/estate/odools.toml index d0f84c9dfab..109333b8646 100644 --- a/estate/odools.toml +++ b/estate/odools.toml @@ -4,6 +4,6 @@ odoo_path = "/home/odoo/odoo19/community" addons_paths = [ "/home/odoo/odoo19/community/addons", "/home/odoo/odoo19/enterprise", - "//home/odoo/odoo19/tutorials" + "/home/odoo/odoo19/tutorials" ] python_path = "python3" diff --git a/estate/views/estate_views.xml b/estate/views/estate_views.xml index 6158d4db059..e662889cce2 100644 --- a/estate/views/estate_views.xml +++ b/estate/views/estate_views.xml @@ -60,4 +60,29 @@ + + Estate Search + estate + + + + + + + + + + + + + +