From 0a87304ff0680aa1ed250e6961daeb386a6661bf Mon Sep 17 00:00:00 2001 From: Chenyun Yang Date: Thu, 23 Mar 2023 13:23:47 +0000 Subject: [PATCH] [REF] spreadsheet: spreadsheet models MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit refactors the current model structure of spreadsheet-related module. Data fields are integrated into an abstract model `spreadsheet.mixin` and all sub-models are inherited from it. This way we can group all decode/encode logics into one place. task 3222572 closes odoo/odoo#116498 Related: odoo/upgrade#4473 Related: odoo/enterprise#38692 Signed-off-by: Lucas Lefèvre (lul) --- addons/spreadsheet/models/__init__.py | 1 + .../spreadsheet/models/spreadsheet_mixin.py | 30 +++++++++++++++++++ addons/spreadsheet/static/tests/utils/data.js | 6 ++-- .../models/spreadsheet_dashboard.py | 16 ++-------- .../views/spreadsheet_dashboard_views.xml | 2 +- .../data/dashboards.xml | 2 +- .../data/dashboards.xml | 2 +- .../data/dashboards.xml | 2 +- .../data/dashboards.xml | 2 +- .../data/dashboards.xml | 2 +- .../data/dashboards.xml | 2 +- .../data/dashboards.xml | 2 +- .../data/dashboards.xml | 2 +- .../data/dashboards.xml | 4 +-- .../data/dashboards.xml | 2 +- .../data/dashboards.xml | 2 +- .../data/dashboards.xml | 2 +- 17 files changed, 50 insertions(+), 31 deletions(-) create mode 100644 addons/spreadsheet/models/spreadsheet_mixin.py diff --git a/addons/spreadsheet/models/__init__.py b/addons/spreadsheet/models/__init__.py index 1e5778f2654..4ffa8ea879f 100644 --- a/addons/spreadsheet/models/__init__.py +++ b/addons/spreadsheet/models/__init__.py @@ -2,3 +2,4 @@ from . import res_currency from . import res_currency_rate +from . import spreadsheet_mixin diff --git a/addons/spreadsheet/models/spreadsheet_mixin.py b/addons/spreadsheet/models/spreadsheet_mixin.py new file mode 100644 index 00000000000..d8ec5a9c47d --- /dev/null +++ b/addons/spreadsheet/models/spreadsheet_mixin.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import base64 +from odoo import api, fields, models +from odoo.addons.spreadsheet.utils import empty_spreadsheet_data_base64 + +class SpreadsheetMixin(models.AbstractModel): + _name = "spreadsheet.mixin" + _description = "Spreadsheet mixin" + _auto = False + + spreadsheet_binary_data = fields.Binary(required=True, string="Spreadsheet file", default=empty_spreadsheet_data_base64()) + spreadsheet_data = fields.Text(compute='_compute_spreadsheet_data', inverse='_inverse_spreadsheet_data') + thumbnail = fields.Binary() + + @api.depends("spreadsheet_binary_data") + def _compute_spreadsheet_data(self): + for spreadsheet in self.with_context(bin_size=False): + if not spreadsheet.spreadsheet_binary_data: + spreadsheet.spreadsheet_data = False + else: + spreadsheet.spreadsheet_data = base64.b64decode(spreadsheet.spreadsheet_binary_data).decode() + + def _inverse_spreadsheet_data(self): + for spreadsheet in self: + if not spreadsheet.spreadsheet_data: + spreadsheet.spreadsheet_binary_data = False + else: + spreadsheet.spreadsheet_binary_data = base64.b64encode(spreadsheet.spreadsheet_data.encode()) diff --git a/addons/spreadsheet/static/tests/utils/data.js b/addons/spreadsheet/static/tests/utils/data.js index 1589016ddc7..1f52d4aced9 100644 --- a/addons/spreadsheet/static/tests/utils/data.js +++ b/addons/spreadsheet/static/tests/utils/data.js @@ -218,12 +218,12 @@ export function getBasicData() { "spreadsheet.template": { fields: { name: { string: "Name", type: "char" }, - data: { string: "Data", type: "binary" }, + spreadsheet_data: { string: "Spreadsheet Data", type: "text" }, thumbnail: { string: "Thumbnail", type: "binary" }, }, records: [ - { id: 1, name: "Template 1", data: btoa("{}") }, - { id: 2, name: "Template 2", data: btoa("{}") }, + { id: 1, name: "Template 1", spreadsheet_data: {} }, + { id: 2, name: "Template 2", spreadsheet_data: {} }, ], }, "res.currency": { diff --git a/addons/spreadsheet_dashboard/models/spreadsheet_dashboard.py b/addons/spreadsheet_dashboard/models/spreadsheet_dashboard.py index 5179c86cb2b..0e4d2f6f065 100644 --- a/addons/spreadsheet_dashboard/models/spreadsheet_dashboard.py +++ b/addons/spreadsheet_dashboard/models/spreadsheet_dashboard.py @@ -1,24 +1,12 @@ -import base64 -import json - -from odoo import api, fields, models, _ - -from odoo.addons.spreadsheet.utils import empty_spreadsheet_data_base64 +from odoo import fields, models class SpreadsheetDashboard(models.Model): _name = 'spreadsheet.dashboard' _description = 'Spreadsheet Dashboard' + _inherit = "spreadsheet.mixin" _order = 'sequence' name = fields.Char(required=True, translate=True) dashboard_group_id = fields.Many2one('spreadsheet.dashboard.group', required=True) - data = fields.Binary(required=True, default=lambda self: empty_spreadsheet_data_base64()) - spreadsheet_data = fields.Text(compute='_compute_spreadsheet_data') - thumbnail = fields.Binary() sequence = fields.Integer() group_ids = fields.Many2many('res.groups', default=lambda self: self.env.ref('base.group_user')) - - @api.depends("data") - def _compute_spreadsheet_data(self): - for dashboard in self.with_context(bin_size=False): - dashboard.spreadsheet_data = base64.b64decode(dashboard.data).decode() diff --git a/addons/spreadsheet_dashboard/views/spreadsheet_dashboard_views.xml b/addons/spreadsheet_dashboard/views/spreadsheet_dashboard_views.xml index cb8207eb9e2..be93c81a3e2 100644 --- a/addons/spreadsheet_dashboard/views/spreadsheet_dashboard_views.xml +++ b/addons/spreadsheet_dashboard/views/spreadsheet_dashboard_views.xml @@ -53,7 +53,7 @@ - + diff --git a/addons/spreadsheet_dashboard_account/data/dashboards.xml b/addons/spreadsheet_dashboard_account/data/dashboards.xml index 9857d516209..a1cd1d6d3c8 100644 --- a/addons/spreadsheet_dashboard_account/data/dashboards.xml +++ b/addons/spreadsheet_dashboard_account/data/dashboards.xml @@ -3,7 +3,7 @@ Invoicing - + 20 diff --git a/addons/spreadsheet_dashboard_event_sale/data/dashboards.xml b/addons/spreadsheet_dashboard_event_sale/data/dashboards.xml index 97f653b1082..35ed35afc4a 100644 --- a/addons/spreadsheet_dashboard_event_sale/data/dashboards.xml +++ b/addons/spreadsheet_dashboard_event_sale/data/dashboards.xml @@ -7,7 +7,7 @@ Events - + 60 diff --git a/addons/spreadsheet_dashboard_hr_expense/data/dashboards.xml b/addons/spreadsheet_dashboard_hr_expense/data/dashboards.xml index ac552511abe..1cd34c6159a 100644 --- a/addons/spreadsheet_dashboard_hr_expense/data/dashboards.xml +++ b/addons/spreadsheet_dashboard_hr_expense/data/dashboards.xml @@ -3,7 +3,7 @@ Expenses - + 40 diff --git a/addons/spreadsheet_dashboard_hr_timesheet/data/dashboards.xml b/addons/spreadsheet_dashboard_hr_timesheet/data/dashboards.xml index 2505fb2b5ae..dff86e9fd6d 100644 --- a/addons/spreadsheet_dashboard_hr_timesheet/data/dashboards.xml +++ b/addons/spreadsheet_dashboard_hr_timesheet/data/dashboards.xml @@ -3,7 +3,7 @@ Tasks - + 100 diff --git a/addons/spreadsheet_dashboard_im_livechat/data/dashboards.xml b/addons/spreadsheet_dashboard_im_livechat/data/dashboards.xml index a15c8d7b59e..4ca50d716da 100644 --- a/addons/spreadsheet_dashboard_im_livechat/data/dashboards.xml +++ b/addons/spreadsheet_dashboard_im_livechat/data/dashboards.xml @@ -3,7 +3,7 @@ Live chat - + 100 diff --git a/addons/spreadsheet_dashboard_pos_hr/data/dashboards.xml b/addons/spreadsheet_dashboard_pos_hr/data/dashboards.xml index d3967891e30..121c487175f 100644 --- a/addons/spreadsheet_dashboard_pos_hr/data/dashboards.xml +++ b/addons/spreadsheet_dashboard_pos_hr/data/dashboards.xml @@ -3,7 +3,7 @@ Point of Sale - + 300 diff --git a/addons/spreadsheet_dashboard_purchase/data/dashboards.xml b/addons/spreadsheet_dashboard_purchase/data/dashboards.xml index 78b4eaaaebb..29b4a39a53b 100644 --- a/addons/spreadsheet_dashboard_purchase/data/dashboards.xml +++ b/addons/spreadsheet_dashboard_purchase/data/dashboards.xml @@ -3,7 +3,7 @@ Vendors - + 200 diff --git a/addons/spreadsheet_dashboard_purchase_stock/data/dashboards.xml b/addons/spreadsheet_dashboard_purchase_stock/data/dashboards.xml index ac95a88c9dc..68a027be404 100644 --- a/addons/spreadsheet_dashboard_purchase_stock/data/dashboards.xml +++ b/addons/spreadsheet_dashboard_purchase_stock/data/dashboards.xml @@ -3,7 +3,7 @@ Purchase - + 100 diff --git a/addons/spreadsheet_dashboard_sale/data/dashboards.xml b/addons/spreadsheet_dashboard_sale/data/dashboards.xml index c72461fbd53..fe8abc3f25f 100644 --- a/addons/spreadsheet_dashboard_sale/data/dashboards.xml +++ b/addons/spreadsheet_dashboard_sale/data/dashboards.xml @@ -3,7 +3,7 @@ Sales - + 100 @@ -11,7 +11,7 @@ Product - + 200 diff --git a/addons/spreadsheet_dashboard_sale_timesheet/data/dashboards.xml b/addons/spreadsheet_dashboard_sale_timesheet/data/dashboards.xml index abcf10f2bea..6474fb822c8 100644 --- a/addons/spreadsheet_dashboard_sale_timesheet/data/dashboards.xml +++ b/addons/spreadsheet_dashboard_sale_timesheet/data/dashboards.xml @@ -3,7 +3,7 @@ Timesheets - + 200 diff --git a/addons/spreadsheet_dashboard_stock_account/data/dashboards.xml b/addons/spreadsheet_dashboard_stock_account/data/dashboards.xml index e499e6f8dd8..2c2a08ea86d 100644 --- a/addons/spreadsheet_dashboard_stock_account/data/dashboards.xml +++ b/addons/spreadsheet_dashboard_stock_account/data/dashboards.xml @@ -3,7 +3,7 @@ Inventory On Hand - + 300 diff --git a/addons/spreadsheet_dashboard_website_sale_slides/data/dashboards.xml b/addons/spreadsheet_dashboard_website_sale_slides/data/dashboards.xml index ed959728932..2d5a17b8fe1 100644 --- a/addons/spreadsheet_dashboard_website_sale_slides/data/dashboards.xml +++ b/addons/spreadsheet_dashboard_website_sale_slides/data/dashboards.xml @@ -3,7 +3,7 @@ eLearning - + 200