Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions spreadsheet_oca/README.rst
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association

===============
Spreadsheet Oca
===============
Expand All @@ -17,7 +13,7 @@ Spreadsheet Oca
.. |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
.. |badge2| image:: https://img.shields.io/badge/licence-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
Expand Down
4 changes: 3 additions & 1 deletion spreadsheet_oca/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"name": "Spreadsheet Oca",
"summary": """
Allow to edit spreadsheets""",
"version": "18.0.1.2.3",
"version": "18.0.2.0.0",
"license": "AGPL-3",
"author": "CreuBlanca,Odoo Community Association (OCA)",
"website": "https://github.com/OCA/spreadsheet",
Expand All @@ -14,6 +14,8 @@
"security/security.xml",
"security/ir.model.access.csv",
"views/spreadsheet_spreadsheet.xml",
"views/spreadsheet_refresh_schedule_views.xml",
"data/mail_templates.xml",
"data/spreadsheet_spreadsheet_import_mode.xml",
"wizards/spreadsheet_select_row_number.xml",
"wizards/spreadsheet_spreadsheet_import.xml",
Expand Down
56 changes: 56 additions & 0 deletions spreadsheet_oca/data/mail_templates.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2025 Ledo Enterprises LLC
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<!-- ══ Refresh notification (posted to Chatter) ═════════════════════
Rendered by spreadsheet.refresh.schedule._render_refresh_html().
Variables: pivot_html_list

Customise via Settings > Technical > Views, search for
"spreadsheet.refresh.notification". -->
<record model="ir.ui.view" id="spreadsheet_refresh_notification_template">
<field name="name">spreadsheet.refresh.notification</field>
<field name="type">qweb</field>
<field name="arch" type="xml">
<t t-name="spreadsheet_oca.spreadsheet_refresh_notification_template">
<div style="font-family:sans-serif;font-size:14px">
<t t-if="not pivot_html_list">
<p>No ODOO pivot data sources found in this spreadsheet.</p>
</t>
<t t-else="">
<t t-foreach="pivot_html_list" t-as="pivot_html">
<t t-out="pivot_html" />
<hr
style="border:none;border-top:1px solid #eee;margin:8px 0"
/>
</t>
</t>
</div>
</t>
</field>
</record>

<!-- ══ Refresh warning (posted to Chatter on partial failure) ══════
Variables: schedule_name, failed_names -->
<record model="ir.ui.view" id="spreadsheet_refresh_warning_template">
<field name="name">spreadsheet.refresh.warning</field>
<field name="type">qweb</field>
<field name="arch" type="xml">
<t t-name="spreadsheet_oca.spreadsheet_refresh_warning_template">
<p>
[Warning] Refresh schedule <b>
<t t-out="schedule_name" />
</b>
could not load pivot(s):
<t t-foreach="failed_names" t-as="pname">
<b>
<t t-out="pname" />
</b>
<t t-if="not pname_last">, </t>
</t>.
Check server logs for details.
</p>
</t>
</field>
</record>
</odoo>
98 changes: 98 additions & 0 deletions spreadsheet_oca/demo/demo_pivot_dashboard.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
{
"version": 21,
"sheets": [
{
"id": "sheet_partners",
"name": "Partners by Country",
"colNumber": 26,
"rowNumber": 100,
"rows": {},
"cols": {
"0": {"size": 220},
"1": {"size": 140},
"2": {"size": 140},
"3": {"size": 140}
},
"merges": [],
"cells": {
"A1": {"content": "=PIVOT(1)"}
},
"conditionalFormats": [],
"figures": [],
"filterTables": [],
"tables": [],
"dataValidationRules": [],
"comments": {},
"headerGroups": {"ROW": [], "COL": []},
"areGridLinesVisible": true,
"isVisible": true
},
{
"id": "sheet_regions",
"name": "Regions per Country",
"colNumber": 26,
"rowNumber": 100,
"rows": {},
"cols": {
"0": {"size": 220},
"1": {"size": 140}
},
"merges": [],
"cells": {
"A1": {"content": "=PIVOT(2)"}
},
"conditionalFormats": [],
"figures": [],
"filterTables": [],
"tables": [],
"dataValidationRules": [],
"comments": {},
"headerGroups": {"ROW": [], "COL": []},
"areGridLinesVisible": true,
"isVisible": true
}
],
"settings": {},
"customTableStyles": {},
"styles": {},
"formats": {},
"borders": {},
"revisionId": "START_REVISION",
"uniqueFigureIds": true,
"odooVersion": 12,
"globalFilters": [],
"pivots": {
"1": {
"type": "ODOO",
"id": "1",
"formulaId": "1",
"name": "Partners by Country & Type",
"model": "res.partner",
"domain": [["active", "=", true]],
"context": {},
"measures": [{"id": "__count", "fieldName": "__count"}],
"rows": [{"fieldName": "country_id", "order": "desc"}],
"columns": [{"fieldName": "is_company"}],
"sortedColumn": null,
"fieldMatching": {}
},
"2": {
"type": "ODOO",
"id": "2",
"formulaId": "2",
"name": "Regions per Country",
"model": "res.country.state",
"domain": [],
"context": {},
"measures": [{"id": "__count", "fieldName": "__count"}],
"rows": [{"fieldName": "country_id", "order": "desc"}],
"columns": [],
"sortedColumn": null,
"fieldMatching": {}
}
},
"pivotNextId": 3,
"lists": {},
"listNextId": 1,
"chartOdooMenusReferences": {}
}
93 changes: 92 additions & 1 deletion spreadsheet_oca/demo/spreadsheet_spreadsheet.xml
Original file line number Diff line number Diff line change
@@ -1,11 +1,102 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- ════════════════════════════════════════════════════════════════════
Demo Partners (geographic diversity for pivot demos)
════════════════════════════════════════════════════════════════════ -->

