From 3494f5d21108d1fb56f6c9f541f1ba0ba2c56c3b Mon Sep 17 00:00:00 2001 From: shadi-odoo Date: Fri, 3 Jul 2026 16:10:25 +0530 Subject: [PATCH 1/5] [ADD] estate: add new module Provide the required manifest metadata so the module can be recognized and installed correctly by Odoo. The metadata also ensures the module is properly categorized and ready for future development. --- estate/__init__.py | 0 estate/__manifest__.py | 6 ++++++ 2 files changed, 6 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..8a02e81f661 --- /dev/null +++ b/estate/__manifest__.py @@ -0,0 +1,6 @@ +{ + "name":"Real Estate", + "author":"Disha Shah(SHADI)", + "description":"""Training module for real estate""", + "category":"tutorials" +} \ No newline at end of file From f22996195e04033f790876ec2f4392eb1a578b03 Mon Sep 17 00:00:00 2001 From: shadi-odoo Date: Fri, 3 Jul 2026 16:32:08 +0530 Subject: [PATCH 2/5] [ADD] estate: add manifest configuration Add the remaining manifest metadata required for the module. Include the module version, base dependency, and application settings so the module can be installed and recognized as an Odoo application. --- estate/__manifest__.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 8a02e81f661..3caededdec8 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -1,6 +1,11 @@ { - "name":"Real Estate", - "author":"Disha Shah(SHADI)", - "description":"""Training module for real estate""", - "category":"tutorials" -} \ No newline at end of file + 'name':'Real Estate', + 'version':'1.0', + 'category':'tutorials', + 'depends':['base'], + 'installable':True, + 'application':True, + 'author':'Disha Shah(SHADI)', + 'description':"""Training module for real estate""", + 'license':'LPGL-3', +} From cce83584d36e912b883abe37ded505f67dc84b50 Mon Sep 17 00:00:00 2001 From: shadi-odoo Date: Mon, 6 Jul 2026 18:04:42 +0530 Subject: [PATCH 3/5] [IMP] estate: add estate property model Introduce the property model to allow the Estate module to store and manage information about real estate properties. The model defines the essential details of a property, such as its name, description, expected and selling prices, availability, living space, and additional features like a garage or garden. This provides the core data structure required for property management within the module. task-completed chapter 3 --- estate/__init__.py | 1 + estate/__manifest__.py | 18 +++++++++--------- estate/models/__init__.py | 1 + estate/models/estate_property.py | 19 +++++++++++++++++++ 4 files changed, 30 insertions(+), 9 deletions(-) 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 3caededdec8..afdb82e0ccd 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -1,11 +1,11 @@ { - 'name':'Real Estate', - 'version':'1.0', - 'category':'tutorials', - 'depends':['base'], - 'installable':True, - 'application':True, - 'author':'Disha Shah(SHADI)', - 'description':"""Training module for real estate""", - 'license':'LPGL-3', + 'name': 'Real Estate', + 'version': '1.0', + 'category': 'tutorials', + 'depends': ['base'], + 'installable': True, + 'application': True, + 'author': 'Disha Shah(SHADI)', + 'description': """Training module for real estate""", + 'license': 'LGPL-3', } diff --git a/estate/models/__init__.py b/estate/models/__init__.py new file mode 100644 index 00000000000..5e1963c9d2f --- /dev/null +++ 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 new file mode 100644 index 00000000000..d74273974ff --- /dev/null +++ b/estate/models/estate_property.py @@ -0,0 +1,19 @@ +from odoo import fields, models + + +class EstateProperties(models.Model): + _name = "estate.property" + _description = "Real Estate Properties" + 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')]) From 1a3164ef940b628f9ee34d9e29a9f54455484007 Mon Sep 17 00:00:00 2001 From: shadi-odoo Date: Tue, 7 Jul 2026 17:06:01 +0530 Subject: [PATCH 4/5] [IMP] estate: grant access to property records Allow internal users to access and manage estate property records. Add an access control rule that grants users in the Internal User group permission to read, create, update, and delete property records. This enables users to work with the Estate module while ensuring access is managed through Odoo's security framework. Task : "Chapter 4 completed" --- estate/__manifest__.py | 3 +++ estate/models/estate_property.py | 9 ++++++++- estate/security/ir.model.access.csv | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 estate/security/ir.model.access.csv diff --git a/estate/__manifest__.py b/estate/__manifest__.py index afdb82e0ccd..a8a563efb22 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -3,6 +3,9 @@ 'version': '1.0', 'category': 'tutorials', 'depends': ['base'], + 'data': [ + 'security/ir.model.access.csv', + ], 'installable': True, 'application': True, 'author': 'Disha Shah(SHADI)', diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index d74273974ff..95113164a0e 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -16,4 +16,11 @@ class EstateProperties(models.Model): garage = fields.Boolean() garden = fields.Boolean() garden_area = fields.Integer() - garden_orientation = fields.Selection(selection=[('north', 'North'), ('south', 'South'), ('east', 'East'), ('west', 'West')]) + garden_orientation = fields.Selection( + selection=[ + ("north", "North"), + ("south", "South"), + ("east", "East"), + ("west", "West"), + ] + ) diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv new file mode 100644 index 00000000000..78310a2c61a --- /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,estate.model_estate_property,base.group_user,1,1,1, From 828848ec12dbb2c044eb3570114b95bcc300aa13 Mon Sep 17 00:00:00 2001 From: shadi-odoo Date: Thu, 9 Jul 2026 17:36:04 +0530 Subject: [PATCH 5/5] [IMP] estate: configure property model Complete the basic configuration of the estate property model to make it ready for use in the Estate module. Add menus and a window action so users can access property records from the interface. Configure field defaults and attributes to simplify data entry and prevent unwanted changes. Introduce active and state fields to support property management throughout its lifecycle. Task: Completed Chapter 5 --- estate/__manifest__.py | 2 ++ estate/models/estate_property.py | 21 ++++++++++++++++++--- estate/views/estate_menus.xml | 6 ++++++ estate/views/estate_property_views.xml | 8 ++++++++ 4 files changed, 34 insertions(+), 3 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 a8a563efb22..a3ff8224d02 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -5,6 +5,8 @@ 'depends': ['base'], 'data': [ 'security/ir.model.access.csv', + 'views/estate_property_views.xml', + 'views/estate_menus.xml', ], 'installable': True, 'application': True, diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 95113164a0e..5f8f0011081 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -7,10 +7,12 @@ class EstateProperties(models.Model): name = fields.Char(required=True) description = fields.Text() postcode = fields.Char() - date_availability = fields.Date() + 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() - 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() @@ -24,3 +26,16 @@ class EstateProperties(models.Model): ("west", "West"), ] ) + active = fields.Boolean(default=True) + state = fields.Selection( + selection=[ + ("new", "New"), + ("offer received", "Offer Received"), + ("offer accepted", "Offer Accepted"), + ("sold", "Sold"), + ("canceled", "Canceled"), + ], + required=True, + copy=False, + default="new", + ) diff --git a/estate/views/estate_menus.xml b/estate/views/estate_menus.xml new file mode 100644 index 00000000000..e87c51cf7fa --- /dev/null +++ b/estate/views/estate_menus.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml new file mode 100644 index 00000000000..63cde3adf07 --- /dev/null +++ b/estate/views/estate_property_views.xml @@ -0,0 +1,8 @@ + + + + Property + estate.property + list,form + +