[REF] spreadsheet: spreadsheet models

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) <lul@odoo.com>
This commit is contained in:
Chenyun Yang
2023-03-30 15:09:33 +02:00
parent fa006f2bbe
commit 0a87304ff0
17 changed files with 50 additions and 31 deletions
+1
View File
@@ -2,3 +2,4 @@
from . import res_currency
from . import res_currency_rate
from . import spreadsheet_mixin
@@ -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())
@@ -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": {
@@ -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()
@@ -53,7 +53,7 @@
<group>
<field name="name"/>
<field name="dashboard_group_id"/>
<field name="data"/>
<field name="spreadsheet_binary_data"/>
<field name="thumbnail"/>
<field name="group_ids" widget="many2many_tags"/>
</group>
@@ -3,7 +3,7 @@
<record id="dashboard_invoicing" model="spreadsheet.dashboard">
<field name="name">Invoicing</field>
<field name="data" type="base64" file="spreadsheet_dashboard_account/data/files/invoicing_dashboard.json"/>
<field name="spreadsheet_binary_data" type="base64" file="spreadsheet_dashboard_account/data/files/invoicing_dashboard.json"/>
<field name="dashboard_group_id" ref="spreadsheet_dashboard.spreadsheet_dashboard_group_finance"/>
<field name="group_ids" eval="[Command.link(ref('account.group_account_readonly')), Command.link(ref('account.group_account_invoice'))]"/>
<field name="sequence">20</field>
@@ -7,7 +7,7 @@
<record id="spreadsheet_dashboard_events" model="spreadsheet.dashboard">
<field name="name">Events</field>
<field name="data" type="base64" file="spreadsheet_dashboard_event_sale/data/files/events_dashboard.json"/>
<field name="spreadsheet_binary_data" type="base64" file="spreadsheet_dashboard_event_sale/data/files/events_dashboard.json"/>
<field name="dashboard_group_id" ref="spreadsheet_dashboard_event_sale.spreadsheet_dashboard_group_marketing"/>
<field name="group_ids" eval="[Command.link(ref('event.group_event_manager'))]"/>
<field name="sequence">60</field>
@@ -3,7 +3,7 @@
<record id="spreadsheet_dashboard_expense" model="spreadsheet.dashboard">
<field name="name">Expenses</field>
<field name="data" type="base64" file="spreadsheet_dashboard_hr_expense/data/files/expense_dashboard.json"/>
<field name="spreadsheet_binary_data" type="base64" file="spreadsheet_dashboard_hr_expense/data/files/expense_dashboard.json"/>
<field name="dashboard_group_id" ref="spreadsheet_dashboard.spreadsheet_dashboard_group_finance"/>
<field name="group_ids" eval="[Command.link(ref('hr_expense.group_hr_expense_manager'))]"/>
<field name="sequence">40</field>
@@ -3,7 +3,7 @@
<record id="spreadsheet_dashboard_tasks" model="spreadsheet.dashboard">
<field name="name">Tasks</field>
<field name="data" type="base64" file="spreadsheet_dashboard_hr_timesheet/data/files/tasks_dashboard.json"/>
<field name="spreadsheet_binary_data" type="base64" file="spreadsheet_dashboard_hr_timesheet/data/files/tasks_dashboard.json"/>
<field name="dashboard_group_id" ref="spreadsheet_dashboard.spreadsheet_dashboard_group_project"/>
<field name="group_ids" eval="[Command.link(ref('hr_timesheet.group_hr_timesheet_approver'))]"/>
<field name="sequence">100</field>
@@ -3,7 +3,7 @@
<record id="spreadsheet_dashboard_livechat" model="spreadsheet.dashboard">
<field name="name">Live chat</field>
<field name="data" type="base64" file="spreadsheet_dashboard_im_livechat/data/files/livechat_dashboard.json"/>
<field name="spreadsheet_binary_data" type="base64" file="spreadsheet_dashboard_im_livechat/data/files/livechat_dashboard.json"/>
<field name="dashboard_group_id" ref="spreadsheet_dashboard.spreadsheet_dashboard_group_website"/>
<field name="group_ids" eval="[Command.link(ref('im_livechat.im_livechat_group_manager'))]"/>
<field name="sequence">100</field>
@@ -3,7 +3,7 @@
<record id="spreadsheet_dashboard_pos" model="spreadsheet.dashboard">
<field name="name">Point of Sale</field>
<field name="data" type="base64" file="spreadsheet_dashboard_pos_hr/data/files/pos_dashboard.json"/>
<field name="spreadsheet_binary_data" type="base64" file="spreadsheet_dashboard_pos_hr/data/files/pos_dashboard.json"/>
<field name="dashboard_group_id" ref="spreadsheet_dashboard.spreadsheet_dashboard_group_sales"/>
<field name="group_ids" eval="[Command.link(ref('point_of_sale.group_pos_manager'))]"/>
<field name="sequence">300</field>
@@ -3,7 +3,7 @@
<record id="spreadsheet_dashboard_vendors" model="spreadsheet.dashboard">
<field name="name">Vendors</field>
<field name="data" type="base64" file="spreadsheet_dashboard_purchase/data/files/vendors_dashboard.json"/>
<field name="spreadsheet_binary_data" type="base64" file="spreadsheet_dashboard_purchase/data/files/vendors_dashboard.json"/>
<field name="dashboard_group_id" ref="spreadsheet_dashboard.spreadsheet_dashboard_group_logistics"/>
<field name="group_ids" eval="[Command.link(ref('purchase.group_purchase_manager'))]"/>
<field name="sequence">200</field>
@@ -3,7 +3,7 @@
<record id="spreadsheet_dashboard_purchase" model="spreadsheet.dashboard">
<field name="name">Purchase</field>
<field name="data" type="base64" file="spreadsheet_dashboard_purchase_stock/data/files/purchase_dashboard.json"/>
<field name="spreadsheet_binary_data" type="base64" file="spreadsheet_dashboard_purchase_stock/data/files/purchase_dashboard.json"/>
<field name="dashboard_group_id" ref="spreadsheet_dashboard.spreadsheet_dashboard_group_logistics"/>
<field name="group_ids" eval="[Command.link(ref('stock.group_stock_manager'))]"/>
<field name="sequence">100</field>
@@ -3,7 +3,7 @@
<record id="spreadsheet_dashboard_sales" model="spreadsheet.dashboard">
<field name="name">Sales</field>
<field name="data" type="base64" file="spreadsheet_dashboard_sale/data/files/sales_dashboard.json"/>
<field name="spreadsheet_binary_data" type="base64" file="spreadsheet_dashboard_sale/data/files/sales_dashboard.json"/>
<field name="dashboard_group_id" ref="spreadsheet_dashboard.spreadsheet_dashboard_group_sales"/>
<field name="group_ids" eval="[Command.link(ref('sales_team.group_sale_manager'))]"/>
<field name="sequence">100</field>
@@ -11,7 +11,7 @@
<record id="spreadsheet_dashboard_product" model="spreadsheet.dashboard">
<field name="name">Product</field>
<field name="data" type="base64" file="spreadsheet_dashboard_sale/data/files/product_dashboard.json"/>
<field name="spreadsheet_binary_data" type="base64" file="spreadsheet_dashboard_sale/data/files/product_dashboard.json"/>
<field name="dashboard_group_id" ref="spreadsheet_dashboard.spreadsheet_dashboard_group_sales"/>
<field name="group_ids" eval="[Command.link(ref('sales_team.group_sale_manager'))]"/>
<field name="sequence">200</field>
@@ -3,7 +3,7 @@
<record id="spreadsheet_dashboard_timesheet" model="spreadsheet.dashboard">
<field name="name">Timesheets</field>
<field name="data" type="base64" file="spreadsheet_dashboard_sale_timesheet/data/files/timesheet_dashboard.json"/>
<field name="spreadsheet_binary_data" type="base64" file="spreadsheet_dashboard_sale_timesheet/data/files/timesheet_dashboard.json"/>
<field name="dashboard_group_id" ref="spreadsheet_dashboard.spreadsheet_dashboard_group_project"/>
<field name="group_ids" eval="[Command.link(ref('hr_timesheet.group_hr_timesheet_approver'))]"/>
<field name="sequence">200</field>
@@ -3,7 +3,7 @@
<record id="spreadsheet_dashboard_inventory_on_hand" model="spreadsheet.dashboard">
<field name="name">Inventory On Hand</field>
<field name="data" type="base64" file="spreadsheet_dashboard_stock_account/data/files/inventory_on_hand_dashboard.json"/>
<field name="spreadsheet_binary_data" type="base64" file="spreadsheet_dashboard_stock_account/data/files/inventory_on_hand_dashboard.json"/>
<field name="dashboard_group_id" ref="spreadsheet_dashboard.spreadsheet_dashboard_group_logistics"/>
<field name="group_ids" eval="[Command.link(ref('stock.group_stock_manager'))]"/>
<field name="sequence">300</field>
@@ -3,7 +3,7 @@
<record id="spreadsheet_dashboard_elearning" model="spreadsheet.dashboard">
<field name="name">eLearning</field>
<field name="data" type="base64" file="spreadsheet_dashboard_website_sale_slides/data/files/elearning_dashboard.json"/>
<field name="spreadsheet_binary_data" type="base64" file="spreadsheet_dashboard_website_sale_slides/data/files/elearning_dashboard.json"/>
<field name="dashboard_group_id" ref="spreadsheet_dashboard.spreadsheet_dashboard_group_website"/>
<field name="group_ids" eval="[Command.link(ref('website_slides.group_website_slides_manager'))]"/>
<field name="sequence">200</field>