From 89d0e1079d4a05d0e812558c3525778725445a41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 09:50:18 +0200 Subject: [PATCH 01/41] add first model --- estate/__manifest__.py | 2 +- estate/models.py | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index d7cfa57d4c5..2e2be07f69b 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -1,6 +1,6 @@ { "name": "Estate", # The name that will appear in the App list - "version": "16.0.0", # Version + "version": "18.0.1.0.0", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ diff --git a/estate/models.py b/estate/models.py index e69de29bb2d..071162f78aa 100644 --- a/estate/models.py +++ b/estate/models.py @@ -0,0 +1,15 @@ +from odoo import fields, models + + +class EstateProperty(models.Model): + _name = "estate.property" + _description = "Estate Property" + + + name = fields.Char(required=True) + description = fields.Text() + date_availability = fields.Date() + expected_price = fields.Float() + bedrooms = fields.Integer() + garden = fields.Boolean() + garden_orientation = fields.Selection([("north", "North"),("south", "South"), ("east", "East"),("west", "West")]) \ No newline at end of file From ef3ffe2491436fed63704bf9384b746a5f894dc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 10:42:19 +0200 Subject: [PATCH 02/41] move model and add security --- estate/__manifest__.py | 2 +- estate/models/__init__.py | 1 + estate/{models.py => models/estate_property.py} | 0 estate/security/ir.model.access.csv | 2 ++ 4 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 estate/models/__init__.py rename estate/{models.py => models/estate_property.py} (100%) create mode 100644 estate/security/ir.model.access.csv diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 2e2be07f69b..a7b7196f763 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -4,7 +4,7 @@ "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ - + 'security/ir.model.access.csv' ], "installable": True, 'license': 'LGPL-3', 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.py b/estate/models/estate_property.py similarity index 100% rename from estate/models.py rename to estate/models/estate_property.py diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv new file mode 100644 index 00000000000..fe21e56c6d2 --- /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,1 \ No newline at end of file From fb082f08e401468f0b67d4c9e5bbc2f36e17ec2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 10:52:07 +0200 Subject: [PATCH 03/41] add menu --- estate/__manifest__.py | 3 ++- estate/views/estate_property_views.xml | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 estate/views/estate_property_views.xml diff --git a/estate/__manifest__.py b/estate/__manifest__.py index a7b7196f763..cb40610ed95 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -4,7 +4,8 @@ "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ - 'security/ir.model.access.csv' + 'security/ir.model.access.csv', + 'views/estate_property_views.xml' ], "installable": True, 'license': 'LGPL-3', diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml new file mode 100644 index 00000000000..6c0bf168594 --- /dev/null +++ b/estate/views/estate_property_views.xml @@ -0,0 +1,9 @@ + + Estate property action + estate_property + list,form + + Test action + test_model + list,form + \ No newline at end of file From 5919952da02e795342a90a7aea878cea3a3163d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 11:06:58 +0200 Subject: [PATCH 04/41] add menus --- estate/__manifest__.py | 3 ++- estate/views/estate_menu.xml | 8 ++++++++ estate/views/estate_property_views.xml | 21 ++++++++++++--------- 3 files changed, 22 insertions(+), 10 deletions(-) create mode 100644 estate/views/estate_menu.xml diff --git a/estate/__manifest__.py b/estate/__manifest__.py index cb40610ed95..4d9c9f75746 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -5,7 +5,8 @@ "depends": ["base"], # dependencies "data": [ 'security/ir.model.access.csv', - 'views/estate_property_views.xml' + 'views/estate_property_views.xml', + 'views/estate_menu.xml' ], "installable": True, 'license': 'LGPL-3', diff --git a/estate/views/estate_menu.xml b/estate/views/estate_menu.xml new file mode 100644 index 00000000000..d45821976e2 --- /dev/null +++ b/estate/views/estate_menu.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 6c0bf168594..169ae37c277 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -1,9 +1,12 @@ - - Estate property action - estate_property - list,form - - Test action - test_model - list,form - \ No newline at end of file + + + + Estate property action + estate_property + list,form + + Test action + test_model + list,form + + \ No newline at end of file From fbb721cc528f657b4acf33a439e20d977224b966 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 11:14:07 +0200 Subject: [PATCH 05/41] fix view --- estate/views/estate_property_views.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 169ae37c277..33fbce33174 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -2,7 +2,7 @@ Estate property action - estate_property + estate.property list,form Test action From 6655a5bb0f0c06ac69af84bac28c4d8cad2846ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 11:18:01 +0200 Subject: [PATCH 06/41] quick fix --- estate/views/estate_property_views.xml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 33fbce33174..a912be2edb7 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -4,9 +4,5 @@ Estate property action estate.property list,form - - Test action - test_model - list,form \ No newline at end of file From 2f326e64065f47c51c0edee108f82d887b75f539 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 11:57:21 +0200 Subject: [PATCH 07/41] update fields --- estate/models/estate_property.py | 16 ++++++++++++---- estate/views/estate_menu.xml | 2 +- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 071162f78aa..a7e6e2012a6 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -1,3 +1,5 @@ +from email.policy import default + from odoo import fields, models @@ -5,11 +7,17 @@ class EstateProperty(models.Model): _name = "estate.property" _description = "Estate Property" - name = fields.Char(required=True) description = fields.Text() - date_availability = fields.Date() + date_availability = fields.Date(copy=False, default=fields.Date.add(fields.date.today(), months=3)) expected_price = fields.Float() - bedrooms = fields.Integer() + selling_price = fields.Float(readonly=True, copy=False) + bedrooms = fields.Integer(default=2) garden = fields.Boolean() - garden_orientation = fields.Selection([("north", "North"),("south", "South"), ("east", "East"),("west", "West")]) \ No newline at end of file + garden_orientation = fields.Selection([("north", "North"),("south", "South"), ("east", "East"),("west", "West")]) + active= fields.Boolean(default=True) + state = fields.Selection(selection = [("new","New"),("offer_received","Offer Received"), + ("offer_accepted","Offer Accepted"),("sold","Sold"),("cancelled","Cancelled")], + default="new", + copy=False, + required=True) \ No newline at end of file diff --git a/estate/views/estate_menu.xml b/estate/views/estate_menu.xml index d45821976e2..c6339fbd299 100644 --- a/estate/views/estate_menu.xml +++ b/estate/views/estate_menu.xml @@ -1,6 +1,6 @@ - + From f0ae9491934ab715454a41a468ee8fb9977935d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 13:29:35 +0200 Subject: [PATCH 08/41] add custom list view --- estate/__manifest__.py | 2 +- estate/views/estate_property_views.xml | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 4d9c9f75746..b9ae71ff63f 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -6,7 +6,7 @@ "data": [ 'security/ir.model.access.csv', 'views/estate_property_views.xml', - 'views/estate_menu.xml' + 'views/estate_menu.xml', ], "installable": True, 'license': 'LGPL-3', diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index a912be2edb7..394d940a25b 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -1,5 +1,20 @@ + + estate.property.list + estate.property + + + + + + + + + + + + Estate property action estate.property From 74cf7611a8d1c5e84079ce541e01bb9b38b06030 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 13:34:00 +0200 Subject: [PATCH 09/41] add postcode --- estate/models/estate_property.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index a7e6e2012a6..3cbaf77e269 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -20,4 +20,5 @@ class EstateProperty(models.Model): ("offer_accepted","Offer Accepted"),("sold","Sold"),("cancelled","Cancelled")], default="new", copy=False, - required=True) \ No newline at end of file + required=True) + postcode = fields.Char() \ No newline at end of file From 13dc8caf24468b365ae5719e8787aced07829fdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 13:36:22 +0200 Subject: [PATCH 10/41] quick fix --- estate/views/estate_property_views.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 394d940a25b..f0bb9819177 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -8,7 +8,6 @@ - From 2ca4778fb31ee02551d6774bd890892cbe4d6b5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 13:39:42 +0200 Subject: [PATCH 11/41] quick fix --- estate/views/estate_property_views.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index f0bb9819177..c97002a2f15 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -10,7 +10,7 @@ - + From 5b8bf31955687d542c25f420860d9b53624bffda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 14:04:24 +0200 Subject: [PATCH 12/41] add form view --- estate/models/estate_property.py | 6 ++++- estate/views/estate_property_views.xml | 36 +++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 3cbaf77e269..1730174e162 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -21,4 +21,8 @@ class EstateProperty(models.Model): default="new", copy=False, required=True) - postcode = fields.Char() \ No newline at end of file + postcode = fields.Char() + facades = fields.Interger() + garage = fields.Boolean() + garden_area = fields.Integer() + living_area = fields.Integer() \ No newline at end of file diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index c97002a2f15..6f7600dff5b 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -4,7 +4,7 @@ estate.property.list estate.property - + @@ -14,6 +14,40 @@ + + estate.property.form + estate.property + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + Estate property action estate.property From 3a3329ba058fb07975f82a0390e8f8a3444c2933 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 14:12:09 +0200 Subject: [PATCH 13/41] quick fix --- estate/models/estate_property.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 1730174e162..b201c8f332f 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -22,7 +22,7 @@ class EstateProperty(models.Model): copy=False, required=True) postcode = fields.Char() - facades = fields.Interger() + facades = fields.Integer() garage = fields.Boolean() garden_area = fields.Integer() living_area = fields.Integer() \ No newline at end of file From 7f5c67608e9e9dc74b8fc2d80a3e3d0cca543afd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 14:20:02 +0200 Subject: [PATCH 14/41] quick fix --- estate/views/estate_property_views.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 6f7600dff5b..7d169edc0a3 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -20,6 +20,11 @@
+
+

+ +

+
From 0f4f245c948b5bb228ad84c5c6093b5814e6f78b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 14:29:21 +0200 Subject: [PATCH 15/41] quick fix --- estate/views/estate_property_views.xml | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 7d169edc0a3..8925e10246b 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -37,15 +37,19 @@ - - - - - - - - - + + + + + + + + + + + + +
From 5b208babcc892af72d5e7c6af15b34684bcc0063 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 14:34:28 +0200 Subject: [PATCH 16/41] quick fix --- estate/views/estate_property_views.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 8925e10246b..949a6225f11 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -37,9 +37,9 @@ - + - + @@ -47,9 +47,9 @@ - + - + From 36dcfaf5d0c192792faaa9a90a711b8db33e319a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 14:58:15 +0200 Subject: [PATCH 17/41] add search --- estate/views/estate_property_views.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 949a6225f11..71edd66e678 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -56,6 +56,24 @@
+ + estate.property.search + estate.property + + + + + + + + + + + + + + + Estate property action From b9b57686dad945ab3a2a45f449352ac8b8fe55e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 15:04:55 +0200 Subject: [PATCH 18/41] quick fix --- estate/models/estate_property.py | 2 +- estate/views/estate_property_views.xml | 26 +++++++++++++------------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index b201c8f332f..6f1cbc9ba96 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -9,7 +9,7 @@ class EstateProperty(models.Model): name = fields.Char(required=True) description = fields.Text() - date_availability = fields.Date(copy=False, default=fields.Date.add(fields.date.today(), months=3)) + date_availability = fields.Date(copy=False, default=lambda self: fields.Date.add(fields.date.today(), months=3)) expected_price = fields.Float() selling_price = fields.Float(readonly=True, copy=False) bedrooms = fields.Integer(default=2) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 71edd66e678..95bc50f5a4d 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -57,20 +57,20 @@ - estate.property.search - estate.property + estate.property.search + estate.property - - - - - - - - - - - + + + + + + + + + + + From aa3c1b16f737fec8fc48bc4d210e254b702b2471 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 15:11:06 +0200 Subject: [PATCH 19/41] add search --- estate/views/estate_property_views.xml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 95bc50f5a4d..8685cc1aca4 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -60,21 +60,19 @@ estate.property.search estate.property - - + + - + - - Estate property action estate.property From c2cbe7cd57399be28d2b858e7920942c33614689 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 15:16:49 +0200 Subject: [PATCH 20/41] quick fix --- estate/views/estate_property_views.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 8685cc1aca4..a20561db15a 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -57,8 +57,8 @@ - estate.property.search - estate.property + estate.property.search + estate.property From 113a74108b59d5a7b2f4371652fc3d0b8cfad44b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 15:31:45 +0200 Subject: [PATCH 21/41] quick fix --- estate/views/estate_property_views.xml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index a20561db15a..e35eccab183 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -67,8 +67,11 @@ - - + + + + From 44411971709b98b89d75d4d0e753bfa3097f2602 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 15:36:53 +0200 Subject: [PATCH 22/41] quick fix --- estate/views/estate_property_views.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index e35eccab183..c623700616b 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -70,7 +70,7 @@ - + From 24d90e5cbb119fa7af27820f5ea6b7869fc33ac0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 15:49:03 +0200 Subject: [PATCH 23/41] add property type --- estate/models/__init__.py | 3 ++- estate/models/estate_property.py | 3 ++- estate/models/estate_property_type.py | 8 ++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 estate/models/estate_property_type.py diff --git a/estate/models/__init__.py b/estate/models/__init__.py index f4c8fd6db6d..97aee757823 100644 --- a/estate/models/__init__.py +++ b/estate/models/__init__.py @@ -1 +1,2 @@ -from . import estate_property \ No newline at end of file +from . import estate_property +from . import estate_property_type \ No newline at end of file diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 6f1cbc9ba96..412fb419373 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -25,4 +25,5 @@ class EstateProperty(models.Model): facades = fields.Integer() garage = fields.Boolean() garden_area = fields.Integer() - living_area = fields.Integer() \ No newline at end of file + living_area = fields.Integer() + type_id = fields.Many2one("estate.property.type", string="Type") \ No newline at end of file diff --git a/estate/models/estate_property_type.py b/estate/models/estate_property_type.py new file mode 100644 index 00000000000..7860a26125e --- /dev/null +++ b/estate/models/estate_property_type.py @@ -0,0 +1,8 @@ +from odoo import fields, models + + +class EstatePropertyType(models.Model): + _name = "estate.property.type" + _description = "Estate Property Type" + + name = fields.Char(required=True) From d775d85fc2b2fb46e9ada1e8b540439d833e6da3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 16:13:42 +0200 Subject: [PATCH 24/41] add property type --- estate/models/estate_property.py | 2 +- estate/views/estate_menu.xml | 1 + estate/views/estate_property_type_views.xml | 8 ++++++++ estate/views/estate_property_views.xml | 3 +++ 4 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 estate/views/estate_property_type_views.xml diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 412fb419373..17239ea2df4 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -26,4 +26,4 @@ class EstateProperty(models.Model): garage = fields.Boolean() garden_area = fields.Integer() living_area = fields.Integer() - type_id = fields.Many2one("estate.property.type", string="Type") \ No newline at end of file + property_type_id = fields.Many2one("estate.property.type", string="Property type") \ No newline at end of file diff --git a/estate/views/estate_menu.xml b/estate/views/estate_menu.xml index c6339fbd299..0dc9ded6a00 100644 --- a/estate/views/estate_menu.xml +++ b/estate/views/estate_menu.xml @@ -3,6 +3,7 @@ +
\ 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..b56c46a7bbb --- /dev/null +++ b/estate/views/estate_property_type_views.xml @@ -0,0 +1,8 @@ + + + + Estate property type action + estate.property.type + list,form + + \ No newline at end of file diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index c623700616b..d248b50d7e1 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -26,6 +26,9 @@ + + + From 8eff844ed60ae0f0a9e6b55692e65045c1a19cea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 16:27:41 +0200 Subject: [PATCH 25/41] add property type --- estate/__manifest__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index b9ae71ff63f..2c168016cc9 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -6,6 +6,7 @@ "data": [ 'security/ir.model.access.csv', 'views/estate_property_views.xml', + 'views/estate_prperty_type_views.xml', 'views/estate_menu.xml', ], "installable": True, From 020b6fcec8738a371d4a488bf05bdf325c73a7eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 16:30:55 +0200 Subject: [PATCH 26/41] add property type --- estate/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 2c168016cc9..f9a56b9157a 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -6,7 +6,7 @@ "data": [ 'security/ir.model.access.csv', 'views/estate_property_views.xml', - 'views/estate_prperty_type_views.xml', + 'views/estate_property_type_views.xml', 'views/estate_menu.xml', ], "installable": True, From c94fbd291eedd7194553365e6259b43fbb6a6269 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 16:37:26 +0200 Subject: [PATCH 27/41] fix access property type --- estate/security/ir.model.access.csv | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv index fe21e56c6d2..b28b50f65a1 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 -estate.access_estate_property,access_estate_property,estate.model_estate_property,base.group_user,1,1,1,1 \ No newline at end of file +estate.access_estate_property,access_estate_property,estate.model_estate_property,base.group_user,1,1,1,1 +estate.access_estate_property_type,access_estate_property_type,estate.model_estate_property_type,base.group_user,1,1,1,1 From c7266fdfeda8705e223bf0ea1c6b77514f3f5f2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 16:49:56 +0200 Subject: [PATCH 28/41] add link to User or Partner --- estate/models/estate_property.py | 4 +++- estate/views/estate_property_views.xml | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 17239ea2df4..513117ce750 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -26,4 +26,6 @@ class EstateProperty(models.Model): garage = fields.Boolean() garden_area = fields.Integer() living_area = fields.Integer() - property_type_id = fields.Many2one("estate.property.type", string="Property type") \ No newline at end of file + property_type_id = fields.Many2one("estate.property.type", string="Property type") + salesperson_id = fields.Many2one("res.users", default=lambda self: self.env.user) + buyer_id = fields.Many2one("res.partner", copy=False) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index d248b50d7e1..d16a3e71341 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -53,6 +53,14 @@ + + + + + + + + From 921977edaf27e8aa04233e110d237d0d0dfd4e89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 16:58:27 +0200 Subject: [PATCH 29/41] add property tag --- estate/__manifest__.py | 1 + estate/models/__init__.py | 3 ++- estate/models/estate_property_tag.py | 8 ++++++++ estate/security/ir.model.access.csv | 2 ++ estate/views/estate_menu.xml | 4 ++++ estate/views/estate_property_tag_views.xml | 8 ++++++++ 6 files changed, 25 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 f9a56b9157a..ccf06761a9a 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -7,6 +7,7 @@ 'security/ir.model.access.csv', 'views/estate_property_views.xml', 'views/estate_property_type_views.xml', + 'views/estate_property_tag_views.xml', 'views/estate_menu.xml', ], "installable": True, diff --git a/estate/models/__init__.py b/estate/models/__init__.py index 97aee757823..fdab6f99948 100644 --- a/estate/models/__init__.py +++ b/estate/models/__init__.py @@ -1,2 +1,3 @@ from . import estate_property -from . import estate_property_type \ No newline at end of file +from . import estate_property_type +from . import estate_property_tag \ No newline at end of file diff --git a/estate/models/estate_property_tag.py b/estate/models/estate_property_tag.py new file mode 100644 index 00000000000..165132d19de --- /dev/null +++ b/estate/models/estate_property_tag.py @@ -0,0 +1,8 @@ +from odoo import fields, models + + +class EstatePropertyTag(models.Model): + _name = "estate.property.tag" + _description = "Estate Property Tag" + + name = fields.Char(required=True) diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv index b28b50f65a1..21645d8fc31 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 estate.access_estate_property,access_estate_property,estate.model_estate_property,base.group_user,1,1,1,1 estate.access_estate_property_type,access_estate_property_type,estate.model_estate_property_type,base.group_user,1,1,1,1 +estate.access_estate_property_tag,access_estate_property_tag,estate.model_estate_property_tag,base.group_user,1,1,1,1 + diff --git a/estate/views/estate_menu.xml b/estate/views/estate_menu.xml index 0dc9ded6a00..a650f00b4a3 100644 --- a/estate/views/estate_menu.xml +++ b/estate/views/estate_menu.xml @@ -3,7 +3,11 @@ + + + +
\ No newline at end of file diff --git a/estate/views/estate_property_tag_views.xml b/estate/views/estate_property_tag_views.xml new file mode 100644 index 00000000000..117759f69dc --- /dev/null +++ b/estate/views/estate_property_tag_views.xml @@ -0,0 +1,8 @@ + + + + Estate property tag action + estate.property.tag + list,form + + \ No newline at end of file From 92cf054065a902df3d5d977ca738323b58f55ee7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 19:41:15 +0200 Subject: [PATCH 30/41] fix tag --- estate/models/estate_property.py | 1 + 1 file changed, 1 insertion(+) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 513117ce750..09d7b0743a6 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -29,3 +29,4 @@ class EstateProperty(models.Model): property_type_id = fields.Many2one("estate.property.type", string="Property type") salesperson_id = fields.Many2one("res.users", default=lambda self: self.env.user) buyer_id = fields.Many2one("res.partner", copy=False) + tag_ids = fields.Many2many("estate.property.tag") From cb1fdc8e9f59bfed45f2136f9b8eaf8bc8406220 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Tue, 16 Sep 2025 21:16:45 +0200 Subject: [PATCH 31/41] add offers --- estate/models/__init__.py | 3 ++- estate/models/estate_property.py | 1 + estate/models/estate_property_offer.py | 11 +++++++++++ estate/security/ir.model.access.csv | 1 + estate/views/estate_property_views.xml | 4 ++++ 5 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 estate/models/estate_property_offer.py diff --git a/estate/models/__init__.py b/estate/models/__init__.py index fdab6f99948..2f1821a39c1 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 \ No newline at end of file +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 09d7b0743a6..0ae4b62bc2b 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -30,3 +30,4 @@ class EstateProperty(models.Model): salesperson_id = fields.Many2one("res.users", default=lambda self: self.env.user) buyer_id = fields.Many2one("res.partner", copy=False) tag_ids = fields.Many2many("estate.property.tag") + offer_ids = fields.One2many("estate.property.offer", "property_id") \ No newline at end of file diff --git a/estate/models/estate_property_offer.py b/estate/models/estate_property_offer.py new file mode 100644 index 00000000000..c70a3b24f8b --- /dev/null +++ b/estate/models/estate_property_offer.py @@ -0,0 +1,11 @@ +from odoo import fields, models + + +class EstatePropertyOffer(models.Model): + _name = "estate.property.offer" + _description = "Estate Property Offer" + + price = fields.Float() + status = fields.Selection([("accepted", "Accepted"), ("refused","Refused")], copy=False) + property_id = fields.Many2one("estate.propery", required=True) + partner_id = fields.Many2one("res.partner", required=True) diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv index 21645d8fc31..7d830d6b132 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 estate.access_estate_property,access_estate_property,estate.model_estate_property,base.group_user,1,1,1,1 estate.access_estate_property_type,access_estate_property_type,estate.model_estate_property_type,base.group_user,1,1,1,1 estate.access_estate_property_tag,access_estate_property_tag,estate.model_estate_property_tag,base.group_user,1,1,1,1 +estate.access_estate_property_offer,access_estate_property_offer,estate.model_estate_property_offer,base.group_user,1,1,1,1 diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index d16a3e71341..cc968a161f9 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -28,6 +28,7 @@ + @@ -52,6 +53,9 @@ + + + From ae9ac0b967549ec4bbbabf61bc9a8ad5607bed37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Wed, 17 Sep 2025 09:28:34 +0200 Subject: [PATCH 32/41] add offers --- estate/models/estate_property_offer.py | 2 +- estate/views/estate_property_views.xml | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/estate/models/estate_property_offer.py b/estate/models/estate_property_offer.py index c70a3b24f8b..14f28488e05 100644 --- a/estate/models/estate_property_offer.py +++ b/estate/models/estate_property_offer.py @@ -7,5 +7,5 @@ class EstatePropertyOffer(models.Model): price = fields.Float() status = fields.Selection([("accepted", "Accepted"), ("refused","Refused")], copy=False) - property_id = fields.Many2one("estate.propery", required=True) + property_id = fields.Many2one("estate.property", required=True) partner_id = fields.Many2one("res.partner", required=True) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index cc968a161f9..be23486a7b9 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -55,7 +55,13 @@ - + + + + + + + From 541451e5deea63640d944d3c9d61600ecb47928b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Wed, 17 Sep 2025 10:45:59 +0200 Subject: [PATCH 33/41] message computed fields --- estate/models/estate_property.py | 29 ++++++++++++++++++++++++-- estate/models/estate_property_offer.py | 15 ++++++++++++- estate/views/estate_property_views.xml | 7 ++++++- 3 files changed, 47 insertions(+), 4 deletions(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 0ae4b62bc2b..fa6d4bde7bc 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -1,6 +1,6 @@ from email.policy import default -from odoo import fields, models +from odoo import fields, models, api class EstateProperty(models.Model): @@ -30,4 +30,29 @@ class EstateProperty(models.Model): salesperson_id = fields.Many2one("res.users", default=lambda self: self.env.user) buyer_id = fields.Many2one("res.partner", copy=False) tag_ids = fields.Many2many("estate.property.tag") - offer_ids = fields.One2many("estate.property.offer", "property_id") \ No newline at end of file + offer_ids = fields.One2many("estate.property.offer", "property_id") + best_price = fields.Float(compute="_compute_best_price") + total_area = fields.Integer(compute="_compute_total_area") + + + @api.depends('offer_ids.price') + def _compute_best_price(self): + for property in self: + if property.offer_ids: + property.best_price = max (property.offer_ids.mapped("price")) + else: + property.best_price = 0 + + @api.depends('garden_area','living_area') + def _compute_total_area(self): + for property in self: + property.total_area = property.garden_area + property.living_area + + @api.onchange("garden") + def _onchange_garden(self): + if self.garden: + self.garden_area = 10 + self.garden_orientation = "north" + else: + self.garden_area = 0 + self.garden_orientation = False \ No newline at end of file diff --git a/estate/models/estate_property_offer.py b/estate/models/estate_property_offer.py index 14f28488e05..cd8a2fa9432 100644 --- a/estate/models/estate_property_offer.py +++ b/estate/models/estate_property_offer.py @@ -1,4 +1,4 @@ -from odoo import fields, models +from odoo import fields, models, api class EstatePropertyOffer(models.Model): @@ -9,3 +9,16 @@ class EstatePropertyOffer(models.Model): status = fields.Selection([("accepted", "Accepted"), ("refused","Refused")], copy=False) property_id = fields.Many2one("estate.property", required=True) partner_id = fields.Many2one("res.partner", required=True) + validity = fields.Integer(default = 7) + date_deadline = fields.Date(compute="_compute_deadline", inverse="_inverse_deadline") + + @api.depends('validity','create_date') + def _compute_deadline(self): + for offer in self: + create_date = offer.create_date or fields.Date.today() + offer.date_deadline = fields.Date.add(create_date, days=offer.validity) + + + def _inverse_deadline(self): + for offer in self: + offer.validity = (offer.date_deadline - fields.Date.to_date(offer.create_date)).days diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index be23486a7b9..caffc4b1e5d 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -36,6 +36,7 @@ + @@ -49,8 +50,10 @@ - + + + @@ -60,6 +63,8 @@ + + From cb8d83b009d6cbba2bbc874046445b79cbd56677 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Delbeke?= Date: Wed, 17 Sep 2025 11:54:36 +0200 Subject: [PATCH 34/41] some actions --- estate/models/estate_property.py | 17 ++++++++++++++--- estate/models/estate_property_offer.py | 12 ++++++++++++ estate/views/estate_property_views.xml | 7 +++++++ 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index fa6d4bde7bc..c695ee331bc 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -1,7 +1,7 @@ from email.policy import default -from odoo import fields, models, api - +from odoo import fields, models, api, _ +from odoo.exceptions import UserError class EstateProperty(models.Model): _name = "estate.property" @@ -55,4 +55,15 @@ def _onchange_garden(self): self.garden_orientation = "north" else: self.garden_area = 0 - self.garden_orientation = False \ No newline at end of file + self.garden_orientation = False + + + def action_cancel_property(self): + for property in self: + property.state = "cancelled" + + def action_sell_property(self): + for property in self: + if property.state == "cancelled": + raise UserError(_("Cancelled properties cannot be sold")) + property.state = "sold" diff --git a/estate/models/estate_property_offer.py b/estate/models/estate_property_offer.py index cd8a2fa9432..15e101d3677 100644 --- a/estate/models/estate_property_offer.py +++ b/estate/models/estate_property_offer.py @@ -22,3 +22,15 @@ def _compute_deadline(self): def _inverse_deadline(self): for offer in self: offer.validity = (offer.date_deadline - fields.Date.to_date(offer.create_date)).days + + + + def action_accept_offer(self): + self.status = "accepted" + self.property_id.selling_price = self.price + self.property_id.buyer_id = self.partner_id + + + + def action_refuse_offer(self): + self.status = "refused" diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index caffc4b1e5d..94dd5495d4f 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -19,6 +19,10 @@ estate.property
+
+

@@ -27,6 +31,7 @@

+ @@ -65,6 +70,8 @@ +