diff --git a/spreadsheet_oca/README.rst b/spreadsheet_oca/README.rst new file mode 100644 index 00000000..1f61461f --- /dev/null +++ b/spreadsheet_oca/README.rst @@ -0,0 +1,151 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +=============== +Spreadsheet Oca +=============== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:1310916cafc940d7dcb638553bb2072e73f47cc887916d5c384b1cec841b4223 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fspreadsheet-lightgray.png?logo=github + :target: https://github.com/OCA/spreadsheet/tree/19.0/spreadsheet_oca + :alt: OCA/spreadsheet +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/spreadsheet-19-0/spreadsheet-19-0-spreadsheet_oca + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/spreadsheet&target_branch=19.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module adds a functionality for adding and editing Spreadsheets +using Odoo CE. + +It is an alternative to the proprietary module ``spreadsheet_edition`` +of Odoo Enterprise Edition. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +**Create a new spreadsheet** +---------------------------- + +- Go to 'Spreadsheet' menu +- Click on 'Create' +- Put a name, then click on the "Edit" button + +|image1| + +- At this point you switch to spreadsheet editing mode. The editor is + named ``o-spreadsheet`` and looks like another common spreadsheet web + editors. (OnlyOffice, Ethercalc, Google Sheets (non-free)). + +|image2| + +- You can use common functions ``SUM()``, ``AVERAGE()``, etc. in the + cells. For a complete list of functions and their syntax, Refer to the + documentation https://github.com/odoo/o-spreadsheet/ or go to + https://odoo.github.io/o-spreadsheet/ and click on "Insert > + Function". + +|image3| + +- Note: Business Odoo module can add "business functions". This is + currently the case for the accounting module, which adds the following + features: + + - ``ODOO.CREDIT(account_codes, date_range)``: Get the total credit + for the specified account(s) and period. + - ``ODOO.DEBIT(account_codes, date_range)``: Get the total debit + for the specified account(s) and period. + - ``ODOO.BALANCE(account_codes, date_range)``: Get the total + balance for the specified account(s) and period. + - ``ODOO.FISCALYEAR.START(day)``: Returns the starting date of the + fiscal year encompassing the provided date. + - ``ODOO.FISCALYEAR.END(day)``: Returns the ending date of the + fiscal year encompassing the provided date. + - ``ODOO.ACCOUNT.GROUP(type)``: Returns the account ids of a given + group where type should be a value of the ``account_type`` field + of ``account.account`` model. (``income``, ``asset_receivable``, + etc.) + +.. |image1| image:: https://raw.githubusercontent.com/OCA/spreadsheet/19.0/spreadsheet_oca/static/description/spreadsheet_create.png +.. |image2| image:: https://raw.githubusercontent.com/OCA/spreadsheet/19.0/spreadsheet_oca/static/description/spreadsheet_edit.png +.. |image3| image:: https://raw.githubusercontent.com/OCA/spreadsheet/19.0/spreadsheet_oca/static/description/o-spreadsheet.png + +Development +=========== + +If you want to develop custom business functions, you can add others, +based on the file +https://github.com/odoo/odoo/blob/16.0/addons/spreadsheet_account/static/src/accounting_functions.js + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* CreuBlanca + +Contributors +------------ + +- Enric Tobella +- `Tecnativa `__: + + - Carlos Roca + +- `Open User Systems `__: + + - Chris Mann + +- `Mind And Go `__ + + - Florent THOMAS + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/spreadsheet `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/spreadsheet_oca/__init__.py b/spreadsheet_oca/__init__.py new file mode 100644 index 00000000..ada0b87b --- /dev/null +++ b/spreadsheet_oca/__init__.py @@ -0,0 +1,3 @@ +from . import controllers +from . import models +from . import wizards diff --git a/spreadsheet_oca/__manifest__.py b/spreadsheet_oca/__manifest__.py new file mode 100644 index 00000000..743f5f4e --- /dev/null +++ b/spreadsheet_oca/__manifest__.py @@ -0,0 +1,51 @@ +# Copyright 2022 CreuBlanca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + "name": "Spreadsheet Oca", + "summary": """ + Allow to edit spreadsheets""", + "version": "19.0.1.0.0", + "license": "AGPL-3", + "author": "CreuBlanca,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/spreadsheet", + "depends": ["spreadsheet", "base_sparse_field", "bus"], + "data": [ + "security/security.xml", + "security/ir.model.access.csv", + "views/spreadsheet_spreadsheet.xml", + "data/spreadsheet_spreadsheet_import_mode.xml", + "wizards/spreadsheet_select_row_number.xml", + "wizards/spreadsheet_spreadsheet_import.xml", + ], + "demo": ["demo/spreadsheet_spreadsheet.xml"], + "assets": { + "web.assets_backend": [ + "spreadsheet_oca/static/src/spreadsheet_tree/spreadsheet_tree_view.esm.js", + "spreadsheet_oca/static/src/spreadsheet_tree/spreadsheet_tree_view.xml", + "spreadsheet_oca/static/src/spreadsheet/spreadsheet.scss", + "spreadsheet_oca/static/src/spreadsheet/spreadsheet_action.esm.js", + "spreadsheet_oca/static/src/spreadsheet/list_controller.esm.js", + "spreadsheet_oca/static/src/spreadsheet/list_renderer.esm.js", + "spreadsheet_oca/static/src/spreadsheet/list_controller.xml", + ], + "web.assets_backend_lazy": [ + "spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js", + "spreadsheet_oca/static/src/spreadsheet/graph_controller.esm.js", + "spreadsheet_oca/static/src/spreadsheet/pivot_controller.xml", + "spreadsheet_oca/static/src/spreadsheet/graph_controller.xml", + ], + "spreadsheet.o_spreadsheet": [ + "spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml", + "spreadsheet_oca/static/src/spreadsheet/bundle/image_file_store.esm.js", + "spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js", + "spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js", + "spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet_renderer.esm.js", + "spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet_controlpanel.esm.js", + "spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet_action.esm.js", + "spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js", + "spreadsheet_oca/static/src/spreadsheet/bundle/chart_panels.esm.js", + "spreadsheet_oca/static/src/spreadsheet/bundle/chart_panel.esm.js", + ], + }, +} diff --git a/spreadsheet_oca/controllers/__init__.py b/spreadsheet_oca/controllers/__init__.py new file mode 100644 index 00000000..12a7e529 --- /dev/null +++ b/spreadsheet_oca/controllers/__init__.py @@ -0,0 +1 @@ +from . import main diff --git a/spreadsheet_oca/controllers/main.py b/spreadsheet_oca/controllers/main.py new file mode 100644 index 00000000..dcc35bc7 --- /dev/null +++ b/spreadsheet_oca/controllers/main.py @@ -0,0 +1,23 @@ +# Copyright 2024 Tecnativa - Carlos Roca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +import json + +from odoo.http import Controller, content_disposition, request, route + + +class SpreadsheetDownloadXLSX(Controller): + @route("/spreadsheet/xlsx", type="http", auth="user", methods=["POST"]) + def download_spreadsheet_xlsx(self, zip_name, files, **kw): + if hasattr(files, "read"): + files = files.read().decode("utf-8") + files = json.loads(files) + file_content = request.env["spreadsheet.mixin"]._zip_xslx_files(files) + return request.make_response( + file_content, + [ + ("Content-Length", len(file_content)), + ("Content-Type", "application/vnd.ms-excel"), + ("X-Content-Type-Options", "nosniff"), + ("Content-Disposition", content_disposition(zip_name)), + ], + ) diff --git a/spreadsheet_oca/data/spreadsheet_spreadsheet_import_mode.xml b/spreadsheet_oca/data/spreadsheet_spreadsheet_import_mode.xml new file mode 100644 index 00000000..dfd94e1c --- /dev/null +++ b/spreadsheet_oca/data/spreadsheet_spreadsheet_import_mode.xml @@ -0,0 +1,21 @@ + + + + new + Create spreadsheet + + + + + add + Add to spreadsheet + + + + diff --git a/spreadsheet_oca/demo/demo_spreadsheet.json b/spreadsheet_oca/demo/demo_spreadsheet.json new file mode 100644 index 00000000..79a0811d --- /dev/null +++ b/spreadsheet_oca/demo/demo_spreadsheet.json @@ -0,0 +1,54 @@ +{ + "version": 12.5, + "sheets": [ + { + "id": "Sheet1", + "name": "Demo Sheet 1", + "colNumber": 26, + "rowNumber": 100, + "rows": {}, + "cols": {}, + "merges": [], + "cells": { + "A1": {"style": 1, "content": "First Value", "border": 1}, + "A2": {"format": 1, "content": "30.55", "border": 1}, + "B1": {"style": 1, "content": "Second Value", "border": 1}, + "B2": {"format": 1, "content": "50", "border": 1}, + "C1": {"style": 1, "content": "Total", "border": 1}, + "C2": {"format": 1, "content": "=sum(A2:B2)", "border": 1}, + "A3": {"border": 2}, + "B3": {"border": 2}, + "C3": {"border": 2}, + "D1": {"border": 3}, + "D2": {"border": 3} + }, + "conditionalFormats": [], + "figures": [], + "filterTables": [], + "areGridLinesVisible": true, + "isVisible": true + } + ], + "entities": {}, + "styles": {"1": {"bold": true, "align": "center"}}, + "formats": {"1": "[$$]#,##0.00"}, + "borders": { + "1": { + "top": ["thin", "#000"], + "bottom": ["thin", "#000"], + "left": ["thin", "#000"], + "right": ["thin", "#000"] + }, + "2": {"top": ["thin", "#000"]}, + "3": {"left": ["thin", "#000"]} + }, + "revisionId": "START_REVISION", + "uniqueFigureIds": true, + "odooVersion": 5, + "globalFilters": [], + "pivots": {}, + "pivotNextId": 1, + "lists": {}, + "listNextId": 1, + "chartOdooMenusReferences": {} +} diff --git a/spreadsheet_oca/demo/spreadsheet_spreadsheet.xml b/spreadsheet_oca/demo/spreadsheet_spreadsheet.xml new file mode 100644 index 00000000..11222ed5 --- /dev/null +++ b/spreadsheet_oca/demo/spreadsheet_spreadsheet.xml @@ -0,0 +1,11 @@ + + + + Demo spreadsheet + + + diff --git a/spreadsheet_oca/i18n/es.po b/spreadsheet_oca/i18n/es.po new file mode 100644 index 00000000..201907f8 --- /dev/null +++ b/spreadsheet_oca/i18n/es.po @@ -0,0 +1,1051 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * spreadsheet_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-09-03 11:51+0000\n" +"PO-Revision-Date: 2026-04-17 16:45+0000\n" +"Last-Translator: alexmorel-tecnativa \n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.15.2\n" + +#. module: spreadsheet_oca +#: model:ir.model.constraint,message:spreadsheet_oca.constraint_spreadsheet_spreadsheet_tag_name_uniq +msgid "A tag with the same name already exists." +msgstr "Ya existe una etiqueta con el mismo nombre." + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction +msgid "Action Needed" +msgstr "Acción requerida" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__active +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__active +msgid "Active" +msgstr "Activo" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_ids +msgid "Activities" +msgstr "Actividades" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "Decoración de excepción de actividad" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_state +msgid "Activity State" +msgstr "Estado de la actividad" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_type_icon +msgid "Activity Type Icon" +msgstr "Icono del tipo de actividad" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Add date" +msgstr "Añadir fecha" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Add relation" +msgstr "Añadir relación" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Add text" +msgstr "Añadir texto" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/list_controller.xml:0 +msgid "Add to spreadesheet" +msgstr "Añadir a hoja de cálculo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/graph_controller.xml:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/list_controller.xml:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.xml:0 +#: model:spreadsheet.spreadsheet.import.mode,name:spreadsheet_oca.spreadsheet_import_mode_add +msgid "Add to spreadsheet" +msgstr "Añadir a hoja de cálculo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "After next" +msgstr "Después del siguiente" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_search_view +msgid "Archived" +msgstr "Archivado" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Are you sure you want to delete this list?" +msgstr "Está seguro de que desea eliminar esta lista?" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Area" +msgstr "Área" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_attachment_count +msgid "Attachment Count" +msgstr "Número de adjuntos" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Automatically filter on the current period" +msgstr "Filtrar automáticamente en el período actual" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Automatically filter on the current user" +msgstr "Filtrar automáticamente por el usuario actual" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__badge_image +msgid "Badge Background" +msgstr "Fondo de la insignia" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Before Previous" +msgstr "Antes del anterior" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__can_be_dynamic +msgid "Can Be Dynamic" +msgstr "Puede ser dinámico" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_import_form_view +msgid "Cancel" +msgstr "Cancelar" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Change name" +msgstr "Cambiar nombre" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__client_id +msgid "Client" +msgstr "Cliente" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__mode +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__code +msgid "Code" +msgstr "Código" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__color +msgid "Color" +msgstr "Color" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Column" +msgstr "Columna" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__commands +msgid "Commands" +msgstr "Comandos" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__company_id +msgid "Company" +msgstr "Compañía" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js:0 +msgid "Comparisons in pivot are not supported" +msgstr "Las comparaciones en Pivot no están soportadas" + +#. module: spreadsheet_oca +#: model:ir.ui.menu,name:spreadsheet_oca.spreadsheet_spreadsheet_configuration_menu +msgid "Configuration" +msgstr "Configuración" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Context" +msgstr "Contexto" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__contributor_ids +msgid "Contributors" +msgstr "Colaboradores" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__contributor_group_ids +msgid "Contributors Groups" +msgstr "Grupos de colaboradores" + +#. module: spreadsheet_oca +#: model:spreadsheet.spreadsheet.import.mode,name:spreadsheet_oca.spreadsheet_import_mode_new +msgid "Create spreadsheet" +msgstr "Crear hoja de cálculo" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet_renderer.esm.js:0 +msgid "Currency" +msgstr "Moneda" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__datasource_name +msgid "Datasource Name" +msgstr "Nombre de datos" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Default value" +msgstr "Valor por defecto" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +msgid "Delete" +msgstr "Eliminar" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__display_name +msgid "Display Name" +msgstr "Nombre a mostrar" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Domain" +msgstr "Dominio" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Download XLSX" +msgstr "Descargar XLSX" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js:0 +msgid "Duplicated groupbys in pivot are not supported" +msgstr "Los agrupamientos duplicados en Pivot no son compatibles" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__dynamic_rows +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__dynamic +msgid "Dynamic Rows" +msgstr "Filas Dinámicas" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_tree_view +msgid "Edit" +msgstr "Editar" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Edit domain" +msgstr "Editar dominio" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "File" +msgstr "Archivo" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__filename +msgid "Filename" +msgstr "Nombre de archivo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Filters" +msgstr "Filtros" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_follower_ids +msgid "Followers" +msgstr "Seguidores" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_partner_ids +msgid "Followers (Partners)" +msgstr "Seguidores (Contactos)" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "Icono de Font Awesome, por ejemplo “fa-tasks”" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "From / To" +msgstr "De / A" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__group_ids +msgid "Group" +msgstr "Agrupado por" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__has_message +msgid "Has Message" +msgstr "Tiene mensaje" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__id +msgid "ID" +msgstr "ID" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_icon +msgid "Icon" +msgstr "Icono" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "Icono para indicar una actividad con excepción." + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction +msgid "If checked, new messages require your attention." +msgstr "Si está marcado, los nuevos mensajes requieren su atención." + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "Si está marcado, algunos mensajes presentan un error de entrega." + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__company_id +msgid "" +"If set, the spreadsheet will be available only if this company is in the " +"current companies." +msgstr "" +"Si se establece, la hoja de cálculo solo estará disponible si esta compañía " +"está entre las compañías actuales." + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__import_data +msgid "Import Data" +msgstr "Importar datos" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet_import_mode +msgid "Import Mode" +msgstr "Modo de importación" + +#. module: spreadsheet_oca +#: model:ir.actions.act_window,name:spreadsheet_oca.spreadsheet_spreadsheet_import_act_window +msgid "Import Pivot" +msgstr "Importar Pivot" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet_import +msgid "Import data to spreadsheet" +msgstr "Importar datos a hoja de cálculo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Include children" +msgstr "Incluir hijos" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Insert list" +msgstr "Insertar lista" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_is_follower +msgid "Is Follower" +msgstr "Es seguidor" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__is_tree +msgid "Is Tree" +msgstr "Es árbol" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Label" +msgstr "Etiqueta" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__write_uid +msgid "Last Updated by" +msgstr "Última modificación por" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Last updated at" +msgstr "Última actualización el" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Line" +msgstr "Línea" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Link to Odoo menu" +msgstr "Enlazar al menú de Odoo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "List name" +msgstr "Lista de nombres" + +#. module: spreadsheet_oca +#: model:res.groups,name:spreadsheet_oca.group_manager +msgid "Manager" +msgstr "Administrador" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/chart_panels.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Menu Items" +msgstr "Elementos del menú" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error +msgid "Message Delivery error" +msgstr "Error en la entrega del mensaje" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_ids +msgid "Messages" +msgstr "Mensajes" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__mode_id +msgid "Mode" +msgstr "Modo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__model +msgid "Model" +msgstr "Modelo" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_ir_model +msgid "Models" +msgstr "Modelos" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Month" +msgstr "Mes" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Month / Quarter" +msgstr "Mes / Trimestre" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "Fecha límite de mi actividad" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_search_view +msgid "My Sheets" +msgstr "Mis hojas" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__name +msgid "Name" +msgstr "Nombre" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Next" +msgstr "Siguiente" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "Fecha límite de la siguiente actividad" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_summary +msgid "Next Activity Summary" +msgstr "Fecha límite de la siguiente actividad" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_type_id +msgid "Next Activity Type" +msgstr "Tipo de la siguiente actividad" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__next_revision_id +msgid "Next Revision" +msgstr "Siguiente revisión" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__number_of_rows +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__number_of_rows +msgid "Number Of Rows" +msgstr "Número de filas" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction_counter +msgid "Number of Actions" +msgstr "Número de acciones" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error_counter +msgid "Number of errors" +msgstr "Número de errores" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "Número de mensajes que requieren acción" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "Número de mensajes con error en la entrega" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_import_form_view +msgid "OK" +msgstr "Vale" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__owner_id +msgid "Owner" +msgstr "Propietario" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Ownership" +msgstr "Propiedad" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Pie" +msgstr "Circular" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Possible values" +msgstr "Valores posibles" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Previous" +msgstr "Anterior" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Quarter" +msgstr "Trimestre" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Re-insert Dynamic" +msgstr "Reinsertar dinámico" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Re-insert Static" +msgstr "Reinsertar estático" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Read Access" +msgstr "Acceso de lectura" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__reader_ids +msgid "Readers" +msgstr "Lectores" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__reader_group_ids +msgid "Readers Groups" +msgstr "Grupos con acceso de lectura" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Refresh all data" +msgstr "Actualizar todos los datos" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Related model" +msgstr "Modelo relacionado" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Relative Period" +msgstr "Periodo relativo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Remove" +msgstr "Eliminar" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__res_id +msgid "Res" +msgstr "Res" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_user_id +msgid "Responsible User" +msgstr "Usuario responsable" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Restrict values with a domain" +msgstr "Restringir los valores mediante un dominio" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Rows:" +msgstr "Filas:" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Save" +msgstr "Guardar" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/chart_panels.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Select a menu..." +msgstr "Seleccione un menú..." + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_select_row_number +msgid "Select number of rows to duplicate row" +msgstr "Seleccione el número de filas a duplicar" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__sequence +msgid "Sequence" +msgstr "Secuencia" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__server_revision_id +msgid "Server Revision" +msgstr "Revisión del servidor" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Settings" +msgstr "Ajustes" + +#. module: spreadsheet_oca +#. odoo-python +#: code:addons/spreadsheet_oca/models/spreadsheet_abstract.py:0 +msgid "Sheet1" +msgstr "Hoja1" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Sorting" +msgstr "Ordenando" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__spreadsheet_id +#: model:ir.module.category,name:spreadsheet_oca.module_category_spreedsheet +msgid "Spreadsheet" +msgstr "Hoja de cálculo" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_oca_revision +msgid "Spreadsheet Oca Revision" +msgstr "Revisión de hoja de cálculo OCA" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__spreadsheet_raw +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_raw +msgid "Spreadsheet Raw" +msgstr "Hoja de cálculo Raw" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__spreadsheet_revision_ids +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_revision_ids +msgid "Spreadsheet Revision" +msgstr "Revisión de hoja de cálculo" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet_tag +msgid "Spreadsheet Tag" +msgstr "Etiqueta Hoja de Cálculo" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_abstract +msgid "Spreadsheet abstract for inheritance" +msgstr "Hoja de cálculo abstracta para herencia" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__spreadsheet_binary_data +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_binary_data +msgid "Spreadsheet file" +msgstr "Archivo de hoja de cálculo" + +#. module: spreadsheet_oca +#: model:ir.actions.act_window,name:spreadsheet_oca.spreadsheet_spreadsheet_act_window +#: model:ir.ui.menu,name:spreadsheet_oca.spreadsheet_spreadsheet_menu +msgid "Spreadsheets" +msgstr "Hojas de cálculo" + +#. module: spreadsheet_oca +#: model:ir.actions.act_window,name:spreadsheet_oca.spreadsheet_spreadsheet_tags_act_window +#: model:ir.ui.menu,name:spreadsheet_oca.spreadsheet_spreadsheet_tag_menu +msgid "Spreadsheets Tags" +msgstr "Etiquetas Hojas de Cálculo" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +msgid "Spreasheet Image" +msgstr "Imagen Hoja de Cálculo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Stacked" +msgstr "Apilados" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Stacked Area" +msgstr "Área apilada" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Stacked Column" +msgstr "Columna apilada" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Stacked Line" +msgstr "Línea apilada" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" +"Estado basado en actividades\n" +"Vencido: La fecha límite ya ha pasado\n" +"Hoy: La fecha de actividad es hoy\n" +"Planificado: Actividades futuras." + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_tag_ids +msgid "Tags" +msgstr "Etiquetas" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet_import__dynamic +msgid "" +"This field allows you to generate tables that its rows are updated with the " +"filters set in the spreadsheets." +msgstr "" +"Este campo permite generar tablas en las que se actualizan sus filas con los " +"filtros establecidos en las hojas de cálculo." + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Time range" +msgstr "Intervalo de tiempo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Toggle Dropdown" +msgstr "Alternar menú desplegable" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Total rows used when inserting list" +msgstr "Total de filas usadas al insertar lista" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__color +msgid "Transparent tags are not visible in the kanban view" +msgstr "Las etiquetas transparentes no son visibles en la vista kanban" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__type +msgid "Type" +msgstr "Tipo" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "Tipo de la actividad de excepción en el registro." + +#. module: spreadsheet_oca +#. odoo-python +#: code:addons/spreadsheet_oca/models/spreadsheet_spreadsheet.py:0 +msgid "Unnamed" +msgstr "Sin nombre" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet_tree/spreadsheet_tree_view.xml:0 +msgid "Upload" +msgstr "Cargar" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet_tree/spreadsheet_tree_view.esm.js:0 +msgid "Upload a Spreadsheet" +msgstr "Cargar una hoja de cálculo" + +#. module: spreadsheet_oca +#: model:res.groups,name:spreadsheet_oca.group_user +msgid "User" +msgstr "Usuario" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__website_message_ids +msgid "Website Messages" +msgstr "Mensajes del sitio web" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__website_message_ids +msgid "Website communication history" +msgstr "Historial de comunicación del sitio web" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Write Access" +msgstr "Acceso de escritura" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Year" +msgstr "Año" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "ascending" +msgstr "ascendiendo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "descending" +msgstr "descendiendo" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "e.g. Sales KPI" +msgstr "p.ej. KPI de ventas" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "name is required" +msgstr "el nombre es requerido" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "not updated" +msgstr "no actualizado" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_ir_websocket +msgid "websocket message handling" +msgstr "gestión de mensajes websocket" + +#~ msgid "Dimensions" +#~ msgstr "Dimensiones" + +#~ msgid "Insert dynamic pivot" +#~ msgstr "Insertar pivot dinámica" + +#~ msgid "Insert pivot" +#~ msgstr "Insertar pivot" + +#~ msgid "Measures" +#~ msgstr "Medidas" + +#~ msgid "Pivot name" +#~ msgstr "Nombre de pivot" + +#~ msgid "Add sheet to spreadsheet" +#~ msgstr "Añadir hoja a la hoja de cálculo" + +#, python-format +#~ msgid "Comparisons in pivot are not supprted" +#~ msgstr "Las comparaciones en la vista pivot no están soportadas" + +#, python-format +#~ msgid "Confirm" +#~ msgstr "Confirmar" + +#, python-format +#~ msgid "Duplicated groupbys in pivot are not supprted" +#~ msgstr "Las agrupaciones duplicadas en la vista pivot no están soportadas" + +#~ msgid "Dynamic Cols" +#~ msgstr "Columnas Dinámicas" + +#~ msgid "Dynamic Columns" +#~ msgstr "Columnas Dinámicas" + +#~ msgid "Number Of Cols" +#~ msgstr "Número de columnas" + +#~ msgid "Number of Columns" +#~ msgstr "Número de columnas" + +#, python-format +#~ msgid "Select the quantity of rows" +#~ msgstr "Seleccione la cantidad de filas" + +#~ msgid "" +#~ "This field allows you to generate tables that its cols are updated with " +#~ "the filters set in the spreadsheets." +#~ msgstr "" +#~ "Este campo permite generar tablas en las que se actualizan sus columnas " +#~ "con los filtros establecidos en las hojas de cálculo." + +#~ msgid "Data" +#~ msgstr "Datos" + +#~ msgid "Last Modified on" +#~ msgstr "Última modificación el" diff --git a/spreadsheet_oca/i18n/fr.po b/spreadsheet_oca/i18n/fr.po new file mode 100644 index 00000000..e0dd486b --- /dev/null +++ b/spreadsheet_oca/i18n/fr.po @@ -0,0 +1,1047 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * spreadsheet_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2026-06-10 06:35+0000\n" +"Last-Translator: Yann Papouin \n" +"Language-Team: none\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.15.2\n" + +#. module: spreadsheet_oca +#: model:ir.model.constraint,message:spreadsheet_oca.constraint_spreadsheet_spreadsheet_tag_name_uniq +msgid "A tag with the same name already exists." +msgstr "Une étiquette portant le même nom existe déjà." + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction +msgid "Action Needed" +msgstr "Nécessite une action" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__active +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__active +msgid "Active" +msgstr "Actif" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_ids +msgid "Activities" +msgstr "Activités" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "Activité exception décoration" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_state +msgid "Activity State" +msgstr "Statut de l'activité" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_type_icon +msgid "Activity Type Icon" +msgstr "Icône de type d’activité" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Add date" +msgstr "Ajouter une date" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Add relation" +msgstr "Ajouter une relation" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Add text" +msgstr "Ajouter du texte" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/list_controller.xml:0 +msgid "Add to spreadesheet" +msgstr "Ajouter au tableur" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/graph_controller.xml:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/list_controller.xml:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.xml:0 +#: model:spreadsheet.spreadsheet.import.mode,name:spreadsheet_oca.spreadsheet_import_mode_add +msgid "Add to spreadsheet" +msgstr "Ajouter au tableur" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "After next" +msgstr "Après la prochaine" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_search_view +msgid "Archived" +msgstr "Archivé" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Are you sure you want to delete this list?" +msgstr "Êtes vous sûr de vouloir supprimer cette liste ?" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Area" +msgstr "Surface" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_attachment_count +msgid "Attachment Count" +msgstr "Nombre de pièces jointes" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Automatically filter on the current period" +msgstr "Filtrer automatiquement sur la période actuelle" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Automatically filter on the current user" +msgstr "Filtrer automatiquement sur l'utilisateur actuel" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__badge_image +msgid "Badge Background" +msgstr "Arrière-plan du badge" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Before Previous" +msgstr "Avant la précédente" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__can_be_dynamic +msgid "Can Be Dynamic" +msgstr "Peut être dynamique" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_import_form_view +msgid "Cancel" +msgstr "Annuler" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Change name" +msgstr "Modifier le nom" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__client_id +msgid "Client" +msgstr "Client" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__mode +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__code +msgid "Code" +msgstr "Code" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__color +msgid "Color" +msgstr "Couleur" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Column" +msgstr "Colonne" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__commands +msgid "Commands" +msgstr "Commandes" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__company_id +msgid "Company" +msgstr "Société" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js:0 +msgid "Comparisons in pivot are not supported" +msgstr "" +"Les comparaisons dans les tableaux croisés dynamiques (pivot) ne sont pas " +"prises en charge" + +#. module: spreadsheet_oca +#: model:ir.ui.menu,name:spreadsheet_oca.spreadsheet_spreadsheet_configuration_menu +msgid "Configuration" +msgstr "Configuration" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Context" +msgstr "Contexte" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__contributor_ids +msgid "Contributors" +msgstr "Contributeur" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__contributor_group_ids +msgid "Contributors Groups" +msgstr "Groupes de contributeurs" + +#. module: spreadsheet_oca +#: model:spreadsheet.spreadsheet.import.mode,name:spreadsheet_oca.spreadsheet_import_mode_new +msgid "Create spreadsheet" +msgstr "Créer un tableur" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet_renderer.esm.js:0 +msgid "Currency" +msgstr "Devise" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__datasource_name +msgid "Datasource Name" +msgstr "Nom de la source de données" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Default value" +msgstr "Valeur par défaut" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +msgid "Delete" +msgstr "Supprimer" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__display_name +msgid "Display Name" +msgstr "Nom" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Domain" +msgstr "Domaine" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Download XLSX" +msgstr "Télécharger XLSX" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js:0 +msgid "Duplicated groupbys in pivot are not supported" +msgstr "" +"Les regroupements (group_by) en double dans les tableaux croisés dynamiques " +"(pivot) ne sont pas pris en charge" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__dynamic_rows +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__dynamic +msgid "Dynamic Rows" +msgstr "Lignes dynamiques" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_tree_view +msgid "Edit" +msgstr "Edition" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Edit domain" +msgstr "Modifier le domaine" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "File" +msgstr "Fichier" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__filename +msgid "Filename" +msgstr "Nom de fichier" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Filters" +msgstr "Filtre" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_follower_ids +msgid "Followers" +msgstr "Abonnés" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_partner_ids +msgid "Followers (Partners)" +msgstr "Abonnés (Partenaires)" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "Icône font awesome ex : fa-tasks" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "From / To" +msgstr "Depuis" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__group_ids +msgid "Group" +msgstr "Groupe" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__has_message +msgid "Has Message" +msgstr "A un message" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__id +msgid "ID" +msgstr "ID" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_icon +msgid "Icon" +msgstr "Icône" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "Icône pour indiquer une activité d'exception." + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction +msgid "If checked, new messages require your attention." +msgstr "Si coché, de nouveaux messages demandent votre attention." + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "Si actif, certains messages ont une erreur de livraison." + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__company_id +msgid "" +"If set, the spreadsheet will be available only if this company is in the " +"current companies." +msgstr "" +"Si cette option est activée, le tableur ne sera disponible que si cette " +"société figure parmi les sociétés actuelles." + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__import_data +msgid "Import Data" +msgstr "Importer des données" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet_import_mode +msgid "Import Mode" +msgstr "Mode d'import" + +#. module: spreadsheet_oca +#: model:ir.actions.act_window,name:spreadsheet_oca.spreadsheet_spreadsheet_import_act_window +msgid "Import Pivot" +msgstr "Importer un tableau croisé dynamique (pivot)" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet_import +msgid "Import data to spreadsheet" +msgstr "Importer des données au tableur" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Include children" +msgstr "Inclure les fils" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Insert list" +msgstr "Insérer une liste" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_is_follower +msgid "Is Follower" +msgstr "Est un abonné" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__is_tree +msgid "Is Tree" +msgstr "Est une liste" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Label" +msgstr "Étiquette" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__write_uid +msgid "Last Updated by" +msgstr "Dernière mise à jour par" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__write_date +msgid "Last Updated on" +msgstr "Dernière mise à jour le" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Last updated at" +msgstr "Dernière mise à jour à" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Line" +msgstr "Ligne" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Link to Odoo menu" +msgstr "Lien vers le menu Odoo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "List name" +msgstr "Nom de la liste" + +#. module: spreadsheet_oca +#: model:res.groups,name:spreadsheet_oca.group_manager +msgid "Manager" +msgstr "Gestionnaire" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/chart_panels.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Menu Items" +msgstr "Éléments de menu" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error +msgid "Message Delivery error" +msgstr "Erreur de livraison du message" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_ids +msgid "Messages" +msgstr "Messages" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__mode_id +msgid "Mode" +msgstr "Mode" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__model +msgid "Model" +msgstr "Modèle" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_ir_model +msgid "Models" +msgstr "Modèles" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Month" +msgstr "Mois" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Month / Quarter" +msgstr "Mois / Trimestre" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "Mon échéance d'activité" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_search_view +msgid "My Sheets" +msgstr "Mes feuilles" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__name +msgid "Name" +msgstr "Nom" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Next" +msgstr "Suivant" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "Échéance de la prochaine activité" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_summary +msgid "Next Activity Summary" +msgstr "Résumé de la prochaine activité" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_type_id +msgid "Next Activity Type" +msgstr "Type de la prochaine activité" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__next_revision_id +msgid "Next Revision" +msgstr "Prochaine version" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__number_of_rows +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__number_of_rows +msgid "Number Of Rows" +msgstr "Nombre de lignes" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction_counter +msgid "Number of Actions" +msgstr "Nombre d'actions" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error_counter +msgid "Number of errors" +msgstr "Nombre d'erreurs" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "Nombre de messages nécessitant une action" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "Nombre de messages avec erreur de livraison" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_import_form_view +msgid "OK" +msgstr "OK" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__owner_id +msgid "Owner" +msgstr "Propriétaire" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Ownership" +msgstr "Propriété" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Pie" +msgstr "Camembert" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Possible values" +msgstr "Valeurs possibles" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Previous" +msgstr "Précédent" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Quarter" +msgstr "Trimestre" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Re-insert Dynamic" +msgstr "Réinsérer dynamique" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Re-insert Static" +msgstr "Réinsérer statique" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Read Access" +msgstr "Accès en lecture" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__reader_ids +msgid "Readers" +msgstr "Lecteurs" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__reader_group_ids +msgid "Readers Groups" +msgstr "Groupes de lecteurs" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Refresh all data" +msgstr "Mettre à jour les données" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Related model" +msgstr "Model associé" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Relative Period" +msgstr "Période relative" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Remove" +msgstr "Supprimer" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__res_id +msgid "Res" +msgstr "Res" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_user_id +msgid "Responsible User" +msgstr "Responsable" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Restrict values with a domain" +msgstr "Limiter les valeurs à un domaine" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Rows:" +msgstr "Lignes :" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Save" +msgstr "Enregistrer" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/chart_panels.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Select a menu..." +msgstr "Sélectionnez un menu..." + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_select_row_number +msgid "Select number of rows to duplicate row" +msgstr "Sélectionnez le nombre de lignes à dupliquer" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__sequence +msgid "Sequence" +msgstr "Séquence" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__server_revision_id +msgid "Server Revision" +msgstr "Version du serveur" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Settings" +msgstr "Paramètres" + +#. module: spreadsheet_oca +#. odoo-python +#: code:addons/spreadsheet_oca/models/spreadsheet_abstract.py:0 +msgid "Sheet1" +msgstr "Feuille1" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Sorting" +msgstr "Tri" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__spreadsheet_id +#: model:ir.module.category,name:spreadsheet_oca.module_category_spreedsheet +msgid "Spreadsheet" +msgstr "Tableur" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_oca_revision +msgid "Spreadsheet Oca Revision" +msgstr "Version OCA du tableur" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__spreadsheet_raw +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_raw +msgid "Spreadsheet Raw" +msgstr "Tableur brute" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__spreadsheet_revision_ids +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_revision_ids +msgid "Spreadsheet Revision" +msgstr "Version du tableur" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet_tag +msgid "Spreadsheet Tag" +msgstr "Étiquette de tableur" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_abstract +msgid "Spreadsheet abstract for inheritance" +msgstr "Tableur abstrait pour héritage" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__spreadsheet_binary_data +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_binary_data +msgid "Spreadsheet file" +msgstr "Fichier tableur" + +#. module: spreadsheet_oca +#: model:ir.actions.act_window,name:spreadsheet_oca.spreadsheet_spreadsheet_act_window +#: model:ir.ui.menu,name:spreadsheet_oca.spreadsheet_spreadsheet_menu +msgid "Spreadsheets" +msgstr "Tableurs" + +#. module: spreadsheet_oca +#: model:ir.actions.act_window,name:spreadsheet_oca.spreadsheet_spreadsheet_tags_act_window +#: model:ir.ui.menu,name:spreadsheet_oca.spreadsheet_spreadsheet_tag_menu +msgid "Spreadsheets Tags" +msgstr "Étiquettes de tableurs" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +msgid "Spreasheet Image" +msgstr "Image du tableur" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Stacked" +msgstr "Empilé" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Stacked Area" +msgstr "Graphique en aires empilées" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Stacked Column" +msgstr "Colonne empilée" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Stacked Line" +msgstr "Ligne empilée" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" +"Statut basé sur les activités\n" +"En retard : la date d'échéance est déjà dépassée\n" +"Aujourd'hui : la date d'activité est aujourd'hui\n" +"Planifiée : activités futures." + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_tag_ids +msgid "Tags" +msgstr "Étiquettes" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet_import__dynamic +msgid "" +"This field allows you to generate tables that its rows are updated with the " +"filters set in the spreadsheets." +msgstr "" +"Ce champ vous permet de générer des tableaux dont les lignes sont mises à " +"jour avec les filtres définis dans les tableurs." + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Time range" +msgstr "Intervalle de temps" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Toggle Dropdown" +msgstr "Permuter le menu déroulant" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Total rows used when inserting list" +msgstr "Nombre total de lignes utilisées lors de l'insertion de la liste" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__color +msgid "Transparent tags are not visible in the kanban view" +msgstr "Les étiquettes transparentes ne sont pas visibles dans la vue Kanban" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__type +msgid "Type" +msgstr "Type" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "Type d'activité d'exception enregistrée." + +#. module: spreadsheet_oca +#. odoo-python +#: code:addons/spreadsheet_oca/models/spreadsheet_spreadsheet.py:0 +msgid "Unnamed" +msgstr "Sans nom" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet_tree/spreadsheet_tree_view.xml:0 +msgid "Upload" +msgstr "Téléverser" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet_tree/spreadsheet_tree_view.esm.js:0 +msgid "Upload a Spreadsheet" +msgstr "Importer une feuille de calcul" + +#. module: spreadsheet_oca +#: model:res.groups,name:spreadsheet_oca.group_user +msgid "User" +msgstr "Utilisateur" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__website_message_ids +msgid "Website Messages" +msgstr "Messages du site web" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__website_message_ids +msgid "Website communication history" +msgstr "Historique de communication du site web" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Write Access" +msgstr "Accès en écriture" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Year" +msgstr "Année" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "ascending" +msgstr "croissant" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "descending" +msgstr "décroissant" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "e.g. Sales KPI" +msgstr "ex : indicateurs clés de performance (KPI) des ventes" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "name is required" +msgstr "« nom » est requis" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "not updated" +msgstr "n'a pas été mis à jour" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_ir_websocket +msgid "websocket message handling" +msgstr "gestion des messages websocket" + +#~ msgid "Dimensions" +#~ msgstr "Dimensions" + +#~ msgid "Insert dynamic pivot" +#~ msgstr "Insérer un pivot dynamique" + +#~ msgid "Insert pivot" +#~ msgstr "Insérer un pivot" + +#~ msgid "Pivot name" +#~ msgstr "Nom du pivot" + +#~ msgid "Add sheet to spreadsheet" +#~ msgstr "Ajouter une feuille au tableur" + +#, python-format +#~ msgid "Comparisons in pivot are not supprted" +#~ msgstr "Les comparaisons dans les pivots ne sont pas supportées" + +#, python-format +#~ msgid "Confirm" +#~ msgstr "Valider" + +#~ msgid "Dynamic Cols" +#~ msgstr "Colonnes dynamiques" + +#~ msgid "Dynamic Columns" +#~ msgstr "Colonnes dynamiques" + +#~ msgid "Number Of Cols" +#~ msgstr "Nombre de colonnes" + +#~ msgid "Number of Columns" +#~ msgstr "Nombre de colonnes" + +#, python-format +#~ msgid "Select the quantity of rows" +#~ msgstr "Sélectionnez la quantité de lignes" + +#~ msgid "" +#~ "This field allows you to generate tables that its cols are updated with " +#~ "the filters set in the spreadsheets." +#~ msgstr "" +#~ "Ce champ vous permet de générer des tableaux dont les colonnes sont mises " +#~ "à jour avec les filtres définis dans les feuilles de calcul." + +#~ msgid "Data" +#~ msgstr "Données" + +#~ msgid "Last Modified on" +#~ msgstr "Dernière modification le" diff --git a/spreadsheet_oca/i18n/fr_FR.po b/spreadsheet_oca/i18n/fr_FR.po new file mode 100644 index 00000000..9db7709b --- /dev/null +++ b/spreadsheet_oca/i18n/fr_FR.po @@ -0,0 +1,981 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * spreadsheet_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: fr_FR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" + +#. module: spreadsheet_oca +#: model:ir.model.constraint,message:spreadsheet_oca.constraint_spreadsheet_spreadsheet_tag_name_uniq +msgid "A tag with the same name already exists." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__active +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__active +msgid "Active" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_ids +msgid "Activities" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_state +msgid "Activity State" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_type_icon +msgid "Activity Type Icon" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Add date" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Add relation" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Add text" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/list_controller.xml:0 +msgid "Add to spreadesheet" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/graph_controller.xml:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/list_controller.xml:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.xml:0 +#: model:spreadsheet.spreadsheet.import.mode,name:spreadsheet_oca.spreadsheet_import_mode_add +msgid "Add to spreadsheet" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "After next" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_search_view +msgid "Archived" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Are you sure you want to delete this list?" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Area" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Automatically filter on the current period" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Automatically filter on the current user" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__badge_image +msgid "Badge Background" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Before Previous" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__can_be_dynamic +msgid "Can Be Dynamic" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_import_form_view +msgid "Cancel" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Change name" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__client_id +msgid "Client" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__mode +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__code +msgid "Code" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__color +msgid "Color" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Column" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__commands +msgid "Commands" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__company_id +msgid "Company" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js:0 +msgid "Comparisons in pivot are not supported" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.ui.menu,name:spreadsheet_oca.spreadsheet_spreadsheet_configuration_menu +msgid "Configuration" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Context" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__contributor_ids +msgid "Contributors" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__contributor_group_ids +msgid "Contributors Groups" +msgstr "" + +#. module: spreadsheet_oca +#: model:spreadsheet.spreadsheet.import.mode,name:spreadsheet_oca.spreadsheet_import_mode_new +msgid "Create spreadsheet" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__create_uid +msgid "Created by" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__create_date +msgid "Created on" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet_renderer.esm.js:0 +msgid "Currency" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__datasource_name +msgid "Datasource Name" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Default value" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +msgid "Delete" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__display_name +msgid "Display Name" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Domain" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Download XLSX" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js:0 +msgid "Duplicated groupbys in pivot are not supported" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__dynamic_rows +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__dynamic +msgid "Dynamic Rows" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_tree_view +msgid "Edit" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Edit domain" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "File" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__filename +msgid "Filename" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Filters" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "From / To" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__group_ids +msgid "Group" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__has_message +msgid "Has Message" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__id +msgid "ID" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_icon +msgid "Icon" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__company_id +msgid "" +"If set, the spreadsheet will be available only if this company is in the " +"current companies." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__import_data +msgid "Import Data" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet_import_mode +msgid "Import Mode" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.actions.act_window,name:spreadsheet_oca.spreadsheet_spreadsheet_import_act_window +msgid "Import Pivot" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet_import +msgid "Import data to spreadsheet" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Include children" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Insert list" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__is_tree +msgid "Is Tree" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Label" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__write_date +msgid "Last Updated on" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Last updated at" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Line" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Link to Odoo menu" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "List name" +msgstr "" + +#. module: spreadsheet_oca +#: model:res.groups,name:spreadsheet_oca.group_manager +msgid "Manager" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/chart_panels.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Menu Items" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_ids +msgid "Messages" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__mode_id +msgid "Mode" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__model +msgid "Model" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_ir_model +msgid "Models" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Month" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Month / Quarter" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_search_view +msgid "My Sheets" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__name +msgid "Name" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Next" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__next_revision_id +msgid "Next Revision" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__number_of_rows +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__number_of_rows +msgid "Number Of Rows" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_import_form_view +msgid "OK" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__owner_id +msgid "Owner" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Ownership" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Pie" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Possible values" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Previous" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Quarter" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Re-insert Dynamic" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Re-insert Static" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Read Access" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__reader_ids +msgid "Readers" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__reader_group_ids +msgid "Readers Groups" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Refresh all data" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Related model" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Relative Period" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Remove" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__res_id +msgid "Res" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_user_id +msgid "Responsible User" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Restrict values with a domain" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Rows:" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Save" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/chart_panels.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Select a menu..." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_select_row_number +msgid "Select number of rows to duplicate row" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__sequence +msgid "Sequence" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__server_revision_id +msgid "Server Revision" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Settings" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-python +#: code:addons/spreadsheet_oca/models/spreadsheet_abstract.py:0 +msgid "Sheet1" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Sorting" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__spreadsheet_id +#: model:ir.module.category,name:spreadsheet_oca.module_category_spreedsheet +msgid "Spreadsheet" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_oca_revision +msgid "Spreadsheet Oca Revision" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__spreadsheet_raw +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_raw +msgid "Spreadsheet Raw" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__spreadsheet_revision_ids +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_revision_ids +msgid "Spreadsheet Revision" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet_tag +msgid "Spreadsheet Tag" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_abstract +msgid "Spreadsheet abstract for inheritance" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__spreadsheet_binary_data +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_binary_data +msgid "Spreadsheet file" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.actions.act_window,name:spreadsheet_oca.spreadsheet_spreadsheet_act_window +#: model:ir.ui.menu,name:spreadsheet_oca.spreadsheet_spreadsheet_menu +msgid "Spreadsheets" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.actions.act_window,name:spreadsheet_oca.spreadsheet_spreadsheet_tags_act_window +#: model:ir.ui.menu,name:spreadsheet_oca.spreadsheet_spreadsheet_tag_menu +msgid "Spreadsheets Tags" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +msgid "Spreasheet Image" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Stacked" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Stacked Area" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Stacked Column" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Stacked Line" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_tag_ids +msgid "Tags" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet_import__dynamic +msgid "" +"This field allows you to generate tables that its rows are updated with the " +"filters set in the spreadsheets." +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Time range" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Toggle Dropdown" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Total rows used when inserting list" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__color +msgid "Transparent tags are not visible in the kanban view" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__type +msgid "Type" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "" + +#. module: spreadsheet_oca +#. odoo-python +#: code:addons/spreadsheet_oca/models/spreadsheet_spreadsheet.py:0 +msgid "Unnamed" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet_tree/spreadsheet_tree_view.xml:0 +msgid "Upload" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet_tree/spreadsheet_tree_view.esm.js:0 +msgid "Upload a Spreadsheet" +msgstr "" + +#. module: spreadsheet_oca +#: model:res.groups,name:spreadsheet_oca.group_user +msgid "User" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__website_message_ids +msgid "Website communication history" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Write Access" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Year" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "ascending" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "descending" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "e.g. Sales KPI" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "name is required" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "not updated" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_ir_websocket +msgid "websocket message handling" +msgstr "" diff --git a/spreadsheet_oca/i18n/it.po b/spreadsheet_oca/i18n/it.po new file mode 100644 index 00000000..b5cfa2b6 --- /dev/null +++ b/spreadsheet_oca/i18n/it.po @@ -0,0 +1,1074 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * spreadsheet_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2026-04-08 12:45+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.15.2\n" + +#. module: spreadsheet_oca +#: model:ir.model.constraint,message:spreadsheet_oca.constraint_spreadsheet_spreadsheet_tag_name_uniq +msgid "A tag with the same name already exists." +msgstr "Esiste già una etichetta con lo stesso nome." + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction +msgid "Action Needed" +msgstr "Azione richiesta" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__active +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__active +msgid "Active" +msgstr "Attivo" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_ids +msgid "Activities" +msgstr "Attività" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "Decorazione eccezione attività" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_state +msgid "Activity State" +msgstr "Stato attività" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_type_icon +msgid "Activity Type Icon" +msgstr "Icona tipo attività" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Add date" +msgstr "Aggiungi data" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Add relation" +msgstr "Aggiungi relazione" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Add text" +msgstr "Aggiungi testo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/list_controller.xml:0 +msgid "Add to spreadesheet" +msgstr "Aggiungi al foglio di calcolo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/graph_controller.xml:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/list_controller.xml:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.xml:0 +#: model:spreadsheet.spreadsheet.import.mode,name:spreadsheet_oca.spreadsheet_import_mode_add +msgid "Add to spreadsheet" +msgstr "Aggiungi al foglio di calcolo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "After next" +msgstr "Dopo il sucessivo" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_search_view +msgid "Archived" +msgstr "In archivio" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Are you sure you want to delete this list?" +msgstr "Si è sicuri di voler cancellare questo elenco?" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Area" +msgstr "Area" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_attachment_count +msgid "Attachment Count" +msgstr "Conteggio allegati" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Automatically filter on the current period" +msgstr "Filtra automaticamente sul periodo attuale" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Automatically filter on the current user" +msgstr "Filtra automaticamente sull'utente corrente" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__badge_image +msgid "Badge Background" +msgstr "Sfondo badge" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Before Previous" +msgstr "Prima del precedente" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__can_be_dynamic +msgid "Can Be Dynamic" +msgstr "Può essere dinamico" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_import_form_view +msgid "Cancel" +msgstr "Annulla" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Change name" +msgstr "Modifica nome" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__client_id +msgid "Client" +msgstr "Client" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__mode +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__code +msgid "Code" +msgstr "Codice" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__color +msgid "Color" +msgstr "Colore" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Column" +msgstr "Colonna" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__commands +msgid "Commands" +msgstr "Comandi" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__company_id +msgid "Company" +msgstr "Azienda" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js:0 +msgid "Comparisons in pivot are not supported" +msgstr "Il confronto nella pivot non è supportato" + +#. module: spreadsheet_oca +#: model:ir.ui.menu,name:spreadsheet_oca.spreadsheet_spreadsheet_configuration_menu +msgid "Configuration" +msgstr "Configurazione" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Context" +msgstr "Contesto" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__contributor_ids +msgid "Contributors" +msgstr "Contributori" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__contributor_group_ids +msgid "Contributors Groups" +msgstr "Gruppo contributori" + +#. module: spreadsheet_oca +#: model:spreadsheet.spreadsheet.import.mode,name:spreadsheet_oca.spreadsheet_import_mode_new +msgid "Create spreadsheet" +msgstr "Crea foglio di calcolo" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet_renderer.esm.js:0 +msgid "Currency" +msgstr "Valuta" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__datasource_name +msgid "Datasource Name" +msgstr "Nome origine dati" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Default value" +msgstr "Valore predefinito" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +msgid "Delete" +msgstr "Cancella" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Domain" +msgstr "Dominio" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Download XLSX" +msgstr "Scarica XLSX" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js:0 +msgid "Duplicated groupbys in pivot are not supported" +msgstr "Il raggruppamento nella pivot non è supportato" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__dynamic_rows +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__dynamic +msgid "Dynamic Rows" +msgstr "Righe dinamiche" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_tree_view +msgid "Edit" +msgstr "Modifica" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Edit domain" +msgstr "Modifica dominio" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "File" +msgstr "File" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__filename +msgid "Filename" +msgstr "Nome file" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Filters" +msgstr "Filtri" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_follower_ids +msgid "Followers" +msgstr "Seguito da" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_partner_ids +msgid "Followers (Partners)" +msgstr "Seguito da (partner)" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "Icona Font Awesome es. fa-tasks" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "From / To" +msgstr "Da / A" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__group_ids +msgid "Group" +msgstr "Gruppo" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__has_message +msgid "Has Message" +msgstr "Ha un messaggio" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__id +msgid "ID" +msgstr "ID" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_icon +msgid "Icon" +msgstr "Icona" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "Icona per indicare un'attività eccezione." + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction +msgid "If checked, new messages require your attention." +msgstr "Se selezionata, nuovi messaggi richiedono attenzione." + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "Se selezionata, alcuni messaggi hanno un errore di consegna." + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__company_id +msgid "" +"If set, the spreadsheet will be available only if this company is in the " +"current companies." +msgstr "" +"Se impostata, il foglio di lavoro sarà disponibile se l'azienda è nelle " +"aziende attuali." + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__import_data +msgid "Import Data" +msgstr "Importa dati" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet_import_mode +msgid "Import Mode" +msgstr "Modo importazione" + +#. module: spreadsheet_oca +#: model:ir.actions.act_window,name:spreadsheet_oca.spreadsheet_spreadsheet_import_act_window +msgid "Import Pivot" +msgstr "Importa pivot" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet_import +msgid "Import data to spreadsheet" +msgstr "Importa dati nel foglio di calcolo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Include children" +msgstr "Includi figli" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Insert list" +msgstr "Inserisci elenco" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_is_follower +msgid "Is Follower" +msgstr "Segue" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__is_tree +msgid "Is Tree" +msgstr "È albero" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Label" +msgstr "Etichetta" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Last updated at" +msgstr "Ultimo aggiornamento il" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Line" +msgstr "Riga" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Link to Odoo menu" +msgstr "Collegamento al menu Odoo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "List name" +msgstr "Nome elenco" + +#. module: spreadsheet_oca +#: model:res.groups,name:spreadsheet_oca.group_manager +msgid "Manager" +msgstr "Supervisore" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/chart_panels.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Menu Items" +msgstr "Menu elementi" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error +msgid "Message Delivery error" +msgstr "Errore di consegna messaggio" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_ids +msgid "Messages" +msgstr "Messaggi" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__mode_id +msgid "Mode" +msgstr "Modo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__model +msgid "Model" +msgstr "Modello" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_ir_model +msgid "Models" +msgstr "Modelli" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Month" +msgstr "Mese" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Month / Quarter" +msgstr "Mese / Trimestre" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "Scadenza mia attività" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_search_view +msgid "My Sheets" +msgstr "I miei prospetti" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__name +msgid "Name" +msgstr "Nome" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Next" +msgstr "Successiva" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "Scadenza prossima attività" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_summary +msgid "Next Activity Summary" +msgstr "Riepilogo prossima attività" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_type_id +msgid "Next Activity Type" +msgstr "Tipo prossima attività" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__next_revision_id +msgid "Next Revision" +msgstr "Revisione successiva" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__number_of_rows +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__number_of_rows +msgid "Number Of Rows" +msgstr "Numero di righe" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction_counter +msgid "Number of Actions" +msgstr "Numero di azioni" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error_counter +msgid "Number of errors" +msgstr "Numero di errori" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "Numero di messaggi che richiedono un'azione" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "Numero di messaggi con errore di consegna" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_import_form_view +msgid "OK" +msgstr "OK" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__owner_id +msgid "Owner" +msgstr "Proprietario" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Ownership" +msgstr "Proprietà" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Pie" +msgstr "Torta" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Possible values" +msgstr "Valori possibili" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Previous" +msgstr "Precedente" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Quarter" +msgstr "Trimestre" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Re-insert Dynamic" +msgstr "Reinserisci dinamico" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Re-insert Static" +msgstr "Reinserisci statico" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Read Access" +msgstr "Accesso in lettura" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__reader_ids +msgid "Readers" +msgstr "Lettori" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__reader_group_ids +msgid "Readers Groups" +msgstr "Gruppi lettori" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Refresh all data" +msgstr "Aggiorna tutti i dati" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Related model" +msgstr "Modello correlato" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Relative Period" +msgstr "Periodo relativo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Remove" +msgstr "Rimuovi" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__res_id +msgid "Res" +msgstr "Res" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_user_id +msgid "Responsible User" +msgstr "Utente responsabile" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Restrict values with a domain" +msgstr "Restrizione valori con dominio" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Rows:" +msgstr "Righe:" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Save" +msgstr "Salva" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/chart_panels.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Select a menu..." +msgstr "Selezionare un menu..." + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_select_row_number +msgid "Select number of rows to duplicate row" +msgstr "Selezionare il numero di righe per duplicare la riga" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__sequence +msgid "Sequence" +msgstr "Sequenza" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__server_revision_id +msgid "Server Revision" +msgstr "Revisione server" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Settings" +msgstr "Impostazioni" + +#. module: spreadsheet_oca +#. odoo-python +#: code:addons/spreadsheet_oca/models/spreadsheet_abstract.py:0 +msgid "Sheet1" +msgstr "Foglio1" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Sorting" +msgstr "Ordinamento" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__spreadsheet_id +#: model:ir.module.category,name:spreadsheet_oca.module_category_spreedsheet +msgid "Spreadsheet" +msgstr "Foglio di calcolo" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_oca_revision +msgid "Spreadsheet Oca Revision" +msgstr "Revisione OCA foglio di calcolo" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__spreadsheet_raw +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_raw +msgid "Spreadsheet Raw" +msgstr "Foglio di calcolo grezzo" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__spreadsheet_revision_ids +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_revision_ids +msgid "Spreadsheet Revision" +msgstr "Revisione foglio di calcolo" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet_tag +msgid "Spreadsheet Tag" +msgstr "Etichetta foglio di calcolo" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_abstract +msgid "Spreadsheet abstract for inheritance" +msgstr "Foglio di calcolo astratto per ereditarietà" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__spreadsheet_binary_data +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_binary_data +msgid "Spreadsheet file" +msgstr "File foglio di calcolo" + +#. module: spreadsheet_oca +#: model:ir.actions.act_window,name:spreadsheet_oca.spreadsheet_spreadsheet_act_window +#: model:ir.ui.menu,name:spreadsheet_oca.spreadsheet_spreadsheet_menu +msgid "Spreadsheets" +msgstr "Fogli di calcolo" + +#. module: spreadsheet_oca +#: model:ir.actions.act_window,name:spreadsheet_oca.spreadsheet_spreadsheet_tags_act_window +#: model:ir.ui.menu,name:spreadsheet_oca.spreadsheet_spreadsheet_tag_menu +msgid "Spreadsheets Tags" +msgstr "Etichette foglio di calcolo" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +msgid "Spreasheet Image" +msgstr "Immagine foglio di calcolo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Stacked" +msgstr "In coda" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Stacked Area" +msgstr "Area riempita" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Stacked Column" +msgstr "Colonna riempita" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Stacked Line" +msgstr "Riga riempita" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" +"Stato in base alle attività\n" +"Scaduto: la data richiesta è trascorsa\n" +"Oggi: la data attività è oggi\n" +"Pianificato: attività future." + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_tag_ids +msgid "Tags" +msgstr "Etichette" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet_import__dynamic +msgid "" +"This field allows you to generate tables that its rows are updated with the " +"filters set in the spreadsheets." +msgstr "" +"Questo campo consente di generare tabelle le cui righe sono aggiornate con i " +"filtri impostati nei fogli di lavoro." + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Time range" +msgstr "Intervallo orario" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Toggle Dropdown" +msgstr "Attiva menu a tendina" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Total rows used when inserting list" +msgstr "Righe usati totali nell'inserimento dell'elenco" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__color +msgid "Transparent tags are not visible in the kanban view" +msgstr "Le etichette trasparenti non sono visibili nella vista Kanban" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__type +msgid "Type" +msgstr "Tipo" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "Tipo di attività eccezione sul record." + +#. module: spreadsheet_oca +#. odoo-python +#: code:addons/spreadsheet_oca/models/spreadsheet_spreadsheet.py:0 +msgid "Unnamed" +msgstr "Senza nome" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet_tree/spreadsheet_tree_view.xml:0 +msgid "Upload" +msgstr "Carica" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet_tree/spreadsheet_tree_view.esm.js:0 +msgid "Upload a Spreadsheet" +msgstr "Carica un foglio di calcolo" + +#. module: spreadsheet_oca +#: model:res.groups,name:spreadsheet_oca.group_user +msgid "User" +msgstr "Utente" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__website_message_ids +msgid "Website Messages" +msgstr "Messaggi sito web" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__website_message_ids +msgid "Website communication history" +msgstr "Cronologia comunicazioni sito web" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Write Access" +msgstr "Accesso in scrittura" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Year" +msgstr "Anno" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "ascending" +msgstr "crescente" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "descending" +msgstr "decrescente" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "e.g. Sales KPI" +msgstr "es. KPI vendite" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "name is required" +msgstr "è richiesto il nome" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "not updated" +msgstr "non aggiornato" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_ir_websocket +msgid "websocket message handling" +msgstr "gestione messaggio websocket" + +#~ msgid "Are you sure you want to delete this pivot?" +#~ msgstr "Si è sicuri di voler cancellare questa pivot?" + +#~ msgid "Dimensions" +#~ msgstr "Dimensioni" + +#~ msgid "Insert dynamic pivot" +#~ msgstr "Inserisci pivot dinamico" + +#~ msgid "Insert pivot" +#~ msgstr "Inserisci pivot" + +#~ msgid "Measures" +#~ msgstr "Misure" + +#~ msgid "Pivot name" +#~ msgstr "Nome pivot" + +#~ msgid "Add sheet to spreadsheet" +#~ msgstr "Aggiungi scheda a foglIo di calcolo" + +#~ msgid "Can Have Dynamic Cols" +#~ msgstr "Può avere colonne dinamiche" + +#, python-format +#~ msgid "Comparisons in pivot are not supprted" +#~ msgstr "Le comparazioni nella vista pivot non sono supportate" + +#, python-format +#~ msgid "Confirm" +#~ msgstr "Conferma" + +#, python-format +#~ msgid "Duplicated groupbys in pivot are not supprted" +#~ msgstr "Nelle viste pivot Non sono supportati i raggruppamenti duplicati" + +#~ msgid "Dynamic Cols" +#~ msgstr "Colonne dinamiche" + +#~ msgid "Dynamic Columns" +#~ msgstr "Colonne dinamiche" + +#~ msgid "Number Of Cols" +#~ msgstr "Numero di colonne" + +#~ msgid "Number of Columns" +#~ msgstr "Numero di colonne" + +#, python-format +#~ msgid "Odoo Spreadsheet" +#~ msgstr "Foglio di calcolo Odoo" + +#, python-format +#~ msgid "Select the quantity of rows" +#~ msgstr "Selezionare la quantità di righe" + +#~ msgid "" +#~ "This field allows you to generate tables that its cols are updated with " +#~ "the filters set in the spreadsheets." +#~ msgstr "" +#~ "Questo campo consente di generare tabelle le cui colonne sono aggiornate " +#~ "con i filtri impostati nei fogli di lavoro." + +#~ msgid "Data" +#~ msgstr "Dati" + +#~ msgid "Last Modified on" +#~ msgstr "Ultima modifica il" + +#, python-format +#~ msgid "Upload XLSX" +#~ msgstr "Carica XLSX" + +#~ msgid "Dynamic" +#~ msgstr "Dinamico" + +#~ msgid "" +#~ "This field allows you to generate tables that are updated with the " +#~ "filters set in the spreadsheets." +#~ msgstr "" +#~ "Questo campo consente di generare tabelle che sono aggiornate con i " +#~ "filtri impostati nel foglio di lavoro." diff --git a/spreadsheet_oca/i18n/nl.po b/spreadsheet_oca/i18n/nl.po new file mode 100644 index 00000000..c87814ca --- /dev/null +++ b/spreadsheet_oca/i18n/nl.po @@ -0,0 +1,1005 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * spreadsheet_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-10-09 08:25+0000\n" +"Last-Translator: \"Jan Tapper [Onestein]\" \n" +"Language-Team: none\n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: spreadsheet_oca +#: model:ir.model.constraint,message:spreadsheet_oca.constraint_spreadsheet_spreadsheet_tag_name_uniq +msgid "A tag with the same name already exists." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__active +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__active +msgid "Active" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_ids +msgid "Activities" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_state +msgid "Activity State" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_type_icon +msgid "Activity Type Icon" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Add date" +msgstr "Datum toevoegen" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Add relation" +msgstr "Relatie toevoegen" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Add text" +msgstr "Tekst toevoegen" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/list_controller.xml:0 +msgid "Add to spreadesheet" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/graph_controller.xml:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/list_controller.xml:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.xml:0 +#: model:spreadsheet.spreadsheet.import.mode,name:spreadsheet_oca.spreadsheet_import_mode_add +msgid "Add to spreadsheet" +msgstr "Toevoegen aan spreadsheet" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "After next" +msgstr "Na volgende" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_search_view +msgid "Archived" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Are you sure you want to delete this list?" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Area" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Automatically filter on the current period" +msgstr "Automatisch filteren op de huidige periode" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Automatically filter on the current user" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__badge_image +msgid "Badge Background" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Before Previous" +msgstr "Vóór Vorige" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__can_be_dynamic +msgid "Can Be Dynamic" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_import_form_view +msgid "Cancel" +msgstr "Annuleren" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Change name" +msgstr "Verander naam" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__client_id +msgid "Client" +msgstr "Cliënt" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__mode +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__code +msgid "Code" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__color +msgid "Color" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Column" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__commands +msgid "Commands" +msgstr "Commando's" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__company_id +msgid "Company" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js:0 +msgid "Comparisons in pivot are not supported" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.ui.menu,name:spreadsheet_oca.spreadsheet_spreadsheet_configuration_menu +msgid "Configuration" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Context" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__contributor_ids +msgid "Contributors" +msgstr "Bijdragers" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__contributor_group_ids +msgid "Contributors Groups" +msgstr "" + +#. module: spreadsheet_oca +#: model:spreadsheet.spreadsheet.import.mode,name:spreadsheet_oca.spreadsheet_import_mode_new +msgid "Create spreadsheet" +msgstr "Spreadsheet maken" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__create_uid +msgid "Created by" +msgstr "Gemaakt door" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__create_date +msgid "Created on" +msgstr "Gemaakt op" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet_renderer.esm.js:0 +msgid "Currency" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__datasource_name +msgid "Datasource Name" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Default value" +msgstr "Standaardwaarde" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +msgid "Delete" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__display_name +msgid "Display Name" +msgstr "Weergavenaam" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Domain" +msgstr "Domein" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Download XLSX" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js:0 +msgid "Duplicated groupbys in pivot are not supported" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__dynamic_rows +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__dynamic +msgid "Dynamic Rows" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_tree_view +msgid "Edit" +msgstr "Bewerking" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Edit domain" +msgstr "Bewerk domein" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "File" +msgstr "Bestand" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__filename +msgid "Filename" +msgstr "Bestandsnaam" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Filters" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "From / To" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__group_ids +msgid "Group" +msgstr "Groep" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__has_message +msgid "Has Message" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__id +msgid "ID" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_icon +msgid "Icon" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__company_id +msgid "" +"If set, the spreadsheet will be available only if this company is in the " +"current companies." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__import_data +msgid "Import Data" +msgstr "Gegevens importeren" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet_import_mode +msgid "Import Mode" +msgstr "Importmodus" + +#. module: spreadsheet_oca +#: model:ir.actions.act_window,name:spreadsheet_oca.spreadsheet_spreadsheet_import_act_window +msgid "Import Pivot" +msgstr "Importeer draaipunt" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet_import +msgid "Import data to spreadsheet" +msgstr "Gegevens importeren naar spreadsheet" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Include children" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Insert list" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__is_tree +msgid "Is Tree" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Label" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__write_uid +msgid "Last Updated by" +msgstr "Laatst aangepast door" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__write_date +msgid "Last Updated on" +msgstr "Laatst bijgewerkt op" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Last updated at" +msgstr "Laatst bijgewerkt op" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Line" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Link to Odoo menu" +msgstr "Link naar het Odoo-menu" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "List name" +msgstr "Naam van lijst" + +#. module: spreadsheet_oca +#: model:res.groups,name:spreadsheet_oca.group_manager +msgid "Manager" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/chart_panels.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Menu Items" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_ids +msgid "Messages" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__mode_id +msgid "Mode" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__model +msgid "Model" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_ir_model +msgid "Models" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Month" +msgstr "Maand" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Month / Quarter" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_search_view +msgid "My Sheets" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__name +msgid "Name" +msgstr "Naam" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Next" +msgstr "Volgende" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__next_revision_id +msgid "Next Revision" +msgstr "Volgende revisie" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__number_of_rows +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__number_of_rows +msgid "Number Of Rows" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_import_form_view +msgid "OK" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__owner_id +msgid "Owner" +msgstr "Eigenaar" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Ownership" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Pie" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Possible values" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Previous" +msgstr "Vorig" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Quarter" +msgstr "Kwartaal" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Re-insert Dynamic" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Re-insert Static" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Read Access" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__reader_ids +msgid "Readers" +msgstr "Lezers" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__reader_group_ids +msgid "Readers Groups" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Refresh all data" +msgstr "Ververs alle gegevens" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Related model" +msgstr "Gerelateerd model" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Relative Period" +msgstr "Relatieve periode" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Remove" +msgstr "Verwijderen" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__res_id +msgid "Res" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_user_id +msgid "Responsible User" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Restrict values with a domain" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Rows:" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Save" +msgstr "Opslaan" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/chart_panels.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Select a menu..." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_select_row_number +msgid "Select number of rows to duplicate row" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__sequence +msgid "Sequence" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__server_revision_id +msgid "Server Revision" +msgstr "Serverversie" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Settings" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-python +#: code:addons/spreadsheet_oca/models/spreadsheet_abstract.py:0 +msgid "Sheet1" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Sorting" +msgstr "Sortering" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__spreadsheet_id +#: model:ir.module.category,name:spreadsheet_oca.module_category_spreedsheet +msgid "Spreadsheet" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_oca_revision +msgid "Spreadsheet Oca Revision" +msgstr "Spreadsheet Oca-revisie" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__spreadsheet_raw +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_raw +msgid "Spreadsheet Raw" +msgstr "Spreadsheet onbewerkt" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__spreadsheet_revision_ids +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_revision_ids +msgid "Spreadsheet Revision" +msgstr "Revisie van spreadsheets" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet_tag +msgid "Spreadsheet Tag" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_abstract +msgid "Spreadsheet abstract for inheritance" +msgstr "Spreadsheetsamenvatting voor overerving" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__spreadsheet_binary_data +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_binary_data +msgid "Spreadsheet file" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.actions.act_window,name:spreadsheet_oca.spreadsheet_spreadsheet_act_window +#: model:ir.ui.menu,name:spreadsheet_oca.spreadsheet_spreadsheet_menu +msgid "Spreadsheets" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.actions.act_window,name:spreadsheet_oca.spreadsheet_spreadsheet_tags_act_window +#: model:ir.ui.menu,name:spreadsheet_oca.spreadsheet_spreadsheet_tag_menu +msgid "Spreadsheets Tags" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +msgid "Spreasheet Image" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Stacked" +msgstr "Gestapeld" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Stacked Area" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Stacked Column" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Stacked Line" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_tag_ids +msgid "Tags" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet_import__dynamic +msgid "" +"This field allows you to generate tables that its rows are updated with the " +"filters set in the spreadsheets." +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Time range" +msgstr "Tijdsbestek" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Toggle Dropdown" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Total rows used when inserting list" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__color +msgid "Transparent tags are not visible in the kanban view" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__type +msgid "Type" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "" + +#. module: spreadsheet_oca +#. odoo-python +#: code:addons/spreadsheet_oca/models/spreadsheet_spreadsheet.py:0 +msgid "Unnamed" +msgstr "Naamloos" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet_tree/spreadsheet_tree_view.xml:0 +msgid "Upload" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet_tree/spreadsheet_tree_view.esm.js:0 +msgid "Upload a Spreadsheet" +msgstr "" + +#. module: spreadsheet_oca +#: model:res.groups,name:spreadsheet_oca.group_user +msgid "User" +msgstr "Gebruiker" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__website_message_ids +msgid "Website communication history" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Write Access" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Year" +msgstr "Jaar" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "ascending" +msgstr "oplopend" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "descending" +msgstr "aflopend" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "e.g. Sales KPI" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "name is required" +msgstr "Naam is vereist" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "not updated" +msgstr "niet geüpdate" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_ir_websocket +msgid "websocket message handling" +msgstr "afhandeling van websocket-berichten" + +#~ msgid "Dimensions" +#~ msgstr "Dimensies" + +#~ msgid "Insert pivot" +#~ msgstr "Draaipunt invoegen" + +#~ msgid "Measures" +#~ msgstr "Afmetingen" + +#~ msgid "Add sheet to spreadsheet" +#~ msgstr "Blad toevoegen aan spreadsheet" + +#, python-format +#~ msgid "Confirm" +#~ msgstr "Bevestigen" + +#~ msgid "Data" +#~ msgstr "Gegevens" + +#~ msgid "Last Modified on" +#~ msgstr "Laatst aangepast op" diff --git a/spreadsheet_oca/i18n/pt.po b/spreadsheet_oca/i18n/pt.po new file mode 100644 index 00000000..4ac81b98 --- /dev/null +++ b/spreadsheet_oca/i18n/pt.po @@ -0,0 +1,1033 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * spreadsheet_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-08-21 19:57+0000\n" +"Last-Translator: Peter Romão \n" +"Language-Team: none\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.6.2\n" + +#. module: spreadsheet_oca +#: model:ir.model.constraint,message:spreadsheet_oca.constraint_spreadsheet_spreadsheet_tag_name_uniq +msgid "A tag with the same name already exists." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__active +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__active +msgid "Active" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_ids +msgid "Activities" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_state +msgid "Activity State" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_type_icon +msgid "Activity Type Icon" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Add date" +msgstr "Adicionar data" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Add relation" +msgstr "Adicionar relação" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Add text" +msgstr "Adicionar texto" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/list_controller.xml:0 +msgid "Add to spreadesheet" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/graph_controller.xml:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/list_controller.xml:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.xml:0 +#: model:spreadsheet.spreadsheet.import.mode,name:spreadsheet_oca.spreadsheet_import_mode_add +msgid "Add to spreadsheet" +msgstr "Adicionar à folha de cálculo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "After next" +msgstr "Depois de a seguir" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_search_view +msgid "Archived" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Are you sure you want to delete this list?" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Area" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Automatically filter on the current period" +msgstr "Filtrar automaticamente no período atual" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Automatically filter on the current user" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__badge_image +msgid "Badge Background" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Before Previous" +msgstr "Antes de Anterior" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__can_be_dynamic +msgid "Can Be Dynamic" +msgstr "Pode Ser Dinâmico" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_import_form_view +msgid "Cancel" +msgstr "Cancelar" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Change name" +msgstr "Mudar Nome" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__client_id +msgid "Client" +msgstr "Cliente" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__mode +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__code +msgid "Code" +msgstr "Código" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__color +msgid "Color" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Column" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__commands +msgid "Commands" +msgstr "Comandos" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__company_id +msgid "Company" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js:0 +msgid "Comparisons in pivot are not supported" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.ui.menu,name:spreadsheet_oca.spreadsheet_spreadsheet_configuration_menu +msgid "Configuration" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Context" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__contributor_ids +msgid "Contributors" +msgstr "Contribuintes" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__contributor_group_ids +msgid "Contributors Groups" +msgstr "" + +#. module: spreadsheet_oca +#: model:spreadsheet.spreadsheet.import.mode,name:spreadsheet_oca.spreadsheet_import_mode_new +msgid "Create spreadsheet" +msgstr "Criar folha de cálculo" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__create_date +msgid "Created on" +msgstr "Criado em" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet_renderer.esm.js:0 +msgid "Currency" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__datasource_name +msgid "Datasource Name" +msgstr "Nome da Fonte de Dados" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Default value" +msgstr "Valor predefinido" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +msgid "Delete" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__display_name +msgid "Display Name" +msgstr "Nome Apresentado" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Domain" +msgstr "Domínio" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Download XLSX" +msgstr "Descarregar XLSX" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js:0 +msgid "Duplicated groupbys in pivot are not supported" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__dynamic_rows +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__dynamic +msgid "Dynamic Rows" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_tree_view +msgid "Edit" +msgstr "Editar" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Edit domain" +msgstr "Editar domínio" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "File" +msgstr "Arquivo" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__filename +msgid "Filename" +msgstr "Nome do Arquivo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Filters" +msgstr "Filtros" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "From / To" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__group_ids +msgid "Group" +msgstr "Grupo" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__has_message +msgid "Has Message" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__id +msgid "ID" +msgstr "ID" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_icon +msgid "Icon" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__company_id +msgid "" +"If set, the spreadsheet will be available only if this company is in the " +"current companies." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__import_data +msgid "Import Data" +msgstr "Importar Dados" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet_import_mode +msgid "Import Mode" +msgstr "Modo de Importação" + +#. module: spreadsheet_oca +#: model:ir.actions.act_window,name:spreadsheet_oca.spreadsheet_spreadsheet_import_act_window +msgid "Import Pivot" +msgstr "Importar Pivô" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet_import +msgid "Import data to spreadsheet" +msgstr "Importar dados para a folha de cálculo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Include children" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Insert list" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__is_tree +msgid "Is Tree" +msgstr "É Árvore" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Label" +msgstr "Rótulo" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__write_uid +msgid "Last Updated by" +msgstr "Última Modificação por" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__write_date +msgid "Last Updated on" +msgstr "Última Actualização em" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Last updated at" +msgstr "Última Modificação a" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Line" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Link to Odoo menu" +msgstr "Link para o menu Odoo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "List name" +msgstr "Nome da lista" + +#. module: spreadsheet_oca +#: model:res.groups,name:spreadsheet_oca.group_manager +msgid "Manager" +msgstr "Gestor" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/chart_panels.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Menu Items" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_ids +msgid "Messages" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__mode_id +msgid "Mode" +msgstr "Modo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__model +msgid "Model" +msgstr "Modelo" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_ir_model +msgid "Models" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Month" +msgstr "Mês" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Month / Quarter" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_search_view +msgid "My Sheets" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__name +msgid "Name" +msgstr "Nome" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Next" +msgstr "Próximo" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__next_revision_id +msgid "Next Revision" +msgstr "Próxima Revisão" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__number_of_rows +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__number_of_rows +msgid "Number Of Rows" +msgstr "Número De Linhas" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_import_form_view +msgid "OK" +msgstr "OK" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__owner_id +msgid "Owner" +msgstr "Dono" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Ownership" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Pie" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Possible values" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Previous" +msgstr "Anterior" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Quarter" +msgstr "Trimestre" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Re-insert Dynamic" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Re-insert Static" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Read Access" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__reader_ids +msgid "Readers" +msgstr "Leitores" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__reader_group_ids +msgid "Readers Groups" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Refresh all data" +msgstr "Atualizar todos os dados" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Related model" +msgstr "Modelo relacionado" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Relative Period" +msgstr "Período Relativo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Remove" +msgstr "Remover" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__res_id +msgid "Res" +msgstr "Res" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_user_id +msgid "Responsible User" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Restrict values with a domain" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Rows:" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Save" +msgstr "Guardar" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/chart_panels.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Select a menu..." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_select_row_number +msgid "Select number of rows to duplicate row" +msgstr "Selecionar o número de linhas para duplicar a linha" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__sequence +msgid "Sequence" +msgstr "Sequência" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__server_revision_id +msgid "Server Revision" +msgstr "Revisão Servidor" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Settings" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-python +#: code:addons/spreadsheet_oca/models/spreadsheet_abstract.py:0 +msgid "Sheet1" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Sorting" +msgstr "Ordenação" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__spreadsheet_id +#: model:ir.module.category,name:spreadsheet_oca.module_category_spreedsheet +msgid "Spreadsheet" +msgstr "Folha de Cálculo" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_oca_revision +msgid "Spreadsheet Oca Revision" +msgstr "Folha de Cálculo Revisão OCA" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__spreadsheet_raw +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_raw +msgid "Spreadsheet Raw" +msgstr "Folha de Cálculo Bruta" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__spreadsheet_revision_ids +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_revision_ids +msgid "Spreadsheet Revision" +msgstr "Revisão da Folha de Cálculo" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet_tag +msgid "Spreadsheet Tag" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_abstract +msgid "Spreadsheet abstract for inheritance" +msgstr "Resumo da folha de cálculo para herança" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__spreadsheet_binary_data +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_binary_data +msgid "Spreadsheet file" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.actions.act_window,name:spreadsheet_oca.spreadsheet_spreadsheet_act_window +#: model:ir.ui.menu,name:spreadsheet_oca.spreadsheet_spreadsheet_menu +msgid "Spreadsheets" +msgstr "Folhas de Cálculo" + +#. module: spreadsheet_oca +#: model:ir.actions.act_window,name:spreadsheet_oca.spreadsheet_spreadsheet_tags_act_window +#: model:ir.ui.menu,name:spreadsheet_oca.spreadsheet_spreadsheet_tag_menu +msgid "Spreadsheets Tags" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +msgid "Spreasheet Image" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Stacked" +msgstr "Empilhados" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Stacked Area" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Stacked Column" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Stacked Line" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_tag_ids +msgid "Tags" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet_import__dynamic +msgid "" +"This field allows you to generate tables that its rows are updated with the " +"filters set in the spreadsheets." +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Time range" +msgstr "Intervalo de tempo" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Toggle Dropdown" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Total rows used when inserting list" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__color +msgid "Transparent tags are not visible in the kanban view" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__type +msgid "Type" +msgstr "Tipo" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "" + +#. module: spreadsheet_oca +#. odoo-python +#: code:addons/spreadsheet_oca/models/spreadsheet_spreadsheet.py:0 +msgid "Unnamed" +msgstr "Sem Nome" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet_tree/spreadsheet_tree_view.xml:0 +msgid "Upload" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet_tree/spreadsheet_tree_view.esm.js:0 +msgid "Upload a Spreadsheet" +msgstr "" + +#. module: spreadsheet_oca +#: model:res.groups,name:spreadsheet_oca.group_user +msgid "User" +msgstr "Utilizador" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__website_message_ids +msgid "Website communication history" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Write Access" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Year" +msgstr "Ano" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "ascending" +msgstr "ascendente" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "descending" +msgstr "descendente" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "e.g. Sales KPI" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "name is required" +msgstr "nome é necessário" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "not updated" +msgstr "não atualizado" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_ir_websocket +msgid "websocket message handling" +msgstr "tratamento de mensagens websocket" + +#~ msgid "Dimensions" +#~ msgstr "Dimensões" + +#~ msgid "Insert dynamic pivot" +#~ msgstr "Inserir pivô dinâmico" + +#~ msgid "Insert pivot" +#~ msgstr "Inserir pivô" + +#~ msgid "Measures" +#~ msgstr "Medidas" + +#~ msgid "Pivot name" +#~ msgstr "Nome do pivô" + +#~ msgid "Add sheet to spreadsheet" +#~ msgstr "Adicionar folha ao painel" + +#, python-format +#~ msgid "Comparisons in pivot are not supprted" +#~ msgstr "Comparações no pivô não são suportadas" + +#, python-format +#~ msgid "Confirm" +#~ msgstr "Confirmar" + +#, python-format +#~ msgid "Duplicated groupbys in pivot are not supprted" +#~ msgstr "Agrupamentos duplicados no pivô não são suportados" + +#, python-format +#~ msgid "Select the quantity of rows" +#~ msgstr "Selecione a quantidade de linhas" + +#~ msgid "Data" +#~ msgstr "Data" + +#~ msgid "Last Modified on" +#~ msgstr "Última Modificação em" + +#~ msgid "Dynamic" +#~ msgstr "Dinâmico" + +#~ msgid "" +#~ "This field allows you to generate tables that are updated with the " +#~ "filters set in the spreadsheets." +#~ msgstr "" +#~ "Este campo permite-lhe gerar tabelas que são atualizadas com os filtros " +#~ "definidos nas folhas de cálculo." diff --git a/spreadsheet_oca/i18n/spreadsheet_oca.pot b/spreadsheet_oca/i18n/spreadsheet_oca.pot new file mode 100644 index 00000000..e5a89eaa --- /dev/null +++ b/spreadsheet_oca/i18n/spreadsheet_oca.pot @@ -0,0 +1,980 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * spreadsheet_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: spreadsheet_oca +#: model:ir.model.constraint,message:spreadsheet_oca.constraint_spreadsheet_spreadsheet_tag_name_uniq +msgid "A tag with the same name already exists." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__active +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__active +msgid "Active" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_ids +msgid "Activities" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_state +msgid "Activity State" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_type_icon +msgid "Activity Type Icon" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Add date" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Add relation" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Add text" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/list_controller.xml:0 +msgid "Add to spreadesheet" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/graph_controller.xml:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/list_controller.xml:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.xml:0 +#: model:spreadsheet.spreadsheet.import.mode,name:spreadsheet_oca.spreadsheet_import_mode_add +msgid "Add to spreadsheet" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "After next" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_search_view +msgid "Archived" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Are you sure you want to delete this list?" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Area" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Automatically filter on the current period" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Automatically filter on the current user" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__badge_image +msgid "Badge Background" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Before Previous" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__can_be_dynamic +msgid "Can Be Dynamic" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_import_form_view +msgid "Cancel" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Change name" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__client_id +msgid "Client" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__mode +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__code +msgid "Code" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__color +msgid "Color" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Column" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__commands +msgid "Commands" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__company_id +msgid "Company" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js:0 +msgid "Comparisons in pivot are not supported" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.ui.menu,name:spreadsheet_oca.spreadsheet_spreadsheet_configuration_menu +msgid "Configuration" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Context" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__contributor_ids +msgid "Contributors" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__contributor_group_ids +msgid "Contributors Groups" +msgstr "" + +#. module: spreadsheet_oca +#: model:spreadsheet.spreadsheet.import.mode,name:spreadsheet_oca.spreadsheet_import_mode_new +msgid "Create spreadsheet" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__create_uid +msgid "Created by" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__create_date +msgid "Created on" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet_renderer.esm.js:0 +msgid "Currency" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__datasource_name +msgid "Datasource Name" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Default value" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +msgid "Delete" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__display_name +msgid "Display Name" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Domain" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Download XLSX" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js:0 +msgid "Duplicated groupbys in pivot are not supported" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__dynamic_rows +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__dynamic +msgid "Dynamic Rows" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_tree_view +msgid "Edit" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Edit domain" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "File" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__filename +msgid "Filename" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Filters" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "From / To" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__group_ids +msgid "Group" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__has_message +msgid "Has Message" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__id +msgid "ID" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_icon +msgid "Icon" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__company_id +msgid "" +"If set, the spreadsheet will be available only if this company is in the " +"current companies." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__import_data +msgid "Import Data" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet_import_mode +msgid "Import Mode" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.actions.act_window,name:spreadsheet_oca.spreadsheet_spreadsheet_import_act_window +msgid "Import Pivot" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet_import +msgid "Import data to spreadsheet" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Include children" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Insert list" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__is_tree +msgid "Is Tree" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Label" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__write_date +msgid "Last Updated on" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Last updated at" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Line" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Link to Odoo menu" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "List name" +msgstr "" + +#. module: spreadsheet_oca +#: model:res.groups,name:spreadsheet_oca.group_manager +msgid "Manager" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/chart_panels.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Menu Items" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_ids +msgid "Messages" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__mode_id +msgid "Mode" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__model +msgid "Model" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_ir_model +msgid "Models" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Month" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Month / Quarter" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_search_view +msgid "My Sheets" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__name +msgid "Name" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Next" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__next_revision_id +msgid "Next Revision" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__number_of_rows +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__number_of_rows +msgid "Number Of Rows" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_import_form_view +msgid "OK" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__owner_id +msgid "Owner" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Ownership" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Pie" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Possible values" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Previous" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Quarter" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Re-insert Dynamic" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Re-insert Static" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Read Access" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__reader_ids +msgid "Readers" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__reader_group_ids +msgid "Readers Groups" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Refresh all data" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Related model" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Relative Period" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Remove" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__res_id +msgid "Res" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_user_id +msgid "Responsible User" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Restrict values with a domain" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Rows:" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Save" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/chart_panels.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Select a menu..." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_select_row_number +msgid "Select number of rows to duplicate row" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__sequence +msgid "Sequence" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__server_revision_id +msgid "Server Revision" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Settings" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-python +#: code:addons/spreadsheet_oca/models/spreadsheet_abstract.py:0 +msgid "Sheet1" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Sorting" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__spreadsheet_id +#: model:ir.module.category,name:spreadsheet_oca.module_category_spreedsheet +msgid "Spreadsheet" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_oca_revision +msgid "Spreadsheet Oca Revision" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__spreadsheet_raw +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_raw +msgid "Spreadsheet Raw" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__spreadsheet_revision_ids +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_revision_ids +msgid "Spreadsheet Revision" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet_tag +msgid "Spreadsheet Tag" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_abstract +msgid "Spreadsheet abstract for inheritance" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__spreadsheet_binary_data +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_binary_data +msgid "Spreadsheet file" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.actions.act_window,name:spreadsheet_oca.spreadsheet_spreadsheet_act_window +#: model:ir.ui.menu,name:spreadsheet_oca.spreadsheet_spreadsheet_menu +msgid "Spreadsheets" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.actions.act_window,name:spreadsheet_oca.spreadsheet_spreadsheet_tags_act_window +#: model:ir.ui.menu,name:spreadsheet_oca.spreadsheet_spreadsheet_tag_menu +msgid "Spreadsheets Tags" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +msgid "Spreasheet Image" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Stacked" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Stacked Area" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Stacked Column" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Stacked Line" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_tag_ids +msgid "Tags" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet_import__dynamic +msgid "" +"This field allows you to generate tables that its rows are updated with the " +"filters set in the spreadsheets." +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Time range" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Toggle Dropdown" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Total rows used when inserting list" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__color +msgid "Transparent tags are not visible in the kanban view" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__type +msgid "Type" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "" + +#. module: spreadsheet_oca +#. odoo-python +#: code:addons/spreadsheet_oca/models/spreadsheet_spreadsheet.py:0 +msgid "Unnamed" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet_tree/spreadsheet_tree_view.xml:0 +msgid "Upload" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet_tree/spreadsheet_tree_view.esm.js:0 +msgid "Upload a Spreadsheet" +msgstr "" + +#. module: spreadsheet_oca +#: model:res.groups,name:spreadsheet_oca.group_user +msgid "User" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__website_message_ids +msgid "Website communication history" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Write Access" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Year" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "ascending" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "descending" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "e.g. Sales KPI" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "name is required" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "not updated" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_ir_websocket +msgid "websocket message handling" +msgstr "" diff --git a/spreadsheet_oca/i18n/zh_CN.po b/spreadsheet_oca/i18n/zh_CN.po new file mode 100644 index 00000000..ed29c542 --- /dev/null +++ b/spreadsheet_oca/i18n/zh_CN.po @@ -0,0 +1,981 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * spreadsheet_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: spreadsheet_oca +#: model:ir.model.constraint,message:spreadsheet_oca.constraint_spreadsheet_spreadsheet_tag_name_uniq +msgid "A tag with the same name already exists." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__active +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__active +msgid "Active" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_ids +msgid "Activities" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_state +msgid "Activity State" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_type_icon +msgid "Activity Type Icon" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Add date" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Add relation" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Add text" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/list_controller.xml:0 +msgid "Add to spreadesheet" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/graph_controller.xml:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/list_controller.xml:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.xml:0 +#: model:spreadsheet.spreadsheet.import.mode,name:spreadsheet_oca.spreadsheet_import_mode_add +msgid "Add to spreadsheet" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "After next" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_search_view +msgid "Archived" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Are you sure you want to delete this list?" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Area" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Automatically filter on the current period" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Automatically filter on the current user" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__badge_image +msgid "Badge Background" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Before Previous" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__can_be_dynamic +msgid "Can Be Dynamic" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_import_form_view +msgid "Cancel" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Change name" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__client_id +msgid "Client" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__mode +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__code +msgid "Code" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__color +msgid "Color" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Column" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__commands +msgid "Commands" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__company_id +msgid "Company" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js:0 +msgid "Comparisons in pivot are not supported" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.ui.menu,name:spreadsheet_oca.spreadsheet_spreadsheet_configuration_menu +msgid "Configuration" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Context" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__contributor_ids +msgid "Contributors" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__contributor_group_ids +msgid "Contributors Groups" +msgstr "" + +#. module: spreadsheet_oca +#: model:spreadsheet.spreadsheet.import.mode,name:spreadsheet_oca.spreadsheet_import_mode_new +msgid "Create spreadsheet" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__create_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__create_uid +msgid "Created by" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__create_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__create_date +msgid "Created on" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet_renderer.esm.js:0 +msgid "Currency" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__datasource_name +msgid "Datasource Name" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Default value" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +msgid "Delete" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__display_name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__display_name +msgid "Display Name" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Domain" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Download XLSX" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js:0 +msgid "Duplicated groupbys in pivot are not supported" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__dynamic_rows +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__dynamic +msgid "Dynamic Rows" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_tree_view +msgid "Edit" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Edit domain" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "File" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__filename +msgid "Filename" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Filters" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "From / To" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__group_ids +msgid "Group" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__has_message +msgid "Has Message" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__id +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__id +msgid "ID" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_icon +msgid "Icon" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__company_id +msgid "" +"If set, the spreadsheet will be available only if this company is in the " +"current companies." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__import_data +msgid "Import Data" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet_import_mode +msgid "Import Mode" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.actions.act_window,name:spreadsheet_oca.spreadsheet_spreadsheet_import_act_window +msgid "Import Pivot" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet_import +msgid "Import data to spreadsheet" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Include children" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Insert list" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__is_tree +msgid "Is Tree" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Label" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__write_uid +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__write_date +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__write_date +msgid "Last Updated on" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Last updated at" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Line" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Link to Odoo menu" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "List name" +msgstr "" + +#. module: spreadsheet_oca +#: model:res.groups,name:spreadsheet_oca.group_manager +msgid "Manager" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/chart_panels.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Menu Items" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_ids +msgid "Messages" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__mode_id +msgid "Mode" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__model +msgid "Model" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_ir_model +msgid "Models" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Month" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Month / Quarter" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_search_view +msgid "My Sheets" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__name +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__name +msgid "Name" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Next" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__next_revision_id +msgid "Next Revision" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_select_row_number__number_of_rows +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__number_of_rows +msgid "Number Of Rows" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_import_form_view +msgid "OK" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__owner_id +msgid "Owner" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Ownership" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Pie" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Possible values" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Previous" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Quarter" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Re-insert Dynamic" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Re-insert Static" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Read Access" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__reader_ids +msgid "Readers" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__reader_group_ids +msgid "Readers Groups" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "Refresh all data" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Related model" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Relative Period" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Remove" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__res_id +msgid "Res" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_user_id +msgid "Responsible User" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Restrict values with a domain" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Rows:" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Save" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/chart_panels.esm.js:0 +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Select a menu..." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_select_row_number +msgid "Select number of rows to duplicate row" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import_mode__sequence +msgid "Sequence" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__server_revision_id +msgid "Server Revision" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js:0 +msgid "Settings" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-python +#: code:addons/spreadsheet_oca/models/spreadsheet_abstract.py:0 +msgid "Sheet1" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Sorting" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet_import__spreadsheet_id +#: model:ir.module.category,name:spreadsheet_oca.module_category_spreedsheet +msgid "Spreadsheet" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_oca_revision +msgid "Spreadsheet Oca Revision" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__spreadsheet_raw +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_raw +msgid "Spreadsheet Raw" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__spreadsheet_revision_ids +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_revision_ids +msgid "Spreadsheet Revision" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_spreadsheet_tag +msgid "Spreadsheet Tag" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_spreadsheet_abstract +msgid "Spreadsheet abstract for inheritance" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_abstract__spreadsheet_binary_data +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_binary_data +msgid "Spreadsheet file" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.actions.act_window,name:spreadsheet_oca.spreadsheet_spreadsheet_act_window +#: model:ir.ui.menu,name:spreadsheet_oca.spreadsheet_spreadsheet_menu +msgid "Spreadsheets" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.actions.act_window,name:spreadsheet_oca.spreadsheet_spreadsheet_tags_act_window +#: model:ir.ui.menu,name:spreadsheet_oca.spreadsheet_spreadsheet_tag_menu +msgid "Spreadsheets Tags" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_kanban_view +msgid "Spreasheet Image" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Stacked" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Stacked Area" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Stacked Column" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js:0 +msgid "Stacked Line" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__spreadsheet_tag_ids +msgid "Tags" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet_import__dynamic +msgid "" +"This field allows you to generate tables that its rows are updated with the " +"filters set in the spreadsheets." +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Time range" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Toggle Dropdown" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Total rows used when inserting list" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet_tag__color +msgid "Transparent tags are not visible in the kanban view" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_oca_revision__type +msgid "Type" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "" + +#. module: spreadsheet_oca +#. odoo-python +#: code:addons/spreadsheet_oca/models/spreadsheet_spreadsheet.py:0 +msgid "Unnamed" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet_tree/spreadsheet_tree_view.xml:0 +msgid "Upload" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet_tree/spreadsheet_tree_view.esm.js:0 +msgid "Upload a Spreadsheet" +msgstr "" + +#. module: spreadsheet_oca +#: model:res.groups,name:spreadsheet_oca.group_user +msgid "User" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,field_description:spreadsheet_oca.field_spreadsheet_spreadsheet__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model.fields,help:spreadsheet_oca.field_spreadsheet_spreadsheet__website_message_ids +msgid "Website communication history" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "Write Access" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "Year" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "ascending" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "descending" +msgstr "" + +#. module: spreadsheet_oca +#: model_terms:ir.ui.view,arch_db:spreadsheet_oca.spreadsheet_spreadsheet_form_view +msgid "e.g. Sales KPI" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml:0 +msgid "name is required" +msgstr "" + +#. module: spreadsheet_oca +#. odoo-javascript +#: code:addons/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js:0 +msgid "not updated" +msgstr "" + +#. module: spreadsheet_oca +#: model:ir.model,name:spreadsheet_oca.model_ir_websocket +msgid "websocket message handling" +msgstr "" diff --git a/spreadsheet_oca/models/__init__.py b/spreadsheet_oca/models/__init__.py new file mode 100644 index 00000000..3e07c12a --- /dev/null +++ b/spreadsheet_oca/models/__init__.py @@ -0,0 +1,7 @@ +from . import ir_model +from . import spreadsheet_abstract +from . import spreadsheet_spreadsheet_tag +from . import spreadsheet_spreadsheet +from . import spreadsheet_oca_revision +from . import ir_websocket +from . import spreadsheet_spreadsheet_import_mode diff --git a/spreadsheet_oca/models/ir_model.py b/spreadsheet_oca/models/ir_model.py new file mode 100644 index 00000000..78b452d4 --- /dev/null +++ b/spreadsheet_oca/models/ir_model.py @@ -0,0 +1,16 @@ +# Copyright 2026 Tecnativa - Carlos Roca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, models + + +class IrModel(models.Model): + _inherit = "ir.model" + + @api.model + def has_parent_relation(self, model_name): + """Return if the model has a parent relation.""" + model = self.env.get(model_name) + if model is None or not model.has_access("read"): + return False + return model._parent_name in model._fields diff --git a/spreadsheet_oca/models/ir_websocket.py b/spreadsheet_oca/models/ir_websocket.py new file mode 100644 index 00000000..005f41c5 --- /dev/null +++ b/spreadsheet_oca/models/ir_websocket.py @@ -0,0 +1,66 @@ +# Copyright 2023 CreuBlanca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +import re + +from odoo import models +from odoo.exceptions import AccessDenied + + +class IrWebsocket(models.AbstractModel): + _inherit = "ir.websocket" + + def _build_bus_channel_list(self, channels): + """ + With this change we are adding an extra layer of security. + Without it, any user was able to sniff how all happened using something like: + + const any_spreadsheet_id = 1234; + const channel = "spreadsheet_oca;spreadsheet.spreadsheet" + + ";" + any_spreadsheet_id; + bus_service.addChannel(channel); + bus_service.addEventListener( + "spreadsheet_oca", + (message) => /* every revision arrives here */ + ) + + """ + if self.env.uid: + # Do not alter original list. + channels = list(channels) + for channel in channels: + if isinstance(channel, str): + match = re.match(r"spreadsheet_oca;(\w+(?:\.\w+)*);(\d+)", channel) + if match: + model_name = match[1] + res_id = int(match[2]) + + # Verify access to the edition channel. + if not self.env.user._is_internal(): + raise AccessDenied() + + if not self.env["ir.model.access"].check( + model_name, "read", raise_exception=False + ): + continue + # If user don't have access to the model, we don't even try to + # read + + document = self.env[model_name].search( + [("id", "=", res_id)], limit=1 + ) + # We do a search in order to apply the access rules. + # We just need to ensure that the user can read it + + if not document.exists(): + continue + + channels.append( + ( + self.env.registry.db_name, + model_name, + res_id, + "spreadsheet_oca", + ) + ) + return super()._build_bus_channel_list(channels) diff --git a/spreadsheet_oca/models/spreadsheet_abstract.py b/spreadsheet_oca/models/spreadsheet_abstract.py new file mode 100644 index 00000000..245d393c --- /dev/null +++ b/spreadsheet_oca/models/spreadsheet_abstract.py @@ -0,0 +1,179 @@ +# Copyright 2022 CreuBlanca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +import base64 +import json +from typing import Any + +from odoo import api, fields, models +from odoo.exceptions import AccessError + +CollaborationMessage = dict[str, Any] + + +class SpreadsheetAbstract(models.AbstractModel): + _name = "spreadsheet.abstract" + _description = "Spreadsheet abstract for inheritance" + _inherit = ["bus.listener.mixin"] + + name = fields.Char(required=True) + active = fields.Boolean(default=True) + spreadsheet_binary_data = fields.Binary( + string="Spreadsheet file", + default=lambda self: self._empty_spreadsheet_data_base64(), + ) + spreadsheet_raw = fields.Serialized( + inverse="_inverse_spreadsheet_raw", compute="_compute_spreadsheet_raw" + ) + spreadsheet_revision_ids = fields.One2many( + "spreadsheet.oca.revision", + inverse_name="res_id", + domain=lambda r: [("model", "=", r._name)], + ) + + @api.depends("spreadsheet_binary_data") + def _compute_spreadsheet_raw(self): + for dashboard in self: + if dashboard.spreadsheet_binary_data: + dashboard.spreadsheet_raw = json.loads( + base64.decodebytes(dashboard.spreadsheet_binary_data).decode( + "UTF-8" + ) + ) + else: + dashboard.spreadsheet_raw = {} + + def _inverse_spreadsheet_raw(self): + for record in self: + record.spreadsheet_binary_data = base64.encodebytes( + json.dumps(record.spreadsheet_raw).encode("UTF-8") + ) + + def _empty_spreadsheet_data_base64(self): + """Create an empty spreadsheet workbook. + Encoded as base64 + """ + data = json.dumps(self._empty_spreadsheet_data()) + return base64.b64encode(data.encode()) + + def _empty_spreadsheet_data(self): + """Create an empty spreadsheet workbook. + The sheet name should be the same for all users to allow consistent references + in formulas. It is translated for the user creating the spreadsheet. + """ + lang = self.env["res.lang"]._lang_get(self.env.user.lang) + locale = lang._odoo_lang_to_spreadsheet_locale() + return { + "version": 1, + "sheets": [ + { + "id": "sheet1", + "name": self.env._("Sheet1"), + } + ], + "settings": { + "locale": locale, + }, + "revisionId": "START_REVISION", + } + + def get_spreadsheet_data(self): + self.ensure_one() + mode = "normal" + try: + self.check_access("write") + except AccessError: + mode = "readonly" + return { + "name": self.name, + "spreadsheet_raw": self.spreadsheet_raw, + "revisions": [ + dict( + json.loads(revision.commands), + nextRevisionId=revision.next_revision_id, + serverRevisionId=revision.server_revision_id, + ) + for revision in self.spreadsheet_revision_ids + ], + "mode": mode, + "default_currency": self.env[ + "res.currency" + ].get_company_currency_for_spreadsheet(), + "user_locale": self.env["res.lang"]._get_user_spreadsheet_locale(), + } + + def open_spreadsheet(self): + self.ensure_one() + return { + "type": "ir.actions.client", + "tag": "action_spreadsheet_oca", + "params": {"spreadsheet_id": self.id, "model": self._name}, + } + + def send_spreadsheet_message( + self, message: CollaborationMessage, access_token=None + ): + self.ensure_one() + if message["type"] in ["REVISION_UNDONE", "REMOTE_REVISION", "REVISION_REDONE"]: + self._check_access_spreadsheet("write") + self.env["spreadsheet.oca.revision"].create( + { + "model": self._name, + "res_id": self.id, + "type": message["type"], + "client_id": message.get("clientId"), + "next_revision_id": message["nextRevisionId"], + "server_revision_id": message["serverRevisionId"], + "commands": json.dumps( + self._build_spreadsheet_revision_commands_data(message) + ), + } + ) + self._bus_send( + "notification", dict(message, id=self.id), subchannel="spreadsheet_oca" + ) + return True + elif message["type"] == "SNAPSHOT": + self._check_access_spreadsheet("write") + self.env["spreadsheet.oca.revision"].create( + { + "model": self._name, + "res_id": self.id, + "type": message["type"], + "client_id": message.get("clientId"), + "next_revision_id": message["nextRevisionId"], + "server_revision_id": message["serverRevisionId"], + "commands": json.dumps( + self._build_spreadsheet_revision_commands_data(message) + ), + } + ) + return True + elif message["type"] in ["CLIENT_JOINED", "CLIENT_LEFT", "CLIENT_MOVED"]: + self._check_access_spreadsheet("read") + self._bus_send( + "notification", dict(message, id=self.id), subchannel="spreadsheet_oca" + ) + return True + return False + + def _check_access_spreadsheet(self, operation: str): + try: + self.check_access(operation) + except AccessError as e: + raise e + return True + + @api.model + def _build_spreadsheet_revision_commands_data(self, message): + """Prepare spreadsheet revision commands data from the message""" + commands = dict(message) + commands.pop("serverRevisionId", None) + commands.pop("nextRevisionId", None) + commands.pop("clientId", None) + return commands + + def write(self, vals): + if "spreadsheet_raw" in vals: + self.spreadsheet_revision_ids.unlink() + return super().write(vals) diff --git a/spreadsheet_oca/models/spreadsheet_oca_revision.py b/spreadsheet_oca/models/spreadsheet_oca_revision.py new file mode 100644 index 00000000..b445b598 --- /dev/null +++ b/spreadsheet_oca/models/spreadsheet_oca_revision.py @@ -0,0 +1,17 @@ +# Copyright 2022 CreuBlanca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class SpreadsheetOcaRevision(models.Model): + _name = "spreadsheet.oca.revision" + _description = "Spreadsheet Oca Revision" # TODO + + model = fields.Char(required=True) + res_id = fields.Integer(required=True, index=True) + type = fields.Char() + client_id = fields.Char() + server_revision_id = fields.Char() + next_revision_id = fields.Char() + commands = fields.Char() diff --git a/spreadsheet_oca/models/spreadsheet_spreadsheet.py b/spreadsheet_oca/models/spreadsheet_spreadsheet.py new file mode 100644 index 00000000..3b75803a --- /dev/null +++ b/spreadsheet_oca/models/spreadsheet_spreadsheet.py @@ -0,0 +1,96 @@ +# Copyright 2022 CreuBlanca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +import base64 +import zipfile +from io import BytesIO + +from odoo import api, fields, models + + +class SpreadsheetSpreadsheet(models.Model): + _name = "spreadsheet.spreadsheet" + _inherit = ["spreadsheet.abstract", "mail.thread", "mail.activity.mixin"] + _description = "Spreadsheet" + + filename = fields.Char(compute="_compute_filename") + badge_image = fields.Image("Badge Background", max_width=1024, max_height=1024) + owner_id = fields.Many2one( + "res.users", required=True, default=lambda r: r.env.user.id + ) + contributor_ids = fields.Many2many( + "res.users", + relation="spreadsheet_contributor", + column1="spreadsheet_id", + column2="user_id", + string="Contributors", + ) + contributor_group_ids = fields.Many2many( + "res.groups", + relation="spreadsheet_group_contributor", + column1="spreadsheet_id", + column2="group_id", + string="Contributors Groups", + ) + reader_ids = fields.Many2many( + "res.users", + relation="spreadsheet_reader", + column1="spreadsheet_id", + column2="user_id", + string="Readers", + ) + reader_group_ids = fields.Many2many( + "res.groups", + relation="spreadsheet_group_reader", + column1="spreadsheet_id", + column2="group_id", + string="Readers Groups", + ) + company_id = fields.Many2one( + comodel_name="res.company", + help="If set, the spreadsheet will be available only" + " if this company is in the current companies.", + ) + + spreadsheet_tag_ids = fields.Many2many( + string="Tags", comodel_name="spreadsheet.spreadsheet.tag" + ) + + @api.depends("name") + def _compute_filename(self): + for record in self: + record.filename = "%s.json" % (self.name or self.env._("Unnamed")) + + def create_document_from_attachment(self, attachment_ids): + attachments = self.env["ir.attachment"].browse(attachment_ids) + spreadsheets = self.env["spreadsheet.spreadsheet"] + for attachment in attachments: + extracted = {} + with zipfile.ZipFile( + BytesIO(base64.b64decode(attachment.datas)), "r" + ) as xlsx: + # List and filter for XML and REL files + xml_files = [ + f + for f in xlsx.namelist() + if f.endswith(".xml") or f.endswith(".rels") + ] + # Extract each file + for xml_file in xml_files: + # Read the XML file into memory + with xlsx.open(xml_file) as file: + extracted[xml_file] = file.read().decode("UTF8") + spreadsheets |= self.create( + { + "spreadsheet_raw": extracted, + "name": attachment.name, + } + ) + attachments.unlink() + if len(spreadsheets) == 1: + return spreadsheets.get_formview_action() + action = self.env["ir.actions.act_window"]._for_xml_id( + "spreadsheet_oca.spreadsheet_spreadsheet_act_window" + ) + action["domain"] = [("id", "in", spreadsheets.ids)] + return action diff --git a/spreadsheet_oca/models/spreadsheet_spreadsheet_import_mode.py b/spreadsheet_oca/models/spreadsheet_spreadsheet_import_mode.py new file mode 100644 index 00000000..63f19019 --- /dev/null +++ b/spreadsheet_oca/models/spreadsheet_spreadsheet_import_mode.py @@ -0,0 +1,16 @@ +# Copyright 2022 CreuBlanca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class SpreadsheetSpreadsheetImportMode(models.Model): + _name = "spreadsheet.spreadsheet.import.mode" + _description = "Import Mode" + _order = "sequence asc" + _rec_name = "name" + + sequence = fields.Integer(default=20) + name = fields.Char(required=True, translate=True) + code = fields.Char(required=True) + group_ids = fields.Many2many("res.groups") diff --git a/spreadsheet_oca/models/spreadsheet_spreadsheet_tag.py b/spreadsheet_oca/models/spreadsheet_spreadsheet_tag.py new file mode 100644 index 00000000..9be5cf64 --- /dev/null +++ b/spreadsheet_oca/models/spreadsheet_spreadsheet_tag.py @@ -0,0 +1,25 @@ +# Copyright 2022 CreuBlanca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from random import randint + +from odoo import fields, models + + +class SpreadsheetSpreadsheetTags(models.Model): + _name = "spreadsheet.spreadsheet.tag" + _description = "Spreadsheet Tag" + + def _get_default_color(self): + return randint(1, 11) + + name = fields.Char(required=True, translate=True) + color = fields.Integer( + default=lambda self: self._get_default_color(), + help="Transparent tags are not visible in the kanban view", + ) + + _name_uniq = models.Constraint( + "unique (name)", + "A tag with the same name already exists.", + ) diff --git a/spreadsheet_oca/pyproject.toml b/spreadsheet_oca/pyproject.toml new file mode 100644 index 00000000..4231d0cc --- /dev/null +++ b/spreadsheet_oca/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/spreadsheet_oca/readme/CONTRIBUTORS.md b/spreadsheet_oca/readme/CONTRIBUTORS.md new file mode 100644 index 00000000..e5a41e3d --- /dev/null +++ b/spreadsheet_oca/readme/CONTRIBUTORS.md @@ -0,0 +1,7 @@ +- Enric Tobella +- [Tecnativa](https://www.tecnativa.com): + - Carlos Roca +- [Open User Systems](https://www.openusersystems.com): + - Chris Mann +- [Mind And Go](https://mind-and-go.com) + - Florent THOMAS \ No newline at end of file diff --git a/spreadsheet_oca/readme/DESCRIPTION.md b/spreadsheet_oca/readme/DESCRIPTION.md new file mode 100644 index 00000000..afee06c5 --- /dev/null +++ b/spreadsheet_oca/readme/DESCRIPTION.md @@ -0,0 +1,5 @@ +This module adds a functionality for adding and editing Spreadsheets +using Odoo CE. + +It is an alternative to the proprietary module `spreadsheet_edition` of +Odoo Enterprise Edition. diff --git a/spreadsheet_oca/readme/DEVELOP.md b/spreadsheet_oca/readme/DEVELOP.md new file mode 100644 index 00000000..0afb4a08 --- /dev/null +++ b/spreadsheet_oca/readme/DEVELOP.md @@ -0,0 +1,3 @@ +If you want to develop custom business functions, you can add others, +based on the file + diff --git a/spreadsheet_oca/readme/USAGE.md b/spreadsheet_oca/readme/USAGE.md new file mode 100644 index 00000000..935707dc --- /dev/null +++ b/spreadsheet_oca/readme/USAGE.md @@ -0,0 +1,39 @@ +## **Create a new spreadsheet** + +- Go to 'Spreadsheet' menu +- Click on 'Create' +- Put a name, then click on the "Edit" button + +![](../static/description/spreadsheet_create.png) + +- At this point you switch to spreadsheet editing mode. The editor is + named `o-spreadsheet` and looks like another common spreadsheet web + editors. (OnlyOffice, Ethercalc, Google Sheets (non-free)). + +![](../static/description/spreadsheet_edit.png) + +- You can use common functions `SUM()`, `AVERAGE()`, etc. in the cells. + For a complete list of functions and their syntax, Refer to the + documentation or go to + and click on "Insert \> + Function". + +![](../static/description/o-spreadsheet.png) + +- Note: Business Odoo module can add "business functions". This is + currently the case for the accounting module, which adds the following + features: + + > - `ODOO.CREDIT(account_codes, date_range)`: Get the total credit for + > the specified account(s) and period. + > - `ODOO.DEBIT(account_codes, date_range)`: Get the total debit for + > the specified account(s) and period. + > - `ODOO.BALANCE(account_codes, date_range)`: Get the total balance + > for the specified account(s) and period. + > - `ODOO.FISCALYEAR.START(day)`: Returns the starting date of the + > fiscal year encompassing the provided date. + > - `ODOO.FISCALYEAR.END(day)`: Returns the ending date of the fiscal + > year encompassing the provided date. + > - `ODOO.ACCOUNT.GROUP(type)`: Returns the account ids of a given + > group where type should be a value of the `account_type` field of + > `account.account` model. (`income`, `asset_receivable`, etc.) diff --git a/spreadsheet_oca/security/ir.model.access.csv b/spreadsheet_oca/security/ir.model.access.csv new file mode 100644 index 00000000..1898b166 --- /dev/null +++ b/spreadsheet_oca/security/ir.model.access.csv @@ -0,0 +1,8 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_spreadsheet_spreadsheet,access_spreadsheet_spreadsheet,model_spreadsheet_spreadsheet,group_user,1,1,1,1 +access_spreadsheet_oca_revision,access_spreadsheet_oca_revision,model_spreadsheet_oca_revision,base.group_user,1,1,1,1 +spreadsheet_oca.access_spreadsheet_spreadsheet_import,access_spreadsheet_spreadsheet_import,spreadsheet_oca.model_spreadsheet_spreadsheet_import,base.group_user,1,1,1,1 +access_spreadsheet_import_mode,access_spreadsheet_oca_revision,model_spreadsheet_spreadsheet_import_mode,base.group_user,1,0,0,0 +access_spreadsheet_select_row_number,access_spreadsheet_select_row_number,model_spreadsheet_select_row_number,base.group_user,1,1,1,1 +access_spreadsheet_spreadsheet_tag,access_spreadsheet_spreadsheet_tag,model_spreadsheet_spreadsheet_tag,spreadsheet_oca.group_user,1,0,0,0 +access_spreadsheet_spreadsheet_manager_tag,access_spreadsheet_spreadsheet_manager_tag,model_spreadsheet_spreadsheet_tag,spreadsheet_oca.group_manager,1,1,1,1 diff --git a/spreadsheet_oca/security/security.xml b/spreadsheet_oca/security/security.xml new file mode 100644 index 00000000..b1986a12 --- /dev/null +++ b/spreadsheet_oca/security/security.xml @@ -0,0 +1,70 @@ + + + + + Spreadsheet + 99 + + + Spreadsheet + + 99 + + + User + + + + Manager + + + + + + Spreadsheet Company Rule + + [('company_id', 'in', company_ids + [False])] + + + Spreadsheet Owner + + + [('owner_id','=', user.id)] + + + Spreadsheet Contributor + + + ['|', ('contributor_ids','=', user.id), ('contributor_group_ids','in', user.all_group_ids.ids)] + + + + + Spreadsheet Reader + + + ['|', ('reader_ids','=', user.id), ('reader_group_ids','in', user.all_group_ids.ids)] + + + + + + Spreadsheet Manager + + + [(1,'=', 1)] + + + Spreadsheet Import mode + + [('group_ids','in', user.all_group_ids.ids)] + + diff --git a/spreadsheet_oca/static/description/icon.png b/spreadsheet_oca/static/description/icon.png new file mode 100644 index 00000000..0fcecf88 Binary files /dev/null and b/spreadsheet_oca/static/description/icon.png differ diff --git a/spreadsheet_oca/static/description/icon.svg b/spreadsheet_oca/static/description/icon.svg new file mode 100644 index 00000000..06dfca9b --- /dev/null +++ b/spreadsheet_oca/static/description/icon.svg @@ -0,0 +1,47 @@ + + + + + + + + + diff --git a/spreadsheet_oca/static/description/index.html b/spreadsheet_oca/static/description/index.html new file mode 100644 index 00000000..ae830502 --- /dev/null +++ b/spreadsheet_oca/static/description/index.html @@ -0,0 +1,505 @@ + + + + + +README.rst + + + +
+ + + +Odoo Community Association + +
+

