From 05651512eda4c2022cffa5eb5ffa55d7683ac3bc Mon Sep 17 00:00:00 2001 From: manab-odoo Date: Tue, 15 Sep 2026 13:31:40 +0200 Subject: [PATCH 01/14] Initialized the init & manifest files --- estate/__init__.py | 0 estate/__manifest__.py | 5 +++++ 2 files changed, 5 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..ef3f8030cb9 --- /dev/null +++ b/estate/__manifest__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +{ + 'name' : 'estate', + 'summary' : 'Estate Module for the Tutorial' +} \ No newline at end of file From 67df5c56f47576b0b2f6d0c0806fddc86209e636 Mon Sep 17 00:00:00 2001 From: manab-odoo Date: Tue, 15 Sep 2026 15:04:53 +0200 Subject: [PATCH 02/14] Chapter 3 changes --- estate/__init__.py | 1 + estate/__manifest__.py | 4 +++- estate/models/__init__.py | 1 + estate/models/estate_property.py | 25 +++++++++++++++++++++++++ 4 files changed, 30 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 ef3f8030cb9..8763844607b 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -1,5 +1,7 @@ # -*- coding: utf-8 -*- { 'name' : 'estate', - 'summary' : 'Estate Module for the Tutorial' + 'summary' : 'Estate Module for the Tutorial', + 'author' : 'manab', + '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..f4c8fd6db6d --- /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..380383f34f9 --- /dev/null +++ b/estate/models/estate_property.py @@ -0,0 +1,25 @@ +from odoo import models, fields + +class Property(models.Model): + _name = "estate_property" + _description = "estate property model" + + name = fields.Char('Nom', required=True) + description = fields.Text('Description') + postcode = fields.Char('Post Code') + date_availability = fields.Date('Date Availability') + expected_price = fields.Float('Expected Price', required=True) + selling_price = fields.Float('Selling Prince') + bedrooms = fields.Integer('# Bedrooms') + living_area = fields.Integer('# Living Areas') + facades = fields.Integer('# Facades') + garage = fields.Boolean('Has Garage') + garden = fields.Boolean('Has Garden') + garden_area = fields.Integer('# Garden Areas') + garden_orientation = fields.Selection( + string = 'Garden Orientation', + selection=[('north', 'North'), ('south','South'),('east','East'),('west','West')] + ) + + + From 088f66db9e19f01be6cea46a9ad342d89c68f199 Mon Sep 17 00:00:00 2001 From: manab-odoo Date: Wed, 16 Sep 2026 11:31:30 +0200 Subject: [PATCH 03/14] Added an empty line at the end of each files + Chapter 4 / 5 done and 6 halfway through --- estate/__init__.py | 2 +- estate/__manifest__.py | 7 ++++- estate/models/__init__.py | 2 +- estate/models/estate_property.py | 31 +++++++++++++++----- estate/security/ir.model.access.csv | 2 ++ estate/views/estate_menu_views.xml | 11 +++++++ estate/views/estate_property_views.xml | 40 ++++++++++++++++++++++++++ 7 files changed, 85 insertions(+), 10 deletions(-) create mode 100644 estate/security/ir.model.access.csv create mode 100644 estate/views/estate_menu_views.xml create mode 100644 estate/views/estate_property_views.xml 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 8763844607b..2d1c97cbd73 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -4,4 +4,9 @@ 'summary' : 'Estate Module for the Tutorial', 'author' : 'manab', 'license': 'LGPL-3', -} \ No newline at end of file + 'data' : [ + 'views/estate_property_views.xml', + 'views/estate_menu_views.xml', + 'security/ir.model.access.csv', + ] +} diff --git a/estate/models/__init__.py b/estate/models/__init__.py index f4c8fd6db6d..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 380383f34f9..b6d18de7003 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -7,10 +7,10 @@ class Property(models.Model): name = fields.Char('Nom', required=True) description = fields.Text('Description') postcode = fields.Char('Post Code') - date_availability = fields.Date('Date Availability') + date_availability = fields.Date('Date Availability', copy=False, default=fields.Date.add(fields.Date.today(), months=3)) expected_price = fields.Float('Expected Price', required=True) - selling_price = fields.Float('Selling Prince') - bedrooms = fields.Integer('# Bedrooms') + selling_price = fields.Float('Selling Prince', readonly=True, copy=False) + bedrooms = fields.Integer('# Bedrooms', default=2) living_area = fields.Integer('# Living Areas') facades = fields.Integer('# Facades') garage = fields.Boolean('Has Garage') @@ -18,8 +18,25 @@ class Property(models.Model): garden_area = fields.Integer('# Garden Areas') garden_orientation = fields.Selection( string = 'Garden Orientation', - selection=[('north', 'North'), ('south','South'),('east','East'),('west','West')] + selection=[ + ('north', 'North'), + ('south','South'), + ('east','East'), + ('west','West') + ] ) - - - + active = fields.Boolean('Active', default=True) + state = fields.Selection( + string='State', + selection=[ + ('new', 'New'), + ('offer_received', 'Offer Received'), + ('offer_accepted', 'Offer accepted'), + ('sold', 'Sold'), + ('cancelled', 'Cancelled') + ], + required=True, + copy=False, + default='new' + ) + \ No newline at end of file diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv new file mode 100644 index 00000000000..d9d6ba57cc5 --- /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 diff --git a/estate/views/estate_menu_views.xml b/estate/views/estate_menu_views.xml new file mode 100644 index 00000000000..1c80349f9c9 --- /dev/null +++ b/estate/views/estate_menu_views.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..f0d0df5b9e5 --- /dev/null +++ b/estate/views/estate_property_views.xml @@ -0,0 +1,40 @@ + + + + + Properties + estate_property + list,form + + + + estate_properties.list + estate_property + + + + + + + + + + + + + + + estate_properties.form + estate_property + +
+ +

