From 91e246bdecf5c8550f5dffa15048e00c45eec20e Mon Sep 17 00:00:00 2001 From: Ait-Mlouk Omar Date: Wed, 24 Sep 2025 22:12:01 +0000 Subject: [PATCH 01/24] [FIX] website_airproof: fix template loading order issue The carousel template file was loaded too late in the manifest data sequence, causing a ParseError when new_page_templates tried to reference it. closes odoo/tutorials#988 X-original-commit: 34d70b5f1c1079bdb9ae64d3fb2f95c95d6cba22 Signed-off-by: Antoine Vandevenne (anv) --- website_airproof/__manifest__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website_airproof/__manifest__.py b/website_airproof/__manifest__.py index f6cd9dc0d5e..2c2c62d6a18 100644 --- a/website_airproof/__manifest__.py +++ b/website_airproof/__manifest__.py @@ -7,6 +7,9 @@ 'license': 'LGPL-3', 'depends': ['website_sale', 'website_sale_wishlist', 'website_blog', 'website_mass_mailing'], 'data': [ + # Snippets + 'views/snippets/options.xml', + 'views/snippets/s_airproof_carousel.xml', # Options 'data/presets.xml', 'data/website.xml', @@ -24,9 +27,6 @@ 'views/website_templates.xml', 'views/website_sale_templates.xml', 'views/website_sale_wishlist_templates.xml', - # Snippets - 'views/snippets/options.xml', - 'views/snippets/s_airproof_carousel.xml', # Images 'data/images.xml', ], From f6e90162c4400d3871f197fbcfdbea717cf87b47 Mon Sep 17 00:00:00 2001 From: "Claire (clbr)" Date: Fri, 21 Nov 2025 14:02:18 +0100 Subject: [PATCH 02/24] [FIX] awesome_owl: Fix missing css variables Some imports are missing in the manifest causing some warnings and the css doesn't load properly. Fix was fixed in the master branch, backporting it in 19.0 for the onboarding classes that always happen in the lastest stable. task-none Part-of: odoo/tutorials#1037 Signed-off-by: Antoine Vandevenne (anv) --- awesome_owl/__manifest__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/awesome_owl/__manifest__.py b/awesome_owl/__manifest__.py index e8ac1cda552..55002ab81de 100644 --- a/awesome_owl/__manifest__.py +++ b/awesome_owl/__manifest__.py @@ -29,8 +29,10 @@ 'assets': { 'awesome_owl.assets_playground': [ ('include', 'web._assets_helpers'), + ('include', 'web._assets_backend_helpers'), 'web/static/src/scss/pre_variables.scss', 'web/static/lib/bootstrap/scss/_variables.scss', + 'web/static/lib/bootstrap/scss/_maps.scss', ('include', 'web._assets_bootstrap'), ('include', 'web._assets_core'), 'web/static/src/libs/fontawesome/css/font-awesome.css', From f18cc42e95fdafa2b1ab91087330657040d6e9ea Mon Sep 17 00:00:00 2001 From: "Claire (clbr)" Date: Fri, 21 Nov 2025 14:18:08 +0100 Subject: [PATCH 03/24] [FIX] awesome_dashboard: Get rid of the deprecated warning `json` routes were deprecated to `jsonrpc` in 19.0, let's get rid of the warning to avoid confusion for the newdoos. task-none closes odoo/tutorials#1037 Signed-off-by: Antoine Vandevenne (anv) --- awesome_dashboard/controllers/controllers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awesome_dashboard/controllers/controllers.py b/awesome_dashboard/controllers/controllers.py index 56d4a051287..05977d3bd7f 100644 --- a/awesome_dashboard/controllers/controllers.py +++ b/awesome_dashboard/controllers/controllers.py @@ -9,7 +9,7 @@ logger = logging.getLogger(__name__) class AwesomeDashboard(http.Controller): - @http.route('/awesome_dashboard/statistics', type='json', auth='user') + @http.route('/awesome_dashboard/statistics', type='jsonrpc', auth='user') def get_statistics(self): """ Returns a dict of statistics about the orders: From b80f298d32a63c2eefc3b01766bb079072ab2bbe Mon Sep 17 00:00:00 2001 From: Kaushal Radadiya Date: Thu, 2 Jul 2026 18:04:29 +0530 Subject: [PATCH 04/24] [ADD] estate: initialize module for real estate application Set up the core module architecture to allow the Odoo server registry to recognize and install the 'estate' module for real estate management. --- estate/__init__.py | 0 estate/__manifest__.py | 8 ++++++++ 2 files changed, 8 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..66a59d367d1 --- /dev/null +++ b/estate/__manifest__.py @@ -0,0 +1,8 @@ +{ + 'name': 'Estate', + 'category': 'Sales/CRM', + 'summary': 'Track leads and close opportunities', + 'website': 'https://www.odoo.com/app/crm', + 'application': True, + 'depends': ['base',] +} From 1f97e5e8400f456f91ab9d7e713da56fbf19f59f Mon Sep 17 00:00:00 2001 From: Kaushal Radadiya Date: Fri, 3 Jul 2026 11:33:21 +0530 Subject: [PATCH 05/24] [CLN] estate: add manifest author and license details Specify missing author and open-source license attributes in the manifest file to prevent server warnings during module registration. --- estate/__manifest__.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 66a59d367d1..92c2b420feb 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -1,8 +1,10 @@ { - 'name': 'Estate', - 'category': 'Sales/CRM', - 'summary': 'Track leads and close opportunities', - 'website': 'https://www.odoo.com/app/crm', - 'application': True, - 'depends': ['base',] + "name": "Estate", + "category": "Sales/CRM", + "summary": "Track leads and close opportunities", + "website": "https://www.odoo.com/app/crm", + "application": True, + "depends": ["base"], + "author": "Kaushal Radadiya", + "license": "LGPL-3", } From e5609273c3a176ce14151b6f994e857e9e027c65 Mon Sep 17 00:00:00 2001 From: Kaushal Radadiya Date: Fri, 3 Jul 2026 11:45:15 +0530 Subject: [PATCH 06/24] [CLN] estate: clean up manifest configuration Remove unused default configuration keys from the manifest file to keep overall module metadata minimal and clean. --- estate/__manifest__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 92c2b420feb..2e102534446 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -1,8 +1,8 @@ { "name": "Estate", - "category": "Sales/CRM", - "summary": "Track leads and close opportunities", - "website": "https://www.odoo.com/app/crm", + "category": "", + "summary": "", + "website": "", "application": True, "depends": ["base"], "author": "Kaushal Radadiya", From 0f6da14f540208822d850e5ff81bc6a72802323f Mon Sep 17 00:00:00 2001 From: Kaushal Radadiya Date: Fri, 3 Jul 2026 14:40:45 +0530 Subject: [PATCH 07/24] [ADD] estate: create property data model Define the core estate.property business object in PostgreSQL to enable storing real estate listing attributes like prices, bedrooms, living area, and availability. --- estate/__init__.py | 1 + estate/__manifest__.py | 2 +- estate/models/__init__.py | 1 + estate/models/estate_property.py | 28 ++++++++++++++++++++++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 estate/models/__init__.py create mode 100644 estate/models/estate_property.py 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 2e102534446..56c67176804 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -7,4 +7,4 @@ "depends": ["base"], "author": "Kaushal Radadiya", "license": "LGPL-3", -} +} \ No newline at end of file diff --git a/estate/models/__init__.py b/estate/models/__init__.py new file mode 100644 index 00000000000..599a1f8bdbd --- /dev/null +++ b/estate/models/__init__.py @@ -0,0 +1 @@ +from . import estate_property \ No newline at end of file diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py new file mode 100644 index 00000000000..cb378d77f54 --- /dev/null +++ b/estate/models/estate_property.py @@ -0,0 +1,28 @@ +from odoo import fields, models + +class TestModel(models.Model): + _name = "estate.property" + _description = "Real Estate Property" + + 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 76106ec42febe9388e557322c8d43197254104c4 Mon Sep 17 00:00:00 2001 From: Kaushal Radadiya Date: Fri, 3 Jul 2026 15:10:34 +0530 Subject: [PATCH 08/24] [LINT] estate: apply standard code formatting Format Python files to adhere strictly to Odoo's official code style standards, ensuring continuous integration tests pass cleanly. --- estate/__init__.py | 2 +- estate/__manifest__.py | 2 +- estate/models/__init__.py | 2 +- estate/models/estate_property.py | 1 + 4 files changed, 4 insertions(+), 3 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/__manifest__.py b/estate/__manifest__.py index 56c67176804..2e102534446 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -7,4 +7,4 @@ "depends": ["base"], "author": "Kaushal Radadiya", "license": "LGPL-3", -} \ No newline at end of file +} diff --git a/estate/models/__init__.py b/estate/models/__init__.py index 599a1f8bdbd..5e1963c9d2f 100644 --- a/estate/models/__init__.py +++ b/estate/models/__init__.py @@ -1 +1 @@ -from . import estate_property \ No newline at end of file +from . import estate_property diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index cb378d77f54..e87e2ded035 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -1,5 +1,6 @@ from odoo import fields, models + class TestModel(models.Model): _name = "estate.property" _description = "Real Estate Property" From ac7022b711ac24f0aa679d3550ab755cf23cb0bc Mon Sep 17 00:00:00 2001 From: Kaushal Radadiya Date: Fri, 3 Jul 2026 16:04:43 +0530 Subject: [PATCH 09/24] [ADD] estate: add user access rights for properties Configure security access control rules (ir.model.access.csv) to allow standard internal users to access and manage real estate property records without permission errors. --- estate/__manifest__.py | 4 ++++ estate/security/ir.model.access.csv | 2 ++ 2 files changed, 6 insertions(+) create mode 100644 estate/security/ir.model.access.csv diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 2e102534446..7fb5945598c 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -4,6 +4,10 @@ "summary": "", "website": "", "application": True, + "installable": True, + "data": [ + "security/ir.model.access.csv", + ], "depends": ["base"], "author": "Kaushal Radadiya", "license": "LGPL-3", 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 c96f13d30992a4b611b4200ea3f62c9f71bb35a1 Mon Sep 17 00:00:00 2001 From: Kaushal Radadiya Date: Mon, 6 Jul 2026 17:38:57 +0530 Subject: [PATCH 10/24] [ADD] estate: add navigation menus and default record logic Create top-level menus and actions so users can open properties in the web interface. Set default availability dates and protect selling prices from unauthorized manual editing. --- estate/__manifest__.py | 1 + estate/views/estate_property_views.xml | 12 ++++++++++++ 2 files changed, 13 insertions(+) create mode 100644 estate/views/estate_property_views.xml diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 7fb5945598c..899175202af 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -7,6 +7,7 @@ "installable": True, "data": [ "security/ir.model.access.csv", + "views/estate_property_views.xml", ], "depends": ["base"], "author": "Kaushal Radadiya", diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml new file mode 100644 index 00000000000..8737483cbf9 --- /dev/null +++ b/estate/views/estate_property_views.xml @@ -0,0 +1,12 @@ + + + + Properties + estate.property + list,form + + + + + \ No newline at end of file From da9b8e999aab8fcf921078b34c3a160e1b585767 Mon Sep 17 00:00:00 2001 From: Kaushal Radadiya Date: Mon, 6 Jul 2026 18:36:21 +0530 Subject: [PATCH 11/24] [CLN] tutorials: prevent committing personal IDE settings Add local IDE configuration folders (.idea/) to .gitignore to keep local development cache out of shared repository history. --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index b6e47617de1..1b9e130f9ff 100644 --- a/.gitignore +++ b/.gitignore @@ -26,7 +26,7 @@ share/python-wheels/ .installed.cfg *.egg MANIFEST - +.idea # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. From 041b7b014ade2879b06321039b7e3d260886027d Mon Sep 17 00:00:00 2001 From: Kaushal Radadiya Date: Tue, 7 Jul 2026 18:59:27 +0530 Subject: [PATCH 12/24] [ADD] estate: add summary list view for property listings Define a tabular list view so real estate agents can browse and compare multiple property records from a single overview screen. --- estate/views/estate_property_views.xml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 8737483cbf9..3916bd74f02 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -9,4 +9,23 @@ + + + + estate.property.list + estate.property + + + + + + + + + + + + + + \ No newline at end of file From 0fed210710fa79b7c85ef097bf906bd44e082153 Mon Sep 17 00:00:00 2001 From: Kaushal Radadiya Date: Wed, 8 Jul 2026 12:18:07 +0530 Subject: [PATCH 13/24] [FIX] estate: fix mismatched field names on property list view Correct XML view field names to match Python model field definitions, fixing ParseErrors that prevented the module from loading. --- estate/views/estate_property_views.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 3916bd74f02..34f62568710 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -10,19 +10,19 @@ - + estate.property.list estate.property - + - + From 64a0a9a9581fbda6de97e06ff52d82e66dc84dd4 Mon Sep 17 00:00:00 2001 From: Kaushal Radadiya Date: Wed, 8 Jul 2026 18:50:34 +0530 Subject: [PATCH 14/24] [ADD] estate: add structured form view for property details Build a detailed form view with title headers, grouped pricing fields, and notebook tabs to structure property data entry for users. --- estate/views/estate_property_views.xml | 47 ++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 34f62568710..15ac4b17883 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -15,6 +15,7 @@ estate.property.list estate.property + @@ -24,6 +25,52 @@ + + + + + + estate.property.list + estate.property + + +
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
From 57ac839975804ee3305701f7f8daa575d84fff21 Mon Sep 17 00:00:00 2001 From: Kaushal Radadiya Date: Thu, 9 Jul 2026 17:53:13 +0530 Subject: [PATCH 15/24] [ADD] estate: enable search bar functionality for properties Define search criteria on the property search view so users can search listings by typing titles, postcodes, or price ranges directly in the search interface. --- estate/views/estate_property_views.xml | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 15ac4b17883..c11a3803210 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -10,7 +10,7 @@ - + estate.property.list estate.property @@ -29,6 +29,7 @@ + estate.property.list estate.property @@ -74,5 +75,22 @@ + + + estate.property.list + estate.property + + + + + + + + + + + + + \ No newline at end of file From 99b1b4f2e3e42c88f108dcb24bdde294c43dcddd Mon Sep 17 00:00:00 2001 From: Kaushal Radadiya Date: Mon, 13 Jul 2026 18:36:08 +0530 Subject: [PATCH 16/24] [ADD] estate: add quick filters and location grouping Add an Available quick filter button and a 'Group By Postcode' option to help agents filter out sold listings and organize properties geographically. --- estate/views/estate_property_views.xml | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index c11a3803210..bf6df5ac8fa 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -10,7 +10,7 @@ - + estate.property.list estate.property @@ -29,7 +29,7 @@ - + estate.property.list estate.property @@ -75,19 +75,27 @@ - + estate.property.list estate.property + + + + + + + + From 4729b95721abd35b553ddc9a3f488e3540e41c51 Mon Sep 17 00:00:00 2001 From: Kaushal Radadiya Date: Mon, 13 Jul 2026 18:53:35 +0530 Subject: [PATCH 17/24] [IMP] estate: prevent stale price copying on new records Disable record duplication on price and availability fields during copy operations to enforce clean data when creating new property listings. --- estate/models/estate_property.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index e87e2ded035..b66ab6c128f 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -27,3 +27,20 @@ class TestModel(models.Model): ], string="Garden Orientation", ) + + +active = fields.Boolean(default=True) + +state = fields.Selection( + selection=[ + ("new", "New"), + ("offer_received", "Offer Received"), + ("offer_accepted", "Offer Accepted"), + ("sold", "Sold"), + ("cancelled", "Cancelled"), + ], + required=True, + copy=False, + default="new", + string="Status", +) From cb0b27f3c30c67c4e77cd172e373ea3fe16a8cc1 Mon Sep 17 00:00:00 2001 From: Kaushal Radadiya Date: Mon, 13 Jul 2026 19:03:07 +0530 Subject: [PATCH 18/24] [IMP] estate: bump module version to trigger registry sync Increment manifest version number to force Odoo to reload the module and synchronize recent database schema updates on service restart. --- estate/__manifest__.py | 1 + estate/views/estate_property_views.xml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 899175202af..344dab26f9e 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -1,5 +1,6 @@ { "name": "Estate", + "version": "1.1", "category": "", "summary": "", "website": "", diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index bf6df5ac8fa..38ede48f6d5 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -77,7 +77,7 @@ - estate.property.list + estate.property.search estate.property From 20ab86401fe7c449400f4ad0ba0e08d9dd6d42c5 Mon Sep 17 00:00:00 2001 From: Kaushal Radadiya Date: Tue, 14 Jul 2026 17:44:58 +0530 Subject: [PATCH 19/24] [FIX] estate: improve search usability and form field placement Reorder model fields to position state attributes cleanly Remove redundant label overrides so search fields inherit standard model names and Ensure status tracking fields appear on list and form views to monitor property state progression. --- estate/models/estate_property.py | 29 ++++++++++++------------ estate/views/estate_property_views.xml | 31 +++++++++++++------------- 2 files changed, 29 insertions(+), 31 deletions(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index b66ab6c128f..78aedfaa9b1 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -28,19 +28,18 @@ class TestModel(models.Model): string="Garden Orientation", ) + state = fields.Selection( + selection=[ + ("new", "New"), + ("offer_received", "Offer Received"), + ("offer_accepted", "Offer Accepted"), + ("sold", "Sold"), + ("cancelled", "Cancelled"), + ], + required=True, + copy=False, + default="new", + string="Status", + ) -active = fields.Boolean(default=True) - -state = fields.Selection( - selection=[ - ("new", "New"), - ("offer_received", "Offer Received"), - ("offer_accepted", "Offer Accepted"), - ("sold", "Sold"), - ("cancelled", "Cancelled"), - ], - required=True, - copy=False, - default="new", - string="Status", -) + active = fields.Boolean(default=True) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 38ede48f6d5..0bfb080d5c3 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -17,13 +17,14 @@ - + + @@ -31,7 +32,7 @@ - estate.property.list + estate.property.form estate.property @@ -65,6 +66,7 @@ + @@ -75,29 +77,26 @@ + estate.property.search estate.property + - + + + + + + - - - - - - - - - - - - + + - From 62fb7a691485663b8bd0e9f61cddf65d6745d9a0 Mon Sep 17 00:00:00 2001 From: Kaushal Radadiya Date: Tue, 21 Jul 2026 14:18:34 +0530 Subject: [PATCH 20/24] [REF] estate: separate menu declarations from view files Extract menu items out of estate_property_views.xml and move them into views/estate_menus.xml. This maintains architectural separation between view layouts and navigation controls, keeping the module organized as it grows Update manifest load order to process views before menus. --- .gitignore | 1 - estate/__manifest__.py | 1 + estate/security/ir.model.access.csv | 2 +- estate/views/estate_menus.xml | 18 ++++++++++++++++++ estate/views/estate_property_views.xml | 16 +--------------- 5 files changed, 21 insertions(+), 17 deletions(-) create mode 100644 estate/views/estate_menus.xml diff --git a/.gitignore b/.gitignore index 1b9e130f9ff..736fa2fc3ce 100644 --- a/.gitignore +++ b/.gitignore @@ -26,7 +26,6 @@ share/python-wheels/ .installed.cfg *.egg MANIFEST -.idea # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 344dab26f9e..54e9aefb7b4 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -9,6 +9,7 @@ "data": [ "security/ir.model.access.csv", "views/estate_property_views.xml", + "views/estate_menus.xml", ], "depends": ["base"], "author": "Kaushal Radadiya", 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 diff --git a/estate/views/estate_menus.xml b/estate/views/estate_menus.xml new file mode 100644 index 00000000000..2cf39704816 --- /dev/null +++ b/estate/views/estate_menus.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 0bfb080d5c3..2de6058495a 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -5,17 +5,12 @@ estate.property list,form - - - estate.property.list estate.property - @@ -26,7 +21,6 @@ - @@ -35,7 +29,6 @@ estate.property.form estate.property -
@@ -43,7 +36,6 @@
- @@ -54,7 +46,6 @@ - @@ -70,21 +61,17 @@ -
-
- estate.property.search estate.property - @@ -99,5 +86,4 @@ - - \ No newline at end of file + From d69a6a75da053fbc74deacb9edab82de9d2d6a51 Mon Sep 17 00:00:00 2001 From: Kaushal Radadiya Date: Fri, 24 Jul 2026 18:12:47 +0530 Subject: [PATCH 21/24] [ADD] estate: add property type model for categorization Created the estate.property.type model to support property categorization, such as residential, commercial, or land. Having a dedicated model allows us to link each property to a single type via a many2one relationship, making it much easier to organize, filter, and search listings based on business needs. --- estate/models/estate_property_type.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 estate/models/estate_property_type.py diff --git a/estate/models/estate_property_type.py b/estate/models/estate_property_type.py new file mode 100644 index 00000000000..137b256c94c --- /dev/null +++ b/estate/models/estate_property_type.py @@ -0,0 +1,9 @@ +from odoo import fields, models + + +class EstatePropertyType(models.Model): + _name = "estate.property.type" + _description = "Real Estate Property Type" + + name = fields.Char(required=True) + property_type_id = fields.Many2one("estate.property.type", string="Property Type") From 357c527d77f69458f1e1ece6bdf1cc6fe12a7442 Mon Sep 17 00:00:00 2001 From: Kaushal Radadiya Date: Mon, 27 Jul 2026 18:52:35 +0530 Subject: [PATCH 22/24] [ADD] estate: adding property types to allow property filtering Added a new property type model and linked it to estate.property using a Many2one field. This allows users to classify properties by type and filter listings accordingly. Added security access rules, window actions, and form view definition. --- estate/__manifest__.py | 1 + estate/models/__init__.py | 2 +- estate/models/estate_property.py | 1 + estate/models/estate_property_type.py | 1 - estate/security/ir.model.access.csv | 1 + estate/views/estate_property_type_views.xml | 18 ++++++++++++++++++ 6 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 estate/views/estate_property_type_views.xml diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 54e9aefb7b4..0660abae3d8 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -9,6 +9,7 @@ "data": [ "security/ir.model.access.csv", "views/estate_property_views.xml", + "views/estate_property_type_views.xml", "views/estate_menus.xml", ], "depends": ["base"], diff --git a/estate/models/__init__.py b/estate/models/__init__.py index 5e1963c9d2f..281918e6c4e 100644 --- a/estate/models/__init__.py +++ b/estate/models/__init__.py @@ -1 +1 @@ -from . import estate_property +from . import (estate_property, estate_property_type) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 78aedfaa9b1..a865b1a3ce2 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -43,3 +43,4 @@ class TestModel(models.Model): ) active = fields.Boolean(default=True) + property_type_id = fields.Many2one("estate.property.type", string="Property Type") diff --git a/estate/models/estate_property_type.py b/estate/models/estate_property_type.py index 137b256c94c..ced40ef01cc 100644 --- a/estate/models/estate_property_type.py +++ b/estate/models/estate_property_type.py @@ -6,4 +6,3 @@ class EstatePropertyType(models.Model): _description = "Real Estate Property Type" name = fields.Char(required=True) - property_type_id = fields.Many2one("estate.property.type", string="Property Type") diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv index 32389642d4f..1eb993accca 100644 --- a/estate/security/ir.model.access.csv +++ b/estate/security/ir.model.access.csv @@ -1,2 +1,3 @@ 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,estate.property.type,model_estate_property_type,base.group_user,1,1,1,1 \ 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 00000000000..5ad1dfe6ae3 --- /dev/null +++ b/estate/views/estate_property_type_views.xml @@ -0,0 +1,18 @@ + + + + Properties Type + estate.property.type + list,form + + + + estate.property.type.form + estate.property.type + +
+ + +
+
+
From cff0e080ee6278f6b8c2f8cd672535b8b6a6f279 Mon Sep 17 00:00:00 2001 From: Kaushal Radadiya Date: Tue, 28 Jul 2026 18:46:18 +0530 Subject: [PATCH 23/24] [ADD] estate: added property types to settings menu Added Property Types menu under Settings Menu with dedicated list and form views. This gives users a clear place in the UI to configure and manage property types for their property listings. --- estate/views/estate_menus.xml | 20 ++++++++++++++++---- estate/views/estate_property_type_views.xml | 14 +++++++++++++- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/estate/views/estate_menus.xml b/estate/views/estate_menus.xml index 2cf39704816..79b27c84b0b 100644 --- a/estate/views/estate_menus.xml +++ b/estate/views/estate_menus.xml @@ -1,18 +1,30 @@ - + - + - + + action="estate.estate_property_action"/> + + + + + + + diff --git a/estate/views/estate_property_type_views.xml b/estate/views/estate_property_type_views.xml index 5ad1dfe6ae3..a3783523f72 100644 --- a/estate/views/estate_property_type_views.xml +++ b/estate/views/estate_property_type_views.xml @@ -6,12 +6,24 @@ list,form + + estate.property.type.list + estate.property.type + + + + + + + estate.property.type.form estate.property.type
- + + +
From 6826887e2fd84a0302488bc31ab4a2f16a692a1f Mon Sep 17 00:00:00 2001 From: Kaushal Radadiya Date: Thu, 30 Jul 2026 19:04:57 +0530 Subject: [PATCH 24/24] [ADD] estate: add buyer and salesman fields to property form Add buyer_id and salesman_id fields so we can track who bought and sold each property. Added the 'Other Info' tab to set salesman and buyer. Set the current user as the default salesman, and ensured buyer info doesn't carry over when duplicating records. --- estate/__manifest__.py | 4 ++-- estate/models/estate_property.py | 4 +++- ...state_property_views.xml => estate_property.xml} | 13 ++++++++++--- ...erty_type_views.xml => estate_property_type.xml} | 0 4 files changed, 15 insertions(+), 6 deletions(-) rename estate/views/{estate_property_views.xml => estate_property.xml} (89%) rename estate/views/{estate_property_type_views.xml => estate_property_type.xml} (100%) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 0660abae3d8..2d13d3e8853 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -8,8 +8,8 @@ "installable": True, "data": [ "security/ir.model.access.csv", - "views/estate_property_views.xml", - "views/estate_property_type_views.xml", + "views/estate_property.xml", + "views/estate_property_type.xml", "views/estate_menus.xml", ], "depends": ["base"], diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index a865b1a3ce2..59f051af559 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -43,4 +43,6 @@ class TestModel(models.Model): ) active = fields.Boolean(default=True) - property_type_id = fields.Many2one("estate.property.type", string="Property Type") + property_type_id = fields.Many2one('estate.property.type', string="Property Type") + salesman_id = fields.Many2one("res.users", string="Salesman", default=lambda self: self.env.user.id) + buyer_id = fields.Many2one("res.partner", string="Buyer", copy=False) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property.xml similarity index 89% rename from estate/views/estate_property_views.xml rename to estate/views/estate_property.xml index 2de6058495a..5c63df5212c 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property.xml @@ -6,7 +6,7 @@ list,form - + estate.property.list estate.property @@ -32,12 +32,13 @@
-

+

-

+
+ @@ -60,6 +61,12 @@ + + + + + +
diff --git a/estate/views/estate_property_type_views.xml b/estate/views/estate_property_type.xml similarity index 100% rename from estate/views/estate_property_type_views.xml rename to estate/views/estate_property_type.xml