Spreadsheet Oca

+ +

Beta License: AGPL-3 OCA/spreadsheet Translate me on Weblate Try me on Runboat

+

This module adds a functionality for adding and editing Spreadsheets +using Odoo CE.

+

It is an alternative to the proprietary module spreadsheet_edition +of Odoo Enterprise Edition.

+

Table of contents

+ +
+

Usage

+
+

Create a new spreadsheet

+
    +
  • Go to ‘Spreadsheet’ menu
  • +
  • Click on ‘Create’
  • +
  • Put a name, then click on the “Edit” button
  • +
+

image1

+
    +
  • At this point you switch to spreadsheet editing mode. The editor is +named o-spreadsheet and looks like another common spreadsheet web +editors. (OnlyOffice, Ethercalc, Google Sheets (non-free)).
  • +
+

image2

+ +

image3

+
    +
  • Note: Business Odoo module can add “business functions”. This is +currently the case for the accounting module, which adds the following +features:

    +
    +
      +
    • ODOO.CREDIT(account_codes, date_range): Get the total credit +for the specified account(s) and period.
    • +
    • ODOO.DEBIT(account_codes, date_range): Get the total debit +for the specified account(s) and period.
    • +
    • ODOO.BALANCE(account_codes, date_range): Get the total +balance for the specified account(s) and period.
    • +
    • ODOO.FISCALYEAR.START(day): Returns the starting date of the +fiscal year encompassing the provided date.
    • +
    • ODOO.FISCALYEAR.END(day): Returns the ending date of the +fiscal year encompassing the provided date.
    • +
    • ODOO.ACCOUNT.GROUP(type): Returns the account ids of a given +group where type should be a value of the account_type field +of account.account model. (income, asset_receivable, +etc.)
    • +
    +
    +
  • +