+ + +
+
+
+
+ +
From f5fd65012eba7297a6280cdb3d597827993b5809 Mon Sep 17 00:00:00 2001 From: manab-odoo Date: Thu, 17 Sep 2026 09:21:29 +0200 Subject: [PATCH 04/14] Adding the end of file line for real now + end of chapter 6 --- estate/__init__.py | 1 + estate/__manifest__.py | 2 + estate/models/__init__.py | 1 + estate/models/estate_property.py | 1 + estate/views/estate_menu_views.xml | 1 + estate/views/estate_property_views.xml | 76 ++++++++++++++++++++++++-- 6 files changed, 77 insertions(+), 5 deletions(-) diff --git a/estate/__init__.py b/estate/__init__.py index 0650744f6bc..899bcc97f0f 100644 --- a/estate/__init__.py +++ b/estate/__init__.py @@ -1 +1,2 @@ from . import models + diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 2d1c97cbd73..5267eced993 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -10,3 +10,5 @@ 'security/ir.model.access.csv', ] } + + diff --git a/estate/models/__init__.py b/estate/models/__init__.py index 5e1963c9d2f..c5006b18cf8 100644 --- a/estate/models/__init__.py +++ b/estate/models/__init__.py @@ -1 +1,2 @@ from . import estate_property + diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index b6d18de7003..7937b856158 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -39,4 +39,5 @@ class Property(models.Model): copy=False, default='new' ) + \ No newline at end of file diff --git a/estate/views/estate_menu_views.xml b/estate/views/estate_menu_views.xml index 1c80349f9c9..2637dbc17ab 100644 --- a/estate/views/estate_menu_views.xml +++ b/estate/views/estate_menu_views.xml @@ -9,3 +9,4 @@ + diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index f0d0df5b9e5..8034f63df69 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -7,11 +7,11 @@ list,form - + estate_properties.list estate_property - + @@ -23,18 +23,84 @@ - + estate_properties.form estate_property
-

- +

+ +

