From d39b68145df84c6f1fc15a04e59148dbd57b301d Mon Sep 17 00:00:00 2001 From: danal-odoo Date: Tue, 11 Nov 2025 13:03:11 +0530 Subject: [PATCH 01/25] [ADD] estate: created estate application and important files. added estate module. created __init__.py and __manifest__.py files. --- estate/__init__.py | 0 estate/__manifest__.py | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 estate/__init__.py create mode 100644 estate/__manifest__.py diff --git a/estate/__init__.py b/estate/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/estate/__manifest__.py b/estate/__manifest__.py new file mode 100644 index 00000000000..4cc78d1585a --- /dev/null +++ b/estate/__manifest__.py @@ -0,0 +1,19 @@ +{ + 'name': "Real Estate", + 'version': '1.0', + 'depends': ['base'], + 'author': "Darshil Naliyapara", + 'category': 'Category', + 'application': True, + 'description': """ + Description text + """, + # data files always loaded at installation + 'data': [ + 'views/mymodule_view.xml', + ], + # data files containing optionally loaded demonstration data + 'demo': [ + 'demo/demo_data.xml', + ], +} \ No newline at end of file From c1b9539dcb552f1c8e73776143110145cfab6131 Mon Sep 17 00:00:00 2001 From: danal-odoo Date: Tue, 11 Nov 2025 14:32:31 +0530 Subject: [PATCH 02/25] [IMP] estate: created models for estate application. created estate property model. added all required fields in model. --- estate/__init__.py | 1 + estate/__manifest__.py | 4 ++-- estate/models/__init__.py | 1 + estate/models/estate_property.py | 20 ++++++++++++++++++++ 4 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 estate/models/__init__.py create mode 100644 estate/models/estate_property.py diff --git a/estate/__init__.py b/estate/__init__.py index e69de29bb2d..9a7e03eded3 100644 --- a/estate/__init__.py +++ b/estate/__init__.py @@ -0,0 +1 @@ +from . import models \ No newline at end of file diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 4cc78d1585a..1bf7c2db7c6 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -10,10 +10,10 @@ """, # data files always loaded at installation 'data': [ - 'views/mymodule_view.xml', + # 'views/mymodule_view.xml', ], # data files containing optionally loaded demonstration data 'demo': [ - 'demo/demo_data.xml', + # 'demo/demo_data.xml',/ ], } \ No newline at end of file diff --git a/estate/models/__init__.py b/estate/models/__init__.py new file mode 100644 index 00000000000..f4c8fd6db6d --- /dev/null +++ b/estate/models/__init__.py @@ -0,0 +1 @@ +from . import estate_property \ No newline at end of file diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py new file mode 100644 index 00000000000..bc527484661 --- /dev/null +++ b/estate/models/estate_property.py @@ -0,0 +1,20 @@ +from odoo import models,fields + +class EstateProperty(models.Model): + _name = "estate.property" + _description = "Estate Property" + + name = fields.Char(required = True) + description = fields.Text() + postcode = fields.Char() + date_avaliability = fields.Date() + expected_price = fields.Float(required = True) + selling_price = fields.Float() + bedrooms = fields.Integer() + living_area = fields.Integer() + facades = fields.Integer() + garage = fields.Boolean() + garden = fields.Boolean() + garden_area = fields.Integer() + garden_orientation = fields.Selection(selection= [('north','North'),('south','South'),('east','East'),('west','West')]) + From eb9e8d3fca6322bc75cf4c1b3cec8c94a19793ad Mon Sep 17 00:00:00 2001 From: danal-odoo Date: Tue, 11 Nov 2025 15:00:41 +0530 Subject: [PATCH 03/25] [IMP] estate: implimented security for model access. added security CSV file in security folder. added estate_property model access to user in csv file. --- estate/__manifest__.py | 11 ++++------- estate/security/ir.model.access.csv | 2 ++ estate/views/estate_view.xml | 0 3 files changed, 6 insertions(+), 7 deletions(-) create mode 100644 estate/security/ir.model.access.csv create mode 100644 estate/views/estate_view.xml diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 1bf7c2db7c6..1cff1a786ce 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -2,18 +2,15 @@ 'name': "Real Estate", 'version': '1.0', 'depends': ['base'], - 'author': "Darshil Naliyapara", + 'author': "danal", 'category': 'Category', 'application': True, + 'license': 'LGPL-3', 'description': """ Description text """, - # data files always loaded at installation 'data': [ - # 'views/mymodule_view.xml', - ], - # data files containing optionally loaded demonstration data - 'demo': [ - # 'demo/demo_data.xml',/ + 'views/estate_view.xml', + 'security/ir.model.access.csv' ], } \ No newline at end of file diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv new file mode 100644 index 00000000000..5bbdfb3a2a9 --- /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,0,0,0 \ No newline at end of file diff --git a/estate/views/estate_view.xml b/estate/views/estate_view.xml new file mode 100644 index 00000000000..e69de29bb2d From 0c741482c6f071743240c24e4c7f2d1307ed818e Mon Sep 17 00:00:00 2001 From: danal-odoo Date: Tue, 11 Nov 2025 17:32:22 +0530 Subject: [PATCH 04/25] [IMP] estate: created views, menuitem and modified manifest file. added action view in estate property. created menuitems and linked action to that menuitems. updated manifest file to link all created file. --- estate/__manifest__.py | 3 ++- estate/models/estate_property.py | 3 +-- estate/views/estate_menus.xml | 15 ++++++++++++ estate/views/estate_property_views.xml | 34 ++++++++++++++++++++++++++ estate/views/estate_view.xml | 0 5 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 estate/views/estate_menus.xml create mode 100644 estate/views/estate_property_views.xml delete mode 100644 estate/views/estate_view.xml diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 1cff1a786ce..7c49c771883 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -10,7 +10,8 @@ Description text """, 'data': [ - 'views/estate_view.xml', + 'views/estate_menus.xml', + 'views/estate_property_views.xml', 'security/ir.model.access.csv' ], } \ No newline at end of file diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index bc527484661..7bb44a3be27 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -16,5 +16,4 @@ class EstateProperty(models.Model): garage = fields.Boolean() garden = fields.Boolean() garden_area = fields.Integer() - garden_orientation = fields.Selection(selection= [('north','North'),('south','South'),('east','East'),('west','West')]) - + garden_orientation = fields.Selection(selection = [('north','North'),('south','South'),('east','East'),('west','West')]) \ No newline at end of file diff --git a/estate/views/estate_menus.xml b/estate/views/estate_menus.xml new file mode 100644 index 00000000000..026ddeeac6f --- /dev/null +++ b/estate/views/estate_menus.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml new file mode 100644 index 00000000000..80d894f0cf5 --- /dev/null +++ b/estate/views/estate_property_views.xml @@ -0,0 +1,34 @@ + + + Estate Property + estate.property + list,form + +

+ Estate Property Home! +

+
+
+ + + Estate Property + estate.property + list,form + +

+ Create New Property! +

+
+
+ + + Estate Property + estate.property + list,form + +

+ Empty! +

+
+
+
\ No newline at end of file diff --git a/estate/views/estate_view.xml b/estate/views/estate_view.xml deleted file mode 100644 index e69de29bb2d..00000000000 From dfeb5ace6ce3d44242d381ecc6fee1c22f7dd9cb Mon Sep 17 00:00:00 2001 From: danal-odoo Date: Wed, 12 Nov 2025 11:26:30 +0530 Subject: [PATCH 05/25] [IMP] estate: implemented form and model fields, code formation. implemented form in views and added model fields in estate_property model. modified views and menuitem names. --- estate/__manifest__.py | 2 +- estate/models/estate_property.py | 42 +++++++++++++++++++++----- estate/security/ir.model.access.csv | 2 +- estate/views/estate_menus.xml | 31 ++++++++++++++----- estate/views/estate_property_views.xml | 16 ++++------ 5 files changed, 66 insertions(+), 27 deletions(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 7c49c771883..8c0ace027be 100644 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -10,8 +10,8 @@ Description text """, 'data': [ - 'views/estate_menus.xml', 'views/estate_property_views.xml', + 'views/estate_menus.xml', 'security/ir.model.access.csv' ], } \ No newline at end of file diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 7bb44a3be27..24ed52b790f 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -1,19 +1,47 @@ -from odoo import models,fields +from odoo import models, fields +from odoo.tools import date_utils + class EstateProperty(models.Model): _name = "estate.property" _description = "Estate Property" - name = fields.Char(required = True) + name = fields.Char(required=True, default="Unknown") description = fields.Text() postcode = fields.Char() - date_avaliability = fields.Date() - expected_price = fields.Float(required = True) - selling_price = fields.Float() - bedrooms = fields.Integer() + date_avaliability = fields.Date( + copy=False, + default=lambda self: fields.Date.context_today(self) + relativedelta(months=3), + ) + expected_price = fields.Float(required=True) + selling_price = fields.Float(readonly=True, copy=False) + bedrooms = fields.Integer(default=2) living_area = fields.Integer() facades = fields.Integer() garage = fields.Boolean() garden = fields.Boolean() garden_area = fields.Integer() - garden_orientation = fields.Selection(selection = [('north','North'),('south','South'),('east','East'),('west','West')]) \ No newline at end of file + last_seen = fields.Datetime("Last Seen", default=fields.Datetime.now) + garden_orientation = fields.Selection( + selection=[ + ("north", "North"), + ("south", "South"), + ("east", "East"), + ("west", "West"), + ], + string="Orientation", + ) + active = fields.Boolean(default=True) + state = fields.Selection( + selection=[ + ("new", "New"), + ("offer_received", "Offer Received"), + ("offer_accepted", "Offer Accepted"), + ("sold", "Sold"), + ("cancelled", "Cancelled"), + ], + string="Status", + required=True, + copy=False, + default="new", + ) diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv index 5bbdfb3a2a9..3d8175789ff 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" -"estate.access_estate_property","access_estate_property","estate.model_estate_property","base.group_user",1,0,0,0 \ No newline at end of file +estate.access_estate_property,"access_estate_property",estate.model_estate_property,base.group_user,1,1,1,1 \ No newline at end of file diff --git a/estate/views/estate_menus.xml b/estate/views/estate_menus.xml index 026ddeeac6f..23c517f2ed1 100644 --- a/estate/views/estate_menus.xml +++ b/estate/views/estate_menus.xml @@ -3,13 +3,28 @@ name="Estate Property" action="action_estate"/> - - - + action="action_estate_advertisements" + sequence = "1"/> + + + + + + + + \ No newline at end of file diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 80d894f0cf5..4bc2b9b5743 100644 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -1,30 +1,26 @@ - Estate Property + Properties estate.property list,form

- Estate Property Home! + Create your first Property!

- - Estate Property - estate.property - list,form + + Advertisements

- Create New Property! + advertisements!

- Estate Property - estate.property - list,form + Settings

Empty! From b8d60d4cbd6de1969fb86e6bd62dcdbd8beecf20 Mon Sep 17 00:00:00 2001 From: danal-odoo Date: Wed, 12 Nov 2025 15:07:36 +0530 Subject: [PATCH 06/25] [IMP] estate: added form and search with Filter and Group By functionality. added estate property form and list view. added search with filter and group_by functionality. --- estate/models/estate_property.py | 2 +- estate/views/estate_menus.xml | 2 +- estate/views/estate_property_views.xml | 77 ++++++++++++++++++++++++++ 3 files changed, 79 insertions(+), 2 deletions(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 24ed52b790f..b1b24c4a85e 100644 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -11,7 +11,7 @@ class EstateProperty(models.Model): postcode = fields.Char() date_avaliability = fields.Date( copy=False, - default=lambda self: fields.Date.context_today(self) + relativedelta(months=3), + default=date_utils.add(fields.Date.today(),month=2), ) expected_price = fields.Float(required=True) selling_price = fields.Float(readonly=True, copy=False) diff --git a/estate/views/estate_menus.xml b/estate/views/estate_menus.xml index 23c517f2ed1..aad4ea443ac 100644 --- a/estate/views/estate_menus.xml +++ b/estate/views/estate_menus.xml @@ -22,7 +22,7 @@ name="Option 2" parent="estate_menu_configuration" action="action_estate_configure"/> - + + + + estate.property.list + estate.property + + + + + + + + + + + + + + + estate.property.form + estate.property + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + estate.property.search + estate.property + + + + + + + + + + + + + + +
\ No newline at end of file From b3387a8bbf0bfd7e1958a3db5fdf58a6aa50bc3f Mon Sep 17 00:00:00 2001 From: danal-odoo Date: Thu, 13 Nov 2025 14:23:20 +0530 Subject: [PATCH 07/25] [IMP] estate: added offer, tag and type models and created views. added estate_property_offer model and created required fields. added estate_property_tag model and created required fields. added estate_property_type model and created required fields. added models acces to user. --- estate/__init__.py | 0 estate/__manifest__.py | 0 estate/models/__init__.py | 5 ++- estate/models/estate_property.py | 11 ++++- 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 | 25 +++-------- estate/views/estate_property_views.xml | 60 +++++++++++++++++++++++--- 10 files changed, 107 insertions(+), 28 deletions(-) mode change 100644 => 100755 estate/__init__.py mode change 100644 => 100755 estate/__manifest__.py mode change 100644 => 100755 estate/models/__init__.py mode change 100644 => 100755 estate/models/estate_property.py create mode 100644 estate/models/estate_property_offer.py create mode 100644 estate/models/estate_property_tag.py create mode 100755 estate/models/estate_property_type.py mode change 100644 => 100755 estate/security/ir.model.access.csv mode change 100644 => 100755 estate/views/estate_menus.xml mode change 100644 => 100755 estate/views/estate_property_views.xml diff --git a/estate/__init__.py b/estate/__init__.py old mode 100644 new mode 100755 diff --git a/estate/__manifest__.py b/estate/__manifest__.py old mode 100644 new mode 100755 diff --git a/estate/models/__init__.py b/estate/models/__init__.py old mode 100644 new mode 100755 index f4c8fd6db6d..09b2099fe84 --- a/estate/models/__init__.py +++ b/estate/models/__init__.py @@ -1 +1,4 @@ -from . import estate_property \ No newline at end of file +from . import estate_property +from . import estate_property_type +from . import estate_property_tag +from . import estate_property_offer \ No newline at end of file diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py old mode 100644 new mode 100755 index b1b24c4a85e..760b64ce5ea --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -11,7 +11,7 @@ class EstateProperty(models.Model): postcode = fields.Char() date_avaliability = fields.Date( copy=False, - default=date_utils.add(fields.Date.today(),month=2), + default=date_utils.add(fields.Date.today(), month=2), ) expected_price = fields.Float(required=True) selling_price = fields.Float(readonly=True, copy=False) @@ -45,3 +45,12 @@ class EstateProperty(models.Model): copy=False, default="new", ) + property_type_id = fields.Many2one("estate.property.type", string="Property Type") + customer = fields.Many2one("res.users", string="Customer", copy=False) + salesperson = fields.Many2one( + "res.partner", + string="Salesperson", + default =lambda self:self.env.user + ) + tag_ids = fields.Many2many("estate.property.tag", string="Property Tags") + offer_ids = fields.One2many("estate.property.offer", "property_id", string="Offer") \ 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..b6a28e4e3e5 --- /dev/null +++ b/estate/models/estate_property_offer.py @@ -0,0 +1,13 @@ +from odoo import models, fields + + +class EstatePropertyOffer(models.Model): + _name = "estate.property.offer" + _description = "Estate Property Offer" + + price = fields.Float() + status = fields.Selection( + selection=[("accepted", "Accepted"), ("refused", "Refused")], copy=False + ) + partner_id = fields.Many2one("res.partner", string="Partner", required=True) + property_id = fields.Many2one("estate.property", string="Property", required=True) diff --git a/estate/models/estate_property_tag.py b/estate/models/estate_property_tag.py new file mode 100644 index 00000000000..debfd521b9e --- /dev/null +++ b/estate/models/estate_property_tag.py @@ -0,0 +1,8 @@ +from odoo import fields, models + + +class EstatePropertyTags(models.Model): + _name = "estate.property.tag" + _description = "Estate Property Tag" + + name = fields.Char(required=True) diff --git a/estate/models/estate_property_type.py b/estate/models/estate_property_type.py new file mode 100755 index 00000000000..eebc62e998c --- /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 = "Estate Property Type" + + name = fields.Char(required=True) diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv old mode 100644 new mode 100755 index 3d8175789ff..1b2d70de7dd --- 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" -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 +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 \ No newline at end of file diff --git a/estate/views/estate_menus.xml b/estate/views/estate_menus.xml old mode 100644 new mode 100755 index aad4ea443ac..b9b7c578240 --- a/estate/views/estate_menus.xml +++ b/estate/views/estate_menus.xml @@ -1,30 +1,19 @@ - - + action="action_estate"/> - - - + action="action_estate_property_type"/> - + action="action_estate_property_tag"/> \ No newline at end of file diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml old mode 100644 new mode 100755 index 99193dc24e8..a19ffa6fed0 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -10,30 +10,35 @@ - - Advertisements + + Properties Types + estate.property.type + list,form

- advertisements! + Create your first Property Type!

- - Settings + + Properties Tags + estate.property.tag + list,form

- Empty! + Create your first Property Tag!

- + estate.property.list estate.property + @@ -53,10 +58,13 @@ + + + @@ -80,12 +88,49 @@ + + + + + + + + + + + estate.property.offer.list + estate.property.offer + + + + + + + + + + + estate.property.offer.form + estate.property.offer + +
+ + + + + + + +
+
+
+ estate.property.search estate.property @@ -97,6 +142,7 @@ + From 8013e8db9c02d4a65cf33b10d9e2c13fe674778a Mon Sep 17 00:00:00 2001 From: danal-odoo Date: Thu, 13 Nov 2025 17:58:56 +0530 Subject: [PATCH 08/25] [IMP] estate: add compute, inverse and on chnage in estate offer model. added @api.depends() decorator to calculate total area and best prrice. added @api.onchange() decorator to auto fill garden_area and orientation on garden change. --- estate/__init__.py | 3 +- estate/__manifest__.py | 27 +++++++------- estate/models/__init__.py | 3 +- estate/models/estate_property.py | 38 +++++++++++++++----- estate/models/estate_property_offer.py | 21 ++++++++++- estate/models/estate_property_type.py | 1 + estate/views/estate_menus.xml | 50 ++++++++++++++++++-------- estate/views/estate_property_views.xml | 22 ++++++++---- 8 files changed, 120 insertions(+), 45 deletions(-) diff --git a/estate/__init__.py b/estate/__init__.py index 9a7e03eded3..cc73260f076 100755 --- a/estate/__init__.py +++ b/estate/__init__.py @@ -1 +1,2 @@ -from . import models \ No newline at end of file +#!/usr/bin/env python3 +from . import models diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 8c0ace027be..5659a19f464 100755 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -1,17 +1,18 @@ +#!/usr/bin/env python3 { - 'name': "Real Estate", - 'version': '1.0', - 'depends': ['base'], - 'author': "danal", - 'category': 'Category', - 'application': True, - 'license': 'LGPL-3', - 'description': """ + "name": "Real Estate", + "version": "1.0", + "depends": ["base"], + "author": "danal", + "category": "Category", + "application": True, + "license": "LGPL-3", + "description": """ Description text """, - 'data': [ - 'views/estate_property_views.xml', - 'views/estate_menus.xml', - 'security/ir.model.access.csv' + "data": [ + "views/estate_property_views.xml", + "views/estate_menus.xml", + "security/ir.model.access.csv", ], -} \ No newline at end of file +} diff --git a/estate/models/__init__.py b/estate/models/__init__.py index 09b2099fe84..d3835ec79e4 100755 --- a/estate/models/__init__.py +++ b/estate/models/__init__.py @@ -1,4 +1,5 @@ +#!/usr/bin/env python3 from . import estate_property from . import estate_property_type from . import estate_property_tag -from . import estate_property_offer \ No newline at end of file +from . import estate_property_offer diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 760b64ce5ea..b8e45db8351 100755 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -1,5 +1,7 @@ -from odoo import models, fields -from odoo.tools import date_utils +#!/usr/bin/env python3 +from dateutil.relativedelta import relativedelta + +from odoo import api, models, fields class EstateProperty(models.Model): @@ -10,8 +12,7 @@ class EstateProperty(models.Model): description = fields.Text() postcode = fields.Char() date_avaliability = fields.Date( - copy=False, - default=date_utils.add(fields.Date.today(), month=2), + copy=False, default=fields.Date.today() + relativedelta(month=3) ) expected_price = fields.Float(required=True) selling_price = fields.Float(readonly=True, copy=False) @@ -48,9 +49,30 @@ class EstateProperty(models.Model): property_type_id = fields.Many2one("estate.property.type", string="Property Type") customer = fields.Many2one("res.users", string="Customer", copy=False) salesperson = fields.Many2one( - "res.partner", - string="Salesperson", - default =lambda self:self.env.user + "res.partner", string="Salesperson", default=lambda self: self.env.user ) tag_ids = fields.Many2many("estate.property.tag", string="Property Tags") - offer_ids = fields.One2many("estate.property.offer", "property_id", string="Offer") \ No newline at end of file + offer_ids = fields.One2many("estate.property.offer", "property_id", string="Offer") + total_area = fields.Integer(compute="_compute_area") + best_price = fields.Integer(compute="_compute_highest") + + @api.depends("living_area", "garden_area") + def _compute_area(self): + for record in self: + record.total_area = record.living_area + record.garden_area + + @api.depends("offer_ids.price") + def _compute_highest(self): + for record in self: + if not record.mapped("offer_ids.price"): + record.best_price = 0 + else: + record.best_price = max(record.mapped("offer_ids.price")) + + @api.onchange("garden") + def _onchange_garden(self): + if self.garden: + self.garden_area = 10 + self.garden_orientation = "north" + else: + self.garden_area = 0 diff --git a/estate/models/estate_property_offer.py b/estate/models/estate_property_offer.py index b6a28e4e3e5..d6b012058dc 100644 --- a/estate/models/estate_property_offer.py +++ b/estate/models/estate_property_offer.py @@ -1,4 +1,6 @@ -from odoo import models, fields +from dateutil.relativedelta import relativedelta + +from odoo import api, models, fields class EstatePropertyOffer(models.Model): @@ -11,3 +13,20 @@ class EstatePropertyOffer(models.Model): ) partner_id = fields.Many2one("res.partner", string="Partner", required=True) property_id = fields.Many2one("estate.property", string="Property", required=True) + validity = fields.Integer(default=7) + date_deadline = fields.Date(compute="_compute_deadline", inverse="_inverse_date") + + @api.depends("validity") + def _compute_deadline(self): + for record in self: + default_creation_date = record.create_date or fields.Date.today() + record.date_deadline = ( + relativedelta(days=record.validity) + default_creation_date + ) + + def _inverse_date(self): + for record in self: + default_creation_date = record.create_date or fields.Date.today() + record.validity = ( + record.date_deadline - fields.Date.to_date(default_creation_date) + ).days diff --git a/estate/models/estate_property_type.py b/estate/models/estate_property_type.py index eebc62e998c..e63ce3487e6 100755 --- a/estate/models/estate_property_type.py +++ b/estate/models/estate_property_type.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python3 from odoo import models, fields diff --git a/estate/views/estate_menus.xml b/estate/views/estate_menus.xml index b9b7c578240..787d056e867 100755 --- a/estate/views/estate_menus.xml +++ b/estate/views/estate_menus.xml @@ -1,19 +1,41 @@ + - + - + - + - + + + + + \ No newline at end of file diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index a19ffa6fed0..a8710127636 100755 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -1,3 +1,4 @@ + Properties @@ -55,18 +56,20 @@
- +

+ +

+ - - + @@ -81,6 +84,7 @@ +
@@ -110,6 +114,8 @@ + + @@ -121,10 +127,12 @@ - - - - + + + + + + From 7519102d9071187ac085e8bf1adca8532e41f742 Mon Sep 17 00:00:00 2001 From: danal-odoo Date: Fri, 14 Nov 2025 15:37:09 +0530 Subject: [PATCH 09/25] [IMP] estate: added restrictions and action in property offer. added action method on sold and cancel button. added UserError() to prevent sold property to cancel. added UserError() to prevent cancelled property to be sold. --- estate/__manifest__.py | 4 ++-- estate/models/estate_property.py | 22 +++++++++++++++++++--- estate/models/estate_property_offer.py | 14 ++++++++++++++ estate/security/ir.model.access.csv | 2 +- estate/views/estate_menus.xml | 7 +------ estate/views/estate_property_views.xml | 26 +++++++++++++++----------- 6 files changed, 52 insertions(+), 23 deletions(-) diff --git a/estate/__manifest__.py b/estate/__manifest__.py index 5659a19f464..fa4acfca176 100755 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -8,11 +8,11 @@ "application": True, "license": "LGPL-3", "description": """ - Description text + Real Estate Module to Buy and Sell Your Real Estate with Ease. """, "data": [ + "security/ir.model.access.csv", "views/estate_property_views.xml", "views/estate_menus.xml", - "security/ir.model.access.csv", ], } diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index b8e45db8351..985554e8b05 100755 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 from dateutil.relativedelta import relativedelta -from odoo import api, models, fields +from odoo import api, models, fields, exceptions class EstateProperty(models.Model): @@ -47,9 +47,9 @@ class EstateProperty(models.Model): default="new", ) property_type_id = fields.Many2one("estate.property.type", string="Property Type") - customer = fields.Many2one("res.users", string="Customer", copy=False) + customer = fields.Many2one("res.partner", string="Customer", copy=False) salesperson = fields.Many2one( - "res.partner", string="Salesperson", default=lambda self: self.env.user + "res.users", string="Salesperson", default=lambda self: self.env.user ) tag_ids = fields.Many2many("estate.property.tag", string="Property Tags") offer_ids = fields.One2many("estate.property.offer", "property_id", string="Offer") @@ -76,3 +76,19 @@ def _onchange_garden(self): self.garden_orientation = "north" else: self.garden_area = 0 + + def action_sold_property(self): + for record in self: + if record.state == "cancelled": + raise exceptions.UserError("Cancelled Property cannot be Sold") + else: + record.state = "sold" + return True + + def action_cancel_offer(self): + for record in self: + if record.state == "sold": + raise exceptions.UserError("Sold Property cannot be Cancelled") + else: + record.state = "cancelled" + return True diff --git a/estate/models/estate_property_offer.py b/estate/models/estate_property_offer.py index d6b012058dc..ca6193fcc5a 100644 --- a/estate/models/estate_property_offer.py +++ b/estate/models/estate_property_offer.py @@ -30,3 +30,17 @@ def _inverse_date(self): record.validity = ( record.date_deadline - fields.Date.to_date(default_creation_date) ).days + + def action_accept(self): + for record in self: + record.status = "accepted" + record.property_id.selling_price = record.price + record.property_id.customer = record.partner_id + return True + + def action_refuse(self): + for record in self: + record.status = "refused" + record.property_id.selling_price = 0.00 + record.property_id.customer = None + return True diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv index 1b2d70de7dd..93689780568 100755 --- a/estate/security/ir.model.access.csv +++ b/estate/security/ir.model.access.csv @@ -2,4 +2,4 @@ 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 \ No newline at end of file +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_menus.xml b/estate/views/estate_menus.xml index 787d056e867..d5087fc7a54 100755 --- a/estate/views/estate_menus.xml +++ b/estate/views/estate_menus.xml @@ -4,38 +4,33 @@ id="estate_menu_root" name="Estate Property" /> - - - - - -
\ No newline at end of file + diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index a8710127636..ffc52169a23 100755 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -55,12 +55,17 @@ estate.property
+
+

