add spreadsheet_dashboard_pos_cooperative & pos_dashboard_cooperative
This commit is contained in:
parent
86101218e9
commit
5247938b86
34 changed files with 7974 additions and 0 deletions
31
spreadsheet_dashboard_pos_cooperative/README.md
Normal file
31
spreadsheet_dashboard_pos_cooperative/README.md
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
# Spreadsheet Dashboard POS Cooperative
|
||||
|
||||
Publishes spreadsheet-based dashboards in Odoo's *Dashboards* menu, in
|
||||
a dedicated *Cooperative* group. Built on top of o-spreadsheet, the
|
||||
same technology used by Odoo's official `spreadsheet_dashboard_*`
|
||||
modules (`spreadsheet_dashboard_sale`, `spreadsheet_dashboard_purchase`,
|
||||
etc.).
|
||||
|
||||
Depends on `pos_dashboard_cooperative` for the underlying data model
|
||||
(`report.pos.order` extended with member / category / time
|
||||
dimensions).
|
||||
|
||||
Four dashboards are bundled:
|
||||
|
||||
| Dashboard | Contents |
|
||||
|---|---|
|
||||
| POS Overview | Sales, Orders, Avg ticket, Margin + monthly chart |
|
||||
| POS Members | Members vs non-members KPIs + monthly chart + TOP 50 buyers |
|
||||
| POS Categories | Members contribution + TOP 10 families / subfamilies / products |
|
||||
| POS Sales by Time | Sales by day of week + sales by hour of day |
|
||||
|
||||
The JSON files under `data/files/` are hand-authored and intentionally
|
||||
diff-friendly. To redesign one of them visually, install
|
||||
`spreadsheet_oca`, edit in the o-spreadsheet UI, export to JSON and
|
||||
replace the matching file.
|
||||
|
||||
See `readme/USAGE.rst` for the full procedure and metric definitions.
|
||||
|
||||
## License
|
||||
|
||||
AGPL-3.0 or later.
|
||||
1
spreadsheet_dashboard_pos_cooperative/__init__.py
Normal file
1
spreadsheet_dashboard_pos_cooperative/__init__.py
Normal file
|
|
@ -0,0 +1 @@
|
|||
# Part of the spreadsheet_dashboard ecosystem. Nothing to import.
|
||||
20
spreadsheet_dashboard_pos_cooperative/__manifest__.py
Normal file
20
spreadsheet_dashboard_pos_cooperative/__manifest__.py
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
# Copyright 2026 Criptomart
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
{
|
||||
"name": "Spreadsheet dashboard for POS cooperative",
|
||||
"version": "16.0.1.0.0",
|
||||
"category": "Hidden",
|
||||
"summary": "Spreadsheet dashboards for cooperative supermarkets POS",
|
||||
"license": "AGPL-3",
|
||||
"author": "Criptomart, Odoo Community Association (OCA)",
|
||||
"website": "https://github.com/OCA/pos",
|
||||
"depends": [
|
||||
"spreadsheet_dashboard",
|
||||
"pos_dashboard_cooperative",
|
||||
],
|
||||
"data": [
|
||||
"data/dashboards.xml",
|
||||
],
|
||||
"auto_install": ["pos_dashboard_cooperative"],
|
||||
"installable": True,
|
||||
}
|
||||
82
spreadsheet_dashboard_pos_cooperative/data/dashboards.xml
Normal file
82
spreadsheet_dashboard_pos_cooperative/data/dashboards.xml
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2026 Criptomart - License AGPL-3 -->
|
||||
<odoo>
|
||||
|
||||
<!--
|
||||
New dashboard group "Cooperative" sitting alongside the standard
|
||||
Odoo groups (Sales, Finance, HR, ...). Sequence 150 places it
|
||||
right after Sales (100) and before Finance (300).
|
||||
-->
|
||||
<record id="spreadsheet_dashboard_group_cooperative"
|
||||
model="spreadsheet.dashboard.group">
|
||||
<field name="name">PDV Supermercado</field>
|
||||
<field name="sequence">150</field>
|
||||
</record>
|
||||
|
||||
<!--
|
||||
Section 1: high-level KPIs and monthly evolution for the whole
|
||||
store. The "headline" dashboard, intentionally compact so it
|
||||
loads first.
|
||||
-->
|
||||
<record id="spreadsheet_dashboard_pos_overview"
|
||||
model="spreadsheet.dashboard">
|
||||
<field name="name">Ventas</field>
|
||||
<field name="data" type="base64"
|
||||
file="spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json"/>
|
||||
<field name="dashboard_group_id"
|
||||
ref="spreadsheet_dashboard_group_cooperative"/>
|
||||
<field name="group_ids"
|
||||
eval="[Command.link(ref('point_of_sale.group_pos_manager'))]"/>
|
||||
<field name="sequence">100</field>
|
||||
</record>
|
||||
|
||||
<!--
|
||||
Section 4 of the BI brief: sales distribution across days of the
|
||||
week and hours of the day. Two line charts.
|
||||
-->
|
||||
<record id="spreadsheet_dashboard_pos_time"
|
||||
model="spreadsheet.dashboard">
|
||||
<field name="name">Ventas horas y días</field>
|
||||
<field name="data" type="base64"
|
||||
file="spreadsheet_dashboard_pos_cooperative/data/files/time_dashboard.json"/>
|
||||
<field name="dashboard_group_id"
|
||||
ref="spreadsheet_dashboard_group_cooperative"/>
|
||||
<field name="group_ids"
|
||||
eval="[Command.link(ref('point_of_sale.group_pos_manager'))]"/>
|
||||
<field name="sequence">400</field>
|
||||
</record>
|
||||
|
||||
<!--
|
||||
Section 3 of the BI brief: TOP families / subfamilies / products,
|
||||
plus members contribution KPIs (purchase share, penetration).
|
||||
-->
|
||||
<record id="spreadsheet_dashboard_pos_categories"
|
||||
model="spreadsheet.dashboard">
|
||||
<field name="name">Categorías</field>
|
||||
<field name="data" type="base64"
|
||||
file="spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json"/>
|
||||
<field name="dashboard_group_id"
|
||||
ref="spreadsheet_dashboard_group_cooperative"/>
|
||||
<field name="group_ids"
|
||||
eval="[Command.link(ref('point_of_sale.group_pos_manager'))]"/>
|
||||
<field name="sequence">300</field>
|
||||
</record>
|
||||
|
||||
<!--
|
||||
Section 2 of the BI brief: detailed comparison between members
|
||||
and non-members. KPIs per group, monthly evolution chart and a
|
||||
TOP 50 of the best buying members.
|
||||
-->
|
||||
<record id="spreadsheet_dashboard_pos_members"
|
||||
model="spreadsheet.dashboard">
|
||||
<field name="name">Socias</field>
|
||||
<field name="data" type="base64"
|
||||
file="spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json"/>
|
||||
<field name="dashboard_group_id"
|
||||
ref="spreadsheet_dashboard_group_cooperative"/>
|
||||
<field name="group_ids"
|
||||
eval="[Command.link(ref('point_of_sale.group_pos_manager'))]"/>
|
||||
<field name="sequence">200</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,367 @@
|
|||
{
|
||||
"version": 12,
|
||||
"sheets": [
|
||||
{
|
||||
"id": "dashboard",
|
||||
"name": "Overview",
|
||||
"colNumber": 26,
|
||||
"rowNumber": 50,
|
||||
"rows": {
|
||||
"0": {
|
||||
"size": 40
|
||||
}
|
||||
},
|
||||
"cols": {},
|
||||
"merges": [],
|
||||
"cells": {
|
||||
"A1": {
|
||||
"style": 1,
|
||||
"content": "=_t(\"Cooperative POS — Overview\")"
|
||||
},
|
||||
"A3": {
|
||||
"style": 2,
|
||||
"content": "=_t(\"Monthly evolution\")"
|
||||
}
|
||||
},
|
||||
"conditionalFormats": [],
|
||||
"figures": [
|
||||
{
|
||||
"id": "kpi-sales",
|
||||
"x": 0,
|
||||
"y": 60,
|
||||
"width": 200,
|
||||
"height": 120,
|
||||
"tag": "chart",
|
||||
"data": {
|
||||
"type": "scorecard",
|
||||
"title": "Sales (€)",
|
||||
"keyValue": "Data!D1",
|
||||
"baseline": "Data!E1",
|
||||
"baselineDescr": "since last period",
|
||||
"baselineMode": "percentage",
|
||||
"baselineColorUp": "#00A04A",
|
||||
"baselineColorDown": "#DC6965"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "kpi-orders",
|
||||
"x": 220,
|
||||
"y": 60,
|
||||
"width": 200,
|
||||
"height": 120,
|
||||
"tag": "chart",
|
||||
"data": {
|
||||
"type": "scorecard",
|
||||
"title": "Orders",
|
||||
"keyValue": "Data!D2",
|
||||
"baseline": "Data!E2",
|
||||
"baselineDescr": "since last period",
|
||||
"baselineMode": "percentage",
|
||||
"baselineColorUp": "#00A04A",
|
||||
"baselineColorDown": "#DC6965"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "kpi-ticket",
|
||||
"x": 440,
|
||||
"y": 60,
|
||||
"width": 200,
|
||||
"height": 120,
|
||||
"tag": "chart",
|
||||
"data": {
|
||||
"type": "scorecard",
|
||||
"title": "Average ticket (€)",
|
||||
"keyValue": "Data!D3",
|
||||
"baseline": "Data!E3",
|
||||
"baselineDescr": "since last period",
|
||||
"baselineMode": "percentage",
|
||||
"baselineColorUp": "#00A04A",
|
||||
"baselineColorDown": "#DC6965"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "kpi-margin",
|
||||
"x": 660,
|
||||
"y": 60,
|
||||
"width": 200,
|
||||
"height": 120,
|
||||
"tag": "chart",
|
||||
"data": {
|
||||
"type": "scorecard",
|
||||
"title": "Gross margin (€)",
|
||||
"keyValue": "Data!D4",
|
||||
"baseline": "Data!E4",
|
||||
"baselineDescr": "since last period",
|
||||
"baselineMode": "percentage",
|
||||
"baselineColorUp": "#00A04A",
|
||||
"baselineColorDown": "#DC6965"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "chart-monthly-sales",
|
||||
"x": 0,
|
||||
"y": 220,
|
||||
"width": 1000,
|
||||
"height": 300,
|
||||
"tag": "chart",
|
||||
"data": {
|
||||
"title": "Monthly sales (€)",
|
||||
"background": "#FFFFFF",
|
||||
"legendPosition": "none",
|
||||
"metaData": {
|
||||
"groupBy": [
|
||||
"date:month"
|
||||
],
|
||||
"measure": "price_total",
|
||||
"order": null,
|
||||
"resModel": "report.pos.order"
|
||||
},
|
||||
"searchParams": {
|
||||
"comparison": null,
|
||||
"context": {
|
||||
"group_by": [
|
||||
"date:month"
|
||||
],
|
||||
"group_by_no_leaf": 1
|
||||
},
|
||||
"domain": [
|
||||
[
|
||||
"state",
|
||||
"in",
|
||||
[
|
||||
"paid",
|
||||
"done",
|
||||
"invoiced"
|
||||
]
|
||||
]
|
||||
],
|
||||
"groupBy": [
|
||||
"date:month"
|
||||
],
|
||||
"orderBy": []
|
||||
},
|
||||
"type": "odoo_line",
|
||||
"verticalAxisPosition": "left"
|
||||
}
|
||||
}
|
||||
],
|
||||
"areGridLinesVisible": false,
|
||||
"isVisible": true
|
||||
},
|
||||
{
|
||||
"id": "data",
|
||||
"name": "Data",
|
||||
"colNumber": 5,
|
||||
"rowNumber": 10,
|
||||
"rows": {},
|
||||
"cols": {
|
||||
"0": {
|
||||
"size": 200
|
||||
},
|
||||
"1": {
|
||||
"size": 140
|
||||
},
|
||||
"2": {
|
||||
"size": 140
|
||||
},
|
||||
"3": {
|
||||
"size": 140
|
||||
},
|
||||
"4": {
|
||||
"size": 140
|
||||
}
|
||||
},
|
||||
"merges": [],
|
||||
"cells": {
|
||||
"A1": {
|
||||
"content": "=_t(\"KPI - Sales\")"
|
||||
},
|
||||
"A2": {
|
||||
"content": "=_t(\"KPI - Orders\")"
|
||||
},
|
||||
"A3": {
|
||||
"content": "=_t(\"KPI - Average ticket\")"
|
||||
},
|
||||
"A4": {
|
||||
"content": "=_t(\"KPI - Margin\")"
|
||||
},
|
||||
"B1": {
|
||||
"content": "=ODOO.PIVOT(1,\"price_total\")"
|
||||
},
|
||||
"B2": {
|
||||
"content": "=ODOO.PIVOT(1,\"order_id\")"
|
||||
},
|
||||
"B3": {
|
||||
"content": "=IFERROR(B1/B2,0)"
|
||||
},
|
||||
"B4": {
|
||||
"content": "=ODOO.PIVOT(1,\"margin\")"
|
||||
},
|
||||
"C1": {
|
||||
"content": "=ODOO.PIVOT(2,\"price_total\")"
|
||||
},
|
||||
"C2": {
|
||||
"content": "=ODOO.PIVOT(2,\"order_id\")"
|
||||
},
|
||||
"C3": {
|
||||
"content": "=IFERROR(C1/C2,0)"
|
||||
},
|
||||
"C4": {
|
||||
"content": "=ODOO.PIVOT(2,\"margin\")"
|
||||
},
|
||||
"D1": {
|
||||
"content": "=FORMAT.LARGE.NUMBER(B1)"
|
||||
},
|
||||
"D2": {
|
||||
"content": "=FORMAT.LARGE.NUMBER(B2)"
|
||||
},
|
||||
"D3": {
|
||||
"content": "=FORMAT.LARGE.NUMBER(B3)"
|
||||
},
|
||||
"D4": {
|
||||
"content": "=FORMAT.LARGE.NUMBER(B4)"
|
||||
},
|
||||
"E1": {
|
||||
"content": "=FORMAT.LARGE.NUMBER(C1)"
|
||||
},
|
||||
"E2": {
|
||||
"content": "=FORMAT.LARGE.NUMBER(C2)"
|
||||
},
|
||||
"E3": {
|
||||
"content": "=FORMAT.LARGE.NUMBER(C3)"
|
||||
},
|
||||
"E4": {
|
||||
"content": "=FORMAT.LARGE.NUMBER(C4)"
|
||||
}
|
||||
},
|
||||
"conditionalFormats": [],
|
||||
"figures": [],
|
||||
"areGridLinesVisible": true,
|
||||
"isVisible": false
|
||||
}
|
||||
],
|
||||
"entities": {},
|
||||
"styles": {
|
||||
"1": {
|
||||
"bold": true,
|
||||
"fontSize": 22,
|
||||
"textColor": "#2E7D32"
|
||||
},
|
||||
"2": {
|
||||
"bold": true,
|
||||
"fontSize": 14,
|
||||
"textColor": "#333333"
|
||||
}
|
||||
},
|
||||
"formats": {
|
||||
"1": "#,##0.00 [$€]",
|
||||
"2": "#,##0"
|
||||
},
|
||||
"borders": {},
|
||||
"revisionId": "START_REVISION",
|
||||
"chartOdooMenusReferences": {},
|
||||
"odooVersion": 1,
|
||||
"lists": {},
|
||||
"listNextId": 1,
|
||||
"pivots": {
|
||||
"1": {
|
||||
"colGroupBys": [],
|
||||
"context": {
|
||||
"group_by_no_leaf": 1,
|
||||
"group_by": []
|
||||
},
|
||||
"domain": [
|
||||
[
|
||||
"state",
|
||||
"in",
|
||||
[
|
||||
"paid",
|
||||
"done",
|
||||
"invoiced"
|
||||
]
|
||||
]
|
||||
],
|
||||
"id": "1",
|
||||
"measures": [
|
||||
{
|
||||
"field": "price_total"
|
||||
},
|
||||
{
|
||||
"field": "margin"
|
||||
},
|
||||
{
|
||||
"field": "order_id"
|
||||
}
|
||||
],
|
||||
"model": "report.pos.order",
|
||||
"rowGroupBys": [],
|
||||
"name": "POS KPIs - current",
|
||||
"sortedColumn": null
|
||||
},
|
||||
"2": {
|
||||
"colGroupBys": [],
|
||||
"context": {
|
||||
"group_by_no_leaf": 1,
|
||||
"group_by": []
|
||||
},
|
||||
"domain": [
|
||||
[
|
||||
"state",
|
||||
"in",
|
||||
[
|
||||
"paid",
|
||||
"done",
|
||||
"invoiced"
|
||||
]
|
||||
]
|
||||
],
|
||||
"id": "2",
|
||||
"measures": [
|
||||
{
|
||||
"field": "price_total"
|
||||
},
|
||||
{
|
||||
"field": "margin"
|
||||
},
|
||||
{
|
||||
"field": "order_id"
|
||||
}
|
||||
],
|
||||
"model": "report.pos.order",
|
||||
"rowGroupBys": [],
|
||||
"name": "POS KPIs - previous",
|
||||
"sortedColumn": null
|
||||
}
|
||||
},
|
||||
"pivotNextId": 3,
|
||||
"globalFilters": [
|
||||
{
|
||||
"id": "11111111-1111-1111-1111-111111111111",
|
||||
"type": "date",
|
||||
"label": "Period",
|
||||
"defaultValue": {},
|
||||
"rangeType": "month",
|
||||
"defaultsToCurrentPeriod": true,
|
||||
"pivotFields": {
|
||||
"1": {
|
||||
"field": "date",
|
||||
"type": "datetime",
|
||||
"offset": 0
|
||||
},
|
||||
"2": {
|
||||
"field": "date",
|
||||
"type": "datetime",
|
||||
"offset": -1
|
||||
}
|
||||
},
|
||||
"listFields": {},
|
||||
"graphFields": {
|
||||
"chart-monthly-sales": {
|
||||
"field": "date",
|
||||
"type": "datetime",
|
||||
"offset": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,221 @@
|
|||
{
|
||||
"version": 12,
|
||||
"sheets": [
|
||||
{
|
||||
"id": "dashboard",
|
||||
"name": "Sales by time",
|
||||
"colNumber": 26,
|
||||
"rowNumber": 50,
|
||||
"rows": {
|
||||
"0": {
|
||||
"size": 40
|
||||
}
|
||||
},
|
||||
"cols": {},
|
||||
"merges": [],
|
||||
"cells": {
|
||||
"A1": {
|
||||
"style": 1,
|
||||
"content": "=_t(\"Cooperative POS — Sales by hours and days\")"
|
||||
},
|
||||
"A3": {
|
||||
"style": 2,
|
||||
"content": "=_t(\"Sales by day of the week\")"
|
||||
},
|
||||
"A20": {
|
||||
"style": 2,
|
||||
"content": "=_t(\"Sales by hour of the day\")"
|
||||
}
|
||||
},
|
||||
"conditionalFormats": [],
|
||||
"figures": [
|
||||
{
|
||||
"id": "chart-by-day",
|
||||
"x": 0,
|
||||
"y": 60,
|
||||
"width": 1000,
|
||||
"height": 280,
|
||||
"tag": "chart",
|
||||
"data": {
|
||||
"title": "Sales by day of week",
|
||||
"background": "#FFFFFF",
|
||||
"legendPosition": "none",
|
||||
"metaData": {
|
||||
"groupBy": [
|
||||
"day_of_week"
|
||||
],
|
||||
"measure": "price_total",
|
||||
"order": null,
|
||||
"resModel": "report.pos.order"
|
||||
},
|
||||
"searchParams": {
|
||||
"comparison": null,
|
||||
"context": {
|
||||
"group_by": [
|
||||
"day_of_week"
|
||||
],
|
||||
"group_by_no_leaf": 1
|
||||
},
|
||||
"domain": [
|
||||
[
|
||||
"state",
|
||||
"in",
|
||||
[
|
||||
"paid",
|
||||
"done",
|
||||
"invoiced"
|
||||
]
|
||||
]
|
||||
],
|
||||
"groupBy": [
|
||||
"day_of_week"
|
||||
],
|
||||
"orderBy": []
|
||||
},
|
||||
"type": "odoo_line",
|
||||
"verticalAxisPosition": "left"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "chart-by-hour",
|
||||
"x": 0,
|
||||
"y": 380,
|
||||
"width": 1000,
|
||||
"height": 280,
|
||||
"tag": "chart",
|
||||
"data": {
|
||||
"title": "Sales by hour of day",
|
||||
"background": "#FFFFFF",
|
||||
"legendPosition": "none",
|
||||
"metaData": {
|
||||
"groupBy": [
|
||||
"hour_of_day"
|
||||
],
|
||||
"measure": "price_total",
|
||||
"order": null,
|
||||
"resModel": "report.pos.order"
|
||||
},
|
||||
"searchParams": {
|
||||
"comparison": null,
|
||||
"context": {
|
||||
"group_by": [
|
||||
"hour_of_day"
|
||||
],
|
||||
"group_by_no_leaf": 1
|
||||
},
|
||||
"domain": [
|
||||
[
|
||||
"state",
|
||||
"in",
|
||||
[
|
||||
"paid",
|
||||
"done",
|
||||
"invoiced"
|
||||
]
|
||||
]
|
||||
],
|
||||
"groupBy": [
|
||||
"hour_of_day"
|
||||
],
|
||||
"orderBy": []
|
||||
},
|
||||
"type": "odoo_line",
|
||||
"verticalAxisPosition": "left"
|
||||
}
|
||||
}
|
||||
],
|
||||
"areGridLinesVisible": false,
|
||||
"isVisible": true
|
||||
}
|
||||
],
|
||||
"entities": {},
|
||||
"styles": {
|
||||
"1": {
|
||||
"bold": true,
|
||||
"fontSize": 22,
|
||||
"textColor": "#2E7D32"
|
||||
},
|
||||
"2": {
|
||||
"bold": true,
|
||||
"fontSize": 14,
|
||||
"textColor": "#333333"
|
||||
}
|
||||
},
|
||||
"formats": {},
|
||||
"borders": {},
|
||||
"revisionId": "START_REVISION",
|
||||
"chartOdooMenusReferences": {},
|
||||
"odooVersion": 1,
|
||||
"lists": {},
|
||||
"listNextId": 1,
|
||||
"pivots": {},
|
||||
"pivotNextId": 1,
|
||||
"globalFilters": [
|
||||
{
|
||||
"id": "11111111-1111-1111-1111-111111111111",
|
||||
"type": "date",
|
||||
"label": "Period",
|
||||
"defaultValue": {},
|
||||
"rangeType": "month",
|
||||
"defaultsToCurrentPeriod": true,
|
||||
"pivotFields": {},
|
||||
"listFields": {},
|
||||
"graphFields": {
|
||||
"chart-by-day": {
|
||||
"field": "date",
|
||||
"type": "datetime",
|
||||
"offset": 0
|
||||
},
|
||||
"chart-by-hour": {
|
||||
"field": "date",
|
||||
"type": "datetime",
|
||||
"offset": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "22222222-2222-2222-2222-222222222222",
|
||||
"type": "relation",
|
||||
"label": "Product Category",
|
||||
"modelName": "product.category",
|
||||
"defaultValue": [],
|
||||
"defaultValueDisplayNames": [],
|
||||
"rangeType": "year",
|
||||
"defaultsToCurrentPeriod": false,
|
||||
"pivotFields": {},
|
||||
"listFields": {},
|
||||
"graphFields": {
|
||||
"chart-by-day": {
|
||||
"field": "product_categ_id",
|
||||
"type": "many2one"
|
||||
},
|
||||
"chart-by-hour": {
|
||||
"field": "product_categ_id",
|
||||
"type": "many2one"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "33333333-3333-3333-3333-333333333333",
|
||||
"type": "relation",
|
||||
"label": "Product",
|
||||
"modelName": "product.product",
|
||||
"defaultValue": [],
|
||||
"defaultValueDisplayNames": [],
|
||||
"rangeType": "year",
|
||||
"defaultsToCurrentPeriod": false,
|
||||
"pivotFields": {},
|
||||
"listFields": {},
|
||||
"graphFields": {
|
||||
"chart-by-day": {
|
||||
"field": "product_id",
|
||||
"type": "many2one"
|
||||
},
|
||||
"chart-by-hour": {
|
||||
"field": "product_id",
|
||||
"type": "many2one"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
634
spreadsheet_dashboard_pos_cooperative/i18n/es.po
Normal file
634
spreadsheet_dashboard_pos_cooperative/i18n/es.po
Normal file
|
|
@ -0,0 +1,634 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * spreadsheet_dashboard_pos_cooperative
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-06-05 15:43+0000\n"
|
||||
"PO-Revision-Date: 2026-06-05 15:43+0000\n"
|
||||
"Last-Translator: Criptomart\n"
|
||||
"Language-Team: Spanish\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Language: es\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Average ticket (€)"
|
||||
msgstr "Ticket medio (€)"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Categoría"
|
||||
msgstr "Categoría"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Compradoras distintas (no socias)"
|
||||
msgstr "Compradoras distintas (no socias)"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Compradoras distintas (socias)"
|
||||
msgstr "Compradoras distintas (socias)"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Contribución de las socias"
|
||||
msgstr "Contribución de las socias"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Cooperative POS — Categories"
|
||||
msgstr "TPV Cooperativa — Categorías"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Cooperative POS — Members vs Non-members"
|
||||
msgstr "TPV Cooperativa — Socias vs no socias"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Cooperative POS — Overview"
|
||||
msgstr "TPV Cooperativa — Vista general"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/time_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Cooperative POS — Sales by hours and days"
|
||||
msgstr "TPV Cooperativa — Ventas por horas y días"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Cuota %"
|
||||
msgstr "Cuota %"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Cuota de compra"
|
||||
msgstr "Cuota de compra"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Cuota de compra %"
|
||||
msgstr "Cuota de compra %"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Evolución mensual por condición de socia"
|
||||
msgstr "Evolución mensual por condición de socia"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Evolución mensual — Socias vs no socias"
|
||||
msgstr "Evolución mensual — Socias vs no socias"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Evolución mensual — Socias vs no socias (€)"
|
||||
msgstr "Evolución mensual — Socias vs no socias (€)"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Familia"
|
||||
msgstr "Familia"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Frecuencia socias"
|
||||
msgstr "Frecuencia socias"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Gross margin (€)"
|
||||
msgstr "Margen bruto (€)"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "KPI - Average ticket"
|
||||
msgstr "KPI - Ticket medio"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "KPI - Margin"
|
||||
msgstr "KPI - Margen"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "KPI - Orders"
|
||||
msgstr "KPI - Tickets"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "KPI - Sales"
|
||||
msgstr "KPI - Ventas"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "KPIs de no socias"
|
||||
msgstr "KPIs de no socias"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "KPIs de socias"
|
||||
msgstr "KPIs de socias"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Mejores compradoras (socias)"
|
||||
msgstr "Mejores compradoras (socias)"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Monthly evolution"
|
||||
msgstr "Evolución mensual"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Monthly sales (€)"
|
||||
msgstr "Ventas mensuales (€)"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Orders"
|
||||
msgstr "Tickets"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "POS KPIs"
|
||||
msgstr "POS KPIs"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Penetración socias"
|
||||
msgstr "Penetración socias"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Penetración socias %"
|
||||
msgstr "Penetración socias %"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/time_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Period"
|
||||
msgstr "Período"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/time_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Product"
|
||||
msgstr "Producto"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/time_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Product Category"
|
||||
msgstr "Categoría de producto"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Producto"
|
||||
msgstr "Producto"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Sales (€)"
|
||||
msgstr "Ventas (€)"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/time_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Sales by day of the week"
|
||||
msgstr "Ventas por día de la semana"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/time_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Sales by day of week"
|
||||
msgstr "Ventas por día de la semana"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/time_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Sales by hour of day"
|
||||
msgstr "Ventas por hora del día"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/time_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Sales by hour of the day"
|
||||
msgstr "Ventas por hora del día"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Socia"
|
||||
msgstr "Socia"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Socias - Compradoras distintas"
|
||||
msgstr "Socias - Compradoras distintas"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Socias - Frecuencia"
|
||||
msgstr "Socias - Frecuencia"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Socias - Ticket medio"
|
||||
msgstr "Socias - Ticket medio"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Socias - Tickets"
|
||||
msgstr "Socias - Tickets"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Socias - UPT"
|
||||
msgstr "Socias - UPT"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Socias - Ventas"
|
||||
msgstr "Socias - Ventas"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Subfamilia"
|
||||
msgstr "Subfamilia"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "TOP 50 socias compradoras"
|
||||
msgstr "TOP 50 socias compradoras"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "TPV por condición de socia"
|
||||
msgstr "TPV por condición de socia"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Ticket medio (€)"
|
||||
msgstr "Ticket medio (€)"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Ticket medio no socias (€)"
|
||||
msgstr "Ticket medio no socias (€)"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Ticket medio socias (€)"
|
||||
msgstr "Ticket medio socias (€)"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Tickets"
|
||||
msgstr "Tickets"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Tickets no socias"
|
||||
msgstr "Tickets no socias"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Tickets socias"
|
||||
msgstr "Tickets socias"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Top 10 categorías"
|
||||
msgstr "Top 10 categorías"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Top 10 familias"
|
||||
msgstr "Top 10 familias"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Top 10 productos"
|
||||
msgstr "Top 10 productos"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Top 10 subfamilias"
|
||||
msgstr "Top 10 subfamilias"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Top categorías"
|
||||
msgstr "Top categorías"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Top familias"
|
||||
msgstr "Top familias"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Top productos"
|
||||
msgstr "Top productos"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Top subfamilias"
|
||||
msgstr "Top subfamilias"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Total compradoras distintas"
|
||||
msgstr "Total compradoras distintas"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Total ventas"
|
||||
msgstr "Total ventas"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "UPT"
|
||||
msgstr "UPT"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "UPT no socias"
|
||||
msgstr "UPT no socias"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "UPT socias"
|
||||
msgstr "UPT socias"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Unidades"
|
||||
msgstr "Unidades"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Ventas (€)"
|
||||
msgstr "Ventas (€)"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Ventas no socias (€)"
|
||||
msgstr "Ventas no socias (€)"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Ventas socias (€)"
|
||||
msgstr "Ventas socias (€)"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "en el período"
|
||||
msgstr "en el período"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "in selected period"
|
||||
msgstr "en el período seleccionado"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "sales / orders"
|
||||
msgstr "ventas / tickets"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "socias compradoras / total"
|
||||
msgstr "socias compradoras / total"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "socias únicas"
|
||||
msgstr "socias únicas"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "tickets"
|
||||
msgstr "tickets"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "tickets / compradora"
|
||||
msgstr "tickets / compradora"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "uds / ticket"
|
||||
msgstr "uds / ticket"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "ventas / tickets"
|
||||
msgstr "ventas / tickets"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "ventas socias / total"
|
||||
msgstr "ventas socias / total"
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "únicas"
|
||||
msgstr "únicas"
|
||||
|
|
@ -0,0 +1,633 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * spreadsheet_dashboard_pos_cooperative
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-06-05 15:43+0000\n"
|
||||
"PO-Revision-Date: 2026-06-05 15:43+0000\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_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Average ticket (€)"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Categoría"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Compradoras distintas (no socias)"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Compradoras distintas (socias)"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Contribución de las socias"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Cooperative POS — Categories"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Cooperative POS — Members vs Non-members"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Cooperative POS — Overview"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/time_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Cooperative POS — Sales by hours and days"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Cuota %"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Cuota de compra"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Cuota de compra %"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Evolución mensual por condición de socia"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Evolución mensual — Socias vs no socias"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Evolución mensual — Socias vs no socias (€)"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Familia"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Frecuencia socias"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Gross margin (€)"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "KPI - Average ticket"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "KPI - Margin"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "KPI - Orders"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "KPI - Sales"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "KPIs de no socias"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "KPIs de socias"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Mejores compradoras (socias)"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Monthly evolution"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Monthly sales (€)"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Orders"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "POS KPIs"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Penetración socias"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Penetración socias %"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/time_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Period"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/time_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/time_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Product Category"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Producto"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Sales (€)"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/time_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Sales by day of the week"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/time_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Sales by day of week"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/time_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Sales by hour of day"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/time_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Sales by hour of the day"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Socia"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Socias - Compradoras distintas"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Socias - Frecuencia"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Socias - Ticket medio"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Socias - Tickets"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Socias - UPT"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Socias - Ventas"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Subfamilia"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "TOP 50 socias compradoras"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "TPV por condición de socia"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Ticket medio (€)"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Ticket medio no socias (€)"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Ticket medio socias (€)"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Tickets"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Tickets no socias"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Tickets socias"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Top 10 categorías"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Top 10 familias"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Top 10 productos"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Top 10 subfamilias"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Top categorías"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Top familias"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Top productos"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Top subfamilias"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Total compradoras distintas"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Total ventas"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "UPT"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "UPT no socias"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "UPT socias"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Unidades"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/categories_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Ventas (€)"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Ventas no socias (€)"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "Ventas socias (€)"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "en el período"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "in selected period"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "sales / orders"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "socias compradoras / total"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "socias únicas"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/overview_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "tickets"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "tickets / compradora"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "uds / ticket"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "ventas / tickets"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "ventas socias / total"
|
||||
msgstr ""
|
||||
|
||||
#. module: spreadsheet_dashboard_pos_cooperative
|
||||
#. odoo-javascript
|
||||
#: code:addons/spreadsheet_dashboard_pos_cooperative/data/files/members_dashboard.json:0
|
||||
#, python-format
|
||||
msgid "únicas"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1 @@
|
|||
* Criptomart <https://criptomart.net>
|
||||
23
spreadsheet_dashboard_pos_cooperative/readme/DESCRIPTION.rst
Normal file
23
spreadsheet_dashboard_pos_cooperative/readme/DESCRIPTION.rst
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
Publishes spreadsheet-based dashboards for cooperative supermarkets
|
||||
in Odoo's *Dashboards* menu, under a dedicated *Cooperative* group.
|
||||
|
||||
The dashboards consume the data prepared by ``pos_dashboard_cooperative``
|
||||
(extended ``report.pos.order`` with member-at-date flag, category
|
||||
hierarchy and time dimensions). They use Odoo's o-spreadsheet engine,
|
||||
the same as Odoo Enterprise's official ``spreadsheet_dashboard_*``
|
||||
modules.
|
||||
|
||||
Four dashboards ship out of the box:
|
||||
|
||||
* **POS Overview** — headline KPIs (Sales, Orders, Average ticket,
|
||||
Margin) and monthly evolution.
|
||||
* **POS Members** — members vs non-members comparison, monthly
|
||||
evolution chart, TOP 50 buying members.
|
||||
* **POS Categories** — members contribution KPIs and TOP 10 families,
|
||||
subfamilies and products.
|
||||
* **POS Sales by Time** — sales by day of the week and hour of the
|
||||
day.
|
||||
|
||||
Each dashboard is a small hand-authored JSON file. They can be
|
||||
redesigned visually inside o-spreadsheet (with ``spreadsheet_oca``
|
||||
installed) and re-exported; see USAGE for the workflow.
|
||||
38
spreadsheet_dashboard_pos_cooperative/readme/ROADMAP.rst
Normal file
38
spreadsheet_dashboard_pos_cooperative/readme/ROADMAP.rst
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
* Period-over-period comparisons on the scorecards (the BI brief shows
|
||||
"X% desde el último periodo" arrows on every KPI). In o-spreadsheet
|
||||
this is wired through ``baseline`` references plus a comparison
|
||||
range on the date global filter. Postponed until the four dashboards
|
||||
are validated by the customer in production.
|
||||
|
||||
* Quarter-level selection (*Q1..Q4*) on the ``Period`` filter. The
|
||||
o-spreadsheet date filter in Odoo 16 only accepts a single
|
||||
``rangeType`` per filter; we picked ``month`` because it is the
|
||||
finest granularity. A second date filter with ``rangeType:
|
||||
"quarter"`` would coexist visually but duplicate the year picker,
|
||||
which the customer rejected. Revisit in Odoo 17 where the filter
|
||||
UI allows choosing the granularity dynamically.
|
||||
|
||||
* Rolling-window date filter (*Last 30 / 90 / 180 days*) as an
|
||||
alternative to the month picker. Same limitation as above (one
|
||||
``rangeType`` per filter).
|
||||
|
||||
* "Sales concentration" KPI on the Categories dashboard: share of
|
||||
sales captured by the top 20% of buying members. The Top buyers
|
||||
pivot already exists in the Members dashboard; only an aggregation
|
||||
formula plus a scorecard would be needed.
|
||||
|
||||
* Stricter definition of **Members penetration** as ``distinct member
|
||||
buyers / total members in the cooperative`` (instead of the current
|
||||
``/ total buyers in the period``). Requires sourcing the total from
|
||||
``share.line`` rather than from ``report.pos.order``.
|
||||
|
||||
* Translate ``spreadsheet.dashboard.name`` / ``spreadsheet.dashboard.group.name``
|
||||
so the entries in the *Dashboards* menu render in the user's
|
||||
language (currently always English: *POS Overview*, *POS Members*,
|
||||
etc.). Blocked upstream: the core ``name`` fields are not declared
|
||||
``translate=True``. Either patch the core fields downstream or rename
|
||||
the records to the customer's primary language in the XML.
|
||||
|
||||
* Add Galician, Catalan, French, Dutch and Croatian translations.
|
||||
Spanish (``es.po``) ships out of the box. The other locales can be
|
||||
produced from the same ``.pot`` by translating each ``msgstr``.
|
||||
149
spreadsheet_dashboard_pos_cooperative/readme/USAGE.rst
Normal file
149
spreadsheet_dashboard_pos_cooperative/readme/USAGE.rst
Normal file
|
|
@ -0,0 +1,149 @@
|
|||
Open *Dashboards → Cooperative* in the Odoo backend. Four dashboards
|
||||
are published:
|
||||
|
||||
The workbook content (titles, KPI labels, table headers, scorecard
|
||||
descriptions) is available in **English (source) and Spanish** out of
|
||||
the box. Users with ``lang = es_ES`` will see all in-cell texts in
|
||||
Spanish; the rest of the locales can be added by translating the
|
||||
``i18n/spreadsheet_dashboard_pos_cooperative.pot`` template.
|
||||
|
||||
Note: the dashboard names shown in the *Dashboards* menu sidebar
|
||||
(*POS Overview*, *POS Members*, *POS Categories*, *POS Sales by
|
||||
Time*) are not translatable because ``spreadsheet.dashboard.name`` is
|
||||
not declared as a translatable field in Odoo core.
|
||||
|
||||
POS Overview
|
||||
============
|
||||
|
||||
Headline KPIs and monthly evolution for the whole store.
|
||||
|
||||
* **Sales (€)** — sum of ``price_total`` over orders in the period.
|
||||
* **Orders** — count of distinct ``order_id``.
|
||||
* **Average ticket (€)** — ``Sales / Orders``.
|
||||
* **Gross margin (€)** — sum of ``margin``.
|
||||
* A line chart with monthly sales evolution.
|
||||
|
||||
POS Members
|
||||
===========
|
||||
|
||||
Detailed comparison between cooperative members and non-members. For
|
||||
each group the dashboard shows:
|
||||
|
||||
* Sales (€), Orders, Average ticket (€), UPT, Distinct buyers, and
|
||||
(members only) Frequency.
|
||||
* Monthly evolution chart with one line per group.
|
||||
* TOP 50 buying members (ranked by sales), with sales, orders, units,
|
||||
average ticket and UPT.
|
||||
|
||||
POS Categories
|
||||
==============
|
||||
|
||||
Members contribution KPIs and the top product breakdowns.
|
||||
|
||||
* **Members sales (€)** — sales from orders where the customer was a
|
||||
cooperative member at the order date.
|
||||
* **Purchase share** — ``members sales / total sales``.
|
||||
* **Members penetration** — ``distinct members buyers / distinct total
|
||||
buyers`` (see "Metric definitions" below for the caveat).
|
||||
* TOP 10 product families (root categories) with sales, orders, share %.
|
||||
* TOP 10 product subfamilies (parent categories) with the same columns.
|
||||
* TOP 10 products with sales, units, share %.
|
||||
|
||||
POS Sales by Time
|
||||
=================
|
||||
|
||||
* Line chart of sales by ISO day of the week (1 = Monday, 7 = Sunday).
|
||||
* Line chart of sales by hour of the day (0..23).
|
||||
|
||||
Global filters
|
||||
==============
|
||||
|
||||
Every dashboard ships a ``Period`` date filter. Members, Categories
|
||||
and Sales by Time also ship ``Product Category``, ``Product`` and
|
||||
(Members only) ``Member`` relation filters. Each filter is wired to
|
||||
every pivot and chart on the dashboard, so changing one selection
|
||||
updates the whole view.
|
||||
|
||||
* **Period** — year picker plus a month dropdown
|
||||
(January..December). Pick a year only to look at the full year
|
||||
(e.g. *2026*, *2025*), or add a month to narrow the range (e.g.
|
||||
*March 2026*). Defaults to the current month.
|
||||
* **Product Category** — relation picker over ``product.category``.
|
||||
Choose one or more categories to restrict every metric to products
|
||||
of those categories. Empty = no restriction.
|
||||
* **Product** — relation picker over ``product.product``. Useful to
|
||||
audit a specific reference.
|
||||
* **Member** — relation picker over ``res.partner``. Available only
|
||||
on the Members dashboard; restricts the comparison and the TOP 50
|
||||
to the selected partners.
|
||||
|
||||
Note: the o-spreadsheet date filter in Odoo 16 only accepts a single
|
||||
``rangeType`` per filter (year, quarter or month). We chose ``month``
|
||||
because it is the finest granularity the customer requested; for
|
||||
year-only views, just pick a year and leave the month dropdown
|
||||
unset. Rolling ranges (*Last 30 / 90 / 180 days*) and quarter
|
||||
selection (*Q1..Q4*) are not available on the spreadsheet filters;
|
||||
both are handled in ``pos_dashboard_cooperative`` through the
|
||||
standard search view on *Point of Sale → Reporting → Cooperative
|
||||
Dashboards*, which exposes the usual Odoo date filters.
|
||||
|
||||
Metric definitions
|
||||
==================
|
||||
|
||||
The BI brief from the customer left several KPIs without a precise
|
||||
formulation. The dashboards use the following standard retail
|
||||
definitions; revise them in the JSON if your cooperative prefers a
|
||||
different convention.
|
||||
|
||||
* **UPT** (Units per Ticket) = ``total units sold / number of
|
||||
orders``. ``product_qty`` summed and divided by distinct
|
||||
``order_id``.
|
||||
* **Frequency** = ``number of orders / number of distinct buyers``.
|
||||
Measures how many tickets the average member buyer made in the
|
||||
period.
|
||||
* **Average ticket (€)** = ``total sales / number of orders``. POS has
|
||||
no separate "average ticket value", so this metric matches the
|
||||
"Ticket medio" and "Valor medio del ticket" rows in the BI brief.
|
||||
* **Purchase share %** = ``members sales / total sales``. Share of
|
||||
total revenue contributed by member-driven orders.
|
||||
* **Members penetration %** = ``distinct member buyers / distinct
|
||||
total buyers`` *in the selected period*. Note: a stricter definition
|
||||
would be ``distinct member buyers / total members in the
|
||||
cooperative`` (regardless of whether they bought). That denominator
|
||||
is not exposed by ``report.pos.order``; a future iteration may add a
|
||||
separate KPI sourced from ``share.line``.
|
||||
* **Sales concentration** (not yet rendered) would be the share of
|
||||
sales captured by the top X% of buying members, typically X = 20.
|
||||
Easy to add later from the same ``Top buyers`` pivot.
|
||||
|
||||
Iterating on the layouts
|
||||
========================
|
||||
|
||||
Each dashboard is a ``data/files/*.json`` file shipped as a base64
|
||||
binary on a ``spreadsheet.dashboard`` record. They are intentionally
|
||||
small and hand-authored to be diff-friendly.
|
||||
|
||||
To redesign one of them visually:
|
||||
|
||||
1. Install ``spreadsheet_oca`` (from OCA's ``spreadsheet`` repository)
|
||||
on top of this module. It provides full o-spreadsheet editing in
|
||||
the backend, including saving back to ``spreadsheet.dashboard``.
|
||||
2. Open the dashboard in *Dashboards → Cooperative*.
|
||||
3. Edit pivots, charts, styles and global filters from the
|
||||
o-spreadsheet UI. The data sources are pre-wired against
|
||||
``report.pos.order`` and consume the dimensions exposed by
|
||||
``pos_dashboard_cooperative``:
|
||||
|
||||
* ``is_member_at_date`` (boolean) — cooperative member flag at the
|
||||
order date.
|
||||
* ``categ_root_id`` / ``categ_parent_id`` — product family /
|
||||
subfamily.
|
||||
* ``hour_of_day`` / ``day_of_week`` — time distributions.
|
||||
|
||||
4. Export the workbook to JSON.
|
||||
5. Replace the matching ``data/files/<name>.json`` and reinstall (or
|
||||
upgrade) the module.
|
||||
|
||||
Reference: the same workflow is used by Odoo core's
|
||||
``spreadsheet_dashboard_sale``, ``spreadsheet_dashboard_purchase`` and
|
||||
similar modules.
|
||||
Loading…
Add table
Add a link
Reference in a new issue