104 lines
4.9 KiB
XML
104 lines
4.9 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- Copyright 2026 Criptomart - License AGPL-3 -->
|
|
<odoo noupdate="1">
|
|
|
|
<!--
|
|
Tile categories shown in the dashboard.
|
|
Two categories: a "members" one (members only) and a generic one
|
|
for global sales KPIs.
|
|
-->
|
|
<record id="tile_category_cooperative" model="tile.category">
|
|
<field name="name">Cooperative POS</field>
|
|
<field name="sequence">100</field>
|
|
<field name="active" eval="True"/>
|
|
</record>
|
|
|
|
<!--
|
|
Tile: Total sales (excluding refunds).
|
|
Sums price_total over the last 30 days. Uses paid/done/invoiced
|
|
states to exclude drafts and cancellations.
|
|
|
|
NOTE on accuracy: tile.tile counts/aggregates records of the
|
|
target model. report.pos.order is at line granularity, so:
|
|
- SUM(price_total) is correctly the total amount sold.
|
|
- COUNT() would count *lines*, not tickets. To count tickets we
|
|
would need DISTINCT order_id which tile.tile does not support.
|
|
Use the pivot views for ticket-accurate metrics; tiles are
|
|
intentionally limited to monetary KPIs that aggregate by simple
|
|
SUM over lines.
|
|
-->
|
|
<record id="tile_pos_sales_last_30_days" model="tile.tile">
|
|
<field name="name">Sales last 30 days (€)</field>
|
|
<field name="sequence">10</field>
|
|
<field name="category_id" ref="tile_category_cooperative"/>
|
|
<field name="model_id" ref="point_of_sale.model_report_pos_order"/>
|
|
<field name="action_id" ref="action_pos_dashboard_overview"/>
|
|
<field name="primary_function">sum</field>
|
|
<field name="primary_field_id"
|
|
ref="point_of_sale.field_report_pos_order__price_total"/>
|
|
<field name="primary_format">{:,.2f} €</field>
|
|
<field
|
|
name="domain"
|
|
>[('state', 'in', ['paid', 'done', 'invoiced']),
|
|
('date', '>=', (context_today - relativedelta(days=30)).strftime('%Y-%m-%d'))]</field>
|
|
<field name="background_color">#2E7D32</field>
|
|
<field name="font_color">#FFFFFF</field>
|
|
</record>
|
|
|
|
<record id="tile_pos_margin_last_30_days" model="tile.tile">
|
|
<field name="name">Margin last 30 days (€)</field>
|
|
<field name="sequence">20</field>
|
|
<field name="category_id" ref="tile_category_cooperative"/>
|
|
<field name="model_id" ref="point_of_sale.model_report_pos_order"/>
|
|
<field name="action_id" ref="action_pos_dashboard_overview"/>
|
|
<field name="primary_function">sum</field>
|
|
<field name="primary_field_id"
|
|
ref="point_of_sale.field_report_pos_order__margin"/>
|
|
<field name="primary_format">{:,.2f} €</field>
|
|
<field
|
|
name="domain"
|
|
>[('state', 'in', ['paid', 'done', 'invoiced']),
|
|
('date', '>=', (context_today - relativedelta(days=30)).strftime('%Y-%m-%d'))]</field>
|
|
<field name="background_color">#1565C0</field>
|
|
<field name="font_color">#FFFFFF</field>
|
|
</record>
|
|
|
|
<record id="tile_pos_sales_members_last_30_days" model="tile.tile">
|
|
<field name="name">Members sales last 30 days (€)</field>
|
|
<field name="sequence">30</field>
|
|
<field name="category_id" ref="tile_category_cooperative"/>
|
|
<field name="model_id" ref="point_of_sale.model_report_pos_order"/>
|
|
<field name="action_id" ref="action_pos_dashboard_members"/>
|
|
<field name="primary_function">sum</field>
|
|
<field name="primary_field_id"
|
|
ref="point_of_sale.field_report_pos_order__price_total"/>
|
|
<field name="primary_format">{:,.2f} €</field>
|
|
<field
|
|
name="domain"
|
|
>[('state', 'in', ['paid', 'done', 'invoiced']),
|
|
('is_member_at_date', '=', True),
|
|
('date', '>=', (context_today - relativedelta(days=30)).strftime('%Y-%m-%d'))]</field>
|
|
<field name="background_color">#EF6C00</field>
|
|
<field name="font_color">#FFFFFF</field>
|
|
</record>
|
|
|
|
<record id="tile_pos_sales_non_members_last_30_days" model="tile.tile">
|
|
<field name="name">Non-members sales last 30 days (€)</field>
|
|
<field name="sequence">40</field>
|
|
<field name="category_id" ref="tile_category_cooperative"/>
|
|
<field name="model_id" ref="point_of_sale.model_report_pos_order"/>
|
|
<field name="action_id" ref="action_pos_dashboard_members"/>
|
|
<field name="primary_function">sum</field>
|
|
<field name="primary_field_id"
|
|
ref="point_of_sale.field_report_pos_order__price_total"/>
|
|
<field name="primary_format">{:,.2f} €</field>
|
|
<field
|
|
name="domain"
|
|
>[('state', 'in', ['paid', 'done', 'invoiced']),
|
|
('is_member_at_date', '=', False),
|
|
('date', '>=', (context_today - relativedelta(days=30)).strftime('%Y-%m-%d'))]</field>
|
|
<field name="background_color">#6A1B9A</field>
|
|
<field name="font_color">#FFFFFF</field>
|
|
</record>
|
|
|
|
</odoo>
|