+
+
+ + + + +
+
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + estate_property.view.search + estate_property + + + + + + + + + + + + + + + + + + From 148bd10f1ce06efecdc26630fcc22d116c48eceb Mon Sep 17 00:00:00 2001 From: manab-odoo Date: Thu, 17 Sep 2026 10:53:31 +0200 Subject: [PATCH 05/14] [IMP] Estate Init CH7 --- estate/__manifest__.py | 1 + estate/models/__init__.py | 1 + estate/models/estate_property_type.py | 7 +++++++ estate/views/estate_property_type_views.xml | 0 4 files changed, 9 insertions(+) create mode 100644 estate/models/estate_property_type.py create mode 100644 estate/views/estate_property_type_views.xml diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 5267eced993..700e076ca6a 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -6,6 +6,7 @@ 'license': 'LGPL-3', 'data' : [ 'views/estate_property_views.xml', + 'views/estate_property_type_views.xml' 'views/estate_menu_views.xml', 'security/ir.model.access.csv', ] diff --git a/estate/models/__init__.py b/estate/models/__init__.py index c5006b18cf8..ced0e03ef07 100644 --- a/estate/models/__init__.py +++ b/estate/models/__init__.py @@ -1,2 +1,3 @@ from . import estate_property +from . import estate_property_type diff --git a/estate/models/estate_property_type.py b/estate/models/estate_property_type.py new file mode 100644 index 00000000000..ad95461678f --- /dev/null +++ b/estate/models/estate_property_type.py @@ -0,0 +1,7 @@ +from odoo import models, fields + +class EstatePropertyType(models.Model): + _name = "estate.property.type" + _description = "Types of Estate Property" + + name = fields.Char('Nom', required=True) \ 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..e69de29bb2d From bc63203f0945b8ccf42cc7027798f2a41b5cb348 Mon Sep 17 00:00:00 2001 From: manab-odoo Date: Thu, 17 Sep 2026 11:24:18 +0200 Subject: [PATCH 06/14] [IMP] Estate - CH7 Many To One --- estate/__manifest__.py | 2 +- estate/models/estate_property_type.py | 2 +- estate/security/ir.model.access.csv | 1 + estate/views/estate_menu_views.xml | 6 +++++- estate/views/estate_property_type_views.xml | 10 ++++++++++ 5 files changed, 18 insertions(+), 3 deletions(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 700e076ca6a..f44ff32d2dd 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -6,7 +6,7 @@ 'license': 'LGPL-3', 'data' : [ 'views/estate_property_views.xml', - 'views/estate_property_type_views.xml' + 'views/estate_property_type_views.xml', 'views/estate_menu_views.xml', 'security/ir.model.access.csv', ] diff --git a/estate/models/estate_property_type.py b/estate/models/estate_property_type.py index ad95461678f..bbe95b4b9bb 100644 --- a/estate/models/estate_property_type.py +++ b/estate/models/estate_property_type.py @@ -1,7 +1,7 @@ from odoo import models, fields class EstatePropertyType(models.Model): - _name = "estate.property.type" + _name = "estate_property.type" _description = "Types of Estate Property" name = fields.Char('Nom', required=True) \ No newline at end of file diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv index d9d6ba57cc5..75276b10437 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, access_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_menu_views.xml b/estate/views/estate_menu_views.xml index 2637dbc17ab..c31b4213dfd 100644 --- a/estate/views/estate_menu_views.xml +++ b/estate/views/estate_menu_views.xml @@ -2,9 +2,13 @@ - + + + + + diff --git a/estate/views/estate_property_type_views.xml b/estate/views/estate_property_type_views.xml index e69de29bb2d..647669da9eb 100644 --- a/estate/views/estate_property_type_views.xml +++ b/estate/views/estate_property_type_views.xml @@ -0,0 +1,10 @@ + + + + + Property Type + estate_property.type + list,form + + + From d4e97284c6cdb2eda7de0726771517a75c417ccb Mon Sep 17 00:00:00 2001 From: manab-odoo Date: Thu, 17 Sep 2026 11:41:33 +0200 Subject: [PATCH 07/14] [FIX] Estate - Fixed Groups in view + Many2One Finished --- estate/models/estate_property.py | 4 +++- estate/views/estate_property_views.xml | 16 +++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 7937b856158..84a7ef5e393 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -40,4 +40,6 @@ class Property(models.Model): default='new' ) - \ No newline at end of file + salesperson = fields.Many2one('res.users', string='Salesperson', index=True, tracking=True, default= lambda self: self.env.user) + buyer = fields.Many2one('res.partner', string="Buyer", copy=False) + diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 8034f63df69..a2a174721a1 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -53,27 +53,25 @@ - - - - - - - - + - + + + + + + From 5bb973f532da9d86863351d5d4f6fe61abc07008 Mon Sep 17 00:00:00 2001 From: manab-odoo Date: Thu, 17 Sep 2026 13:43:54 +0200 Subject: [PATCH 08/14] [IMP] Estate: Tag Implemented --- estate/__manifest__.py | 1 + estate/models/__init__.py | 1 + estate/models/estate_property_tag.py | 9 +++++++++ estate/security/ir.model.access.csv | 4 +++- estate/views/estate_menu_views.xml | 1 + estate/views/estate_property_tag_views.xml | 11 +++++++++++ 6 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 estate/models/estate_property_tag.py create mode 100644 estate/views/estate_property_tag_views.xml diff --git a/estate/__manifest__.py b/estate/__manifest__.py index f44ff32d2dd..130430b19b3 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -7,6 +7,7 @@ 'data' : [ 'views/estate_property_views.xml', 'views/estate_property_type_views.xml', + 'views/estate_property_tag_views.xml', 'views/estate_menu_views.xml', 'security/ir.model.access.csv', ] diff --git a/estate/models/__init__.py b/estate/models/__init__.py index ced0e03ef07..088326293bd 100644 --- a/estate/models/__init__.py +++ b/estate/models/__init__.py @@ -1,3 +1,4 @@ from . import estate_property from . import estate_property_type +from . import estate_property_tag diff --git a/estate/models/estate_property_tag.py b/estate/models/estate_property_tag.py new file mode 100644 index 00000000000..06c05f7133a --- /dev/null +++ b/estate/models/estate_property_tag.py @@ -0,0 +1,9 @@ +from odoo import models, fields + +class EstatePropertyTag(models.Model): + _name = "estate_property.tag" + _description = "Tag of Estate Property" + + name = fields.Char('Nom', required=True) + + \ No newline at end of file diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv index 75276b10437..d66cfa56ac2 100644 --- a/estate/security/ir.model.access.csv +++ b/estate/security/ir.model.access.csv @@ -1,3 +1,5 @@ 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 \ No newline at end of file +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_menu_views.xml b/estate/views/estate_menu_views.xml index c31b4213dfd..28f8a6054c2 100644 --- a/estate/views/estate_menu_views.xml +++ b/estate/views/estate_menu_views.xml @@ -7,6 +7,7 @@ + diff --git a/estate/views/estate_property_tag_views.xml b/estate/views/estate_property_tag_views.xml new file mode 100644 index 00000000000..11bd2148867 --- /dev/null +++ b/estate/views/estate_property_tag_views.xml @@ -0,0 +1,11 @@ + + + + + Property Tag + estate_property.tag + list,form + + + + From ba40f8063a6e486cc1783b56ba729133c6b8412e Mon Sep 17 00:00:00 2001 From: manab-odoo Date: Thu, 17 Sep 2026 15:31:39 +0200 Subject: [PATCH 09/14] [IMP] estate: CH7 Offer --- estate/__manifest__.py | 1 + estate/models/__init__.py | 2 ++ estate/models/estate_property.py | 5 +++++ estate/models/estate_property_offer.py | 21 ++++++++++++++++++++ estate/security/ir.model.access.csv | 1 + estate/views/estate_property_offer_views.xml | 19 ++++++++++++++++++ estate/views/estate_property_views.xml | 6 ++++++ 7 files changed, 55 insertions(+) create mode 100644 estate/models/estate_property_offer.py create mode 100644 estate/views/estate_property_offer_views.xml diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 130430b19b3..1f7b5b41b79 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -8,6 +8,7 @@ 'views/estate_property_views.xml', 'views/estate_property_type_views.xml', 'views/estate_property_tag_views.xml', + 'views/estate_property_offer_views.xml', 'views/estate_menu_views.xml', 'security/ir.model.access.csv', ] diff --git a/estate/models/__init__.py b/estate/models/__init__.py index 088326293bd..784497bfea5 100644 --- a/estate/models/__init__.py +++ b/estate/models/__init__.py @@ -1,4 +1,6 @@ from . import estate_property from . import estate_property_type from . import estate_property_tag +from . import estate_property_offer + diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 84a7ef5e393..b6cd61ed1cc 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -43,3 +43,8 @@ class Property(models.Model): salesperson = fields.Many2one('res.users', string='Salesperson', index=True, tracking=True, default= lambda self: self.env.user) buyer = fields.Many2one('res.partner', string="Buyer", copy=False) + tag_ids = fields.Many2many('estate_property.tag', string='Tags') + + offer_ids = fields.One2many('estate_property.offer', 'property_id', string='Offer') + + diff --git a/estate/models/estate_property_offer.py b/estate/models/estate_property_offer.py new file mode 100644 index 00000000000..50f18e0adbc --- /dev/null +++ b/estate/models/estate_property_offer.py @@ -0,0 +1,21 @@ +from odoo import models, fields + +class EstatePropertyOffer(models.Model): + _name = "estate_property.offer" + _description = "Offer to the Estate" + + name = fields.Char('Nom', required=True) + price = fields.Float('Price') + status = fields.Selection( + string="Status", + selection=[ + ('accepted', "Accepted"), + ('refused', "Refused") + ] + ) + partner_id = fields.Many2one('res.partner', string="Partner", required=True) + property_id = fields.Many2one('estate_property', string="Property", required=True) + + + + \ No newline at end of file diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv index d66cfa56ac2..9dd87426a21 100644 --- a/estate/security/ir.model.access.csv +++ b/estate/security/ir.model.access.csv @@ -2,4 +2,5 @@ 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 +access_estate_property_offer,access_estate_property_offer,model_estate_property_offer,base.group_user,1,1,1,1 diff --git a/estate/views/estate_property_offer_views.xml b/estate/views/estate_property_offer_views.xml new file mode 100644 index 00000000000..63e1de13ba8 --- /dev/null +++ b/estate/views/estate_property_offer_views.xml @@ -0,0 +1,19 @@ + + + + + + estate_properties.offer_list + estate_property.offer + + + + + + + + + + + + \ No newline at end of file diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index a2a174721a1..785aa824002 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -66,6 +66,12 @@ + + + + + + From 9073bdb3c2c96ff7201656c9f15469cd7943c85f Mon Sep 17 00:00:00 2001 From: manab-odoo Date: Thu, 17 Sep 2026 15:40:06 +0200 Subject: [PATCH 10/14] [FIX] Estate : Fix whitespace / new line --- estate/__manifest__.py | 9 ++++----- estate/models/estate_property.py | 9 +++++---- estate/models/estate_property_tag.py | 1 + estate/models/estate_property_type.py | 4 +++- estate/views/estate_property_offer_views.xml | 3 ++- estate/views/estate_property_views.xml | 1 + 6 files changed, 16 insertions(+), 11 deletions(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 1f7b5b41b79..7ccb6afea0c 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -1,10 +1,9 @@ -# -*- coding: utf-8 -*- { - 'name' : 'estate', - 'summary' : 'Estate Module for the Tutorial', - 'author' : 'manab', + 'name': 'estate', + 'summary': 'Estate Module for the Tutorial', + 'author': 'manab', 'license': 'LGPL-3', - 'data' : [ + 'data': [ 'views/estate_property_views.xml', 'views/estate_property_type_views.xml', 'views/estate_property_tag_views.xml', diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index b6cd61ed1cc..e10c47664d1 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -20,9 +20,9 @@ class Property(models.Model): string = 'Garden Orientation', selection=[ ('north', 'North'), - ('south','South'), - ('east','East'), - ('west','West') + ('south', 'South'), + ('east', 'East'), + ('west', 'West') ] ) active = fields.Boolean('Active', default=True) @@ -40,7 +40,7 @@ class Property(models.Model): default='new' ) - salesperson = fields.Many2one('res.users', string='Salesperson', index=True, tracking=True, default= lambda self: self.env.user) + salesperson = fields.Many2one('res.users', string='Salesperson', index=True, tracking=True, default=lambda self: self.env.user) buyer = fields.Many2one('res.partner', string="Buyer", copy=False) tag_ids = fields.Many2many('estate_property.tag', string='Tags') @@ -48,3 +48,4 @@ class Property(models.Model): offer_ids = fields.One2many('estate_property.offer', 'property_id', string='Offer') + diff --git a/estate/models/estate_property_tag.py b/estate/models/estate_property_tag.py index 06c05f7133a..e7cdf2d6cb0 100644 --- a/estate/models/estate_property_tag.py +++ b/estate/models/estate_property_tag.py @@ -6,4 +6,5 @@ class EstatePropertyTag(models.Model): name = fields.Char('Nom', required=True) + \ No newline at end of file diff --git a/estate/models/estate_property_type.py b/estate/models/estate_property_type.py index bbe95b4b9bb..3fa985e0d16 100644 --- a/estate/models/estate_property_type.py +++ b/estate/models/estate_property_type.py @@ -4,4 +4,6 @@ class EstatePropertyType(models.Model): _name = "estate_property.type" _description = "Types of Estate Property" - name = fields.Char('Nom', required=True) \ No newline at end of file + name = fields.Char('Nom', required=True) + + \ No newline at end of file diff --git a/estate/views/estate_property_offer_views.xml b/estate/views/estate_property_offer_views.xml index 63e1de13ba8..2753a515d87 100644 --- a/estate/views/estate_property_offer_views.xml +++ b/estate/views/estate_property_offer_views.xml @@ -16,4 +16,5 @@
- \ No newline at end of file + + diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 785aa824002..e6e7e0c6b96 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -108,3 +108,4 @@
+ From 978e0f1e03208015b5a5e6b87ab81012982bdd45 Mon Sep 17 00:00:00 2001 From: manab-odoo Date: Fri, 18 Sep 2026 09:17:42 +0200 Subject: [PATCH 11/14] [Fix] estate - fixing newlines / blanklines attempt --- estate/__init__.py | 1 - estate/__manifest__.py | 1 - estate/models/estate_property.py | 41 +++++++++++++++----------- estate/models/estate_property_offer.py | 6 ++-- estate/models/estate_property_tag.py | 3 +- estate/models/estate_property_type.py | 1 + estate/views/estate_property_views.xml | 1 + 7 files changed, 29 insertions(+), 25 deletions(-) diff --git a/estate/__init__.py b/estate/__init__.py index 899bcc97f0f..0650744f6bc 100644 --- a/estate/__init__.py +++ b/estate/__init__.py @@ -1,2 +1 @@ from . import models - diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 7ccb6afea0c..3a142c660fb 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -13,4 +13,3 @@ ] } - diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index e10c47664d1..61ab829a363 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -1,6 +1,7 @@ -from odoo import models, fields +from odoo import models, fields, api class Property(models.Model): + _name = "estate_property" _description = "estate property model" @@ -17,35 +18,41 @@ class Property(models.Model): garden = fields.Boolean('Has Garden') garden_area = fields.Integer('# Garden Areas') garden_orientation = fields.Selection( - string = 'Garden Orientation', + string="Garden Orientation", selection=[ - ('north', 'North'), - ('south', 'South'), - ('east', 'East'), - ('west', 'West') + ('north', "North"), + ('south', "South"), + ('east', "East"), + ('west', "West"), ] ) active = fields.Boolean('Active', default=True) state = fields.Selection( - string='State', + string="State", selection=[ - ('new', 'New'), - ('offer_received', 'Offer Received'), - ('offer_accepted', 'Offer accepted'), - ('sold', 'Sold'), - ('cancelled', 'Cancelled') - ], + ('new', "New"), + ('offer_received', "Offer Received"), + ('offer_accepted', "Offer accepted"), + ('sold', "Sold"), + ('cancelled', "Cancelled"), + ], required=True, copy=False, - default='new' + default='new', ) - salesperson = fields.Many2one('res.users', string='Salesperson', index=True, tracking=True, default=lambda self: self.env.user) + salesperson = fields.Many2one('res.users', string="Salesperson", index=True, default=lambda self: self.env.user) buyer = fields.Many2one('res.partner', string="Buyer", copy=False) - tag_ids = fields.Many2many('estate_property.tag', string='Tags') + tag_ids = fields.Many2many('estate_property.tag', string="Tags") + + offer_ids = fields.One2many('estate_property.offer', 'property_id', string="Offer") - offer_ids = fields.One2many('estate_property.offer', 'property_id', string='Offer') + total_area = fields.Integer(compute="_compute_areas") + @api.depends("living_area", "garden_area") + def _compute_areas(self): + for record in self: + record.total_area = record.garden_area + record.living_area diff --git a/estate/models/estate_property_offer.py b/estate/models/estate_property_offer.py index 50f18e0adbc..4413fb144d6 100644 --- a/estate/models/estate_property_offer.py +++ b/estate/models/estate_property_offer.py @@ -1,6 +1,7 @@ from odoo import models, fields class EstatePropertyOffer(models.Model): + _name = "estate_property.offer" _description = "Offer to the Estate" @@ -10,12 +11,9 @@ class EstatePropertyOffer(models.Model): string="Status", selection=[ ('accepted', "Accepted"), - ('refused', "Refused") + ('refused', "Refused"), ] ) partner_id = fields.Many2one('res.partner', string="Partner", required=True) property_id = fields.Many2one('estate_property', string="Property", required=True) - - - \ No newline at end of file diff --git a/estate/models/estate_property_tag.py b/estate/models/estate_property_tag.py index e7cdf2d6cb0..85084efa527 100644 --- a/estate/models/estate_property_tag.py +++ b/estate/models/estate_property_tag.py @@ -1,10 +1,9 @@ from odoo import models, fields class EstatePropertyTag(models.Model): + _name = "estate_property.tag" _description = "Tag of Estate Property" name = fields.Char('Nom', required=True) - - \ No newline at end of file diff --git a/estate/models/estate_property_type.py b/estate/models/estate_property_type.py index 3fa985e0d16..3f2453aceb0 100644 --- a/estate/models/estate_property_type.py +++ b/estate/models/estate_property_type.py @@ -1,6 +1,7 @@ from odoo import models, fields class EstatePropertyType(models.Model): + _name = "estate_property.type" _description = "Types of Estate Property" diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index e6e7e0c6b96..3056b4ff377 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -64,6 +64,7 @@ + From a2b20b16f72996123e67d3c4a1754406bc2f9ff6 Mon Sep 17 00:00:00 2001 From: manab-odoo Date: Fri, 18 Sep 2026 09:29:30 +0200 Subject: [PATCH 12/14] [FIX] Estate - Fix New Lines attemps (new) --- estate/__manifest__.py | 1 - estate/models/__init__.py | 2 -- estate/models/estate_property.py | 4 +--- estate/models/estate_property_offer.py | 2 -- estate/models/estate_property_tag.py | 2 -- estate/models/estate_property_type.py | 3 --- 6 files changed, 1 insertion(+), 13 deletions(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 3a142c660fb..12cea617743 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -12,4 +12,3 @@ 'security/ir.model.access.csv', ] } - diff --git a/estate/models/__init__.py b/estate/models/__init__.py index 784497bfea5..2f1821a39c1 100644 --- a/estate/models/__init__.py +++ b/estate/models/__init__.py @@ -2,5 +2,3 @@ from . import estate_property_type from . import estate_property_tag from . import estate_property_offer - - diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 61ab829a363..06d0fbef64f 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -1,7 +1,7 @@ from odoo import models, fields, api -class Property(models.Model): +class Property(models.Model): _name = "estate_property" _description = "estate property model" @@ -50,9 +50,7 @@ class Property(models.Model): total_area = fields.Integer(compute="_compute_areas") - @api.depends("living_area", "garden_area") def _compute_areas(self): for record in self: record.total_area = record.garden_area + record.living_area - diff --git a/estate/models/estate_property_offer.py b/estate/models/estate_property_offer.py index 4413fb144d6..4540ed51074 100644 --- a/estate/models/estate_property_offer.py +++ b/estate/models/estate_property_offer.py @@ -1,7 +1,6 @@ from odoo import models, fields class EstatePropertyOffer(models.Model): - _name = "estate_property.offer" _description = "Offer to the Estate" @@ -16,4 +15,3 @@ class EstatePropertyOffer(models.Model): ) partner_id = fields.Many2one('res.partner', string="Partner", required=True) property_id = fields.Many2one('estate_property', string="Property", required=True) - diff --git a/estate/models/estate_property_tag.py b/estate/models/estate_property_tag.py index 85084efa527..3a3f83c12aa 100644 --- a/estate/models/estate_property_tag.py +++ b/estate/models/estate_property_tag.py @@ -1,9 +1,7 @@ from odoo import models, fields class EstatePropertyTag(models.Model): - _name = "estate_property.tag" _description = "Tag of Estate Property" name = fields.Char('Nom', required=True) - diff --git a/estate/models/estate_property_type.py b/estate/models/estate_property_type.py index 3f2453aceb0..0a0a41c2902 100644 --- a/estate/models/estate_property_type.py +++ b/estate/models/estate_property_type.py @@ -1,10 +1,7 @@ from odoo import models, fields class EstatePropertyType(models.Model): - _name = "estate_property.type" _description = "Types of Estate Property" name = fields.Char('Nom', required=True) - - \ No newline at end of file From 38acdccda2541863848bd6b216355baf4620dab8 Mon Sep 17 00:00:00 2001 From: manab-odoo Date: Fri, 18 Sep 2026 09:33:40 +0200 Subject: [PATCH 13/14] [FIX] Estate - Fix Blank Lines Attempt 3 --- estate/models/estate_property_offer.py | 1 + estate/models/estate_property_tag.py | 1 + estate/models/estate_property_type.py | 1 + 3 files changed, 3 insertions(+) diff --git a/estate/models/estate_property_offer.py b/estate/models/estate_property_offer.py index 4540ed51074..6ba69039400 100644 --- a/estate/models/estate_property_offer.py +++ b/estate/models/estate_property_offer.py @@ -1,5 +1,6 @@ from odoo import models, fields + class EstatePropertyOffer(models.Model): _name = "estate_property.offer" _description = "Offer to the Estate" diff --git a/estate/models/estate_property_tag.py b/estate/models/estate_property_tag.py index 3a3f83c12aa..144251f29f1 100644 --- a/estate/models/estate_property_tag.py +++ b/estate/models/estate_property_tag.py @@ -1,5 +1,6 @@ from odoo import models, fields + class EstatePropertyTag(models.Model): _name = "estate_property.tag" _description = "Tag of Estate Property" diff --git a/estate/models/estate_property_type.py b/estate/models/estate_property_type.py index 0a0a41c2902..7d89a33766f 100644 --- a/estate/models/estate_property_type.py +++ b/estate/models/estate_property_type.py @@ -1,5 +1,6 @@ from odoo import models, fields + class EstatePropertyType(models.Model): _name = "estate_property.type" _description = "Types of Estate Property" From 29e98440b072f351d6542fc75d3a520a296555f2 Mon Sep 17 00:00:00 2001 From: manab-odoo Date: Fri, 18 Sep 2026 10:02:44 +0200 Subject: [PATCH 14/14] [IMP] Estate: CH8 Best Price --- estate/models/estate_property.py | 7 +++++++ estate/views/estate_property_views.xml | 1 + 2 files changed, 8 insertions(+) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 06d0fbef64f..8d0274126a0 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -50,7 +50,14 @@ class Property(models.Model): total_area = fields.Integer(compute="_compute_areas") + best_price = fields.Float(compute="_compute_price") + @api.depends("living_area", "garden_area") def _compute_areas(self): for record in self: record.total_area = record.garden_area + record.living_area + + @api.depends() + def _compute_price(self): + for record in self: + record.best_price = max(record.offer_ids.mapped("price")) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 3056b4ff377..b9451db3c89 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -43,6 +43,7 @@
+