From 8676a0223029bed301a239485dfda9846c0b0793 Mon Sep 17 00:00:00 2001 From: nmak-odoo Date: Thu, 6 Feb 2025 19:13:27 +0530 Subject: [PATCH] [IMP] estate : implemented relationships between models Day 3 : Chapter 7 : Implemented many2one and many2many relationships paritally-implemented (one2many) added property types which can be selected from its dropdown menu added property tags which can be selected below name field --- .vscode/settings.json | 3 ++ estate/__init__.py | 2 +- estate/__manifest__.py | 6 ++- estate/models/__init__.py | 2 +- estate/models/estate_property.py | 12 +++-- estate/models/estate_property_offer.py | 13 +++++ estate/models/estate_property_tag.py | 8 +++ estate/models/estate_property_type.py | 8 +++ estate/security/ir.model.access.csv | 5 +- estate/views/estate_menus.xml | 15 +++--- estate/views/estate_property_offer_views.xml | 53 ++++++++++++++++++++ estate/views/estate_property_tag_views.xml | 8 +++ estate/views/estate_property_type_views.xml | 32 ++++++++++++ estate/views/estate_property_views.xml | 45 +++++++++++------ 14 files changed, 183 insertions(+), 29 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 estate/models/estate_property_offer.py create mode 100644 estate/models/estate_property_tag.py create mode 100644 estate/models/estate_property_type.py create mode 100644 estate/views/estate_property_offer_views.xml create mode 100644 estate/views/estate_property_tag_views.xml create mode 100644 estate/views/estate_property_type_views.xml diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000000..ff5300ef48 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.languageServer": "None" +} \ No newline at end of file diff --git a/estate/__init__.py b/estate/__init__.py index 9a7e03eded..0650744f6b 100644 --- a/estate/__init__.py +++ b/estate/__init__.py @@ -1 +1 @@ -from . import models \ No newline at end of file +from . import models diff --git a/estate/__manifest__.py b/estate/__manifest__.py index f8ac128fe5..177e818dd9 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -2,14 +2,18 @@ "name": "Real Estate", "author": "nmak", "website": "https://www.odoo.com/apps/estate", - "category": "tutorials/real-estate", + "category": "tutorials/estate", "depends": ["base"], "data": [ "security/ir.model.access.csv", "views/estate_property_views.xml", + "views/estate_property_type_views.xml", + "views/estate_property_tag_views.xml", + "views/estate_property_offer_views.xml" "views/estate_menus.xml", ], "installable": True, "application": True, "auto_install": False, + "license": "LGPL-3", } diff --git a/estate/models/__init__.py b/estate/models/__init__.py index f4c8fd6db6..6f41cd325f 100644 --- a/estate/models/__init__.py +++ b/estate/models/__init__.py @@ -1 +1 @@ -from . import estate_property \ No newline at end of file +from . import estate_property , estate_property_type , estate_property_tag , estate_property_offer diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 2682c9b942..4066684111 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -1,5 +1,4 @@ from odoo import fields, models -from dateutil.relativedelta import relativedelta class EstateProperty(models.Model): @@ -10,7 +9,7 @@ class EstateProperty(models.Model): description = fields.Text() postcode = fields.Char() date_availability = fields.Date( - "Availability Date", + "Availability From", copy=False, default=fields.Date.add(fields.Date.today(), months=3), ) @@ -30,9 +29,7 @@ class EstateProperty(models.Model): ("west", "West"), ] ) - - # reserved fields - active = fields.Boolean(default=False) + active = fields.Boolean(default=True) state = fields.Selection( [ ("new", "New"), @@ -46,3 +43,8 @@ class EstateProperty(models.Model): required=True, copy=False, ) + property_type_id = fields.Many2one("estate.property.type", string="Property Type") + tag_ids = fields.Many2many("estate.property.tag", string="Tags") + offer_ids = fields.One2many( + "estate.property.offer", "property_id", strings="Offers" + ) diff --git a/estate/models/estate_property_offer.py b/estate/models/estate_property_offer.py new file mode 100644 index 0000000000..720a15fa75 --- /dev/null +++ b/estate/models/estate_property_offer.py @@ -0,0 +1,13 @@ +from odoo import fields, models + + +class PropertyOffer(models.Model): + _name = "estate.property.offer" + _description = "Offers in real estate" + + price = fields.Float(string="Price", required=True) + status = fields.Selection( + [("accepted", "Accepted"), ("refused", "Refused")], string="Status", copy=False + ) + partner_id = fields.Many2one("res.partner", string="Buyer", required=True) + property_id = fields.Many2one("estate.property", string="Property", required=True) diff --git a/estate/models/estate_property_tag.py b/estate/models/estate_property_tag.py new file mode 100644 index 0000000000..d27554d8a9 --- /dev/null +++ b/estate/models/estate_property_tag.py @@ -0,0 +1,8 @@ +from odoo import models,fields + +class PropertyTag(models.Model): + _name = "estate.property.tag" + _description = "tags involved in real estate" + + name = fields.Char(string="Property Tag" , required=True) + \ 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 0000000000..9e0a77b62e --- /dev/null +++ b/estate/models/estate_property_type.py @@ -0,0 +1,8 @@ +from odoo import models, fields + +class EstatePropertyType(models.Model): + _name = "estate.property.type" + _description = "Real Estate Property Type" + + name = fields.Char(string="Property Type", required=True) + \ No newline at end of file diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv index 0e11f47e58..89f97c5084 100644 --- a/estate/security/ir.model.access.csv +++ b/estate/security/ir.model.access.csv @@ -1,2 +1,5 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_estate_property,access_estate_property,model_estate_property,base.group_user,1,1,1,1 \ No newline at end of file +access_estate_property,access_estate_property,model_estate_property,base.group_user,1,1,1,1 +access_estate_property_type,access_estate_property_type,model_estate_property_type,base.group_user,1,1,1,1 +access_estate_property_tag,access_estate_property_tag,model_estate_property_tag,base.group_user,1,1,1,1 +access_estate_property_offer,access_estate_property_offer,model_estate_property_offer,base.group_user,1,1,1,1 diff --git a/estate/views/estate_menus.xml b/estate/views/estate_menus.xml index c2145dd6de..332f9a20f9 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_offer_views.xml b/estate/views/estate_property_offer_views.xml new file mode 100644 index 0000000000..4d67722a32 --- /dev/null +++ b/estate/views/estate_property_offer_views.xml @@ -0,0 +1,53 @@ + + + estate.property.form + estate.property + +
+ +