+ @@ -85,10 +90,7 @@ - - - @@ -97,8 +99,8 @@ - + @@ -116,6 +118,8 @@ + +

diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index c891f8e9ea5..ee2ff1f6a83 100755 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -3,7 +3,7 @@ Properties estate.property - list,form + kanban,list,form {'search_default_avaliable': 1}

@@ -35,7 +35,7 @@ - + @@ -89,6 +89,38 @@ + + estate.property.kanban + estate.property + + + + + +

+
+ +
+
+ Expected Price: + +
+
+ Best Offer: + +
+
+ Selling Price: + +
+ +
+ + + +
+
+ estate.property.search estate.property @@ -105,6 +137,7 @@ + From b10034f5ead322e840cc44e345216fe83eae1437 Mon Sep 17 00:00:00 2001 From: danal-odoo Date: Tue, 18 Nov 2025 23:27:56 +0530 Subject: [PATCH 15/25] [IMP] estate: code formation as per odoo guidline --- estate/models/estate_property.py | 2 +- estate_account/__init__.py | 1 - estate_account/__manifest__.py | 3 +-- estate_account/models/__init__.py | 1 - estate_account/models/estate_property.py | 5 ++--- 5 files changed, 4 insertions(+), 8 deletions(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 4ff756cf6d0..538275462d4 100755 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -2,7 +2,7 @@ from dateutil.relativedelta import relativedelta from odoo.exceptions import UserError, ValidationError -from odoo import api, models, fields, exceptions +from odoo import api, models, fields class EstateProperty(models.Model): diff --git a/estate_account/__init__.py b/estate_account/__init__.py index cc73260f076..0650744f6bc 100644 --- a/estate_account/__init__.py +++ b/estate_account/__init__.py @@ -1,2 +1 @@ -#!/usr/bin/env python3 from . import models diff --git a/estate_account/__manifest__.py b/estate_account/__manifest__.py index c6a6f92e42e..26928caee63 100644 --- a/estate_account/__manifest__.py +++ b/estate_account/__manifest__.py @@ -1,8 +1,7 @@ -#!/usr/bin/env python3 { "name": "Estate Account", "description": """ - Estate account module to manage Estate Customers and Salesman. + Estate account module to create invoice of sold property. """, "version": "1.0", "depends": ["estate", "account"], diff --git a/estate_account/models/__init__.py b/estate_account/models/__init__.py index 482830aa230..5e1963c9d2f 100644 --- a/estate_account/models/__init__.py +++ b/estate_account/models/__init__.py @@ -1,2 +1 @@ -#!/usr/bin/env python3 from . import estate_property diff --git a/estate_account/models/estate_property.py b/estate_account/models/estate_property.py index 34943d95bc4..ede52556a67 100644 --- a/estate_account/models/estate_property.py +++ b/estate_account/models/estate_property.py @@ -1,7 +1,6 @@ -#!/usr/bin/env python3 from odoo.exceptions import UserError -from odoo import fields, models, Command +from odoo import models, Command class EstatePropertyInherit(models.Model): @@ -13,7 +12,7 @@ def action_sold_property(self): raise UserError("Cannot sell Property without any accepted offer") self.env["account.move"].create( { - "partner_id": self.customer.id, + "partner_id": record.customer.id, "move_type": "out_invoice", "invoice_line_ids": [ Command.create( From faedfa75624d7b1924351fcf114c36f56a53bbfa Mon Sep 17 00:00:00 2001 From: danal-odoo Date: Wed, 19 Nov 2025 13:22:59 +0530 Subject: [PATCH 16/25] [IMP] awesome_owl: added counter ui in playground, added card,counter component. added counter button and component in playground xml. created counter and card component with it's xml and js files. added property field in sales order form using inheritance. --- awesome_owl/static/src/card/card.js | 9 +++++++++ awesome_owl/static/src/card/card.xml | 15 ++++++++++++++ awesome_owl/static/src/counter/counter.js | 21 ++++++++++++++++++++ awesome_owl/static/src/counter/counter.xml | 11 ++++++++++ awesome_owl/static/src/playground.js | 21 +++++++++++++++++++- awesome_owl/static/src/playground.xml | 12 +++++++---- estate/__manifest__.py | 3 ++- estate/models/__init__.py | 1 + estate/models/sale_order.py | 7 +++++++ estate/views/estate_property_offer_views.xml | 2 +- estate/views/sale_order_views.xml | 12 +++++++++++ 11 files changed, 107 insertions(+), 7 deletions(-) create mode 100644 awesome_owl/static/src/card/card.js create mode 100644 awesome_owl/static/src/card/card.xml create mode 100644 awesome_owl/static/src/counter/counter.js create mode 100644 awesome_owl/static/src/counter/counter.xml create mode 100644 estate/models/sale_order.py create mode 100644 estate/views/sale_order_views.xml diff --git a/awesome_owl/static/src/card/card.js b/awesome_owl/static/src/card/card.js new file mode 100644 index 00000000000..9e53c207a4d --- /dev/null +++ b/awesome_owl/static/src/card/card.js @@ -0,0 +1,9 @@ +import { Component } from "@odoo/owl"; + +export class Card extends Component { + static template = "awesome_owl.card"; + static props = { + title: String, + content: String + }; +} diff --git a/awesome_owl/static/src/card/card.xml b/awesome_owl/static/src/card/card.xml new file mode 100644 index 00000000000..a9a0e805d74 --- /dev/null +++ b/awesome_owl/static/src/card/card.xml @@ -0,0 +1,15 @@ + + + +
+
+

+ +

+

+ +

+
+
+
+
diff --git a/awesome_owl/static/src/counter/counter.js b/awesome_owl/static/src/counter/counter.js new file mode 100644 index 00000000000..6667e590a25 --- /dev/null +++ b/awesome_owl/static/src/counter/counter.js @@ -0,0 +1,21 @@ +import { Component, useState } from "@odoo/owl"; + +export class Counter extends Component { + static template = "awesome_owl.counter"; + + setup() { + this.state = useState({ value: 0 }); + } + + increment() { + this.state.value++; + } + + decrement() { + this.state.value--; + } + + reset() { + this.state.value = 0; + } +} diff --git a/awesome_owl/static/src/counter/counter.xml b/awesome_owl/static/src/counter/counter.xml new file mode 100644 index 00000000000..5588e224285 --- /dev/null +++ b/awesome_owl/static/src/counter/counter.xml @@ -0,0 +1,11 @@ + + + +
+

Counter:

+ + + +
+
+
diff --git a/awesome_owl/static/src/playground.js b/awesome_owl/static/src/playground.js index 4ac769b0aa5..62d607c7fe0 100644 --- a/awesome_owl/static/src/playground.js +++ b/awesome_owl/static/src/playground.js @@ -1,5 +1,24 @@ -import { Component } from "@odoo/owl"; +import { Component, useState } from "@odoo/owl"; +import { Counter } from "./counter/counter"; +import { Card } from "./card/card"; export class Playground extends Component { static template = "awesome_owl.playground"; + static components = {Counter,Card}; + + setup() { + this.state = useState({ value: 0 }); + } + + increment() { + this.state.value++; + } + + decrement() { + this.state.value--; + } + + reset(){ + this.state.value = 0; + } } diff --git a/awesome_owl/static/src/playground.xml b/awesome_owl/static/src/playground.xml index 4fb905d59f9..b856c6520ce 100644 --- a/awesome_owl/static/src/playground.xml +++ b/awesome_owl/static/src/playground.xml @@ -1,10 +1,14 @@ - -
- hello world +
+

Counter:

+ + +
+ + + - diff --git a/estate/__manifest__.py b/estate/__manifest__.py index e4cb7e6d41a..7ac532ba3c1 100755 --- a/estate/__manifest__.py +++ b/estate/__manifest__.py @@ -5,7 +5,7 @@ Real Estate Module to Buy and Sell Your Real Estate with Ease. """, "version": "1.0", - "depends": ["base"], + "depends": ["base", "sale"], "author": "danal", "category": "Category", "application": True, @@ -17,6 +17,7 @@ "views/estate_property_tag_views.xml", "views/estate_property_type_views.xml", "views/res_users_views.xml", + "views/sale_order_views.xml", "views/estate_menus.xml", ], } diff --git a/estate/models/__init__.py b/estate/models/__init__.py index cc7142ebf5f..42e0ea3e7f3 100755 --- a/estate/models/__init__.py +++ b/estate/models/__init__.py @@ -4,3 +4,4 @@ from . import estate_property_tag from . import estate_property_offer from . import res_users +from . import sale_order diff --git a/estate/models/sale_order.py b/estate/models/sale_order.py new file mode 100644 index 00000000000..b286c7acee0 --- /dev/null +++ b/estate/models/sale_order.py @@ -0,0 +1,7 @@ +from odoo import fields, models + + +class SaleOrder(models.Model): + _inherit = "sale.order" + + property_id = fields.Many2one("estate.property") diff --git a/estate/views/estate_property_offer_views.xml b/estate/views/estate_property_offer_views.xml index eefa6466506..a183e7c92d0 100644 --- a/estate/views/estate_property_offer_views.xml +++ b/estate/views/estate_property_offer_views.xml @@ -12,8 +12,8 @@ estate.property.offer - + - - +

Counter:

+ + +
diff --git a/awesome_owl/static/src/playground.js b/awesome_owl/static/src/playground.js index 62d607c7fe0..b51e7c62cc4 100644 --- a/awesome_owl/static/src/playground.js +++ b/awesome_owl/static/src/playground.js @@ -1,24 +1,28 @@ -import { Component, useState } from "@odoo/owl"; +import { markup, Component, useState } from "@odoo/owl"; import { Counter } from "./counter/counter"; import { Card } from "./card/card"; export class Playground extends Component { static template = "awesome_owl.playground"; - static components = {Counter,Card}; + static components = { Counter, Card }; setup() { - this.state = useState({ value: 0 }); + this.state = useState({ + content: markup('

Welcome to your Counter!

'), + sum: 0 + }); } - increment() { - this.state.value++; - } - - decrement() { - this.state.value--; + calculateSum(newValue) { + if (newValue > 0){ + this.state.sum++; + } + if (newValue < 0){ + this.state.sum--; + } } reset(){ - this.state.value = 0; + this.state.sum = 0 } } diff --git a/awesome_owl/static/src/playground.xml b/awesome_owl/static/src/playground.xml index b856c6520ce..ba06840f1ea 100644 --- a/awesome_owl/static/src/playground.xml +++ b/awesome_owl/static/src/playground.xml @@ -1,14 +1,16 @@ -
-

Counter:

- - - -
- - - + + + + +

Sum:

+
diff --git a/estate/security/ir.model.access.csv b/estate/security/ir.model.access.csv index 93689780568..352afe3899f 100755 --- a/estate/security/ir.model.access.csv +++ b/estate/security/ir.model.access.csv @@ -1,5 +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 -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,"access_estate_property","model_estate_property",base.group_user,1,1,1,1 +estate.access_estate_property_type,"access_estate_property_type","model_estate_property_type",base.group_user,1,1,1,1 +estate.access_estate_property_tag,"access_estate_property_tag","model_estate_property_tag",base.group_user,1,1,1,1 +estate.access_estate_property_offer,"access_estate_property_offer","model_estate_property_offer",base.group_user,1,1,1,1 From 35610bcccac83d6070242ae8d5c42b222910f418 Mon Sep 17 00:00:00 2001 From: danal-odoo Date: Fri, 21 Nov 2025 10:12:22 +0530 Subject: [PATCH 18/25] [IMP] awesome_owl: added todo component. added todo component and created todolist and todoitem. created function to add todo item by user. fixed layout to be look more organize. --- awesome_owl/static/src/card/card.xml | 3 -- awesome_owl/static/src/counter/counter.xml | 8 ++--- awesome_owl/static/src/playground.js | 3 +- awesome_owl/static/src/playground.xml | 18 ++++++---- awesome_owl/static/src/todo/todoitem.js | 10 ++++++ awesome_owl/static/src/todo/todoitem.xml | 9 +++++ awesome_owl/static/src/todo/todolist.js | 26 ++++++++++++++ awesome_owl/static/src/todo/todolist.xml | 42 ++++++++++++++++++++++ 8 files changed, 105 insertions(+), 14 deletions(-) create mode 100644 awesome_owl/static/src/todo/todoitem.js create mode 100644 awesome_owl/static/src/todo/todoitem.xml create mode 100644 awesome_owl/static/src/todo/todolist.js create mode 100644 awesome_owl/static/src/todo/todolist.xml diff --git a/awesome_owl/static/src/card/card.xml b/awesome_owl/static/src/card/card.xml index 057feda0fb1..f76435d92e2 100644 --- a/awesome_owl/static/src/card/card.xml +++ b/awesome_owl/static/src/card/card.xml @@ -9,17 +9,14 @@ text-align:center;">
-

-

-

+

Counter:

diff --git a/awesome_owl/static/src/playground.js b/awesome_owl/static/src/playground.js index b51e7c62cc4..cfa7045cfb7 100644 --- a/awesome_owl/static/src/playground.js +++ b/awesome_owl/static/src/playground.js @@ -1,10 +1,11 @@ import { markup, Component, useState } from "@odoo/owl"; import { Counter } from "./counter/counter"; import { Card } from "./card/card"; +import { TodoList } from "./todo/todolist"; export class Playground extends Component { static template = "awesome_owl.playground"; - static components = { Counter, Card }; + static components = { Counter, Card, TodoList }; setup() { this.state = useState({ diff --git a/awesome_owl/static/src/playground.xml b/awesome_owl/static/src/playground.xml index ba06840f1ea..43a5475db7f 100644 --- a/awesome_owl/static/src/playground.xml +++ b/awesome_owl/static/src/playground.xml @@ -1,16 +1,22 @@ - - - -

Sum:

-
+
+

Sum:

+ + +
+ + diff --git a/awesome_owl/static/src/todo/todoitem.js b/awesome_owl/static/src/todo/todoitem.js new file mode 100644 index 00000000000..0560ef7d791 --- /dev/null +++ b/awesome_owl/static/src/todo/todoitem.js @@ -0,0 +1,10 @@ +import { Component } from "@odoo/owl"; + + +export class TodoItem extends Component { + static template = "awesome_owl.todoitem"; + + static props = { + todo: Object, + }; +} diff --git a/awesome_owl/static/src/todo/todoitem.xml b/awesome_owl/static/src/todo/todoitem.xml new file mode 100644 index 00000000000..f6542686391 --- /dev/null +++ b/awesome_owl/static/src/todo/todoitem.xml @@ -0,0 +1,9 @@ + + + +
+ . + +
+
+
diff --git a/awesome_owl/static/src/todo/todolist.js b/awesome_owl/static/src/todo/todolist.js new file mode 100644 index 00000000000..d2d95b43d78 --- /dev/null +++ b/awesome_owl/static/src/todo/todolist.js @@ -0,0 +1,26 @@ +import { Component, useState } from "@odoo/owl"; +import { TodoItem } from "./todoitem"; + +export class TodoList extends Component { + static template = "awesome_owl.todolist"; + + static components = { TodoItem }; + + setup() { + this.todos = useState([]) + } + + addTodo(ev) { + if (ev.keyCode == '13') { + console.log(ev.target.value) + if (ev.target.value != ""){ + this.todos.push({ + id: this.todos.length + 1, + description: ev.target.value, + isCompleted: false + }) + ev.target.value = '' + } + } + } +} diff --git a/awesome_owl/static/src/todo/todolist.xml b/awesome_owl/static/src/todo/todolist.xml new file mode 100644 index 00000000000..2e5d1b04d5c --- /dev/null +++ b/awesome_owl/static/src/todo/todolist.xml @@ -0,0 +1,42 @@ + + + +
+
+

+ Todo List

+ +
+
+ +
+
+
+
+
+
From 4a394e39e95321f72575fa6e0382e39e5709c123 Mon Sep 17 00:00:00 2001 From: danal-odoo Date: Mon, 24 Nov 2025 13:54:15 +0530 Subject: [PATCH 19/25] [IMP] awesome_owl: added todo component and made card component dynamic. created todo component and in that component created todoitem and todolist. added todoitem in todolist to get all created todoitem with todolist using props. added todolist in playground.js to render all todolist. made card component dynamic by using slots prop by seting type to object. added card toogle button to show card content or not. made offer action button invisible if one offer is accepted. --- awesome_owl/static/src/card/card.js | 23 ++++++-- awesome_owl/static/src/card/card.xml | 28 +++++---- awesome_owl/static/src/counter/counter.js | 2 + awesome_owl/static/src/counter/counter.xml | 6 +- awesome_owl/static/src/playground.js | 1 + awesome_owl/static/src/playground.xml | 23 +++++++- awesome_owl/static/src/todo/todoitem.js | 11 +++- awesome_owl/static/src/todo/todoitem.xml | 4 +- awesome_owl/static/src/todo/todolist.js | 19 +++++- awesome_owl/static/src/todo/todolist.xml | 68 +++++++++++----------- awesome_owl/static/src/utils.js | 13 +++++ estate/models/estate_property_offer.py | 2 + 12 files changed, 137 insertions(+), 63 deletions(-) create mode 100644 awesome_owl/static/src/utils.js diff --git a/awesome_owl/static/src/card/card.js b/awesome_owl/static/src/card/card.js index e5b984e31b2..b346d834483 100644 --- a/awesome_owl/static/src/card/card.js +++ b/awesome_owl/static/src/card/card.js @@ -1,12 +1,25 @@ -import { Component } from "@odoo/owl"; +import { Component, useState } from "@odoo/owl"; + export class Card extends Component { static template = "awesome_owl.card"; static props = { title: String, - content: { - type: String, - validate: c => c == "World" - }, + slots : { + type: Object, + shape: { + default: {} + } + } }; + + setup(){ + this.state = useState([{ + isOpen: false + }]) + } + + toggleCard(){ + this.state.isOpen = !this.state.isOpen + } } diff --git a/awesome_owl/static/src/card/card.xml b/awesome_owl/static/src/card/card.xml index f76435d92e2..cf89a968d14 100644 --- a/awesome_owl/static/src/card/card.xml +++ b/awesome_owl/static/src/card/card.xml @@ -5,10 +5,13 @@ style="width: 18rem; border: 2px solid #444; border-radius: 16px; - margin-top: 10px; - text-align:center;"> - -
+ margin-top: 10px;"> + +

-

- -

- +
+ +
- diff --git a/awesome_owl/static/src/counter/counter.js b/awesome_owl/static/src/counter/counter.js index d6dad07a0a8..802da17299e 100644 --- a/awesome_owl/static/src/counter/counter.js +++ b/awesome_owl/static/src/counter/counter.js @@ -1,10 +1,12 @@ import { Component, useState } from "@odoo/owl"; + export class Counter extends Component { static template = "awesome_owl.counter"; static props = { onChange: { type: Function, optional: true } } + setup() { this.state = useState({ value: 0 }); } diff --git a/awesome_owl/static/src/counter/counter.xml b/awesome_owl/static/src/counter/counter.xml index 23f6375d4bb..016474988f0 100644 --- a/awesome_owl/static/src/counter/counter.xml +++ b/awesome_owl/static/src/counter/counter.xml @@ -5,18 +5,18 @@

Counter:

diff --git a/awesome_owl/static/src/playground.js b/awesome_owl/static/src/playground.js index cfa7045cfb7..76e8d6ee7c2 100644 --- a/awesome_owl/static/src/playground.js +++ b/awesome_owl/static/src/playground.js @@ -3,6 +3,7 @@ import { Counter } from "./counter/counter"; import { Card } from "./card/card"; import { TodoList } from "./todo/todolist"; + export class Playground extends Component { static template = "awesome_owl.playground"; static components = { Counter, Card, TodoList }; diff --git a/awesome_owl/static/src/playground.xml b/awesome_owl/static/src/playground.xml index 43a5475db7f..2afd23f4bee 100644 --- a/awesome_owl/static/src/playground.xml +++ b/awesome_owl/static/src/playground.xml @@ -12,11 +12,30 @@ - +
+ + + + + + + +

+ Hello World +

+
+
+
diff --git a/awesome_owl/static/src/todo/todoitem.js b/awesome_owl/static/src/todo/todoitem.js index 0560ef7d791..49ff89339be 100644 --- a/awesome_owl/static/src/todo/todoitem.js +++ b/awesome_owl/static/src/todo/todoitem.js @@ -3,8 +3,17 @@ import { Component } from "@odoo/owl"; export class TodoItem extends Component { static template = "awesome_owl.todoitem"; - static props = { todo: Object, + toggleState: Function, + removeTodo: Function }; + + toggleIsCompleted(){ + this.props.toggleState(this.props.todo.id) + } + + onClickRremove(){ + this.props.removeTodo(this.props.todo.id) + } } diff --git a/awesome_owl/static/src/todo/todoitem.xml b/awesome_owl/static/src/todo/todoitem.xml index f6542686391..b44f3d65b10 100644 --- a/awesome_owl/static/src/todo/todoitem.xml +++ b/awesome_owl/static/src/todo/todoitem.xml @@ -1,9 +1,11 @@ -
+
+ . +
diff --git a/awesome_owl/static/src/todo/todolist.js b/awesome_owl/static/src/todo/todolist.js index d2d95b43d78..7ad0834c369 100644 --- a/awesome_owl/static/src/todo/todolist.js +++ b/awesome_owl/static/src/todo/todolist.js @@ -1,18 +1,19 @@ import { Component, useState } from "@odoo/owl"; import { TodoItem } from "./todoitem"; +import { useAutofocus } from "../utils"; + export class TodoList extends Component { static template = "awesome_owl.todolist"; - static components = { TodoItem }; setup() { this.todos = useState([]) + useAutofocus("todo_input") } addTodo(ev) { - if (ev.keyCode == '13') { - console.log(ev.target.value) + if (ev.keyCode == '13') { if (ev.target.value != ""){ this.todos.push({ id: this.todos.length + 1, @@ -23,4 +24,16 @@ export class TodoList extends Component { } } } + + toggleState(id) { + const todo = this.todos.find(todo => todo.id == id) + todo.isCompleted = !todo.isCompleted; + } + + removeTodo(id){ + const index = this.todos.findIndex((elem) => elem.id === id); + if (index >= 0){ + this.todos.splice(index,1) + } + } } diff --git a/awesome_owl/static/src/todo/todolist.xml b/awesome_owl/static/src/todo/todolist.xml index 2e5d1b04d5c..35cc0d97f0e 100644 --- a/awesome_owl/static/src/todo/todolist.xml +++ b/awesome_owl/static/src/todo/todolist.xml @@ -1,42 +1,44 @@ -
-
-

+
+

+ Todo List +

+ +
- Todo List

- -
-
- + font-size: 1rem;" > +
+ +
-
diff --git a/awesome_owl/static/src/utils.js b/awesome_owl/static/src/utils.js new file mode 100644 index 00000000000..f17beab7423 --- /dev/null +++ b/awesome_owl/static/src/utils.js @@ -0,0 +1,13 @@ +import { useRef, onMounted } from "@odoo/owl"; + +export function useAutofocus(refName) { + const ref = useRef(refName); + + onMounted(() => { + if (ref.el) { + ref.el.focus(); + } + }); + + return ref; +} diff --git a/estate/models/estate_property_offer.py b/estate/models/estate_property_offer.py index 20b6db7e081..5bb17a85ecf 100644 --- a/estate/models/estate_property_offer.py +++ b/estate/models/estate_property_offer.py @@ -42,9 +42,11 @@ def _inverse_date(self): def action_accept(self): for record in self: record.status = "accepted" + other_offers = record.property_id.offer_ids - record record.property_id.selling_price = record.price record.property_id.customer = record.partner_id record.property_id.state = "offer_accepted" + other_offers.write({'status': 'refused'}) return True def action_refuse(self): From 12ab9608c150685af7add325fb94ea41611c088b Mon Sep 17 00:00:00 2001 From: danal-odoo Date: Mon, 24 Nov 2025 16:19:21 +0530 Subject: [PATCH 20/25] [IMP] awesome_dashboard: added layout component in dashboard. added layout component in dashboard.js. created dashboard.scss to use className in xml. added display prop in layout. --- awesome_dashboard/static/src/dashboard.js | 2 ++ awesome_dashboard/static/src/dashboard.scss | 3 +++ awesome_dashboard/static/src/dashboard.xml | 4 +++- awesome_owl/static/src/todo/todoitem.js | 2 +- awesome_owl/static/src/todo/todoitem.xml | 2 +- awesome_owl/static/src/utils.js | 4 ++-- 6 files changed, 12 insertions(+), 5 deletions(-) create mode 100644 awesome_dashboard/static/src/dashboard.scss diff --git a/awesome_dashboard/static/src/dashboard.js b/awesome_dashboard/static/src/dashboard.js index c4fb245621b..0d78a855de0 100644 --- a/awesome_dashboard/static/src/dashboard.js +++ b/awesome_dashboard/static/src/dashboard.js @@ -1,8 +1,10 @@ import { Component } from "@odoo/owl"; import { registry } from "@web/core/registry"; +import { Layout } from "@web/search/layout"; class AwesomeDashboard extends Component { static template = "awesome_dashboard.AwesomeDashboard"; + static components = { Layout } } registry.category("actions").add("awesome_dashboard.dashboard", AwesomeDashboard); diff --git a/awesome_dashboard/static/src/dashboard.scss b/awesome_dashboard/static/src/dashboard.scss new file mode 100644 index 00000000000..32862ec0d82 --- /dev/null +++ b/awesome_dashboard/static/src/dashboard.scss @@ -0,0 +1,3 @@ +.o_dashboard { + background-color: gray; +} diff --git a/awesome_dashboard/static/src/dashboard.xml b/awesome_dashboard/static/src/dashboard.xml index 1a2ac9a2fed..c6c6a9357f8 100644 --- a/awesome_dashboard/static/src/dashboard.xml +++ b/awesome_dashboard/static/src/dashboard.xml @@ -2,7 +2,9 @@ - hello dashboard + +

Hello World

+
diff --git a/awesome_owl/static/src/todo/todoitem.js b/awesome_owl/static/src/todo/todoitem.js index 49ff89339be..d3aeb71deb0 100644 --- a/awesome_owl/static/src/todo/todoitem.js +++ b/awesome_owl/static/src/todo/todoitem.js @@ -13,7 +13,7 @@ export class TodoItem extends Component { this.props.toggleState(this.props.todo.id) } - onClickRremove(){ + onClickRemove(){ this.props.removeTodo(this.props.todo.id) } } diff --git a/awesome_owl/static/src/todo/todoitem.xml b/awesome_owl/static/src/todo/todoitem.xml index b44f3d65b10..9bbf44a72f8 100644 --- a/awesome_owl/static/src/todo/todoitem.xml +++ b/awesome_owl/static/src/todo/todoitem.xml @@ -5,7 +5,7 @@ . - +
diff --git a/awesome_owl/static/src/utils.js b/awesome_owl/static/src/utils.js index f17beab7423..fde94eb31da 100644 --- a/awesome_owl/static/src/utils.js +++ b/awesome_owl/static/src/utils.js @@ -1,5 +1,6 @@ import { useRef, onMounted } from "@odoo/owl"; + export function useAutofocus(refName) { const ref = useRef(refName); @@ -7,7 +8,6 @@ export function useAutofocus(refName) { if (ref.el) { ref.el.focus(); } - }); - + }); return ref; } From 8c7367762005fa6cdc268a72f3060a157e6c3086 Mon Sep 17 00:00:00 2001 From: danal-odoo Date: Mon, 24 Nov 2025 18:43:27 +0530 Subject: [PATCH 21/25] [IMP] awesome_dashboard: added customers and leads button. added customers and leads button in controlpanel layout. linked onclick in button function to call view action for customers and leads. --- awesome_dashboard/static/src/dashboard.js | 30 ++++++++++++++++++++++ awesome_dashboard/static/src/dashboard.xml | 14 +++++++--- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/awesome_dashboard/static/src/dashboard.js b/awesome_dashboard/static/src/dashboard.js index 0d78a855de0..339e5c770df 100644 --- a/awesome_dashboard/static/src/dashboard.js +++ b/awesome_dashboard/static/src/dashboard.js @@ -1,10 +1,40 @@ import { Component } from "@odoo/owl"; import { registry } from "@web/core/registry"; import { Layout } from "@web/search/layout"; +import { useService } from "@web/core/utils/hooks"; class AwesomeDashboard extends Component { static template = "awesome_dashboard.AwesomeDashboard"; static components = { Layout } + + setup() { + this.action = useService("action"); + } + + openCustomers() { + this.action.doAction({ + type: "ir.actions.act_window", + name: "Customers", + res_model: "res.partner", + views: [ + [false, "kanban"], + [false, "form"], + [false, "list"], + ], + }); + } + + openLeads() { + this.action.doAction({ + type: "ir.actions.act_window", + name: "Leads", + res_model: "crm.lead", + views: [ + [false, "list"], + [false, "form"], + ], + }); + } } registry.category("actions").add("awesome_dashboard.dashboard", AwesomeDashboard); diff --git a/awesome_dashboard/static/src/dashboard.xml b/awesome_dashboard/static/src/dashboard.xml index c6c6a9357f8..1ecc3a952ef 100644 --- a/awesome_dashboard/static/src/dashboard.xml +++ b/awesome_dashboard/static/src/dashboard.xml @@ -1,10 +1,16 @@ - - -

Hello World

+ + + + + +

Hello World

-
From ced1c9fc3cd7e702e0b5c6adb64b8a06a5368923 Mon Sep 17 00:00:00 2001 From: danal-odoo Date: Tue, 25 Nov 2025 14:50:29 +0530 Subject: [PATCH 22/25] [IMP] awesome_dashboard: added DashboardItem component. added DashboardItem component. added slot props in DashboardItem and created a dynamic card in xml. added rpc call in onWillStart(). render all return values in it's separate card in dashboard.xml. added state as 'badge' widget in kanban view in estate module. refined garden onchange logic. --- awesome_dashboard/static/src/dashboard.js | 9 +++-- awesome_dashboard/static/src/dashboard.scss | 2 +- awesome_dashboard/static/src/dashboard.xml | 35 ++++++++++++++++++- .../static/src/dashboarditem/dashboarditem.js | 19 ++++++++++ .../src/dashboarditem/dashboarditem.xml | 10 ++++++ awesome_owl/static/src/card/card.js | 6 ++-- awesome_owl/static/src/counter/counter.js | 2 +- awesome_owl/static/src/counter/counter.xml | 2 ++ awesome_owl/static/src/playground.js | 10 +++--- awesome_owl/static/src/playground.xml | 2 ++ awesome_owl/static/src/todo/todoitem.js | 4 +-- awesome_owl/static/src/todo/todolist.js | 12 +++---- estate/models/estate_property.py | 15 ++++---- estate/models/estate_property_offer.py | 9 ++--- estate/models/estate_property_tag.py | 7 ++-- estate/models/estate_property_type.py | 9 ++--- estate/views/estate_property_type_views.xml | 6 +++- estate/views/estate_property_views.xml | 14 +++++--- 18 files changed, 129 insertions(+), 44 deletions(-) create mode 100644 awesome_dashboard/static/src/dashboarditem/dashboarditem.js create mode 100644 awesome_dashboard/static/src/dashboarditem/dashboarditem.xml diff --git a/awesome_dashboard/static/src/dashboard.js b/awesome_dashboard/static/src/dashboard.js index 339e5c770df..af974f94bd7 100644 --- a/awesome_dashboard/static/src/dashboard.js +++ b/awesome_dashboard/static/src/dashboard.js @@ -1,14 +1,19 @@ -import { Component } from "@odoo/owl"; +import { Component, onWillStart } from "@odoo/owl"; import { registry } from "@web/core/registry"; import { Layout } from "@web/search/layout"; import { useService } from "@web/core/utils/hooks"; +import { DashboardItem } from "./dashboarditem/dashboarditem"; +import { rpc } from "@web/core/network/rpc"; class AwesomeDashboard extends Component { static template = "awesome_dashboard.AwesomeDashboard"; - static components = { Layout } + static components = { Layout, DashboardItem } setup() { this.action = useService("action"); + onWillStart(async () => { + this.result = await rpc("/awesome_dashboard/statistics"); + }) } openCustomers() { diff --git a/awesome_dashboard/static/src/dashboard.scss b/awesome_dashboard/static/src/dashboard.scss index 32862ec0d82..347a4416603 100644 --- a/awesome_dashboard/static/src/dashboard.scss +++ b/awesome_dashboard/static/src/dashboard.scss @@ -1,3 +1,3 @@ .o_dashboard { - background-color: gray; + background-color:rgb(27, 29, 38) } diff --git a/awesome_dashboard/static/src/dashboard.xml b/awesome_dashboard/static/src/dashboard.xml index 1ecc3a952ef..78e8b7b1ef0 100644 --- a/awesome_dashboard/static/src/dashboard.xml +++ b/awesome_dashboard/static/src/dashboard.xml @@ -1,5 +1,6 @@ + @@ -10,7 +11,39 @@ Leads -

Hello World

+
+ +
+ Number of new orders this month +

+

+
+ +
+ Total amount of new orders this month +

+

+
+ +
+ Average amount of t-shirt by order this month +

+

+
+ +
+ Number of cancelled orders this month +

+

+
+ +
+ Average time for an order to go from ‘new’ to ‘sent’ or ‘cancelled’ +

+

+
+
+
diff --git a/awesome_dashboard/static/src/dashboarditem/dashboarditem.js b/awesome_dashboard/static/src/dashboarditem/dashboarditem.js new file mode 100644 index 00000000000..727bd63e1a8 --- /dev/null +++ b/awesome_dashboard/static/src/dashboarditem/dashboarditem.js @@ -0,0 +1,19 @@ +import { Component } from "@odoo/owl"; + +export class DashboardItem extends Component { + static template = "awesome_dashboard.DashboardItem"; + + static props = { + slots: { + type: Object, + shape: { + default: Object, + }, + }, + size: { + type: Number, + default: 1, + optional: true, + }, + }; +} diff --git a/awesome_dashboard/static/src/dashboarditem/dashboarditem.xml b/awesome_dashboard/static/src/dashboarditem/dashboarditem.xml new file mode 100644 index 00000000000..b64ddcd8c16 --- /dev/null +++ b/awesome_dashboard/static/src/dashboarditem/dashboarditem.xml @@ -0,0 +1,10 @@ + + + +
+
+ +
+
+
+
diff --git a/awesome_owl/static/src/card/card.js b/awesome_owl/static/src/card/card.js index b346d834483..ca02b8e5689 100644 --- a/awesome_owl/static/src/card/card.js +++ b/awesome_owl/static/src/card/card.js @@ -5,7 +5,7 @@ export class Card extends Component { static template = "awesome_owl.card"; static props = { title: String, - slots : { + slots: { type: Object, shape: { default: {} @@ -13,13 +13,13 @@ export class Card extends Component { } }; - setup(){ + setup() { this.state = useState([{ isOpen: false }]) } - toggleCard(){ + toggleCard() { this.state.isOpen = !this.state.isOpen } } diff --git a/awesome_owl/static/src/counter/counter.js b/awesome_owl/static/src/counter/counter.js index 802da17299e..6e3681e0f89 100644 --- a/awesome_owl/static/src/counter/counter.js +++ b/awesome_owl/static/src/counter/counter.js @@ -13,7 +13,7 @@ export class Counter extends Component { increment() { this.state.value++; - if (this.props.onChange){ + if (this.props.onChange) { this.props.onChange(1); } } diff --git a/awesome_owl/static/src/counter/counter.xml b/awesome_owl/static/src/counter/counter.xml index 016474988f0..21173bb083d 100644 --- a/awesome_owl/static/src/counter/counter.xml +++ b/awesome_owl/static/src/counter/counter.xml @@ -1,5 +1,6 @@ +

Counter:

@@ -21,4 +22,5 @@
+
diff --git a/awesome_owl/static/src/playground.js b/awesome_owl/static/src/playground.js index 76e8d6ee7c2..f1294597071 100644 --- a/awesome_owl/static/src/playground.js +++ b/awesome_owl/static/src/playground.js @@ -9,22 +9,22 @@ export class Playground extends Component { static components = { Counter, Card, TodoList }; setup() { - this.state = useState({ + this.state = useState({ content: markup('

Welcome to your Counter!

'), sum: 0 }); } calculateSum(newValue) { - if (newValue > 0){ + if (newValue > 0) { this.state.sum++; - } - if (newValue < 0){ + } + if (newValue < 0) { this.state.sum--; } } - reset(){ + reset() { this.state.sum = 0 } } diff --git a/awesome_owl/static/src/playground.xml b/awesome_owl/static/src/playground.xml index 2afd23f4bee..61f0e28d667 100644 --- a/awesome_owl/static/src/playground.xml +++ b/awesome_owl/static/src/playground.xml @@ -1,5 +1,6 @@ +
@@ -38,4 +39,5 @@
+
diff --git a/awesome_owl/static/src/todo/todoitem.js b/awesome_owl/static/src/todo/todoitem.js index d3aeb71deb0..70b10e8ba21 100644 --- a/awesome_owl/static/src/todo/todoitem.js +++ b/awesome_owl/static/src/todo/todoitem.js @@ -9,11 +9,11 @@ export class TodoItem extends Component { removeTodo: Function }; - toggleIsCompleted(){ + toggleIsCompleted() { this.props.toggleState(this.props.todo.id) } - onClickRemove(){ + onClickRemove() { this.props.removeTodo(this.props.todo.id) } } diff --git a/awesome_owl/static/src/todo/todolist.js b/awesome_owl/static/src/todo/todolist.js index 7ad0834c369..141a17d673d 100644 --- a/awesome_owl/static/src/todo/todolist.js +++ b/awesome_owl/static/src/todo/todolist.js @@ -13,8 +13,8 @@ export class TodoList extends Component { } addTodo(ev) { - if (ev.keyCode == '13') { - if (ev.target.value != ""){ + if (ev.keyCode == '13') { + if (ev.target.value != "") { this.todos.push({ id: this.todos.length + 1, description: ev.target.value, @@ -24,16 +24,16 @@ export class TodoList extends Component { } } } - + toggleState(id) { const todo = this.todos.find(todo => todo.id == id) todo.isCompleted = !todo.isCompleted; } - removeTodo(id){ + removeTodo(id) { const index = this.todos.findIndex((elem) => elem.id === id); - if (index >= 0){ - this.todos.splice(index,1) + if (index >= 0) { + this.todos.splice(index, 1) } } } diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index 538275462d4..a96ab5e97e7 100755 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -9,13 +9,6 @@ class EstateProperty(models.Model): _name = "estate.property" _description = "Estate Property" _order = "id desc" - _check_expected_price = models.Constraint( - "CHECK(expected_price > 0)", - "A property expected price must be strictly positive.", - ) - _check_selling_price = models.Constraint( - "CHECK(selling_price >= 0)", "A property selling price must be positive." - ) name = fields.Char(required=True) description = fields.Text() @@ -64,6 +57,14 @@ class EstateProperty(models.Model): total_area = fields.Integer(compute="_compute_total_area") best_price = fields.Integer(compute="_compute_best_price") + _check_expected_price = models.Constraint( + "CHECK(expected_price > 0)", + "A property expected price must be strictly positive.", + ) + _check_selling_price = models.Constraint( + "CHECK(selling_price >= 0)", "A property selling price must be positive." + ) + @api.depends("living_area", "garden_area") def _compute_total_area(self): for record in self: diff --git a/estate/models/estate_property_offer.py b/estate/models/estate_property_offer.py index 5bb17a85ecf..4c162053e9b 100644 --- a/estate/models/estate_property_offer.py +++ b/estate/models/estate_property_offer.py @@ -8,9 +8,6 @@ class EstatePropertyOffer(models.Model): _name = "estate.property.offer" _description = "Estate Property Offer" _order = "price desc" - _check_offer_price = models.Constraint( - "CHECK(price > 0)", "An offer price must be strictly positive" - ) price = fields.Float() status = fields.Selection( @@ -24,6 +21,10 @@ class EstatePropertyOffer(models.Model): related="property_id.property_type_id", store=True ) + _check_offer_price = models.Constraint( + "CHECK(price > 0)", "An offer price must be strictly positive" + ) + @api.depends("validity") def _compute_deadline(self): for record in self: @@ -46,7 +47,7 @@ def action_accept(self): record.property_id.selling_price = record.price record.property_id.customer = record.partner_id record.property_id.state = "offer_accepted" - other_offers.write({'status': 'refused'}) + other_offers.write({"status": "refused"}) return True def action_refuse(self): diff --git a/estate/models/estate_property_tag.py b/estate/models/estate_property_tag.py index b725be739a5..3475da956ac 100644 --- a/estate/models/estate_property_tag.py +++ b/estate/models/estate_property_tag.py @@ -5,9 +5,10 @@ class EstatePropertyTags(models.Model): _name = "estate.property.tag" _description = "Estate Property Tag" _order = "name" - _check_tag_name = models.Constraint( - "UNIQUE(name)", "A property tag name should be unique." - ) name = fields.Char(required=True) color = fields.Integer() + + _check_tag_name = models.Constraint( + "UNIQUE(name)", "A property tag name should be unique." + ) diff --git a/estate/models/estate_property_type.py b/estate/models/estate_property_type.py index ca3170b9901..d611ccf31f4 100755 --- a/estate/models/estate_property_type.py +++ b/estate/models/estate_property_type.py @@ -6,9 +6,6 @@ class EstatePropertyType(models.Model): _name = "estate.property.type" _description = "Estate Property Type" _order = "sequence,name" - _check_type_name = models.Constraint( - "UNIQUE(name)", "A property type name should be unique." - ) name = fields.Char(required=True) property_ids = fields.One2many("estate.property", "property_type_id") @@ -16,7 +13,11 @@ class EstatePropertyType(models.Model): offer_ids = fields.One2many("estate.property.offer", "property_type_id") offer_count = fields.Integer(compute="_compute_offer_count") + _check_type_name = models.Constraint( + "UNIQUE(name)", "A property type name should be unique." + ) + @api.depends("offer_ids") def _compute_offer_count(self): for record in self: - record.offer_count = len(record.property_ids.mapped('offer_ids')) + record.offer_count = len(record.property_ids.mapped("offer_ids")) diff --git a/estate/views/estate_property_type_views.xml b/estate/views/estate_property_type_views.xml index fad2f359ee9..0afd589cb86 100644 --- a/estate/views/estate_property_type_views.xml +++ b/estate/views/estate_property_type_views.xml @@ -34,7 +34,11 @@ - + diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index ee2ff1f6a83..1277d4fc284 100755 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -35,7 +35,7 @@ - + @@ -98,8 +98,14 @@
-
- +
+ +
Expected Price: @@ -109,7 +115,7 @@ Best Offer:
-
+
Selling Price:
From 1a3426624d24ff5e6374beba67aac471dc8fc2a1 Mon Sep 17 00:00:00 2001 From: danal-odoo Date: Thu, 27 Nov 2025 10:55:34 +0530 Subject: [PATCH 23/25] [IMP] awesome_dashboard: added Chart and made dashboard lazyload. created service to load rpc call and load rpc data. added interval for rpc call to refresh data every 10 minuets. added Chart to show t-shirt size in chart view. load dashboard as lazy-loading by register that Component to lazy-components. --- .gitignore | 7 ++ awesome_dashboard/__manifest__.py | 3 + awesome_dashboard/static/dashboard.png | Bin 0 -> 106181 bytes .../static/src/{ => dashboard}/dashboard.js | 13 ++- .../static/src/{ => dashboard}/dashboard.scss | 0 .../static/src/{ => dashboard}/dashboard.xml | 16 ++-- .../dashboarditem/dashboarditem.js | 0 .../dashboarditem/dashboarditem.xml | 4 +- .../static/src/dashboard/piechart/piechart.js | 76 ++++++++++++++++++ .../src/dashboard/piechart/piechart.xml | 10 +++ .../src/dashboard/statistics_services.js | 21 +++++ .../static/src/dashboard_action.js | 16 ++++ awesome_dashboard/views/views.xml | 2 +- 13 files changed, 154 insertions(+), 14 deletions(-) create mode 100644 awesome_dashboard/static/dashboard.png rename awesome_dashboard/static/src/{ => dashboard}/dashboard.js (71%) rename awesome_dashboard/static/src/{ => dashboard}/dashboard.scss (100%) rename awesome_dashboard/static/src/{ => dashboard}/dashboard.xml (67%) rename awesome_dashboard/static/src/{ => dashboard}/dashboarditem/dashboarditem.js (100%) rename awesome_dashboard/static/src/{ => dashboard}/dashboarditem/dashboarditem.xml (84%) create mode 100644 awesome_dashboard/static/src/dashboard/piechart/piechart.js create mode 100644 awesome_dashboard/static/src/dashboard/piechart/piechart.xml create mode 100644 awesome_dashboard/static/src/dashboard/statistics_services.js create mode 100644 awesome_dashboard/static/src/dashboard_action.js diff --git a/.gitignore b/.gitignore index b6e47617de1..65a3e9c663f 100644 --- a/.gitignore +++ b/.gitignore @@ -127,3 +127,10 @@ dmypy.json # Pyre type checker .pyre/ + +.eslintignore +.eslintrc.json +jsconfig.json +package.json +package-lock.json +node_modules/ diff --git a/awesome_dashboard/__manifest__.py b/awesome_dashboard/__manifest__.py index a1cd72893d7..995e6ac1119 100644 --- a/awesome_dashboard/__manifest__.py +++ b/awesome_dashboard/__manifest__.py @@ -25,6 +25,9 @@ 'web.assets_backend': [ 'awesome_dashboard/static/src/**/*', ], + 'awesome_dashboard.dashboard': [ + 'awesome_dashboard/static/src/dashboard/**/*', + ], }, 'license': 'AGPL-3' } diff --git a/awesome_dashboard/static/dashboard.png b/awesome_dashboard/static/dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..d372e743a3ef9109cc17462316ecfddee2b6cdd0 GIT binary patch literal 106181 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 z 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 literal 0 HcmV?d00001 diff --git a/awesome_dashboard/static/src/dashboard.js b/awesome_dashboard/static/src/dashboard/dashboard.js similarity index 71% rename from awesome_dashboard/static/src/dashboard.js rename to awesome_dashboard/static/src/dashboard/dashboard.js index af974f94bd7..797ba8bc7d3 100644 --- a/awesome_dashboard/static/src/dashboard.js +++ b/awesome_dashboard/static/src/dashboard/dashboard.js @@ -1,19 +1,18 @@ -import { Component, onWillStart } from "@odoo/owl"; +import { Component, useState } from "@odoo/owl"; import { registry } from "@web/core/registry"; import { Layout } from "@web/search/layout"; import { useService } from "@web/core/utils/hooks"; import { DashboardItem } from "./dashboarditem/dashboarditem"; -import { rpc } from "@web/core/network/rpc"; +import { PieChart } from "./piechart/piechart"; class AwesomeDashboard extends Component { static template = "awesome_dashboard.AwesomeDashboard"; - static components = { Layout, DashboardItem } + static components = { Layout, DashboardItem, PieChart } setup() { this.action = useService("action"); - onWillStart(async () => { - this.result = await rpc("/awesome_dashboard/statistics"); - }) + const statisticsService = useService("awesome_dashboard.statistics"); + this.statistics = useState(statisticsService.state); } openCustomers() { @@ -42,4 +41,4 @@ class AwesomeDashboard extends Component { } } -registry.category("actions").add("awesome_dashboard.dashboard", AwesomeDashboard); +registry.category("lazy_components").add("awesome_dashboard.AwesomeDashboard", AwesomeDashboard); diff --git a/awesome_dashboard/static/src/dashboard.scss b/awesome_dashboard/static/src/dashboard/dashboard.scss similarity index 100% rename from awesome_dashboard/static/src/dashboard.scss rename to awesome_dashboard/static/src/dashboard/dashboard.scss diff --git a/awesome_dashboard/static/src/dashboard.xml b/awesome_dashboard/static/src/dashboard/dashboard.xml similarity index 67% rename from awesome_dashboard/static/src/dashboard.xml rename to awesome_dashboard/static/src/dashboard/dashboard.xml index 78e8b7b1ef0..ab78079524d 100644 --- a/awesome_dashboard/static/src/dashboard.xml +++ b/awesome_dashboard/static/src/dashboard/dashboard.xml @@ -15,31 +15,37 @@
    Number of new orders this month -

    +

    Total amount of new orders this month -

    +

    Average amount of t-shirt by order this month -

    +

    Number of cancelled orders this month -

    +

    +
    + Shirt order by size + +
    +
    +
    Average time for an order to go from ‘new’ to ‘sent’ or ‘cancelled’ -

    +

diff --git a/awesome_dashboard/static/src/dashboarditem/dashboarditem.js b/awesome_dashboard/static/src/dashboard/dashboarditem/dashboarditem.js similarity index 100% rename from awesome_dashboard/static/src/dashboarditem/dashboarditem.js rename to awesome_dashboard/static/src/dashboard/dashboarditem/dashboarditem.js diff --git a/awesome_dashboard/static/src/dashboarditem/dashboarditem.xml b/awesome_dashboard/static/src/dashboard/dashboarditem/dashboarditem.xml similarity index 84% rename from awesome_dashboard/static/src/dashboarditem/dashboarditem.xml rename to awesome_dashboard/static/src/dashboard/dashboarditem/dashboarditem.xml index b64ddcd8c16..f7c20cb5c08 100644 --- a/awesome_dashboard/static/src/dashboarditem/dashboarditem.xml +++ b/awesome_dashboard/static/src/dashboard/dashboarditem/dashboarditem.xml @@ -1,10 +1,12 @@ + -
+
+ diff --git a/awesome_dashboard/static/src/dashboard/piechart/piechart.js b/awesome_dashboard/static/src/dashboard/piechart/piechart.js new file mode 100644 index 00000000000..978c847e146 --- /dev/null +++ b/awesome_dashboard/static/src/dashboard/piechart/piechart.js @@ -0,0 +1,76 @@ +import { Component, onWillStart, onPatched, useRef, onMounted } from "@odoo/owl"; +import { loadJS } from "@web/core/assets"; + +export class PieChart extends Component { + static template = "awesome_dashboard.PieChart"; + static props = { + items: { + type: Object, + optional: true, + default: () => ({}), + }, + } + + setup() { + this.chartRef = useRef("pie-canvas"); + this.myPieChart = null; + + onWillStart(async () => { + await loadJS("/web/static/lib/Chart/Chart.js"); + }); + + onMounted(() => { + this.renderChart() + }); + + onPatched(() => { + this.renderChart() + }); + } + + renderChart() { + if (!this.chartRef.el) { + return; + } + + if (this.myPieChart) { + this.myPieChart.destroy(); + } + + this.pieChartData = { + labels: ['M', 'S', 'XL'], + datasets: [{ + label: 'Sales Count', + data: [this.props.items.m, this.props.items.s, this.props.items.xl], + backgroundColor: [ + 'rgba(255, 99, 132, 0.6)', + 'rgba(54, 162, 235, 0.6)', + 'rgba(255, 206, 86, 0.6)' + ], + borderColor: [ + 'rgba(255, 99, 132, 1)', + 'rgba(54, 162, 235, 1)', + 'rgba(255, 206, 86, 1)' + ], + borderWidth: 1 + }] + }; + + this.pieChartOptions = { + responsive: true, + maintainAspectRatio: false, + plugins: { + legend: { + position: 'top', + } + } + }; + + this.myPieChart = new Chart(this.chartRef.el, + { + type: 'pie', + data: this.pieChartData, + options: this.pieChartOptions + }); + } +} diff --git a/awesome_dashboard/static/src/dashboard/piechart/piechart.xml b/awesome_dashboard/static/src/dashboard/piechart/piechart.xml new file mode 100644 index 00000000000..811eb8464be --- /dev/null +++ b/awesome_dashboard/static/src/dashboard/piechart/piechart.xml @@ -0,0 +1,10 @@ + + + + +
+ +
+
+ +
diff --git a/awesome_dashboard/static/src/dashboard/statistics_services.js b/awesome_dashboard/static/src/dashboard/statistics_services.js new file mode 100644 index 00000000000..fdc6d36324c --- /dev/null +++ b/awesome_dashboard/static/src/dashboard/statistics_services.js @@ -0,0 +1,21 @@ +import { registry } from "@web/core/registry"; +import { rpc } from "@web/core/network/rpc"; +import { reactive } from "@odoo/owl"; + +const statisticsService = { + async: ["loadStatistics"], + start() { + const loadStatistics = () => rpc("/awesome_dashboard/statistics") + const state = reactive({ data: null }); + const fetchData = async () => { + state.data = await loadStatistics(); + }; + fetchData(); + setInterval(fetchData, 10000); + return { + state: state + }; + }, +}; + +registry.category("services").add("awesome_dashboard.statistics", statisticsService); diff --git a/awesome_dashboard/static/src/dashboard_action.js b/awesome_dashboard/static/src/dashboard_action.js new file mode 100644 index 00000000000..4d160755898 --- /dev/null +++ b/awesome_dashboard/static/src/dashboard_action.js @@ -0,0 +1,16 @@ +import { Component, xml } from "@odoo/owl"; +import { LazyComponent } from "@web/core/assets"; +import { registry } from "@web/core/registry"; + +export class DashboardAction extends Component { + static components = { LazyComponent }; + + static template = xml` + + `; +} + +registry.category("actions").add("awesome_dashboard.dashboard", DashboardAction); diff --git a/awesome_dashboard/views/views.xml b/awesome_dashboard/views/views.xml index 47fb2b6f258..87951a4bcc8 100644 --- a/awesome_dashboard/views/views.xml +++ b/awesome_dashboard/views/views.xml @@ -5,7 +5,7 @@ awesome_dashboard.dashboard - + From 38cc6e5b706ae36f0a2fe2601c0c8b912ce37b17 Mon Sep 17 00:00:00 2001 From: danal-odoo Date: Thu, 27 Nov 2025 15:27:43 +0530 Subject: [PATCH 24/25] [IMP] awesome_dashboard: added popup to select item to show/hide. added a settings icon near Dashboard in Layout component. added popup form to select which item to show/hide in Dashboard. added function which will store those settings in Browser's local storage. --- awesome_dashboard/static/dashboard.png | Bin 106181 -> 9355 bytes .../static/src/dashboard/dashboard.js | 47 +++++++++++ .../static/src/dashboard/dashboard.xml | 77 ++++++++++-------- .../static/src/dashboard/dashboard_items.js | 67 +++++++++++++++ .../src/dashboard/numbercard/numbercard.js | 10 +++ .../src/dashboard/numbercard/numbercard.xml | 7 ++ .../static/src/dashboard/piechart/piechart.js | 2 +- .../dashboard/piechartcard/piechartcard.js | 12 +++ .../dashboard/piechartcard/piechartcard.xml | 7 ++ .../src/dashboard/statistics_services.js | 2 +- 10 files changed, 193 insertions(+), 38 deletions(-) create mode 100644 awesome_dashboard/static/src/dashboard/dashboard_items.js create mode 100644 awesome_dashboard/static/src/dashboard/numbercard/numbercard.js create mode 100644 awesome_dashboard/static/src/dashboard/numbercard/numbercard.xml create mode 100644 awesome_dashboard/static/src/dashboard/piechartcard/piechartcard.js create mode 100644 awesome_dashboard/static/src/dashboard/piechartcard/piechartcard.xml diff --git a/awesome_dashboard/static/dashboard.png b/awesome_dashboard/static/dashboard.png index d372e743a3ef9109cc17462316ecfddee2b6cdd0..be75c2ef5f2a7aa9274db4c7339f744214f7f8e9 100644 GIT binary patch literal 9355 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 E1D_JEjQ{`u literal 106181 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 z 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 diff --git a/awesome_dashboard/static/src/dashboard/dashboard.js b/awesome_dashboard/static/src/dashboard/dashboard.js index 797ba8bc7d3..8e49cc3e184 100644 --- a/awesome_dashboard/static/src/dashboard/dashboard.js +++ b/awesome_dashboard/static/src/dashboard/dashboard.js @@ -13,6 +13,23 @@ class AwesomeDashboard extends Component { this.action = useService("action"); const statisticsService = useService("awesome_dashboard.statistics"); this.statistics = useState(statisticsService.state); + this.modalState = useState({ isOpen: false }); + this.hiddenItems = useState({ + ids: JSON.parse( + localStorage.getItem("hidden_dashboard_items") || "[]" + ), + }); + this.items = useState( + registry + .category("awesome_dashboard") + .getAll() + .filter((item) => !this.hiddenItems.ids.includes(item.id)) + ); + this.allItems = useState( + registry + .category("awesome_dashboard") + .getAll() + ); } openCustomers() { @@ -39,6 +56,36 @@ class AwesomeDashboard extends Component { ], }); } + + toggleModal() { + this.modalState.isOpen = !this.modalState.isOpen + } + + toggleItem(event) { + const itemId = event.target.value; + + if (event.target.checked) { + this.hiddenItems.ids = this.hiddenItems.ids.filter( + (id) => id !== itemId + ); + } else { + this.hiddenItems.ids.push(itemId); + } + } + + applySettings() { + localStorage.setItem( + "hidden_dashboard_items", + JSON.stringify(this.hiddenItems.ids) + ); + + this.items = registry + .category("awesome_dashboard") + .getAll() + .filter((item) => !this.hiddenItems.ids.includes(item.id)); + + this.toggleModal(); + } } registry.category("lazy_components").add("awesome_dashboard.AwesomeDashboard", AwesomeDashboard); diff --git a/awesome_dashboard/static/src/dashboard/dashboard.xml b/awesome_dashboard/static/src/dashboard/dashboard.xml index ab78079524d..880a0c16027 100644 --- a/awesome_dashboard/static/src/dashboard/dashboard.xml +++ b/awesome_dashboard/static/src/dashboard/dashboard.xml @@ -11,43 +11,48 @@ Leads -
    - -
    - Number of new orders this month -

    -

    -
    - -
    - Total amount of new orders this month -

    -

    -
    - -
    - Average amount of t-shirt by order this month -

    -

    -
    - -
    - Number of cancelled orders this month -

    -

    -
    - -
    - Shirt order by size - -
    -
    - -
    - Average time for an order to go from ‘new’ to ‘sent’ or ‘cancelled’ -

    + + + + + +

    + + + + + + +
    + + diff --git a/awesome_dashboard/static/src/dashboard/dashboard_items.js b/awesome_dashboard/static/src/dashboard/dashboard_items.js new file mode 100644 index 00000000000..d2667a75834 --- /dev/null +++ b/awesome_dashboard/static/src/dashboard/dashboard_items.js @@ -0,0 +1,67 @@ +import { registry } from "@web/core/registry"; +import { NumberCard } from "./numbercard/numbercard"; +import { PieChartCard } from "./piechartcard/piechartcard"; + +export const items = [ + { + id: "average_quantity", + description: "Average amount of t-shirt", + Component: NumberCard, + props: (data) => ({ + title: "Average amount of t-shirt by order this month", + value: data.average_quantity, + }), + }, + { + id: "nb_new_orders", + description: "Number of new orders this month", + Component: NumberCard, + props: (data) => ({ + title: "Number of new orders this month", + value: data.nb_new_orders, + }), + }, + { + id: "nb_cancelled_orders", + description: "Number of cancelled orders this month", + Component: NumberCard, + props: (data) => ({ + title: "Number of cancelled orders this month", + value: data.nb_cancelled_orders, + }), + }, + { + id: "total_amount", + description: "Total amount of new orders this month", + Component: NumberCard, + props: (data) => ({ + title: "Total amount of new orders this month", + value: data.total_amount, + }), + }, + { + id: "orders_by_size", + description: "Shirt orders by size", + Component: PieChartCard, + props: (data) => ({ + title: "Shirt orders by size", + value: data.orders_by_size, + }), + }, + { + id: "average_time", + description: + "Average time for an order to go from ‘new’ to ‘sent’ or ‘cancelled’", + Component: NumberCard, + props: (data) => ({ + title: "Average time for an order to go from ‘new’ to ‘sent’ or ‘cancelled’", + value: data.average_time, + }), + }, +]; + +items.forEach((item) => { + registry + .category("awesome_dashboard") + .add("awesome_dashboard.dashboard_item." + item.id, item); +}); diff --git a/awesome_dashboard/static/src/dashboard/numbercard/numbercard.js b/awesome_dashboard/static/src/dashboard/numbercard/numbercard.js new file mode 100644 index 00000000000..3028b0c429e --- /dev/null +++ b/awesome_dashboard/static/src/dashboard/numbercard/numbercard.js @@ -0,0 +1,10 @@ +import { Component } from "@odoo/owl"; + +export class NumberCard extends Component { + static template = "awesome_dashboard.NumberCard"; + + static props = { + title: String, + value: Number, + }; +} diff --git a/awesome_dashboard/static/src/dashboard/numbercard/numbercard.xml b/awesome_dashboard/static/src/dashboard/numbercard/numbercard.xml new file mode 100644 index 00000000000..614c9267c4c --- /dev/null +++ b/awesome_dashboard/static/src/dashboard/numbercard/numbercard.xml @@ -0,0 +1,7 @@ + + + +
    +

    + + diff --git a/awesome_dashboard/static/src/dashboard/piechart/piechart.js b/awesome_dashboard/static/src/dashboard/piechart/piechart.js index 978c847e146..3a40eaa9fb5 100644 --- a/awesome_dashboard/static/src/dashboard/piechart/piechart.js +++ b/awesome_dashboard/static/src/dashboard/piechart/piechart.js @@ -7,7 +7,7 @@ export class PieChart extends Component { items: { type: Object, optional: true, - default: () => ({}), + default: () => { }, }, } diff --git a/awesome_dashboard/static/src/dashboard/piechartcard/piechartcard.js b/awesome_dashboard/static/src/dashboard/piechartcard/piechartcard.js new file mode 100644 index 00000000000..a1ba011eb2f --- /dev/null +++ b/awesome_dashboard/static/src/dashboard/piechartcard/piechartcard.js @@ -0,0 +1,12 @@ +import { Component } from "@odoo/owl"; +import { PieChart } from "../piechart/piechart"; + +export class PieChartCard extends Component { + static template = "awesome_dashboard.PieChartCard"; + static components = { PieChart }; + + static props = { + title: String, + value: Object, + }; +} diff --git a/awesome_dashboard/static/src/dashboard/piechartcard/piechartcard.xml b/awesome_dashboard/static/src/dashboard/piechartcard/piechartcard.xml new file mode 100644 index 00000000000..4089bfe8963 --- /dev/null +++ b/awesome_dashboard/static/src/dashboard/piechartcard/piechartcard.xml @@ -0,0 +1,7 @@ + + + +

    + + + diff --git a/awesome_dashboard/static/src/dashboard/statistics_services.js b/awesome_dashboard/static/src/dashboard/statistics_services.js index fdc6d36324c..273df0591dd 100644 --- a/awesome_dashboard/static/src/dashboard/statistics_services.js +++ b/awesome_dashboard/static/src/dashboard/statistics_services.js @@ -11,7 +11,7 @@ const statisticsService = { state.data = await loadStatistics(); }; fetchData(); - setInterval(fetchData, 10000); + setInterval(fetchData, 10 * 60 * 1000); return { state: state }; From 5d27874599463490d9c61309e80f8f0852a1fca8 Mon Sep 17 00:00:00 2001 From: danal-odoo Date: Fri, 28 Nov 2025 11:17:58 +0530 Subject: [PATCH 25/25] [IMP] estate: fixed state button layout. added onchange on offer_ids if len(offer_ids) is zero then will change state to 'new'. fixed state button layout was in header first shifted to context menu. added sold button disabled when there is no offer accepted and if offer is accepted then will show in highlight color. --- estate/models/estate_property.py | 7 ++++++- estate/views/estate_property_type_views.xml | 22 ++++++++++++++------- estate/views/estate_property_views.xml | 20 +++++++++++-------- estate_account/models/estate_property.py | 4 ---- 4 files changed, 33 insertions(+), 20 deletions(-) diff --git a/estate/models/estate_property.py b/estate/models/estate_property.py index a96ab5e97e7..b56f6bc0af3 100755 --- a/estate/models/estate_property.py +++ b/estate/models/estate_property.py @@ -47,7 +47,7 @@ class EstateProperty(models.Model): copy=False, default="new", ) - property_type_id = fields.Many2one("estate.property.type", string="Property Type") + property_type_id = fields.Many2one("estate.property.type", string="Property Type", required=True) customer = fields.Many2one("res.partner", string="Customer", copy=False) salesperson = fields.Many2one( "res.users", string="Salesperson", default=lambda self: self.env.user @@ -87,6 +87,11 @@ def _onchange_garden(self): self.garden_area = 0 self.garden_orientation = None + @api.onchange("offer_ids") + def _onchange_offer_ids(self): + if len(self.offer_ids) == 0: + self.state = "new" + def action_sold_property(self): for record in self: if record.state == "cancelled": diff --git a/estate/views/estate_property_type_views.xml b/estate/views/estate_property_type_views.xml index 0afd589cb86..1fbc2c3b0e6 100644 --- a/estate/views/estate_property_type_views.xml +++ b/estate/views/estate_property_type_views.xml @@ -16,15 +16,23 @@ estate.property.type -
    -
    -
    -
    -

    diff --git a/estate/views/estate_property_views.xml b/estate/views/estate_property_views.xml index 1277d4fc284..bf186e74268 100755 --- a/estate/views/estate_property_views.xml +++ b/estate/views/estate_property_views.xml @@ -18,12 +18,14 @@
    -
    + -

    +

    @@ -31,14 +33,14 @@ - - - - + + + + @@ -49,6 +51,8 @@ + + diff --git a/estate_account/models/estate_property.py b/estate_account/models/estate_property.py index ede52556a67..9850cdeb6d3 100644 --- a/estate_account/models/estate_property.py +++ b/estate_account/models/estate_property.py @@ -1,5 +1,3 @@ -from odoo.exceptions import UserError - from odoo import models, Command @@ -8,8 +6,6 @@ class EstatePropertyInherit(models.Model): def action_sold_property(self): for record in self: - if record.selling_price == 0: - raise UserError("Cannot sell Property without any accepted offer") self.env["account.move"].create( { "partner_id": record.customer.id,