From 1a1529ca83b112d33c002607d69d1b2d25691032 Mon Sep 17 00:00:00 2001 From: Ravij Parikh Date: Wed, 3 Dec 2025 15:34:46 +0530 Subject: [PATCH 1/6] [ADD] Chapter 1,2 : add initial estate application Created the necessary __init__.py and __manifest__.py files to initialize the estate application. --- estate/__init__.py | 0 estate/__manifest__.py | 11 +++++++++++ 2 files changed, 11 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..ebf2dcf18ed --- /dev/null +++ b/estate/__manifest__.py @@ -0,0 +1,11 @@ +{ + 'name': 'Real Estate', + 'version': '1.0', + 'category': 'Real Estate', + 'depends': ['base'], + 'author': 'snrav-odoo', + 'license': 'LGPL-3', + 'description': 'Real estate purchase & sales', + 'application': True, +} + From 8e80e5a1b22715138ab11b1d159974476b2c43b2 Mon Sep 17 00:00:00 2001 From: Ravij Parikh Date: Wed, 3 Dec 2025 16:01:45 +0530 Subject: [PATCH 2/6] [CLN] estate: add missing newline at end of manifest file. --- estate/__manifest__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index ebf2dcf18ed..e7b2632b0a8 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -9,3 +9,4 @@ 'application': True, } + From 81cf3276e1c76fe820da2c7d9561c3e117c1f3a7 Mon Sep 17 00:00:00 2001 From: Ravij Parikh Date: Wed, 3 Dec 2025 17:44:20 +0530 Subject: [PATCH 3/6] [ADD] (Chapter 3) estate: add initial estate module structure Introduces the basic scaffolding for the new real estate module. - Creates the module initialization files ( __init__). - Adds the first 'estate.property' model definition. - Includes the initial set of base fields for the model. --- estate/__init__.py | 1 + estate/__manifest__.py | 1 + estate/models/__init__.py | 4 ++++ estate/models/estate_property.py | 26 ++++++++++++++++++++++++++ 4 files changed, 32 insertions(+) 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..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 e7b2632b0a8..3aaae03f56d 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -10,3 +10,4 @@ } + diff --git a/estate/models/__init__.py b/estate/models/__init__.py new file mode 100644 index 00000000000..df511dab089 --- /dev/null +++ b/estate/models/__init__.py @@ -0,0 +1,4 @@ +from . import estate_property + + + diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py new file mode 100644 index 00000000000..e5bfa84374c --- /dev/null +++ b/estate/models/estate_property.py @@ -0,0 +1,26 @@ +from odoo import models, fields + + +class EstateProperty(models.Model): + _name = "estate.property" + _description = "Real Estate Property" + + name = fields.Char(required=True) + description = fields.Text() + pincode = fields.Char() + date_availability = fields.Date() + expected_price = fields.Float(required=True) + selling_price = fields.Float() + bedrooms = fields.Integer(required=True) + living_area = fields.Integer() + facades = fields.Integer() + garage = fields.Boolean() + garden = fields.Boolean() + garden_area = fields.Integer(string="Garden Area (sqft)") + garden_orientation = fields.Selection([ + ('north', 'North'), + ('south', 'South'), + ('east', 'East'), + ('west', 'West'), + ]) + From 1840534ccf0037997dbb9ad956ca5f1c9c38c269 Mon Sep 17 00:00:00 2001 From: Ravij Parikh Date: Thu, 4 Dec 2025 10:51:46 +0530 Subject: [PATCH 4/6] [CLN] estate: added missing newline at end of files. --- estate/__manifest__.py | 3 --- estate/models/__init__.py | 3 --- estate/models/estate_property.py | 1 - 3 files changed, 7 deletions(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 3aaae03f56d..3267deadee5 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -8,6 +8,3 @@ 'description': 'Real estate purchase & sales', 'application': True, } - - - diff --git a/estate/models/__init__.py b/estate/models/__init__.py index df511dab089..5e1963c9d2f 100644 --- a/estate/models/__init__.py +++ b/estate/models/__init__.py @@ -1,4 +1 @@ from . import estate_property - - - diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index e5bfa84374c..9d5a5dcbeaa 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -23,4 +23,3 @@ class EstateProperty(models.Model): ('east', 'East'), ('west', 'West'), ]) - From f265d33bfc76246cdcd5be3c9fe0decc52de5c85 Mon Sep 17 00:00:00 2001 From: Ravij Parikh Date: Thu, 4 Dec 2025 11:46:35 +0530 Subject: [PATCH 5/6] [IMP] (Chapter : 4) Estate: Implemented security for model access. - Added a security CSV file in the `security` folder - Granted users access to the `estate.property` model --- estate/__manifest__.py | 3 +++ estate/security/ir.model.access.csv | 2 ++ 2 files changed, 5 insertions(+) create mode 100644 estate/security/ir.model.access.csv diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 3267deadee5..3b92e789b1b 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -6,5 +6,8 @@ 'author': 'snrav-odoo', 'license': 'LGPL-3', 'description': 'Real estate purchase & sales', + 'data': [ + 'security/ir.model.access.csv' + ], 'application': True, } diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv new file mode 100644 index 00000000000..b5005de0d92 --- /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 +estate.access_estate_property,access_estate_property,model_estate_property,base.group_user,1,1,1,1 \ No newline at end of file From 93702f2f39226e1d77e0ac0311a0522c3d6f81c7 Mon Sep 17 00:00:00 2001 From: Ravij Parikh Date: Thu, 4 Dec 2025 18:38:28 +0530 Subject: [PATCH 6/6] [ADD] (Chapter : 5) estate - added property menus, action, and views - Added Real Estate menu structure and link property action - Created window action for estate.property - Load property views and menu XML in manifest --- estate/__manifest__.py | 2 ++ estate/models/estate_property.py | 20 ++++++++++++++++++-- estate/views/estate_property_menu.xml | 18 ++++++++++++++++++ estate/views/estate_property_views.xml | 13 +++++++++++++ 4 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 estate/views/estate_property_menu.xml create mode 100644 estate/views/estate_property_views.xml diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 3b92e789b1b..33cbadc7741 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -7,6 +7,8 @@ 'license': 'LGPL-3', 'description': 'Real estate purchase & sales', 'data': [ + 'views/estate_property_views.xml', + 'views/estate_property_menu.xml', 'security/ir.model.access.csv' ], 'application': True, diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 9d5a5dcbeaa..ce8206a3a39 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -1,4 +1,5 @@ from odoo import models, fields +from dateutil.relativedelta import relativedelta class EstateProperty(models.Model): @@ -8,10 +9,13 @@ class EstateProperty(models.Model): name = fields.Char(required=True) description = fields.Text() pincode = fields.Char() - date_availability = fields.Date() + date_availability = fields.Date( + copy=False, + default=lambda self: fields.Date.context_today(self) + relativedelta(months=3), + ) expected_price = fields.Float(required=True) selling_price = fields.Float() - bedrooms = fields.Integer(required=True) + bedrooms = fields.Integer(default=2) living_area = fields.Integer() facades = fields.Integer() garage = fields.Boolean() @@ -23,3 +27,15 @@ class EstateProperty(models.Model): ('east', 'East'), ('west', 'West'), ]) + state = fields.Selection( + selection=[ + ("new", "New"), + ("offer_received", "Offer Received"), + ("offer_accepted", "Offer Accepted"), + ("sold", "Sold"), + ("cancelled", "Cancelled"), + ], + string="Status", + default="new", + ) + active = fields.Boolean(default=False) diff --git a/estate/views/estate_property_menu.xml b/estate/views/estate_property_menu.xml new file mode 100644 index 00000000000..7965f791aee --- /dev/null +++ b/estate/views/estate_property_menu.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml new file mode 100644 index 00000000000..56011cb8191 --- /dev/null +++ b/estate/views/estate_property_views.xml @@ -0,0 +1,13 @@ + + + + Estate Property + estate.property + list,form + +

+ Create your Properties here ! +

+
+
+