+ +

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
diff --git a/estate/views/estate_property_tag_views.xml b/estate/views/estate_property_tag_views.xml new file mode 100644 index 0000000000..67111cfe0a --- /dev/null +++ b/estate/views/estate_property_tag_views.xml @@ -0,0 +1,8 @@ + + + + name + estate.property.tag + list,form + + diff --git a/estate/views/estate_property_type_views.xml b/estate/views/estate_property_type_views.xml new file mode 100644 index 0000000000..0d0de357b3 --- /dev/null +++ b/estate/views/estate_property_type_views.xml @@ -0,0 +1,32 @@ + + + + estate.property.type.list + estate.property.type + + + + + + + + + estate.property.type.form + estate.property.type + +
+ + + + + +
+
+
+ + + Types + estate.property.type + list,form + +
diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 588698fb4e..b70e1c05c0 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -1,7 +1,6 @@ - estate.property.list estate.property @@ -14,25 +13,37 @@ + + - estate.property.form estate.property
- +

- - - - - - +

+
+ +
+ + + + + + + + + + + + + @@ -47,27 +58,33 @@
+ + + + + + +
- - estate.property.search estate.property - + + context="{'group_by': 'postcode'}" /> @@ -77,4 +94,4 @@ estate.property list,form -
\ No newline at end of file +