<record id="demo_partner_de_1" model="res.partner">
<field name="name">Müller GmbH</field>
<field name="is_company" eval="True" />
<field name="country_id" ref="base.de" />
</record>
<record id="demo_partner_de_2" model="res.partner">
<field name="name">Hans Weber</field>
<field name="country_id" ref="base.de" />
<field name="parent_id" ref="demo_partner_de_1" />
</record>
<record id="demo_partner_fr_1" model="res.partner">
<field name="name">Dupont SA</field>
<field name="is_company" eval="True" />
<field name="country_id" ref="base.fr" />
</record>
<record id="demo_partner_fr_2" model="res.partner">
<field name="name">Marie Leclerc</field>
<field name="country_id" ref="base.fr" />
<field name="parent_id" ref="demo_partner_fr_1" />
</record>
<record id="demo_partner_uk_1" model="res.partner">
<field name="name">British Solutions Ltd</field>
<field name="is_company" eval="True" />
<field name="country_id" ref="base.uk" />
</record>
<record id="demo_partner_uk_2" model="res.partner">
<field name="name">James Clarke</field>
<field name="country_id" ref="base.uk" />
<field name="parent_id" ref="demo_partner_uk_1" />
</record>
<record id="demo_partner_jp_1" model="res.partner">
<field name="name">Tanaka Industries</field>
<field name="is_company" eval="True" />
<field name="country_id" ref="base.jp" />
</record>
<record id="demo_partner_br_1" model="res.partner">
<field name="name">Silva Comércio Ltda</field>
<field name="is_company" eval="True" />
<field name="country_id" ref="base.br" />
</record>
<record id="demo_partner_br_2" model="res.partner">
<field name="name">Ana Costa</field>
<field name="country_id" ref="base.br" />
</record>
<record id="demo_partner_in_1" model="res.partner">
<field name="name">Patel Technologies Pvt Ltd</field>
<field name="is_company" eval="True" />
<field name="country_id" ref="base.in" />
</record>
<record id="demo_partner_in_2" model="res.partner">
<field name="name">Priya Sharma</field>
<field name="country_id" ref="base.in" />
<field name="parent_id" ref="demo_partner_in_1" />
</record>
<record id="demo_partner_au_1" model="res.partner">
<field name="name">Outback Systems Pty Ltd</field>
<field name="is_company" eval="True" />
<field name="country_id" ref="base.au" />
</record>

<!-- ════════════════════════════════════════════════════════════════════
Spreadsheet Records
════════════════════════════════════════════════════════════════════ -->

<record id="demo_spreadsheet" model="spreadsheet.spreadsheet">
<field name="name">Demo spreadsheet</field>
<field name="name">Sales Pipeline Summary</field>
<field name="owner_id" ref="base.user_admin" />
<field
name="spreadsheet_binary_data"
type="base64"
file="spreadsheet_oca/demo/demo_spreadsheet.json"
/>
</record>

<record id="demo_pivot_dashboard" model="spreadsheet.spreadsheet">
<field name="name">Partner Pivot Dashboard</field>
<field name="owner_id" ref="base.user_admin" />
<field
name="spreadsheet_binary_data"
type="base64"
file="spreadsheet_oca/demo/demo_pivot_dashboard.json"
/>
</record>

<!-- ════════════════════════════════════════════════════════════════════
Refresh Schedules
════════════════════════════════════════════════════════════════════ -->

<record id="demo_refresh_weekly" model="spreadsheet.refresh.schedule">
<field name="name">Weekly Pipeline Refresh</field>
<field name="spreadsheet_id" ref="demo_spreadsheet" />
<field name="interval_number">1</field>
<field name="interval_type">weeks</field>
<field name="notify_partner_ids" eval="[(4, ref('base.partner_admin'))]" />
</record>
</odoo>
3 changes: 3 additions & 0 deletions spreadsheet_oca/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
from . import cell_ref # noqa: F401 — shared helpers; must be first
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
from . import pivot_data
from . import spreadsheet_refresh_schedule
Loading
Loading