+
+
+
+

Development

+

If you want to develop custom business functions, you can add others, +based on the file +https://github.com/odoo/odoo/blob/16.0/addons/spreadsheet_account/static/src/accounting_functions.js

+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • CreuBlanca
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/spreadsheet project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+
+ + diff --git a/spreadsheet_oca/static/description/o-spreadsheet.png b/spreadsheet_oca/static/description/o-spreadsheet.png new file mode 100644 index 00000000..5d8c9e28 Binary files /dev/null and b/spreadsheet_oca/static/description/o-spreadsheet.png differ diff --git a/spreadsheet_oca/static/description/spreadsheet_create.png b/spreadsheet_oca/static/description/spreadsheet_create.png new file mode 100644 index 00000000..7e94ba1d Binary files /dev/null and b/spreadsheet_oca/static/description/spreadsheet_create.png differ diff --git a/spreadsheet_oca/static/description/spreadsheet_dynamic_table.gif b/spreadsheet_oca/static/description/spreadsheet_dynamic_table.gif new file mode 100644 index 00000000..2beb7324 Binary files /dev/null and b/spreadsheet_oca/static/description/spreadsheet_dynamic_table.gif differ diff --git a/spreadsheet_oca/static/description/spreadsheet_edit.png b/spreadsheet_oca/static/description/spreadsheet_edit.png new file mode 100644 index 00000000..e4a57314 Binary files /dev/null and b/spreadsheet_oca/static/description/spreadsheet_edit.png differ diff --git a/spreadsheet_oca/static/src/spreadsheet/bundle/chart_panel.esm.js b/spreadsheet_oca/static/src/spreadsheet/bundle/chart_panel.esm.js new file mode 100644 index 00000000..4f4e46ee --- /dev/null +++ b/spreadsheet_oca/static/src/spreadsheet/bundle/chart_panel.esm.js @@ -0,0 +1,69 @@ +import * as spreadsheet from "@odoo/o-spreadsheet"; +import {onWillUpdateProps} from "@odoo/owl"; +import {patch} from "@web/core/utils/patch"; + +const {chartSubtypeRegistry} = spreadsheet.registries; +const {ChartTypePicker} = spreadsheet.components; + +const ODOO_PREFIX = "odoo_"; +const isOdooKey = (key) => key?.startsWith(ODOO_PREFIX); + +const groupByCategory = (items) => + items.reduce((acc, item) => { + (acc[item.category] ||= []).push(item); + return acc; + }, {}); + +const getChartDefinition = (env, chartId) => + env.model.getters.getChartDefinition(chartId); + +patch(ChartTypePicker.prototype, { + setup() { + super.setup(); + const refresh = (chartId) => this.filterCategoriesChartType(chartId); + refresh(this.props.chartId); + onWillUpdateProps((nextProps) => refresh(nextProps.chartId)); + }, + + getChartTypes(isOdoo) { + const result = {}; + for (const key of chartSubtypeRegistry.getKeys()) { + if (isOdoo === isOdooKey(key)) { + result[key] = chartSubtypeRegistry.get(key).name; + } + } + return result; + }, + onTypeChange(type) { + const {env} = this; + const chartId = this.props.chartId; + const current = getChartDefinition(env, chartId); + if (!isOdooKey(current.type)) { + return super.onTypeChange(type); + } + const newChartInfo = chartSubtypeRegistry.get(type); + const definition = { + verticalAxisPosition: "left", + ...current, + ...newChartInfo.subtypeDefinition, + type: newChartInfo.chartType, + }; + const figureId = env.model.getters.getFigureIdFromChartId(chartId); + env.model.dispatch("UPDATE_CHART", { + definition, + chartId, + figureId, + sheetId: env.model.getters.getFigureSheetId(figureId), + }); + this.closePopover(); + }, + filterCategoriesChartType(chartId) { + const {env} = this; + const definition = getChartDefinition(env, chartId); + const isOdoo = isOdooKey(definition.type); + const registryItems = chartSubtypeRegistry + .getAll() + .filter((item) => isOdoo === isOdooKey(item.chartType)); + this.chartTypeByCategories = groupByCategory(registryItems); + }, +}); diff --git a/spreadsheet_oca/static/src/spreadsheet/bundle/chart_panels.esm.js b/spreadsheet_oca/static/src/spreadsheet/bundle/chart_panels.esm.js new file mode 100644 index 00000000..a8d18e67 --- /dev/null +++ b/spreadsheet_oca/static/src/spreadsheet/bundle/chart_panels.esm.js @@ -0,0 +1,105 @@ +import * as spreadsheet from "@odoo/o-spreadsheet"; +import {Domain} from "@web/core/domain"; +import {Many2XAutocomplete} from "@web/views/fields/relational_utils"; +import {_t} from "@web/core/l10n/translation"; +import {patch} from "@web/core/utils/patch"; +import {useService} from "@web/core/utils/hooks"; + +const { + GenericChartConfigPanel, + LineConfigPanel, + BarConfigPanel, + ScorecardChartConfigPanel, + GaugeChartConfigPanel, +} = spreadsheet.components; + +const menuChartProps = () => ({ + setup() { + super.setup(...arguments); + this.menus = useService("menu"); + }, + get menuProps() { + return { + fieldString: _t("Menu Items"), + resModel: "ir.ui.menu", + update: this.updateMenu.bind(this), + activeActions: {}, + getDomain: this.getDomain.bind(this), + placeholder: _t("Select a menu..."), + value: this.menuId ? this.menuId[1] : "", + }; + }, + + getDomain() { + const menus = this.menus + .getAll() + .map((menu) => menu.id) + .filter((menuId) => menuId !== "root"); + return [["id", "in", menus]]; + }, + get menuId() { + const menu = this.env.model.getters.getChartOdooMenu(this.props.chartId); + if (menu) { + return [menu.id, menu.name]; + } + return false; + }, + updateMenu(menuId) { + if (!menuId) { + this.env.model.dispatch("LINK_ODOO_MENU_TO_CHART", { + chartId: this.props.chartId, + odooMenuId: false, + }); + return; + } + const menu = this.env.model.getters.getIrMenu(menuId[0].id); + this.env.model.dispatch("LINK_ODOO_MENU_TO_CHART", { + chartId: this.props.chartId, + odooMenuId: menu.xmlid || menu.id, + }); + }, + get record() { + const menus = this.menus + .getAll() + .map((menu) => menu.id) + .filter((menuId) => menuId !== "root"); + return { + getFieldDomain: function () { + return new Domain([["id", "in", menus]]); + }, + getFieldContext: function () { + return {}; + }, + }; + }, +}); + +patch(GenericChartConfigPanel.prototype, menuChartProps()); +GenericChartConfigPanel.components = { + ...GenericChartConfigPanel.components, + Many2XAutocomplete, +}; + +patch(LineConfigPanel.prototype, menuChartProps()); +LineConfigPanel.components = { + ...LineConfigPanel.components, + Many2XAutocomplete, +}; + +patch(BarConfigPanel.prototype, menuChartProps()); +BarConfigPanel.components = { + ...BarConfigPanel.components, + Many2XAutocomplete, +}; + +patch(ScorecardChartConfigPanel.prototype, menuChartProps()); +ScorecardChartConfigPanel.components = { + ...ScorecardChartConfigPanel.components, + Many2XAutocomplete, +}; + +patch(GaugeChartConfigPanel.prototype, menuChartProps()); +GaugeChartConfigPanel.components = { + ...GaugeChartConfigPanel.components, + Many2XAutocomplete, +}; diff --git a/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js b/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js new file mode 100644 index 00000000..d2606174 --- /dev/null +++ b/spreadsheet_oca/static/src/spreadsheet/bundle/filter.esm.js @@ -0,0 +1,341 @@ +import * as spreadsheet from "@odoo/o-spreadsheet"; +import {Component, onWillStart, useState} from "@odoo/owl"; +import {DefaultDateValue} from "@spreadsheet/global_filters/components/default_date_value/default_date_value"; +import {Domain} from "@web/core/domain"; +import {DomainSelector} from "@web/core/domain_selector/domain_selector"; +import {DomainSelectorDialog} from "@web/core/domain_selector_dialog/domain_selector_dialog"; +import {FilterValue} from "@spreadsheet/global_filters/components/filter_value/filter_value"; +import {ModelFieldSelector} from "@web/core/model_field_selector/model_field_selector"; +import {ModelSelector} from "@web/core/model_selector/model_selector"; +import {MultiRecordSelector} from "@web/core/record_selectors/multi_record_selector"; +import {_t} from "@web/core/l10n/translation"; +import {globalFieldMatchingRegistry} from "@spreadsheet/global_filters/helpers"; +import {useService} from "@web/core/utils/hooks"; +import {user} from "@web/core/user"; +const {Checkbox} = spreadsheet.components; + +const {topbarMenuRegistry} = spreadsheet.registries; +const uuidGenerator = new spreadsheet.helpers.UuidGenerator(); + +topbarMenuRegistry.addChild("filters", ["file"], { + name: _t("Filters"), + sequence: 70, + execute: (env) => env.openSidePanel("FilterPanel", {}), + icon: "o-spreadsheet-Icon.GLOBAL_FILTERS", +}); +topbarMenuRegistry.addChild("save", ["file"], { + name: _t("Save"), + // Description: "Ctrl+S", // This is not working, so removing it from the view for now... + sequence: 10, + execute: (env) => env.saveSpreadsheet(), + icon: "o-spreadsheet-Icon.DOWNLOAD", +}); +topbarMenuRegistry.addChild("download", ["file"], { + name: _t("Download XLSX"), + sequence: 20, + execute: (env) => env.downloadAsXLXS(), + icon: "o-spreadsheet-Icon.EXPORT_XLSX", +}); +const {sidePanelRegistry} = spreadsheet.registries; + +export class FilterPanel extends Component { + onEditFilter(filter) { + this.env.openSidePanel("EditFilterPanel", {filter}); + } + onAddFilter(type) { + this.env.openSidePanel("EditFilterPanel", {filter: {type: type}}); + } + getGlobalFilterValue(filterId) { + return this.env.model.getters.getGlobalFilterValue(filterId); + } + setGlobalFilterValue(filterId, value) { + this.env.model.dispatch("SET_GLOBAL_FILTER_VALUE", { + id: filterId, + value, + }); + } +} + +FilterPanel.template = "spreadsheet_oca.FilterPanel"; +FilterPanel.components = { + FilterValue, +}; + +sidePanelRegistry.add("FilterPanel", { + title: "Filters", + Body: FilterPanel, +}); + +export class EditFilterPanel extends Component { + setup() { + this.filterId = this.props.filter.id; + this.orm = useService("orm"); + this.nameService = useService("name"); + this.dialog = useService("dialog"); + this.state = useState({ + label: this.props.filter.label, + type: this.props.filter.type, + defaultValue: this._unwrapDefaultValue( + this.props.filter.type, + this.props.filter.defaultValue + ), + defaultValueDisplayNames: this.props.filter.defaultValueDisplayNames || [], + modelData: {technical: this.props.filter.modelName, label: null}, + objects: {}, + includeChildren: this.props.filter.includeChildren, + domainOfAllowedValues: this.props.filter.domainOfAllowedValues, + valuesRestricted: Boolean(this.props.filter.domainOfAllowedValues?.length), + }); + onWillStart(this.willStart.bind(this)); + } + async willStart() { + if (this.state.modelData.technical !== undefined) { + const technicalName = this.state.modelData.technical; + const modelLabel = await this.orm.call("ir.model", "display_name_for", [ + [technicalName], + ]); + this.state.modelData.label = modelLabel[0] && modelLabel[0].display_name; + if (this.state.includeChildren) { + this.state.modelData.hasParentRelation = true; + } else { + const hasParentRelation = await this.orm.call( + "ir.model", + "has_parent_relation", + [technicalName] + ); + this.state.modelData.hasParentRelation = hasParentRelation; + } + } + var ModelFields = []; + const getters = this.env.model.getters; + for (var objectType of globalFieldMatchingRegistry.getKeys()) { + const objectClass = globalFieldMatchingRegistry.get(objectType); + for (const objectId of objectClass.getIds(getters)) { + var fields = objectClass.getFields(getters, objectId); + this.state.objects[objectType + "_" + objectId] = { + id: objectType + "_" + objectId, + objectId: objectId, + name: objectClass.getDisplayName(getters, objectId), + tag: await objectClass.getTag(getters, objectId), + fieldMatch: + objectClass.getFieldMatching( + getters, + objectId, + this.props.filter.id + ) || {}, + fields: fields, + type: objectType, + model: objectClass.getModel(getters, objectId), + }; + ModelFields.push(fields); + } + } + this.models = [ + ...new Set( + ModelFields.map((field_items) => Object.values(field_items)) + .flat() + .filter((field) => field.relation) + .map((field) => field.relation) + ), + ]; + } + get dateOffset() { + return [ + {value: 0, name: ""}, + {value: -1, name: _t("Previous")}, + {value: -2, name: _t("Before Previous")}, + {value: 1, name: _t("Next")}, + {value: 2, name: _t("After next")}, + ]; + } + onChangeFieldMatchOffset(object, ev) { + this.state.objects[object.id].fieldMatch.offset = parseInt(ev.target.value, 10); + } + async onModelSelected(ev) { + this.state.modelData.technical = ev.technical; + this.state.modelData.label = ev.label; + this.state.modelData.hasParentRelation = await this.orm.call( + "ir.model", + "has_parent_relation", + [ev.technical] + ); + this.state.domainOfAllowedValues = []; + } + async onRecordsSelected(resIds) { + const defaultValueDisplayNames = await this.nameService.loadDisplayNames( + this.state.modelData.technical, + resIds + ); + this.state.defaultValue = resIds; + this.state.defaultValueDisplayNames = Object.values(defaultValueDisplayNames); + } + onUpdateDomain(domain) { + this.state.domainOfAllowedValues = domain; + } + getCorrectDomain() { + const domain = this.state.domainOfAllowedValues; + if (domain) { + return new Domain(domain).toList(user.context); + } + return []; + } + changeDomainRestriction(value) { + this.state.valuesRestricted = value; + this.state.domainOfAllowedValues = []; + } + editDomain() { + this.dialog.add(DomainSelectorDialog, { + resModel: this.state.modelData.technical, + domain: this.getCorrectDomain(), + readonly: false, + isDebugMode: Boolean(this.env.debug), + onConfirm: this.onUpdateDomain.bind(this), + }); + } + onDefaultValueChanged(value) { + this.state.defaultValue = value; + } + _unwrapDefaultValue(type, defaultValue) { + if (defaultValue === undefined || defaultValue === null) { + return type === "relation" ? [] : undefined; + } + if (type === "relation") { + if (defaultValue.ids !== undefined) { + return defaultValue.ids; + } + return defaultValue; + } + if (type === "text") { + if (defaultValue.strings !== undefined) { + return defaultValue.strings.join(", "); + } + return defaultValue; + } + return defaultValue; + } + _wrapDefaultValue(type, value) { + if (type === "relation") { + if (value === "current_user") { + return {operator: "in", ids: "current_user"}; + } + if (!value || (Array.isArray(value) && value.length === 0)) { + return undefined; + } + return {operator: "in", ids: value}; + } + if (type === "text") { + if (!value) { + return undefined; + } + const strings = Array.isArray(value) + ? value + : String(value) + .split(",") + .map((s) => s.trim()) + .filter((s) => s); + return strings.length ? {operator: "ilike", strings} : undefined; + } + return value; + } + onSave() { + const action = this.props.filter.id + ? "EDIT_GLOBAL_FILTER" + : "ADD_GLOBAL_FILTER"; + + const filter = { + id: this.props.filter.id || uuidGenerator.uuidv4(), + type: this.state.type, + label: this.state.label || "", + defaultValue: this._wrapDefaultValue( + this.state.type, + this.state.defaultValue + ), + defaultValueDisplayNames: this.state.defaultValueDisplayNames, + modelName: this.state.modelData.technical, + includeChildren: this.state.includeChildren, + domainOfAllowedValues: this.state.domainOfAllowedValues, + }; + const filterMatching = {}; + Object.values(this.state.objects).forEach((object) => { + filterMatching[object.type] = filterMatching[object.type] || {}; + const fieldMatch = object.fieldMatch ? {...object.fieldMatch} : {}; + filterMatching[object.type][object.objectId] = fieldMatch; + }); + this.env.model.dispatch(action, { + filter, + ...filterMatching, + }); + this.env.openSidePanel("FilterPanel", {}); + } + onCancel() { + this.env.openSidePanel("FilterPanel", {}); + } + onRemove() { + if (this.props.filter.id) { + this.env.model.dispatch("REMOVE_GLOBAL_FILTER", { + id: this.props.filter.id, + }); + } + this.env.openSidePanel("FilterPanel", {}); + } + onFieldMatchUpdate(object, path, fieldInfo) { + if (!path) { + // Clear the field match if no path selected + this.state.objects[object.id].fieldMatch = {}; + return; + } + // Extract field definition from fieldInfo (V18> structure) + const fieldDef = + fieldInfo && fieldInfo.fieldDef ? fieldInfo.fieldDef : fieldInfo; + this.state.objects[object.id].fieldMatch = { + chain: path, + type: fieldDef?.type || "", + }; + } + getModelField(fieldMatch) { + if (!fieldMatch || !fieldMatch.chain) { + return ""; + } + return fieldMatch.chain; + } + filterModelFieldSelectorField(field, path, coModel) { + if (!field.searchable) { + return false; + } + + // TODO: Define allowed field types based on filter type + const ALLOWED_FIELD_TYPES = [ + "char", + "text", + "selection", + "many2one", + "date", + "datetime", + ]; + + if (field.name === "id" && this.state.type === "relation") { + const paths = path.split("."); + const lastField = paths.at(-2); + if (!lastField || (lastField.relation && lastField.relation === coModel)) { + return true; + } + return false; + } + return ALLOWED_FIELD_TYPES.includes(field.type) || Boolean(field.relation); + } +} + +EditFilterPanel.template = "spreadsheet_oca.EditFilterPanel"; +EditFilterPanel.components = { + Checkbox, + DomainSelector, + ModelSelector, + ModelFieldSelector, + MultiRecordSelector, + DefaultDateValue, +}; + +sidePanelRegistry.add("EditFilterPanel", { + title: "Edit Filter", + Body: EditFilterPanel, +}); diff --git a/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js b/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js new file mode 100644 index 00000000..892ea5c7 --- /dev/null +++ b/spreadsheet_oca/static/src/spreadsheet/bundle/filter_panel_datasources.esm.js @@ -0,0 +1,270 @@ +import * as spreadsheet from "@odoo/o-spreadsheet"; +import {Component, onWillStart, onWillUpdateProps, useRef, useState} from "@odoo/owl"; +import {Domain} from "@web/core/domain"; +import {DomainSelector} from "@web/core/domain_selector/domain_selector"; +import {DomainSelectorDialog} from "@web/core/domain_selector_dialog/domain_selector_dialog"; +import {ODOO_AGGREGATORS} from "@spreadsheet/pivot/pivot_helpers"; +import {_t} from "@web/core/l10n/translation"; +import {formatDate} from "@web/core/l10n/dates"; +import {useService} from "@web/core/utils/hooks"; + +const {DateTime} = luxon; +const {PivotTitleSection, PivotLayoutConfigurator} = spreadsheet.components; +const {useLocalStore, PivotSidePanelStore} = spreadsheet.stores; +const {sidePanelRegistry, topbarMenuRegistry, pivotSidePanelRegistry} = + spreadsheet.registries; + +topbarMenuRegistry.addChild("data_sources", ["data"], (env) => { + let sequence = 53; + const lists = env.model.getters.getListIds().map((listId, index) => ({ + id: `data_source_list_${listId}`, + name: env.model.getters.getListDisplayName(listId), + sequence: sequence++, + execute: (child_env) => { + child_env.openSidePanel("ListPanel", {listId}); + }, + icon: "spreadsheet_oca.ListIcon", + separator: index === env.model.getters.getListIds().length - 1, + })); + return lists.concat([ + { + id: "refresh_all_data", + name: _t("Refresh all data"), + sequence: 110, + execute: (child_env) => { + child_env.model.dispatch("REFRESH_ALL_DATA_SOURCES"); + }, + separator: true, + }, + ]); +}); + +export class PivotLayoutConfiguratorWithAggregators extends PivotLayoutConfigurator { + setup() { + super.setup(); + this.AGGREGATORS = ODOO_AGGREGATORS; + } +} + +export class PivotTitleSectionInsertion extends PivotTitleSection { + get cogWheelMenuItems() { + const res = super.cogWheelMenuItems; + res.push( + { + name: _t("Re-insert Dynamic"), + icon: "o-spreadsheet-Icon.INSERT_PIVOT", + execute: (env) => this.reinsertTable(env, "dynamic"), + }, + { + name: _t("Re-insert Static"), + icon: "o-spreadsheet-Icon.INSERT_PIVOT", + execute: (env) => this.reinsertTable(env, "static"), + } + ); + return res; + } + reinsertTable(env, mode) { + const zone = env.model.getters.getSelectedZone(); + const pivot = env.model.getters.getPivot(this.props.pivotId); + const table = ( + mode === "dynamic" + ? pivot.getCollapsedTableStructure() + : pivot.getExpandedTableStructure() + ).export(); + env.model.dispatch("INSERT_PIVOT_WITH_TABLE", { + pivotId: this.props.pivotId, + table, + col: zone.left, + row: zone.top, + sheetId: env.model.getters.getActiveSheetId(), + pivotMode: mode, + }); + env.model.dispatch("REFRESH_PIVOT", {id: this.props.pivotId}); + } +} + +export class PivotPanelDisplay extends Component { + setup() { + this.dialog = useService("dialog"); + this.store = useLocalStore(PivotSidePanelStore, this.props.pivotId); + this.pivotPanelRef = useRef("pivotPanel"); + onWillStart(this.modelData.bind(this)); + onWillUpdateProps(this.modelData.bind(this)); + } + async modelData() { + this.PivotDataSource = this.env.model.getters.getPivot(this.props.pivotId); + this.modelLabel = await this.PivotDataSource.getModelLabel(); + } + get domain() { + return new Domain(this.store.definition.domain).toString(); + } + get sortInformation() { + const sortedColumn = this.store.definition.sortedColumn; + const orderTranslate = + sortedColumn.order === "asc" ? _t("ascending") : _t("descending"); + const measure = this.store.definition.measures.find( + (m) => m.fieldName === sortedColumn.measure + ); + const label = this.PivotDataSource.getMeasure(measure.id).displayName; + return `${label} (${orderTranslate})`; + } + get lastUpdate() { + const lastUpdate = this.PivotDataSource.lastUpdate; + if (lastUpdate) { + return formatDate(DateTime.fromMillis(lastUpdate)); + } + return _t("not updated"); + } + editDomain() { + this.dialog.add(DomainSelectorDialog, { + resModel: this.store.definition.model, + domain: this.domain, + readonly: false, + isDebugMode: Boolean(this.env.debug), + onConfirm: this.onSelectDomain.bind(this), + }); + } + updateDimensions(dimensions) { + this.store.update(dimensions); + } + onSelectDomain(domain) { + this.store.update({domain}); + } + getScrollableContainerEl() { + return this.pivotPanelRef.el; + } + flipAxis() { + const dimensions = { + rows: this.store.definition.columns, + columns: this.store.definition.rows, + }; + this.updateDimensions(dimensions); + } +} + +PivotPanelDisplay.template = "spreadsheet_oca.PivotPanelDisplay"; +PivotPanelDisplay.components = { + DomainSelector, + PivotTitleSectionInsertion, + PivotLayoutConfiguratorWithAggregators, +}; +PivotPanelDisplay.properties = { + pivotId: String, +}; + +export class PivotPanel extends Component { + get pivotId() { + return this.props.pivotId; + } + get pivotType() { + return this.env.model.getters.getPivotCoreDefinition(this.pivotId).type; + } +} + +PivotPanel.template = "spreadsheet_oca.PivotPanel"; +PivotPanel.components = { + PivotPanelDisplay, +}; + +pivotSidePanelRegistry.add("ODOO", { + editor: PivotPanel, +}); + +export class ListPanelDisplay extends Component { + setup() { + this.state = useState({listRows: undefined}); + this.dialog = useService("dialog"); + onWillStart(this.modelData.bind(this)); + onWillUpdateProps(this.modelData.bind(this)); + } + async modelData() { + this.ListDataSource = await this.env.model.getters.getAsyncListDataSource( + this.props.listId + ); + this.modelLabel = await this.ListDataSource.getModelLabel(); + } + get domain() { + return new Domain(this.props.listDefinition.domain).toString(); + } + get lastUpdate() { + const lastUpdate = this.ListDataSource.lastUpdate; + if (lastUpdate) { + return formatDate(DateTime.fromMillis(lastUpdate)); + } + return _t("not updated"); + } + editDomain() { + this.dialog.add(DomainSelectorDialog, { + resModel: this.props.listDefinition.model, + domain: this.domain, + readonly: false, + isDebugMode: Boolean(this.env.debug), + onConfirm: this.onSelectDomain.bind(this), + }); + } + onSelectDomain(domain) { + this.env.model.dispatch("UPDATE_ODOO_LIST_DOMAIN", { + listId: this.props.listId, + domain: new Domain(domain).toList(), + }); + } + async insertList() { + const listId = this.props.listId; + const zone = this.env.model.getters.getSelectedZone(); + const dataSource = await this.env.model.getters.getAsyncListDataSource(listId); + const totalRows = parseInt(this.state.listRows, 10) || dataSource.maxPosition; + const list = this.env.model.getters.getListDefinition(listId); + const sheetId = this.env.model.getters.getActiveSheetId(); + const columns = list.columns.map((name) => ({ + name, + type: dataSource.getField(name).type, + })); + this.env.model.dispatch("RE_INSERT_ODOO_LIST_WITH_TABLE", { + sheetId: sheetId, + col: zone.left, + row: zone.top, + id: listId, + linesNumber: totalRows, + columns: columns, + }); + } + delete() { + this.env.askConfirmation( + _t("Are you sure you want to delete this list?"), + () => { + this.env.model.dispatch("REMOVE_ODOO_LIST", { + listId: this.props.listId, + }); + this.env.openSidePanel("ListPanel", {}); + } + ); + } +} + +ListPanelDisplay.template = "spreadsheet_oca.ListPanelDisplay"; +ListPanelDisplay.components = { + DomainSelector, +}; +ListPanelDisplay.props = { + listId: String, + listDefinition: Object, +}; + +export class ListPanel extends Component { + get listId() { + return this.props.listId; + } + get listDefinition() { + return this.env.model.getters.getListDefinition(this.listId) || {}; + } +} + +ListPanel.template = "spreadsheet_oca.ListPanel"; +ListPanel.components = { + ListPanelDisplay, +}; + +sidePanelRegistry.add("ListPanel", { + title: "List information", + Body: ListPanel, +}); diff --git a/spreadsheet_oca/static/src/spreadsheet/bundle/image_file_store.esm.js b/spreadsheet_oca/static/src/spreadsheet/bundle/image_file_store.esm.js new file mode 100644 index 00000000..919524e8 --- /dev/null +++ b/spreadsheet_oca/static/src/spreadsheet/bundle/image_file_store.esm.js @@ -0,0 +1,33 @@ +export class ImageFileStore { + constructor(resModel, resId, http, orm) { + this.resModel = resModel; + this.resId = resId; + this.http = http; + this.orm = orm; + } + + async upload(file) { + const route = "/web/binary/upload_attachment"; + const params = { + ufile: [file], + csrf_token: odoo.csrf_token, + model: this.resModel, + id: this.resId, + }; + const fileData = JSON.parse(await this.http.post(route, params, "text"))[0]; + const [accessToken] = await this.orm.call( + "ir.attachment", + "generate_access_token", + [fileData.id] + ); + return `/web/image/${fileData.id}?access_token=${accessToken}`; + } + + async delete(path) { + const attachmentId = path.split("/").pop(); + if (Number.isNaN(attachmentId)) { + throw new Error("Invalid path: " + path); + } + await this.orm.unlink("ir.attachment", [parseInt(attachmentId, 10)]); + } +} diff --git a/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js b/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js new file mode 100644 index 00000000..32e25ccb --- /dev/null +++ b/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js @@ -0,0 +1,143 @@ +import * as spreadsheet from "@odoo/o-spreadsheet"; + +import {Domain} from "@web/core/domain"; +import {Many2XAutocomplete} from "@web/views/fields/relational_utils"; +import {_t} from "@web/core/l10n/translation"; +import {useService} from "@web/core/utils/hooks"; + +const {chartSidePanelComponentRegistry} = spreadsheet.registries; +const { + PieChartDesignPanel, + ChartWithAxisDesignPanel, + ComboChartDesignPanel, + FunnelChartDesignPanel, + GeoChartDesignPanel, + RadarChartDesignPanel, + SunburstChartDesignPanel, + TreeMapChartDesignPanel, + WaterfallChartDesignPanel, +} = spreadsheet.components; +const {Component} = owl; + +export class OdooPanel extends Component { + setup() { + this.menus = useService("menu"); + } + get menuProps() { + return { + fieldString: _t("Menu Items"), + resModel: "ir.ui.menu", + update: this.updateMenu.bind(this), + activeActions: {}, + getDomain: this.getDomain.bind(this), + placeholder: _t("Select a menu..."), + value: this.menuId ? this.menuId[1] : "", + }; + } + getDomain() { + const menus = this.menus + .getAll() + .map((menu) => menu.id) + .filter((menuId) => menuId !== "root"); + return [["id", "in", menus]]; + } + get chartId() { + return this.props.chartId; + } + get menuId() { + const menu = this.env.model.getters.getChartOdooMenu(this.chartId); + if (menu) { + return [menu.id, menu.name]; + } + return false; + } + updateMenu(menuId) { + if (!menuId) { + this.env.model.dispatch("LINK_ODOO_MENU_TO_CHART", { + chartId: this.chartId, + odooMenuId: false, + }); + return; + } + const menu = this.env.model.getters.getIrMenu(menuId[0].id); + this.env.model.dispatch("LINK_ODOO_MENU_TO_CHART", { + chartId: this.chartId, + odooMenuId: menu.xmlid || menu.id, + }); + } + get record() { + const menus = this.menus + .getAll() + .map((menu) => menu.id) + .filter((menuId) => menuId !== "root"); + return { + getFieldDomain: function () { + return new Domain([["id", "in", menus]]); + }, + getFieldContext: function () { + return {}; + }, + }; + } +} +OdooPanel.template = "spreadsheet_oca.OdooPanel"; +OdooPanel.components = {Many2XAutocomplete}; + +class OdooStackablePanel extends OdooPanel { + onChangeStacked(ev) { + this.props.updateChart(this.chartId, { + stacked: ev.target.checked, + }); + } +} +OdooStackablePanel.template = "spreadsheet_oca.OdooStackablePanel"; + +chartSidePanelComponentRegistry + .add("odoo_line", { + configuration: OdooStackablePanel, + design: PieChartDesignPanel, + }) + .add("odoo_bar", { + configuration: OdooStackablePanel, + design: PieChartDesignPanel, + }) + .add("odoo_pie", { + configuration: OdooPanel, + design: PieChartDesignPanel, + }) + .add("odoo_combo", { + configuration: OdooPanel, + design: ComboChartDesignPanel, + }) + .add("odoo_scatter", { + configuration: OdooStackablePanel, + design: ChartWithAxisDesignPanel, + }) + .add("odoo_pyramid", { + configuration: OdooPanel, + design: ChartWithAxisDesignPanel, + }) + .add("odoo_waterfall", { + configuration: OdooPanel, + design: WaterfallChartDesignPanel, + }) + .add("odoo_radar", { + configuration: OdooPanel, + design: RadarChartDesignPanel, + }) + .add("odoo_sunburst", { + configuration: OdooPanel, + design: SunburstChartDesignPanel, + }) + .add("odoo_treemap", { + configuration: OdooPanel, + design: TreeMapChartDesignPanel, + }) + .add("odoo_geo", { + configuration: OdooPanel, + design: GeoChartDesignPanel, + }) + .add("odoo_funnel", { + configuration: OdooPanel, + design: FunnelChartDesignPanel, + }); diff --git a/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml b/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml new file mode 100644 index 00000000..96bea1a8 --- /dev/null +++ b/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml @@ -0,0 +1,656 @@ + + + + +
+ + +
+
+ + + + + + + +
+ + +
+
Model
+
()
+
+
+
Domain
+ + +
+ +
+
Sorting
+
+
+
+ Last updated at +
+
+
+ + + + + + + + +
+
+
List name
+ +
+
+
Model
+
()
+
+
+
Domain
+ + +
+
+ + +
+
+ + +
+
+ Last updated at +
+
+
+ +
+
+ +
+
+ + +
+
+
+ + + +
+
+ +
+
+ Label +
+
+ +
+
+
+
Default value
+
+ +
+
+
+
Default value
+ +
+ +
+
Related model
+
+ +
+ +
+ +
+
Default value
+
+ +
+
+ +
+
+
+
Possible values
+
+ +
+ + + + +
+
+
+
+
+ - +
+
+
+ +
+
+ +
+ +
+
+
+ + + +
+
+ + + + + + + name is required + + + + + + + + + + + + + +
+ + + + + + + +
+
+ +
+ +
+
+ +
+
+ +
+ +
+ + + + + + + + + + +
+
+
+
+
+ + + +
+
+ + + +
+
+ +
+ + +
+
+ + + + + + + +
+ +
+ + +
+ +
+ + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
Link to Odoo menu
+
+ +
+
+
+ + +
+ +
+
+
+ + +
+
Link to Odoo menu
+
+ +
+
+
+
+ + +
+
Link to Odoo menu
+
+ +
+
+
+
+ + +
+
Link to Odoo menu
+
+ +
+
+
+
+ + +
+
Link to Odoo menu
+
+ +
+
+
+
+ + +
+
Link to Odoo menu
+
+ +
+
+
+
+ + diff --git a/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet_action.esm.js b/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet_action.esm.js new file mode 100644 index 00000000..c53dc609 --- /dev/null +++ b/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet_action.esm.js @@ -0,0 +1,276 @@ +import * as spreadsheet from "@odoo/o-spreadsheet"; + +import {Domain} from "@web/core/domain"; +import {SpreadsheetControlPanel} from "./spreadsheet_controlpanel.esm"; +import {SpreadsheetRenderer} from "./spreadsheet_renderer.esm"; +import {deepCopy} from "@web/core/utils/objects"; +import {helpers} from "@odoo/o-spreadsheet"; +import {registry} from "@web/core/registry"; +import {standardActionServiceProps} from "@web/webclient/actions/action_service"; +import {useService} from "@web/core/utils/hooks"; + +const {load} = spreadsheet; + +const uuidGenerator = new spreadsheet.helpers.UuidGenerator(); +const actionRegistry = registry.category("actions"); +const {Component, onWillStart, useSubEnv} = owl; +const {parseDimension, isDateOrDatetimeField} = helpers; + +function normalizeGroupBys(dimensions, fields) { + return dimensions.map((dimension) => { + if ( + isDateOrDatetimeField(fields[dimension.fieldName]) && + !dimension.granularity + ) { + return {granularity: "month", ...dimension}; + } + return dimension; + }); +} + +export class ActionSpreadsheetOca extends Component { + setup() { + this.orm = useService("orm"); + this.notification = useService("notification"); + const params = this.props.action.params || this.props.action.context.params; + this.spreadsheetId = params.spreadsheet_id || params.active_id; + this.model = params.model || "spreadsheet.spreadsheet"; + this.import_data = params.import_data || {}; + onWillStart(async () => { + // We need to load in case the data comes from an XLSX + this.record = + load( + await this.orm.call( + this.model, + "get_spreadsheet_data", + [[this.spreadsheetId]], + {context: {bin_size: false}} + ) + ) || {}; + }); + useSubEnv({ + saveRecord: this.saveRecord.bind(this), + importData: this.importData.bind(this), + notifyUser: this.notifyUser.bind(this), + }); + } + + notifyUser(notification) { + this.notification.add(notification.text, { + type: notification.type, + sticky: notification.sticky, + }); + } + async saveRecord(data) { + if (this.record.mode === "readonly") { + return; + } + if (this.spreadsheetId) { + this.orm.call(this.model, "write", [this.spreadsheetId, data]); + } else { + this.spreadsheetId = await this.orm.call(this.model, "create", [data]); + } + } + /** + * Clean SearchParams of conflictive keys. + * + * 1. Removed from context pivot conflictive keys. + * 2. Removed from context graph conflictive keys. + * + * @returns {Object} Formated searchParams. + */ + cleanSearchParams() { + const searchParams = this.import_data.searchParams; + const context = {}; + for (var key of Object.keys(searchParams.context)) { + if (key.startsWith("pivot_") || key.startsWith("graph_")) { + continue; + } + context[key] = searchParams.context[key]; + } + return {...searchParams, context}; + } + async importDataGraph(spreadsheet_model) { + var sheetId = spreadsheet_model.getters.getActiveSheetId(); + if (this.import_data.new === undefined && this.import_data.new_sheet) { + sheetId = uuidGenerator.uuidv4(); + spreadsheet_model.dispatch("CREATE_SHEET", { + sheetId, + position: spreadsheet_model.getters.getSheetIds().length, + }); + // We want to open the new sheet + const sheetIdFrom = spreadsheet_model.getters.getActiveSheetId(); + spreadsheet_model.dispatch("ACTIVATE_SHEET", { + sheetIdFrom, + sheetIdTo: sheetId, + }); + } else if (this.import_data.new === undefined) { + // TODO: Add a way to detect the last row total height + } + const dataSourceId = uuidGenerator.uuidv4(); + const chartType = `odoo_${this.import_data.metaData.mode}`; + const definition = { + title: {text: this.import_data.name}, + type: chartType, + fillArea: chartType === "odoo_line", + background: "#FFFFFF", + stacked: this.import_data.metaData.stacked, + axisType: this.import_data.metaData.axisType, + metaData: this.import_data.metaData, + searchParams: this.cleanSearchParams(), + cumulative: this.import_data.metaData.cumulated, + cumulatedStart: this.import_data.metaData.cumulatedStart, + legendPosition: "top", + verticalAxisPosition: "left", + actionXmlId: this.import_data.actionXmlId, + }; + spreadsheet_model.dispatch("CREATE_CHART", { + sheetId, + figureId: uuidGenerator.uuidv4(), + chartId: dataSourceId, + col: 0, + row: 0, + offset: {x: 0, y: 0}, + definition, + }); + } + importCreateOrReuseSheet(spreadsheet_model) { + var sheetId = spreadsheet_model.getters.getActiveSheetId(); + if (this.import_data.new === undefined) { + sheetId = uuidGenerator.uuidv4(); + spreadsheet_model.dispatch("CREATE_SHEET", { + sheetId, + position: spreadsheet_model.getters.getSheetIds().length, + }); + // We want to open the new sheet + const sheetIdFrom = spreadsheet_model.getters.getActiveSheetId(); + spreadsheet_model.dispatch("ACTIVATE_SHEET", { + sheetIdFrom, + sheetIdTo: sheetId, + }); + } + return sheetId; + } + async importDataList(spreadsheet_model) { + var sheetId = this.importCreateOrReuseSheet(spreadsheet_model); + if (!sheetId) { + const sheetIds = spreadsheet_model.getters.getSheetIds(); + sheetId = sheetIds.length ? sheetIds[0] : uuidGenerator.uuidv4(); + } + const listId = spreadsheet_model.getters.getNextListId(); + const list_info = { + metaData: { + resModel: this.import_data.metaData.model, + columns: this.import_data.metaData.columns.map((column) => column.name), + fields: this.import_data.metaData.fields, + }, + searchParams: { + domain: new Domain(this.import_data.metaData.domain).toJson(), + context: this.import_data.metaData.context, + orderBy: this.import_data.metaData.orderBy, + }, + name: this.import_data.name, + actionXmlId: this.import_data.actionXmlId, + }; + const columns = this.import_data.metaData.columns.map((c) => ({ + name: c.name, + type: this.import_data.metaData.fields[c.name].type, + })); + const definitionWithoutFields = JSON.parse(JSON.stringify(list_info)); + definitionWithoutFields.metaData.fields = undefined; + spreadsheet_model.dispatch("INSERT_ODOO_LIST_WITH_TABLE", { + sheetId, + col: 0, + row: 0, + id: listId, + definition: definitionWithoutFields, + linesNumber: this.import_data.dyn_number_of_rows, + columns: columns, + }); + const dataSource = spreadsheet_model.getters.getListDataSource(listId); + await dataSource.load(); + spreadsheet_model.dispatch("AUTORESIZE_COLUMNS", { + sheetId, + cols: Array.from({length: columns.length}, (_, i) => i), + }); + } + async importDataPivot(spreadsheet_model) { + var sheetId = this.importCreateOrReuseSheet(spreadsheet_model); + const pivotId = uuidGenerator.uuidv4(); + const fields = this.import_data.metaData.fields || {}; + const activeMeasures = this.import_data.metaData.activeMeasures; + const measures = activeMeasures.map((measure) => ({ + id: fields[measure]?.aggregator + ? `${measure}:${fields[measure].aggregator}` + : measure, + fieldName: measure, + aggregator: fields[measure]?.aggregator, + })); + const sortedMeasure = this.import_data.metaData.sortedColumn?.measure; + const sortedColumn = activeMeasures.includes(sortedMeasure) + ? this.import_data.metaData.sortedColumn + : null; + const colGroupBys = (this.import_data.metaData.colGroupBys || []).concat( + this.import_data.metaData.expandedColGroupBys || [] + ); + const rowGroupBys = (this.import_data.metaData.rowGroupBys || []).concat( + this.import_data.metaData.expandedRowGroupBys || [] + ); + const pivot_info = deepCopy({ + type: "ODOO", + domain: new Domain(this.import_data.searchParams.domain).toJson(), + context: this.import_data.searchParams.context, + sortedColumn, + measures, + model: this.import_data.metaData.resModel, + columns: normalizeGroupBys(colGroupBys.map(parseDimension), fields), + rows: normalizeGroupBys(rowGroupBys.map(parseDimension), fields), + name: this.import_data.name, + actionXmlId: this.import_data.actionXmlId, + }); + spreadsheet_model.dispatch("ADD_PIVOT", { + pivotId, + pivot: pivot_info, + }); + const ds = spreadsheet_model.getters.getPivot(pivotId); + await ds.load(); + const table = ds.getExpandedTableStructure(); + spreadsheet_model.dispatch("INSERT_PIVOT_WITH_TABLE", { + sheetId, + col: 0, + row: 0, + pivotId, + table: table.export(), + pivotMode: "static", + }); + const columns = []; + for ( + let col = 0; + col <= table.columns[table.columns.length - 1].length; + col++ + ) { + columns.push(col); + } + spreadsheet_model.dispatch("AUTORESIZE_COLUMNS", {sheetId, cols: columns}); + } + async importData(spreadsheet_model) { + if (this.import_data.mode === "pivot") { + await this.importDataPivot(spreadsheet_model); + } + if (this.import_data.mode === "graph") { + await this.importDataGraph(spreadsheet_model); + } + if (this.import_data.mode === "list") { + await this.importDataList(spreadsheet_model); + } + } +} +ActionSpreadsheetOca.template = "spreadsheet_oca.ActionSpreadsheetOca"; +ActionSpreadsheetOca.components = { + SpreadsheetRenderer, + SpreadsheetControlPanel, +}; +ActionSpreadsheetOca.props = {...standardActionServiceProps}; +actionRegistry.add("action_spreadsheet_oca", ActionSpreadsheetOca, { + force: true, +}); diff --git a/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet_controlpanel.esm.js b/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet_controlpanel.esm.js new file mode 100644 index 00000000..4b5d8647 --- /dev/null +++ b/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet_controlpanel.esm.js @@ -0,0 +1,50 @@ +import {Component} from "@odoo/owl"; +import {ControlPanel} from "@web/search/control_panel/control_panel"; +import {useService} from "@web/core/utils/hooks"; + +const {useState} = owl; + +export class SpreadsheetName extends Component { + setup() { + this.state = useState({ + name: this.props.name, + }); + } + _onNameChanged(ev) { + if (this.props.isReadonly) { + return; + } + if (ev.target.value) { + this.env.saveRecord({name: ev.target.value}); + } + this.state.name = ev.target.value; + if (this.props.onChanged) { + this.props.onChanged(ev); + } + } +} +SpreadsheetName.template = "spreadsheet_oca.SpreadsheetName"; +SpreadsheetName.props = { + name: String, + isReadonly: Boolean, + onChanged: {type: Function, optional: true}, +}; + +export class SpreadsheetControlPanel extends ControlPanel { + setup() { + super.setup(); + this.actionService = useService("action"); + } + + onBreadcrumbClicked(jsId) { + this.actionService.restore(jsId); + } +} +SpreadsheetControlPanel.template = "spreadsheet_oca.SpreadsheetControlPanel"; +SpreadsheetControlPanel.props = { + ...ControlPanel.props, + record: Object, +}; +SpreadsheetControlPanel.components = { + SpreadsheetName, +}; diff --git a/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet_renderer.esm.js b/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet_renderer.esm.js new file mode 100644 index 00000000..55bbd414 --- /dev/null +++ b/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet_renderer.esm.js @@ -0,0 +1,212 @@ +import * as spreadsheet from "@odoo/o-spreadsheet"; + +import {Component} from "@odoo/owl"; +import {ImageFileStore} from "./image_file_store.esm"; +import {OdooDataProvider} from "@spreadsheet/data_sources/odoo_data_provider"; +import {SpreadsheetComponent} from "@spreadsheet/actions/spreadsheet_component"; +import {_t} from "@web/core/l10n/translation"; +import {loadBundle} from "@web/core/assets"; +import {useService} from "@web/core/utils/hooks"; +import {useSetupAction} from "@web/search/action_hook"; +import {user} from "@web/core/user"; +import {waitForDataLoaded} from "@spreadsheet/helpers/model"; + +const {Model, load} = spreadsheet; + +const {useSubEnv, onWillStart} = owl; +const {useStoreProvider, ModelStore} = spreadsheet.stores; +const uuidGenerator = new spreadsheet.helpers.UuidGenerator(); + +class SpreadsheetTransportService { + constructor(orm, bus_service, model, res_id) { + this.orm = orm; + this.bus_service = bus_service; + this.model = model; + this.res_id = res_id; + this.channel = "spreadsheet_oca;" + this.model + ";" + this.res_id; + this.bus_service.addChannel(this.channel); + this.dialog = useService("dialog"); + this.bus_service.subscribe("notification", (payload) => { + if (payload.id === this.res_id) { + this._handleNotification(payload); + } + }); + this.listeners = []; + this._listener = null; + } + onNotification({detail: notifications}) { + for (const {payload, type} of notifications) { + if ( + type === "spreadsheet_oca" && + payload.res_model === this.model && + payload.res_id === this.res_id + ) { + // What shall we do if no callback is defined (empty until onNewMessage...) :/ + for (const {callback} of this.listeners) { + callback(payload); + } + } + } + } + async sendMessage(message) { + const isAccepted = await this.orm.call(this.model, "send_spreadsheet_message", [ + [this.res_id], + message, + this.accessToken, + ]); + if (isAccepted) { + this._handleNotification(message); + } + } + onNewMessage(id, callback) { + this._listener = callback; + for (const message of this.listeners) { + callback(message); + } + this.listeners = []; + } + leave(id) { + this.listeners = this.listeners.filter((listener) => listener.id !== id); + } + _handleNotification(payload) { + if (!this._listener) { + this.listeners.push(payload); + } else { + this._listener(payload); + } + } +} + +export class SpreadsheetRenderer extends Component { + createDefaultCurrency(currency) { + if (!currency) { + return undefined; + } + return { + symbol: currency.symbol, + position: currency.position, + decimalPlaces: currency.decimal_places, + }; + } + getLocales() { + const orm = useService("orm"); + return async () => { + return orm.call("res.lang", "get_locales_for_spreadsheet", []); + }; + } + getCurrencies() { + const orm = useService("orm"); + return async () => { + const odooCurrencies = await orm.searchRead( + "res.currency", + [], + ["symbol", "full_name", "position", "name", "decimal_places"], + { + order: "active DESC, full_name ASC", + context: {active_test: false}, + } + ); + return odooCurrencies.map((currency) => { + return { + code: currency.name, + symbol: currency.symbol, + position: currency.position || "after", + name: currency.full_name || _t("Currency"), + decimalPlaces: currency.decimal_places || 2, + }; + }); + }; + } + setup() { + this.orm = useService("orm"); + this.http = useService("http"); + this.bus_service = this.env.services.bus_service; + this.ui = useService("ui"); + this.action = useService("action"); + this.dialog = useService("dialog"); + this.notifications = useService("notification"); + const odooDataProvider = new OdooDataProvider(this.env); + this.loadCurrencies = this.getCurrencies(); + this.loadLocales = this.getLocales(); + const defaultCurrency = this.props.record.default_currency; + this.fileStore = new ImageFileStore( + this.props.model, + this.props.res_id, + this.http, + this.orm + ); + this.stores = useStoreProvider(); + // The o-spreadsheet Model handles currency formatting internally + this.spreadsheet_model = new Model( + load(this.props.record.spreadsheet_raw), + { + custom: {env: this.env, orm: this.orm, odooDataProvider}, + defaultCurrency: this.createDefaultCurrency(defaultCurrency), + external: { + loadCurrencies: this.loadCurrencies, + loadLocales: this.loadLocales, + fileStore: this.fileStore, + }, + transportService: new SpreadsheetTransportService( + this.orm, + this.bus_service, + this.props.model, + this.props.res_id + ), + client: { + id: uuidGenerator.uuidv4(), + name: user.name, + userId: user.userId, + }, + mode: this.props.record.mode, + }, + this.props.record.revisions + ); + useSubEnv({ + saveSpreadsheet: this.onSpreadsheetSaved.bind(this), + downloadAsXLXS: this.downloadAsXLXS.bind(this), + }); + onWillStart(async () => { + await loadBundle("spreadsheet.o_spreadsheet"); + await waitForDataLoaded(this.spreadsheet_model); + await this.env.importData(this.spreadsheet_model); + this.spreadsheet_model.joinSession(); + this.stores.inject(ModelStore, this.spreadsheet_model); + }); + useSetupAction({ + beforeLeave: this.onSpreadsheetSaved.bind(this), + }); + odooDataProvider.addEventListener("data-source-updated", () => { + const sheetId = this.spreadsheet_model.getters.getActiveSheetId(); + this.spreadsheet_model.dispatch("EVALUATE_CELLS", {sheetId}); + }); + } + async onSpreadsheetSaved() { + const data = this.spreadsheet_model.exportData(); + await this.env.saveRecord({spreadsheet_raw: data}); + await this.spreadsheet_model.leaveSession(); + this.spreadsheet_model.off("update", this); + } + async downloadAsXLXS() { + this.ui.block(); + await waitForDataLoaded(this.spreadsheet_model); + await this.action.doAction({ + type: "ir.actions.client", + tag: "action_download_spreadsheet", + params: { + name: this.props.record.name, + xlsxData: this.spreadsheet_model.exportXLSX(), + }, + }); + this.ui.unblock(); + } +} + +SpreadsheetRenderer.template = "spreadsheet_oca.SpreadsheetRenderer"; +SpreadsheetRenderer.components = {SpreadsheetComponent}; +SpreadsheetRenderer.props = { + record: Object, + res_id: Number, + model: String, + importData: Function, +}; diff --git a/spreadsheet_oca/static/src/spreadsheet/graph_controller.esm.js b/spreadsheet_oca/static/src/spreadsheet/graph_controller.esm.js new file mode 100644 index 00000000..4fe34251 --- /dev/null +++ b/spreadsheet_oca/static/src/spreadsheet/graph_controller.esm.js @@ -0,0 +1,25 @@ +import {GraphRenderer} from "@web/views/graph/graph_renderer"; + +import {patch} from "@web/core/utils/patch"; + +patch(GraphRenderer.prototype, { + onSpreadsheetButtonClicked() { + this.actionService.doAction( + "spreadsheet_oca.spreadsheet_spreadsheet_import_act_window", + { + additionalContext: { + default_name: this.model.metaData.title, + default_datasource_name: this.model.metaData.title, + default_import_data: { + mode: "graph", + metaData: this.model.metaData, + searchParams: { + ...this.model.searchParams, + domain: this.env.searchModel.domainString, + }, + }, + }, + } + ); + }, +}); diff --git a/spreadsheet_oca/static/src/spreadsheet/graph_controller.xml b/spreadsheet_oca/static/src/spreadsheet/graph_controller.xml new file mode 100644 index 00000000..f5dc344d --- /dev/null +++ b/spreadsheet_oca/static/src/spreadsheet/graph_controller.xml @@ -0,0 +1,19 @@ + + + + + + + +
+ diff --git a/spreadsheet_oca/static/src/spreadsheet/list_renderer.esm.js b/spreadsheet_oca/static/src/spreadsheet/list_renderer.esm.js new file mode 100644 index 00000000..9cf5bd54 --- /dev/null +++ b/spreadsheet_oca/static/src/spreadsheet/list_renderer.esm.js @@ -0,0 +1,64 @@ +import {useBus, useService} from "@web/core/utils/hooks"; + +import {HandleField} from "@web/views/fields/handle/handle_field"; +import {ListRenderer} from "@web/views/list/list_renderer"; +import {omit} from "@web/core/utils/objects"; +import {patch} from "@web/core/utils/patch"; +import {user} from "@web/core/user"; + +patch(ListRenderer.prototype, { + setup() { + super.setup(...arguments); + this.actionService = useService("action"); + useBus( + this.env.bus, + "addListOnSpreadsheet", + this.onAddListOnSpreadsheet.bind(this) + ); + }, + onAddListOnSpreadsheet() { + const model = this.env.model.root; + this.actionService.doAction( + "spreadsheet_oca.spreadsheet_spreadsheet_import_act_window", + { + additionalContext: { + default_name: this.env.config.getDisplayName(), + default_datasource_name: this.env.config.getDisplayName(), + default_can_be_dynamic: true, + default_dynamic: true, + default_is_tree: true, + default_number_of_rows: Math.min(model.count, model.limit), + default_import_data: { + mode: "list", + metaData: { + model: model.resModel, + domain: this.env.searchModel.domainString, + orderBy: model.orderBy, + context: omit( + model.searchParams?.context || {}, + ...Object.keys(user.context) + ), + columns: this.getSpreadsheetColumns(), + fields: model.fields, + name: this.env.config.getDisplayName(), + }, + }, + }, + } + ); + }, + getSpreadsheetColumns() { + const fields = this.env.model.root.fields; + return this.columns + .filter( + (col) => + fields[col.name] && + col.type === "field" && + col.field.component !== HandleField && + !col.relatedPropertyField && + !["binary", "json"].includes(fields[col.name].type) + // We want to avoid binary or json fields + ) + .map((col) => ({name: col.name, type: fields[col.name].type})); + }, +}); diff --git a/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js b/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js new file mode 100644 index 00000000..54e68e6f --- /dev/null +++ b/spreadsheet_oca/static/src/spreadsheet/pivot_controller.esm.js @@ -0,0 +1,67 @@ +import {PivotRenderer} from "@web/views/pivot/pivot_renderer"; +import {_t} from "@web/core/l10n/translation"; +import {patch} from "@web/core/utils/patch"; + +patch(PivotRenderer.prototype, { + isComparingInfo() { + return Boolean(this.model.searchParams.comparison); + }, + containsDuplicatedGroupBys() { + const colGroupBys = new Set( + this.model.metaData.colGroupBys + .concat(this.model.metaData.expandedColGroupBys) + .map((el) => el.split(":")[0]) + ); + const rowGroupBys = new Set( + this.model.metaData.rowGroupBys + .concat(this.model.metaData.expandedRowGroupBys) + .map((el) => el.split(":")[0]) + ); + return Boolean(colGroupBys.intersection(rowGroupBys).size); + }, + containsColGroupBys() { + const colGroupBys = new Set( + this.model.metaData.colGroupBys + .concat(this.model.metaData.expandedColGroupBys) + .map((el) => el.split(":")[0]) + ); + return Boolean(colGroupBys.size); + }, + disableSpreadsheetInsertion() { + return ( + !this.model.hasData() || + !this.model.metaData.activeMeasures.length || + this.containsDuplicatedGroupBys() || + this.isComparingInfo() + ); + }, + getSpreadsheetInsertionTooltip() { + var message = _t("Add to spreadsheet"); + if (this.containsDuplicatedGroupBys()) { + message = _t("Duplicated groupbys in pivot are not supported"); + } else if (this.isComparingInfo()) { + message = _t("Comparisons in pivot are not supported"); + } + return message; + }, + onSpreadsheetButtonClicked() { + this.actionService.doAction( + "spreadsheet_oca.spreadsheet_spreadsheet_import_act_window", + { + additionalContext: { + default_name: this.model.metaData.title, + default_datasource_name: this.model.metaData.title, + default_can_be_dynamic: false, + default_import_data: { + mode: "pivot", + metaData: this.model.metaData, + searchParams: { + ...this.model.searchParams, + domain: this.env.searchModel.domainString, + }, + }, + }, + } + ); + }, +}); diff --git a/spreadsheet_oca/static/src/spreadsheet/pivot_controller.xml b/spreadsheet_oca/static/src/spreadsheet/pivot_controller.xml new file mode 100644 index 00000000..58969472 --- /dev/null +++ b/spreadsheet_oca/static/src/spreadsheet/pivot_controller.xml @@ -0,0 +1,19 @@ + + + + + + + +
+ diff --git a/spreadsheet_oca/views/spreadsheet_spreadsheet.xml b/spreadsheet_oca/views/spreadsheet_spreadsheet.xml new file mode 100644 index 00000000..88ccb123 --- /dev/null +++ b/spreadsheet_oca/views/spreadsheet_spreadsheet.xml @@ -0,0 +1,240 @@ + + + + + spreadsheet.spreadsheet.search (in spreadsheet_oca) + spreadsheet.spreadsheet + + + + + + + + + + + + + + + + + + spreadsheet.spreadsheet.tree (in spreadsheet_oca) + spreadsheet.spreadsheet + + + + +
+ +
+

+
+ +
+

+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + spreadsheet.spreadsheet.kanban + spreadsheet.spreadsheet + + + + + Edit + Delete + + + + +
+
+ + + +
+ +
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+
+ + + Spreadsheets Tags + spreadsheet.spreadsheet.tag + list,form + [] + {} + + + + Spreadsheets + spreadsheet.spreadsheet + kanban,list,form + [] + {'search_default_mysheets': 1} + + + + Spreadsheets + + spreadsheet_oca,static/description/icon.png + + + + + + Configuration + + + + + + + Spreadsheets Tags + + + + + + diff --git a/spreadsheet_oca/wizards/__init__.py b/spreadsheet_oca/wizards/__init__.py new file mode 100644 index 00000000..845f1a3e --- /dev/null +++ b/spreadsheet_oca/wizards/__init__.py @@ -0,0 +1,2 @@ +from . import spreadsheet_select_row_number +from . import spreadsheet_spreadsheet_import diff --git a/spreadsheet_oca/wizards/spreadsheet_select_row_number.py b/spreadsheet_oca/wizards/spreadsheet_select_row_number.py new file mode 100644 index 00000000..357c372a --- /dev/null +++ b/spreadsheet_oca/wizards/spreadsheet_select_row_number.py @@ -0,0 +1,12 @@ +# Copyright 2024 Tecnativa - Carlos Roca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class SpreadsheetSelectRowNumber(models.TransientModel): + _name = "spreadsheet.select.row.number" + _description = "Select number of rows to duplicate row" + + dynamic_rows = fields.Boolean() + number_of_rows = fields.Integer() diff --git a/spreadsheet_oca/wizards/spreadsheet_select_row_number.xml b/spreadsheet_oca/wizards/spreadsheet_select_row_number.xml new file mode 100644 index 00000000..d3e8be09 --- /dev/null +++ b/spreadsheet_oca/wizards/spreadsheet_select_row_number.xml @@ -0,0 +1,17 @@ + + + + spreadsheet.select.row.number.form + spreadsheet.select.row.number + +
+ + + + + + +
+
+
+
diff --git a/spreadsheet_oca/wizards/spreadsheet_spreadsheet_import.py b/spreadsheet_oca/wizards/spreadsheet_spreadsheet_import.py new file mode 100644 index 00000000..92a68e13 --- /dev/null +++ b/spreadsheet_oca/wizards/spreadsheet_spreadsheet_import.py @@ -0,0 +1,73 @@ +# Copyright 2022 CreuBlanca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class SpreadsheetSpreadsheetImport(models.TransientModel): + _name = "spreadsheet.spreadsheet.import" + _description = "Import data to spreadsheet" + + @api.model + def _default_mode_id(self): + return self.env["spreadsheet.spreadsheet.import.mode"].search([], limit=1).id + + name = fields.Char() + datasource_name = fields.Char() + mode_id = fields.Many2one( + "spreadsheet.spreadsheet.import.mode", + required=True, + default=lambda r: r._default_mode_id(), + ) + mode = fields.Char(related="mode_id.code") + import_data = fields.Serialized() + spreadsheet_id = fields.Many2one("spreadsheet.spreadsheet") + can_be_dynamic = fields.Boolean() + is_tree = fields.Boolean() + dynamic = fields.Boolean( + "Dynamic Rows", + help="This field allows you to generate tables that its rows are updated with" + " the filters set in the spreadsheets.", + ) + number_of_rows = fields.Integer() + + def insert_pivot(self): + self.ensure_one() + return getattr(self, f"_insert_pivot_{self.mode_id.code}")() + + def _create_spreadsheet_vals(self): + return {"name": self.name} + + def _insert_pivot_new(self): + spreadsheet = self.env["spreadsheet.spreadsheet"].create( + self._create_spreadsheet_vals() + ) + import_data = self.import_data + import_data["name"] = self.datasource_name + import_data["new"] = 1 + if self.dynamic: + import_data["dyn_number_of_rows"] = self.number_of_rows + return { + "type": "ir.actions.client", + "tag": "action_spreadsheet_oca", + "params": { + "model": spreadsheet._name, + "spreadsheet_id": spreadsheet.id, + "import_data": import_data, + }, + } + + def _insert_pivot_add(self): + import_data = self.import_data + import_data["name"] = self.datasource_name + if self.dynamic: + import_data["dyn_number_of_rows"] = self.number_of_rows + return { + "type": "ir.actions.client", + "tag": "action_spreadsheet_oca", + "params": { + "model": "spreadsheet.spreadsheet", + "spreadsheet_id": self.spreadsheet_id.id, + "import_data": import_data, + }, + } diff --git a/spreadsheet_oca/wizards/spreadsheet_spreadsheet_import.xml b/spreadsheet_oca/wizards/spreadsheet_spreadsheet_import.xml new file mode 100644 index 00000000..aaff82c3 --- /dev/null +++ b/spreadsheet_oca/wizards/spreadsheet_spreadsheet_import.xml @@ -0,0 +1,74 @@ + + + + + spreadsheet.spreadsheet.import.form (in spreadsheet_oca) + spreadsheet.spreadsheet.import + +
+ + + + + + + + + + + + + + +
+
+
+
+
+ + + Import Pivot + spreadsheet.spreadsheet.import + form + {} + new + +