From 6b99ab5b0bab273f9b641c84d4716a826125337b Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 09:33:09 +0200 Subject: [PATCH 01/94] Begin following tutorial --- estate/__manifest__.py | 2 +- estate/models.py | 0 estate/models/__init__.py | 1 + estate/models/estate.py | 4 ++++ 4 files changed, 6 insertions(+), 1 deletion(-) delete mode 100644 estate/models.py create mode 100644 estate/models/__init__.py create mode 100644 estate/models/estate.py diff --git a/estate/__manifest__.py b/estate/__manifest__.py index d7cfa57d4c5..fe37e0516b2 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": "17.0.0.1", # 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 deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/estate/models/__init__.py b/estate/models/__init__.py new file mode 100644 index 00000000000..912e8d6a61f --- /dev/null +++ b/estate/models/__init__.py @@ -0,0 +1 @@ +from . import estate \ No newline at end of file diff --git a/estate/models/estate.py b/estate/models/estate.py new file mode 100644 index 00000000000..4cc87ce1dfd --- /dev/null +++ b/estate/models/estate.py @@ -0,0 +1,4 @@ +from odoo import models + +class Estate(models.Model): + _name = 'estate' \ No newline at end of file From 2accef3d6a0b00451ee5621a5a7be621f11bde88 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 09:39:47 +0200 Subject: [PATCH 02/94] Change name of model --- estate/__manifest__.py | 2 +- estate/models/estate.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index fe37e0516b2..c309eae06c4 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": "17.0.0.1", # Version + "version": "17.0.0.2", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ diff --git a/estate/models/estate.py b/estate/models/estate.py index 4cc87ce1dfd..9ce6b7764c8 100644 --- a/estate/models/estate.py +++ b/estate/models/estate.py @@ -1,4 +1,4 @@ from odoo import models -class Estate(models.Model): - _name = 'estate' \ No newline at end of file +class EstateProperty(models.Model): + _name = 'estate_property' \ No newline at end of file From 7c2cafdd12c4f8f6b2b5220349f7efce96346f4a Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 09:41:15 +0200 Subject: [PATCH 03/94] Fix typo --- estate/models/estate.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/estate/models/estate.py b/estate/models/estate.py index 9ce6b7764c8..3934f244736 100644 --- a/estate/models/estate.py +++ b/estate/models/estate.py @@ -1,4 +1,6 @@ from odoo import models class EstateProperty(models.Model): - _name = 'estate_property' \ No newline at end of file + _name = 'estate.property' + _description = 'Real Estate Property' + From 3e916d2cde12b6c9396d9a232766596f33d65382 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 09:45:40 +0200 Subject: [PATCH 04/94] Add fields to EstateProperty --- estate/models/estate.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/estate/models/estate.py b/estate/models/estate.py index 3934f244736..ebc0c756608 100644 --- a/estate/models/estate.py +++ b/estate/models/estate.py @@ -1,6 +1,24 @@ -from odoo import models +from odoo import fields, models class EstateProperty(models.Model): _name = 'estate.property' _description = 'Real Estate Property' + name = fields.Char() + description = fields.Text() + postcode = fields.Char() + date_availability = fields.Date() + expected_price = fields.Float() + 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([ + ('n', 'North'), + ('e', 'East'), + ('s', 'South'), + ('w', 'West'), + ]) \ No newline at end of file From a1b4f31faa984d2a9faaf922ce14018f07f31dfe Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 09:46:44 +0200 Subject: [PATCH 05/94] Update version --- estate/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index c309eae06c4..2605dbf4aa1 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": "17.0.0.2", # Version + "version": "17.0.0.3", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ From 831f529af149638d5d23cc2f43da3527a65c3343 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 09:49:59 +0200 Subject: [PATCH 06/94] Add attributes to properties --- estate/models/estate.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/estate/models/estate.py b/estate/models/estate.py index ebc0c756608..23624c97843 100644 --- a/estate/models/estate.py +++ b/estate/models/estate.py @@ -4,11 +4,11 @@ class EstateProperty(models.Model): _name = 'estate.property' _description = 'Real Estate Property' - name = fields.Char() + name = fields.Char(required=True) description = fields.Text() postcode = fields.Char() date_availability = fields.Date() - expected_price = fields.Float() + expected_price = fields.Float(required=True) selling_price = fields.Float() bedrooms = fields.Integer() living_area = fields.Integer() @@ -16,9 +16,4 @@ class EstateProperty(models.Model): garage = fields.Boolean() garden = fields.Boolean() garden_area = fields.Integer() - garden_orientation = fields.Selection([ - ('n', 'North'), - ('e', 'East'), - ('s', 'South'), - ('w', 'West'), - ]) \ No newline at end of file + garden_orientation = fields.Selection([('n', 'North'), ('e', 'East'), ('s', 'South'), ('w', 'West')]) \ No newline at end of file From 27406836da29b613e7ff66b10df87ea8f143ab66 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 09:51:45 +0200 Subject: [PATCH 07/94] Update version --- estate/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 2605dbf4aa1..c603f3b7dcb 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": "17.0.0.3", # Version + "version": "17.0.0.4", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ From 97841bf21593f8d6f159acbb5db092f24b43ca68 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 09:59:12 +0200 Subject: [PATCH 08/94] Add access rights --- estate/__manifest__.py | 4 ++-- estate/security/ir.model.access.csv | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 estate/security/ir.model.access.csv diff --git a/estate/__manifest__.py b/estate/__manifest__.py index c603f3b7dcb..3bade9c1f9b 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -1,10 +1,10 @@ { "name": "Estate", # The name that will appear in the App list - "version": "17.0.0.4", # Version + "version": "17.0.0.5", # Version "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/security/ir.model.access.csv b/estate/security/ir.model.access.csv new file mode 100644 index 00000000000..a5c7004c625 --- /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 7cbfda5f293e2aa83ddb7ac663ec61799645f4eb Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 10:00:58 +0200 Subject: [PATCH 09/94] Remove unnecessary spaces --- estate/__manifest__.py | 2 +- estate/security/ir.model.access.csv | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 3bade9c1f9b..763b19e5a0f 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": "17.0.0.5", # Version + "version": "17.0.0.6", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv index a5c7004c625..ab63520e22b 100644 --- a/estate/security/ir.model.access.csv +++ b/estate/security/ir.model.access.csv @@ -1,2 +1,2 @@ -id , name, model_id:id, group_id:id,perm_read,perm_write,perm_create,perm_unlink +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 e6a472d2e34b899f3ddbe04b04efdaa85ca7464a Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 10:09:13 +0200 Subject: [PATCH 10/94] Add view xml --- estate/__manifest__.py | 3 ++- estate/models/__init__.py | 2 +- estate/models/{estate.py => estate_property.py} | 0 estate/views/estate_property_views.xml | 6 ++++++ 4 files changed, 9 insertions(+), 2 deletions(-) rename estate/models/{estate.py => estate_property.py} (100%) create mode 100644 estate/views/estate_property_views.xml diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 763b19e5a0f..f78fb8e57de 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -1,10 +1,11 @@ { "name": "Estate", # The name that will appear in the App list - "version": "17.0.0.6", # Version + "version": "17.0.0.7", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ 'security/ir.model.access.csv', + 'views/estate_property_views.xml', ], "installable": True, 'license': 'LGPL-3', diff --git a/estate/models/__init__.py b/estate/models/__init__.py index 912e8d6a61f..f4c8fd6db6d 100644 --- a/estate/models/__init__.py +++ b/estate/models/__init__.py @@ -1 +1 @@ -from . import estate \ No newline at end of file +from . import estate_property \ No newline at end of file diff --git a/estate/models/estate.py b/estate/models/estate_property.py similarity index 100% rename from estate/models/estate.py rename to estate/models/estate_property.py diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml new file mode 100644 index 00000000000..32d82ce561a --- /dev/null +++ b/estate/views/estate_property_views.xml @@ -0,0 +1,6 @@ + + + Properties + estate.property + list,form + From e4e9e7d0e8517decf181453bf7a2e900d397328e Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 10:13:06 +0200 Subject: [PATCH 11/94] Try to fix error --- 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 32d82ce561a..068e2ce6d39 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -1,6 +1,6 @@ - Properties - estate.property + Test Action + estate list,form From 0af462a7f743fc0862b57c29716de605d3770e62 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 10:16:17 +0200 Subject: [PATCH 12/94] Update version --- estate/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index f78fb8e57de..2ad6c73d562 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": "17.0.0.7", # Version + "version": "17.0.0.8", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ From 81db2d50c71e1ae4177e157f5052d1a2502c5e77 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 10:18:22 +0200 Subject: [PATCH 13/94] Add odoo tag to XML --- estate/__manifest__.py | 2 +- estate/views/estate_property_views.xml | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 2ad6c73d562..fd60cd64da4 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": "17.0.0.8", # Version + "version": "17.0.0.9", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 068e2ce6d39..153af2646d3 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -1,6 +1,8 @@ - - Test Action - estate - list,form - + + + Test Action + estate + list,form + + From c00025bb840e71124a9817d1942f6ff1801c9ec9 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 10:19:48 +0200 Subject: [PATCH 14/94] Fix bug --- estate/__manifest__.py | 2 +- estate/views/estate_property_views.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index fd60cd64da4..a90c6ff1c11 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": "17.0.0.9", # Version + "version": "17.0.0.10", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 153af2646d3..4a314430aae 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -2,7 +2,7 @@ Test Action - estate + estate.property list,form From 24765b3d5ef5b1d20929e7db75952feb3eb9a128 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 10:27:07 +0200 Subject: [PATCH 15/94] Add menus --- estate/__manifest__.py | 3 ++- estate/views/estate_menus.xml | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 estate/views/estate_menus.xml diff --git a/estate/__manifest__.py b/estate/__manifest__.py index a90c6ff1c11..3c6aa1b8e8d 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -1,10 +1,11 @@ { "name": "Estate", # The name that will appear in the App list - "version": "17.0.0.10", # Version + "version": "17.0.0.11", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ 'security/ir.model.access.csv', + 'views/estate_menus.xml', 'views/estate_property_views.xml', ], "installable": True, diff --git a/estate/views/estate_menus.xml b/estate/views/estate_menus.xml new file mode 100644 index 00000000000..13adb5dc312 --- /dev/null +++ b/estate/views/estate_menus.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file From 5e8a85d96cbd511ad095598b7df4961e8681cff8 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 10:33:06 +0200 Subject: [PATCH 16/94] Modify attributes --- estate/__manifest__.py | 2 +- estate/models/estate_property.py | 4 ++-- estate/views/estate_property_views.xml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 3c6aa1b8e8d..61a9d4315c5 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": "17.0.0.11", # Version + "version": "17.0.0.12", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 23624c97843..0300c31d697 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -7,9 +7,9 @@ class EstateProperty(models.Model): name = fields.Char(required=True) description = fields.Text() postcode = fields.Char() - date_availability = fields.Date() + date_availability = fields.Date(copy=False) expected_price = fields.Float(required=True) - selling_price = fields.Float() + selling_price = fields.Float(readonly=True, copy=False) bedrooms = fields.Integer() living_area = fields.Integer() facades = fields.Integer() diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 4a314430aae..1d2a3aaa4cd 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -1,7 +1,7 @@ - Test Action + Properties estate.property list,form From d2652113347fd55d2bb45a7cb6bd8d67ae29fac6 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 10:39:45 +0200 Subject: [PATCH 17/94] Add default values to attributes --- estate/__manifest__.py | 2 +- estate/models/estate_property.py | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 61a9d4315c5..dd4f53b9ac6 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": "17.0.0.12", # Version + "version": "17.0.0.13", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 0300c31d697..90870eef83a 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -1,4 +1,5 @@ from odoo import fields, models +from odoo.tools.date_utils import add, today class EstateProperty(models.Model): _name = 'estate.property' @@ -7,10 +8,10 @@ class EstateProperty(models.Model): name = fields.Char(required=True) description = fields.Text() postcode = fields.Char() - date_availability = fields.Date(copy=False) + date_availability = fields.Date(copy=False, default=add(today(), days=90)) expected_price = fields.Float(required=True) selling_price = fields.Float(readonly=True, copy=False) - bedrooms = fields.Integer() + bedrooms = fields.Integer(default=2) living_area = fields.Integer() facades = fields.Integer() garage = fields.Boolean() From 2793b33da271bcdcc450dffc00c23fd56206943b Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 10:44:01 +0200 Subject: [PATCH 18/94] Correct usage of today() --- estate/models/estate_property.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 90870eef83a..d90fa19fa50 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -1,5 +1,5 @@ from odoo import fields, models -from odoo.tools.date_utils import add, today +from odoo.tools.date_utils import add class EstateProperty(models.Model): _name = 'estate.property' @@ -8,7 +8,7 @@ class EstateProperty(models.Model): name = fields.Char(required=True) description = fields.Text() postcode = fields.Char() - date_availability = fields.Date(copy=False, default=add(today(), days=90)) + date_availability = fields.Date(copy=False, default=add(fields.Date.today(), days=90)) expected_price = fields.Float(required=True) selling_price = fields.Float(readonly=True, copy=False) bedrooms = fields.Integer(default=2) From d271ae4ad4b7d5542d503412d67c82da13bce3d0 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 10:47:26 +0200 Subject: [PATCH 19/94] Add active field --- estate/__manifest__.py | 2 +- estate/models/estate_property.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index dd4f53b9ac6..5e9e4d002be 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": "17.0.0.13", # Version + "version": "17.0.0.14", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index d90fa19fa50..d597f2f8c6a 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -5,6 +5,8 @@ class EstateProperty(models.Model): _name = 'estate.property' _description = 'Real Estate Property' + active = fields.Boolean() + name = fields.Char(required=True) description = fields.Text() postcode = fields.Char() From 3d3da13ef23709fd6ef7cd74b33d394d5d3e45b7 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 10:50:00 +0200 Subject: [PATCH 20/94] Add default value for active --- estate/__manifest__.py | 2 +- estate/models/estate_property.py | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 5e9e4d002be..3bb937d7f9c 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": "17.0.0.14", # Version + "version": "17.0.0.15", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index d597f2f8c6a..929ac419a5f 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -5,8 +5,7 @@ class EstateProperty(models.Model): _name = 'estate.property' _description = 'Real Estate Property' - active = fields.Boolean() - + # Custom fields name = fields.Char(required=True) description = fields.Text() postcode = fields.Char() @@ -19,4 +18,7 @@ class EstateProperty(models.Model): garage = fields.Boolean() garden = fields.Boolean() garden_area = fields.Integer() - garden_orientation = fields.Selection([('n', 'North'), ('e', 'East'), ('s', 'South'), ('w', 'West')]) \ No newline at end of file + garden_orientation = fields.Selection([('n', 'North'), ('e', 'East'), ('s', 'South'), ('w', 'West')]) + + # Reserved fields + active = fields.Boolean(default=True) \ No newline at end of file From b1b4cc29429f7c8efec52acf26d99112a63470af Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 10:54:25 +0200 Subject: [PATCH 21/94] Add state field --- estate/__manifest__.py | 2 +- estate/models/estate_property.py | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 3bb937d7f9c..191015df0ea 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": "17.0.0.15", # Version + "version": "17.0.0.16", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 929ac419a5f..6a6a4040bef 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -21,4 +21,10 @@ class EstateProperty(models.Model): garden_orientation = fields.Selection([('n', 'North'), ('e', 'East'), ('s', 'South'), ('w', 'West')]) # Reserved fields - active = fields.Boolean(default=True) \ No newline at end of file + active = fields.Boolean(default=True) + state = fields.Selection([ + ('new', 'New'), + ('received', 'Offer Received'), + ('accepted', 'Offer Accepted'), + ('sold', 'Sold'), + ('canceled', 'Canceled')], default='new', copy=False) From 80f830fa2b19f62776515d5ad791be500493abd1 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 10:57:36 +0200 Subject: [PATCH 22/94] Add better name for state field --- 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 6a6a4040bef..1cfd3175cc3 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -27,4 +27,4 @@ class EstateProperty(models.Model): ('received', 'Offer Received'), ('accepted', 'Offer Accepted'), ('sold', 'Sold'), - ('canceled', 'Canceled')], default='new', copy=False) + ('canceled', 'Canceled')], string="Status", default='new', copy=False) From 4d2f980adbbe1e0bf058e9de00fe3f7cefc65d05 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 11:04:11 +0200 Subject: [PATCH 23/94] Add estate property tree view --- estate/__manifest__.py | 2 +- estate/models/estate_property.py | 10 +++++----- estate/views/estate_property_views.xml | 16 ++++++++++++++++ 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 191015df0ea..5a981299e60 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": "17.0.0.16", # Version + "version": "17.0.0.17", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 1cfd3175cc3..20527ca3a77 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -6,14 +6,14 @@ class EstateProperty(models.Model): _description = 'Real Estate Property' # Custom fields - name = fields.Char(required=True) + name = fields.Char(string="Title", required=True) description = fields.Text() postcode = fields.Char() - date_availability = fields.Date(copy=False, default=add(fields.Date.today(), days=90)) + date_availability = fields.Date(string="Available From", copy=False, default=add(fields.Date.today(), days=90)) expected_price = fields.Float(required=True) selling_price = fields.Float(readonly=True, copy=False) bedrooms = fields.Integer(default=2) - living_area = fields.Integer() + living_area = fields.Integer(string="Living Area (sqm)") facades = fields.Integer() garage = fields.Boolean() garden = fields.Boolean() @@ -22,9 +22,9 @@ class EstateProperty(models.Model): # Reserved fields active = fields.Boolean(default=True) - state = fields.Selection([ + state = fields.Selection(string="Status", default='new', copy=False, selection=[ ('new', 'New'), ('received', 'Offer Received'), ('accepted', 'Offer Accepted'), ('sold', 'Sold'), - ('canceled', 'Canceled')], string="Status", default='new', copy=False) + ('canceled', 'Canceled')]) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 1d2a3aaa4cd..a638c1652c7 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -5,4 +5,20 @@ estate.property list,form + + + estate.property.tree + estate.property + + + + + + + + + + + + From e092d84905f342b405abd71be19e40a2f2137547 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 11:37:06 +0200 Subject: [PATCH 24/94] Add estate property form view --- estate/__manifest__.py | 2 +- estate/views/estate_property_views.xml | 37 +++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 5a981299e60..d6cb47525d8 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": "17.0.0.17", # Version + "version": "17.0.0.18", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index a638c1652c7..9878cbd47b7 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -3,7 +3,7 @@ Properties estate.property - list,form + tree,form @@ -21,4 +21,39 @@ + + + estate.property.form + estate.property + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
From a951696245ef5d851d99b5a8ab7b9e128274cb1b Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 12:00:51 +0200 Subject: [PATCH 25/94] Add estate property search view --- estate/__manifest__.py | 2 +- estate/views/estate_property_views.xml | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index d6cb47525d8..96d2af213ea 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": "17.0.0.18", # Version + "version": "17.0.0.19", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 9878cbd47b7..1a83c813b83 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -56,4 +56,25 @@ + + + estate.property.search + estate.property + + + + + + + + + + + + + + + + + From 7535afab6485d9f5555eea049af48df326dc83cb Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 13:10:40 +0200 Subject: [PATCH 26/94] Add Estate Property Type model --- estate/__manifest__.py | 3 +- estate/models/__init__.py | 3 +- estate/models/estate_property_type.py | 7 +++ estate/views/estate_menus.xml | 7 ++- estate/views/estate_property_type_views.xml | 55 +++++++++++++++++++++ 5 files changed, 71 insertions(+), 4 deletions(-) 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 96d2af213ea..804dfe74989 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -1,11 +1,12 @@ { "name": "Estate", # The name that will appear in the App list - "version": "17.0.0.19", # Version + "version": "17.0.0.20", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ 'security/ir.model.access.csv', 'views/estate_menus.xml', + 'views/estate_property_type_views.xml', 'views/estate_property_views.xml', ], "installable": True, 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_type.py b/estate/models/estate_property_type.py new file mode 100644 index 00000000000..6f8216457bb --- /dev/null +++ b/estate/models/estate_property_type.py @@ -0,0 +1,7 @@ +from odoo import fields, models + +class EstatePropertyType(models.Model): + _name = 'estate.property.type' + _description = 'Real Estate Property Type' + + name = fields.Char(required=True) diff --git a/estate/views/estate_menus.xml b/estate/views/estate_menus.xml index 13adb5dc312..b19d433f11b 100644 --- a/estate/views/estate_menus.xml +++ b/estate/views/estate_menus.xml @@ -1,8 +1,11 @@ - - + + + + + \ 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..9c3f8192d60 --- /dev/null +++ b/estate/views/estate_property_type_views.xml @@ -0,0 +1,55 @@ + + + + Property Types + estate.property.type + tree,form + + + + + + estate.property.type.form + estate.property.type + +
+ + + + + + + +
+
+
+ + + +
From 9290c7d82220b8b3fd0a87091e1b6ed31dc11775 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 13:23:38 +0200 Subject: [PATCH 27/94] tree -> list --- estate/views/estate_property_views.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 1a83c813b83..f1a3a4cbe30 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -3,14 +3,14 @@ Properties estate.property - tree,form + list,form - - estate.property.tree + + estate.property.list estate.property - + @@ -18,7 +18,7 @@ - + From 40df38c65283a4bedbd794caa0e51cc3e09cea20 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 13:28:02 +0200 Subject: [PATCH 28/94] Update version --- estate/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 804dfe74989..53af8d4d6db 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": "17.0.0.20", # Version + "version": "17.0.0.21", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ From 06fca0bf20d226c1d2766ac80e5e3683594277c1 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 13:28:36 +0200 Subject: [PATCH 29/94] Reorder views --- estate/__manifest__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 53af8d4d6db..21410e8d7e5 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -1,13 +1,13 @@ { "name": "Estate", # The name that will appear in the App list - "version": "17.0.0.21", # Version + "version": "17.0.0.22", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ 'security/ir.model.access.csv', - 'views/estate_menus.xml', 'views/estate_property_type_views.xml', 'views/estate_property_views.xml', + 'views/estate_menus.xml', ], "installable": True, 'license': 'LGPL-3', From 6fe5ca6937015c2309a5f2f72e83499d6363030f Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 13:28:57 +0200 Subject: [PATCH 30/94] Add access rights for 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 ab63520e22b..0dd057dc8cf 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 \ No newline at end of file From f613f277f6b729921d1bc667b37843c90a4820a9 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 13:40:16 +0200 Subject: [PATCH 31/94] Try to fix property type views --- estate/__manifest__.py | 2 +- estate/views/estate_property_type_views.xml | 26 ++++++++++----------- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 21410e8d7e5..518ae983a2a 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": "17.0.0.22", # Version + "version": "17.0.0.23", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ diff --git a/estate/views/estate_property_type_views.xml b/estate/views/estate_property_type_views.xml index 9c3f8192d60..32a7e8e1777 100644 --- a/estate/views/estate_property_type_views.xml +++ b/estate/views/estate_property_type_views.xml @@ -3,19 +3,9 @@ Property Types estate.property.type - tree,form + list,form - - estate.property.type.form estate.property.type @@ -23,15 +13,23 @@
- - - +
+ + - - - diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 9bbc1da44e6..b802c36de02 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -13,6 +13,7 @@ + @@ -30,8 +31,9 @@
+ + - From d501d0af1847a610a3c7f31368ef711dc6fcf118 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 14:20:45 +0200 Subject: [PATCH 37/94] Add tag views to manifest --- estate/__manifest__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index eb176e3102b..8b807c2dff6 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -5,6 +5,7 @@ "depends": ["base"], # dependencies "data": [ 'security/ir.model.access.csv', + 'views/estate_property_tag_views.xml', 'views/estate_property_type_views.xml', 'views/estate_property_views.xml', 'views/estate_menus.xml', From b462b55b309e84bb6dd5a413139f10d33e1868a2 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 14:22:11 +0200 Subject: [PATCH 38/94] Fix copy-paste bug --- estate/models/estate_property_tag.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/estate/models/estate_property_tag.py b/estate/models/estate_property_tag.py index 85a5be7c53d..e859a38ffe0 100644 --- a/estate/models/estate_property_tag.py +++ b/estate/models/estate_property_tag.py @@ -1,7 +1,7 @@ from odoo import fields, models class EstatePropertyTag(models.Model): - _name = 'estate.property.type' + _name = 'estate.property.tag' _description = 'Real Estate Property Tag' name = fields.Char(required=True) From fdce7f24b37602f1a7b285f790c90c6ab2a71ae9 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 14:24:05 +0200 Subject: [PATCH 39/94] Import model file in models/__init__.py --- estate/models/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/estate/models/__init__.py b/estate/models/__init__.py index 97aee757823..61518bbf2cc 100644 --- a/estate/models/__init__.py +++ b/estate/models/__init__.py @@ -1,2 +1,3 @@ from . import estate_property +from . import estate_property_tag from . import estate_property_type \ No newline at end of file From 6492cf86e7660db9cee7cff146b380309b71148f Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 14:26:09 +0200 Subject: [PATCH 40/94] Add access rights for tags --- estate/__manifest__.py | 2 +- estate/security/ir.model.access.csv | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 8b807c2dff6..d0f1f31bdda 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": "18.0.0.1", # Version + "version": "18.0.0.2", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv index 0dd057dc8cf..d6afff6e5cb 100644 --- a/estate/security/ir.model.access.csv +++ b/estate/security/ir.model.access.csv @@ -1,3 +1,4 @@ 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_tag,access_estate_property_tag,estate.model_estate_property_tag,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 \ No newline at end of file From 33934f5d27791fdfd494a7c7050e1b7ddf5413c3 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 14:48:37 +0200 Subject: [PATCH 41/94] Refactor + add offers to properties --- estate/__manifest__.py | 10 +++---- estate/models/__init__.py | 7 +++-- .../{estate_property.py => property.py} | 6 ++-- estate/models/property_offer.py | 12 ++++++++ ...estate_property_tag.py => property_tag.py} | 2 +- ...tate_property_type.py => property_type.py} | 2 +- estate/security/ir.model.access.csv | 1 + estate/views/{estate_menus.xml => menus.xml} | 0 estate/views/property_offer_views.xml | 30 +++++++++++++++++++ ...y_tag_views.xml => property_tag_views.xml} | 0 ...type_views.xml => property_type_views.xml} | 0 ..._property_views.xml => property_views.xml} | 9 ++++++ 12 files changed, 66 insertions(+), 13 deletions(-) rename estate/models/{estate_property.py => property.py} (88%) create mode 100644 estate/models/property_offer.py rename estate/models/{estate_property_tag.py => property_tag.py} (79%) rename estate/models/{estate_property_type.py => property_type.py} (79%) rename estate/views/{estate_menus.xml => menus.xml} (100%) create mode 100644 estate/views/property_offer_views.xml rename estate/views/{estate_property_tag_views.xml => property_tag_views.xml} (100%) rename estate/views/{estate_property_type_views.xml => property_type_views.xml} (100%) rename estate/views/{estate_property_views.xml => property_views.xml} (89%) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index d0f1f31bdda..3ddf9f8624a 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -1,14 +1,14 @@ { "name": "Estate", # The name that will appear in the App list - "version": "18.0.0.2", # Version + "version": "18.0.0.3", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ 'security/ir.model.access.csv', - 'views/estate_property_tag_views.xml', - 'views/estate_property_type_views.xml', - 'views/estate_property_views.xml', - 'views/estate_menus.xml', + 'views/property_tag_views.xml', + 'views/property_type_views.xml', + 'views/property_views.xml', + 'views/menus.xml', ], "installable": True, 'license': 'LGPL-3', diff --git a/estate/models/__init__.py b/estate/models/__init__.py index 61518bbf2cc..74aac0a9a14 100644 --- a/estate/models/__init__.py +++ b/estate/models/__init__.py @@ -1,3 +1,4 @@ -from . import estate_property -from . import estate_property_tag -from . import estate_property_type \ No newline at end of file +from . import property +from . import property_tag +from . import property_type +from . import property_offer \ No newline at end of file diff --git a/estate/models/estate_property.py b/estate/models/property.py similarity index 88% rename from estate/models/estate_property.py rename to estate/models/property.py index ce85725c411..218905755da 100644 --- a/estate/models/estate_property.py +++ b/estate/models/property.py @@ -1,7 +1,6 @@ from odoo import fields, models -from odoo.tools.date_utils import add -class EstateProperty(models.Model): +class Property(models.Model): _name = 'estate.property' _description = 'Real Estate Property' @@ -9,7 +8,7 @@ class EstateProperty(models.Model): name = fields.Char(string="Title", required=True) description = fields.Text() postcode = fields.Char() - date_availability = fields.Date(string="Available From", copy=False, default=add(fields.Date.today(), days=90)) + date_availability = fields.Date(string="Available From", copy=False, default=fields.Date.add(fields.Date.today(), months=3)) expected_price = fields.Float(required=True) selling_price = fields.Float(readonly=True, copy=False) bedrooms = fields.Integer(default=2) @@ -25,6 +24,7 @@ class EstateProperty(models.Model): buyer_id = fields.Many2one('res.partner', string="Buyer", copy=False) salesperson_id = fields.Many2one('res.users', string="Salesperson", default=lambda self: self.env.user) tag_ids = fields.Many2many('estate.property.tag', string="Tags") + offer_ids = fields.One2many('estate.property.offer', 'property_id', string="Offers") # Reserved fields active = fields.Boolean(default=True) diff --git a/estate/models/property_offer.py b/estate/models/property_offer.py new file mode 100644 index 00000000000..f6f9ffb964c --- /dev/null +++ b/estate/models/property_offer.py @@ -0,0 +1,12 @@ +from odoo import fields, models + +class PropertyOffer(models.Model): + _name = 'estate.property.offer' + _description = 'Real Estate Property Offer' + + price = fields.Float() + status = fields.Selection([('accepted', 'Accepted'), ('refused', 'Refused')], copy=False) + partner_id = fields.Many2one('res.partner', required=True) + property_id = fields.Many2one('estate.property', required=True) + + name = fields.Char(required=True) diff --git a/estate/models/estate_property_tag.py b/estate/models/property_tag.py similarity index 79% rename from estate/models/estate_property_tag.py rename to estate/models/property_tag.py index e859a38ffe0..bb059728ba0 100644 --- a/estate/models/estate_property_tag.py +++ b/estate/models/property_tag.py @@ -1,6 +1,6 @@ from odoo import fields, models -class EstatePropertyTag(models.Model): +class PropertyTag(models.Model): _name = 'estate.property.tag' _description = 'Real Estate Property Tag' diff --git a/estate/models/estate_property_type.py b/estate/models/property_type.py similarity index 79% rename from estate/models/estate_property_type.py rename to estate/models/property_type.py index 6f8216457bb..63ad84c4c38 100644 --- a/estate/models/estate_property_type.py +++ b/estate/models/property_type.py @@ -1,6 +1,6 @@ from odoo import fields, models -class EstatePropertyType(models.Model): +class PropertyType(models.Model): _name = 'estate.property.type' _description = 'Real Estate Property Type' diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv index d6afff6e5cb..c706f12ad03 100644 --- a/estate/security/ir.model.access.csv +++ b/estate/security/ir.model.access.csv @@ -1,4 +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_offer,access_estate_property_offer,estate.model_estate_property_offer,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_type,access_estate_property_type,estate.model_estate_property_type,base.group_user,1,1,1,1 \ No newline at end of file diff --git a/estate/views/estate_menus.xml b/estate/views/menus.xml similarity index 100% rename from estate/views/estate_menus.xml rename to estate/views/menus.xml diff --git a/estate/views/property_offer_views.xml b/estate/views/property_offer_views.xml new file mode 100644 index 00000000000..598f663f999 --- /dev/null +++ b/estate/views/property_offer_views.xml @@ -0,0 +1,30 @@ + + + + estate.property.offer.form + estate.property.offer + + + + + + + + + + + + + + + estate.property.offer.list + estate.property.offer + + + + + + + + + diff --git a/estate/views/estate_property_tag_views.xml b/estate/views/property_tag_views.xml similarity index 100% rename from estate/views/estate_property_tag_views.xml rename to estate/views/property_tag_views.xml diff --git a/estate/views/estate_property_type_views.xml b/estate/views/property_type_views.xml similarity index 100% rename from estate/views/estate_property_type_views.xml rename to estate/views/property_type_views.xml diff --git a/estate/views/estate_property_views.xml b/estate/views/property_views.xml similarity index 89% rename from estate/views/estate_property_views.xml rename to estate/views/property_views.xml index b802c36de02..90426ffaa44 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/property_views.xml @@ -59,6 +59,15 @@ + + + + + + + + + From be8df83650fa4fd33926e5f28fa181c7b2087261 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 14:51:08 +0200 Subject: [PATCH 42/94] Remove unneeded field --- estate/models/property_offer.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/estate/models/property_offer.py b/estate/models/property_offer.py index f6f9ffb964c..34212d8c056 100644 --- a/estate/models/property_offer.py +++ b/estate/models/property_offer.py @@ -8,5 +8,3 @@ class PropertyOffer(models.Model): status = fields.Selection([('accepted', 'Accepted'), ('refused', 'Refused')], copy=False) partner_id = fields.Many2one('res.partner', required=True) property_id = fields.Many2one('estate.property', required=True) - - name = fields.Char(required=True) From 5e3343122d58e5b2acc2e8fd0cf0a7876721d61d Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 15:07:33 +0200 Subject: [PATCH 43/94] Add computed fields --- estate/__manifest__.py | 2 +- estate/models/property.py | 16 +++++++++++++++- estate/views/property_views.xml | 2 ++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 3ddf9f8624a..cac43c65c0b 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": "18.0.0.3", # Version + "version": "18.0.0.4", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ diff --git a/estate/models/property.py b/estate/models/property.py index 218905755da..5c1fd7b38ab 100644 --- a/estate/models/property.py +++ b/estate/models/property.py @@ -1,4 +1,4 @@ -from odoo import fields, models +from odoo import fields, models, api class Property(models.Model): _name = 'estate.property' @@ -19,6 +19,20 @@ class Property(models.Model): garden_area = fields.Integer() garden_orientation = fields.Selection([('n', 'North'), ('e', 'East'), ('s', 'South'), ('w', 'West')]) + # Computed fields + total_area = fields.Integer(string='Total Area (sqm)', compute='_compute_total_area') + best_price = fields.Float(string='Best Offer', compute='_compute_best_price') + + @api.depends('living_area', 'garden_area') + def _compute_total_area(self): + for record in self: + record.total_area = record.living_area + record.garden_area + + @api.depends('offer_ids.price') + def _compute_best_price(self): + for record in self: + record.best_price = max(record.offer_ids.mapped('price')) or 0 + # Relational fields property_type_id = fields.Many2one('estate.property.type', string="Property Type") buyer_id = fields.Many2one('res.partner', string="Buyer", copy=False) diff --git a/estate/views/property_views.xml b/estate/views/property_views.xml index 90426ffaa44..689844f5021 100644 --- a/estate/views/property_views.xml +++ b/estate/views/property_views.xml @@ -43,6 +43,7 @@ + @@ -57,6 +58,7 @@ + From cd47de2d74adbb45485e447d56878ba0496667ba Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 15:08:56 +0200 Subject: [PATCH 44/94] Fix typo --- estate/views/property_views.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/estate/views/property_views.xml b/estate/views/property_views.xml index 689844f5021..32032e4aa9d 100644 --- a/estate/views/property_views.xml +++ b/estate/views/property_views.xml @@ -43,7 +43,7 @@ - + From a67323fc75071734d1fa3153e78a8221a33da43d Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 15:14:39 +0200 Subject: [PATCH 45/94] Fix bug --- estate/models/property.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/estate/models/property.py b/estate/models/property.py index 5c1fd7b38ab..5ca865d8508 100644 --- a/estate/models/property.py +++ b/estate/models/property.py @@ -31,7 +31,7 @@ def _compute_total_area(self): @api.depends('offer_ids.price') def _compute_best_price(self): for record in self: - record.best_price = max(record.offer_ids.mapped('price')) or 0 + record.best_price = max(record.offer_ids.mapped('price') or [0]) # Relational fields property_type_id = fields.Many2one('estate.property.type', string="Property Type") From c2c00690a759bc6311ee1d89622beda68f700ec5 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 15:25:55 +0200 Subject: [PATCH 46/94] Add computed fields to offer --- estate/models/property_offer.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/estate/models/property_offer.py b/estate/models/property_offer.py index 34212d8c056..57e4bc46b62 100644 --- a/estate/models/property_offer.py +++ b/estate/models/property_offer.py @@ -1,4 +1,4 @@ -from odoo import fields, models +from odoo import fields, models, api class PropertyOffer(models.Model): _name = 'estate.property.offer' @@ -8,3 +8,17 @@ class PropertyOffer(models.Model): status = fields.Selection([('accepted', 'Accepted'), ('refused', 'Refused')], copy=False) partner_id = fields.Many2one('res.partner', required=True) property_id = fields.Many2one('estate.property', required=True) + + # Computed fields + validity = fields.Integer(string="Validity (days)", default=7) + date_deadline = fields.Date(string="Deadline", compute='_compute_date_deadline', inverse='_inverse_date_deadline') + + @api.depends('create_date', 'validity') + def _compute_date_deadline(self): + for record in self: + record.date_deadline = fields.Date.add(record.create_date, days=record.validity) + + @api.depends('create_date', 'date_deadline') + def _inverse_date_deadline(self): + for record in self: + record.validity = fields.Date.subtract(record.date_deadline, record.create_date).days From 93a2fe662d1fa524e43843c07234fc22d7be25ed Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 15:28:24 +0200 Subject: [PATCH 47/94] Update version --- estate/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index cac43c65c0b..0308819beec 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": "18.0.0.4", # Version + "version": "18.0.0.5", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ From a94b23aec1ac52a475300b5189509ca04fafc675 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 15:38:26 +0200 Subject: [PATCH 48/94] Display computed offer fields --- estate/__manifest__.py | 3 ++- estate/models/property_offer.py | 6 +++++- estate/views/property_offer_views.xml | 2 ++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 0308819beec..1ca3eebb580 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -1,10 +1,11 @@ { "name": "Estate", # The name that will appear in the App list - "version": "18.0.0.5", # Version + "version": "18.0.0.6", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ 'security/ir.model.access.csv', + 'views/property_offer_views.xml', 'views/property_tag_views.xml', 'views/property_type_views.xml', 'views/property_views.xml', diff --git a/estate/models/property_offer.py b/estate/models/property_offer.py index 57e4bc46b62..24eca2aa32f 100644 --- a/estate/models/property_offer.py +++ b/estate/models/property_offer.py @@ -16,7 +16,11 @@ class PropertyOffer(models.Model): @api.depends('create_date', 'validity') def _compute_date_deadline(self): for record in self: - record.date_deadline = fields.Date.add(record.create_date, days=record.validity) + if record.create_date: + date = record.create_date + else: + date = fields.Date.today() + record.date_deadline = fields.Date.add(date, days=record.validity) @api.depends('create_date', 'date_deadline') def _inverse_date_deadline(self): diff --git a/estate/views/property_offer_views.xml b/estate/views/property_offer_views.xml index 598f663f999..ed0016139df 100644 --- a/estate/views/property_offer_views.xml +++ b/estate/views/property_offer_views.xml @@ -9,6 +9,8 @@ + +
From 80d7a1f0335c7b0051d8f1f242e1545f82226b67 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 16:13:30 +0200 Subject: [PATCH 49/94] Fix bug in logic --- estate/__manifest__.py | 2 +- estate/models/property_offer.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 1ca3eebb580..39c35c69434 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": "18.0.0.6", # Version + "version": "18.0.0.7", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ diff --git a/estate/models/property_offer.py b/estate/models/property_offer.py index 24eca2aa32f..443babbf870 100644 --- a/estate/models/property_offer.py +++ b/estate/models/property_offer.py @@ -25,4 +25,4 @@ def _compute_date_deadline(self): @api.depends('create_date', 'date_deadline') def _inverse_date_deadline(self): for record in self: - record.validity = fields.Date.subtract(record.date_deadline, record.create_date).days + record.validity = (record.date_deadline - record.create_date.date()).days From e297bd6835a53b63742a4acfcc0d0e96955d3fd9 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 16:14:00 +0200 Subject: [PATCH 50/94] Add onchange to garden field --- estate/__manifest__.py | 2 +- estate/models/property.py | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 39c35c69434..e51ea66646e 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": "18.0.0.7", # Version + "version": "18.0.0.8", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ diff --git a/estate/models/property.py b/estate/models/property.py index 5ca865d8508..e062b06f539 100644 --- a/estate/models/property.py +++ b/estate/models/property.py @@ -33,6 +33,15 @@ def _compute_best_price(self): for record in self: record.best_price = max(record.offer_ids.mapped('price') or [0]) + @api.onchange('garden') + def _onchange_garden(self): + if not self.garden: + self.garden_area = 0 + self.garden_orientation = False + else: + self.garden_area = 100 + self.garden_orientation = 'n' + # Relational fields property_type_id = fields.Many2one('estate.property.type', string="Property Type") buyer_id = fields.Many2one('res.partner', string="Buyer", copy=False) From 5ecc4d1c1473876ea05bca764b3be5eacb6c0364 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 16:27:28 +0200 Subject: [PATCH 51/94] Add cancel and mark as sold actions --- estate/models/property.py | 13 ++++++++++++- estate/views/property_views.xml | 7 +++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/estate/models/property.py b/estate/models/property.py index e062b06f539..578a6e957e2 100644 --- a/estate/models/property.py +++ b/estate/models/property.py @@ -39,7 +39,7 @@ def _onchange_garden(self): self.garden_area = 0 self.garden_orientation = False else: - self.garden_area = 100 + self.garden_area = 10 self.garden_orientation = 'n' # Relational fields @@ -57,3 +57,14 @@ def _onchange_garden(self): ('accepted', 'Offer Accepted'), ('sold', 'Sold'), ('canceled', 'Canceled')]) + + # Action methods + def action_sold(self): + if self.state == 'canceled': + raise UserError("You cannot sell a canceled property.") + self.state = 'sold' + + def action_cancel(self): + if self.state == 'sold': + raise UserError("You cannot cancel a sold property.") + self.state = 'canceled' diff --git a/estate/views/property_views.xml b/estate/views/property_views.xml index 32032e4aa9d..5bba831cd9b 100644 --- a/estate/views/property_views.xml +++ b/estate/views/property_views.xml @@ -29,14 +29,17 @@ estate.property
+
+
- - From b7cf7a542c1213f7b149620bfe41ec1084c8a105 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 16:37:57 +0200 Subject: [PATCH 52/94] Import UserError before using it --- estate/models/property.py | 1 + 1 file changed, 1 insertion(+) diff --git a/estate/models/property.py b/estate/models/property.py index 578a6e957e2..d0f0efdc021 100644 --- a/estate/models/property.py +++ b/estate/models/property.py @@ -1,4 +1,5 @@ from odoo import fields, models, api +from odoo.exceptions import UserError class Property(models.Model): _name = 'estate.property' From 21d2185cc5e4baeced6166fa2a52049cd37d8de5 Mon Sep 17 00:00:00 2001 From: Matt Purnell Date: Mon, 30 Sep 2024 16:48:43 +0200 Subject: [PATCH 53/94] Add accept and refuse buttons to offer --- estate/__manifest__.py | 2 +- estate/models/property_offer.py | 11 +++++++++++ estate/views/property_offer_views.xml | 2 ++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index e51ea66646e..9723dac4907 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": "18.0.0.8", # Version + "version": "18.0.0.9", # Version "application": True, # This line says the module is an App, and not a module "depends": ["base"], # dependencies "data": [ diff --git a/estate/models/property_offer.py b/estate/models/property_offer.py index 443babbf870..1f14418917e 100644 --- a/estate/models/property_offer.py +++ b/estate/models/property_offer.py @@ -26,3 +26,14 @@ def _compute_date_deadline(self): def _inverse_date_deadline(self): for record in self: record.validity = (record.date_deadline - record.create_date.date()).days + + # Action methods + def action_accept(self): + for record in self: + record.status = 'accepted' + record.property_id.buyer_id = record.partner_id + record.property_id.selling_price = record.price + + def action_refuse(self): + for record in self: + record.status = 'refused' \ No newline at end of file diff --git a/estate/views/property_offer_views.xml b/estate/views/property_offer_views.xml index ed0016139df..6eed3227c62 100644 --- a/estate/views/property_offer_views.xml +++ b/estate/views/property_offer_views.xml @@ -26,6 +26,8 @@ +