added prefernce business overview
This commit is contained in:
@@ -5,6 +5,7 @@ error_reporting(E_ALL);
|
||||
|
||||
include('include/headscript.php');
|
||||
require_once __DIR__ . '/class/MagoSalesStats.php';
|
||||
require_once __DIR__ . '/class/UiPrefs.php';
|
||||
|
||||
$db = DBHandlerSelect::getInstance();
|
||||
$pdo = $db->getConnection();
|
||||
@@ -1033,120 +1034,119 @@ if ($action === 'data') {
|
||||
<div id="content">
|
||||
<div class="warn-strip mb-3" id="missingAmounts" style="display:none;"></div>
|
||||
|
||||
<!-- RIEPILOGO ANNI -->
|
||||
<!-- CRUSCOTTO DIREZIONE: situazione ad oggi -->
|
||||
<div class="dash-head">
|
||||
<span data-help="yr.dash"><i class="fa-solid fa-gauge-high me-2"></i>Situazione ad oggi</span>
|
||||
<small>non dipende dagli anni scelti · segue i filtri cliente, agente e area</small>
|
||||
</div>
|
||||
<div class="dash-grid mb-3" id="dashCards"></div>
|
||||
<div class="chart-card mb-4">
|
||||
<div class="chart-title" data-help="yr.b2bchart">Ordinato vs fatturato · ultimi 24 mesi</div>
|
||||
<div class="chart-hint">Barre: valori del mese · linea: book-to-bill su 3 mesi (ordinato ÷ fatturato: sopra 1 il portafoglio cresce, sotto 1 si consuma)</div>
|
||||
<div id="chB2B" style="min-height:320px;"></div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-end mb-2"><button type="button" data-layout-btn="sales_orders_years"></button></div>
|
||||
|
||||
<div class="dash-head"><span data-help="yr.cards"><i class="fa-solid fa-layer-group me-2"></i>Anni a confronto</span></div>
|
||||
<div class="year-grid mb-4" id="yearCards"></div>
|
||||
|
||||
<!-- GRAFICI -->
|
||||
<div class="row g-3 mb-3">
|
||||
<div class="col-xl-6">
|
||||
<!-- RIQUADRI (ordine personalizzabile per utente: ui_layout.js) -->
|
||||
<div class="row g-3 mb-4" <?= UiPrefs::attr($pdo, $iduserlogin ?? 0, 'sales_orders_years') ?>>
|
||||
<div class="col-12" data-widget="today" data-title="Situazione ad oggi">
|
||||
<div class="dash-head">
|
||||
<span data-help="yr.dash"><i class="fa-solid fa-gauge-high me-2"></i>Situazione ad oggi</span>
|
||||
<small>non dipende dagli anni scelti · segue i filtri cliente, agente e area</small>
|
||||
</div>
|
||||
<div class="dash-grid mb-3" id="dashCards"></div>
|
||||
<div class="chart-card">
|
||||
<div class="chart-title" data-help="yr.b2bchart">Ordinato vs fatturato · ultimi 24 mesi</div>
|
||||
<div class="chart-hint">Barre: valori del mese · linea: book-to-bill su 3 mesi (ordinato ÷ fatturato: sopra 1 il portafoglio cresce, sotto 1 si consuma)</div>
|
||||
<div id="chB2B" style="min-height:320px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12" data-widget="years" data-title="Anni a confronto">
|
||||
<div class="dash-head"><span data-help="yr.cards"><i class="fa-solid fa-layer-group me-2"></i>Anni a confronto</span></div>
|
||||
<div class="year-grid" id="yearCards"></div>
|
||||
</div>
|
||||
<div class="col-xl-6" data-widget="monthly" data-title="Andamento mensile">
|
||||
<div class="chart-card">
|
||||
<div class="chart-title" id="ttlMonthly" data-help="yr.monthly">Andamento mensile</div>
|
||||
<div class="chart-hint">Stagionalità: un colore per anno</div>
|
||||
<div id="chMonthly" style="min-height:340px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-6">
|
||||
<div class="col-xl-6" data-widget="cumul" data-title="Progressivo dell'anno">
|
||||
<div class="chart-card">
|
||||
<div class="chart-title" id="ttlCumul" data-help="yr.cumul">Progressivo dell'anno</div>
|
||||
<div class="chart-hint">Somma da gennaio: dice se si è avanti o indietro rispetto agli anni scorsi</div>
|
||||
<div id="chCumul" style="min-height:340px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- FATTURATO (per data fattura) -->
|
||||
<div class="row g-3 mb-3" id="invRow">
|
||||
<div class="col-xl-6">
|
||||
<div class="col-xl-6 inv-w" data-widget="invmonthly" data-title="Fatturato per mese">
|
||||
<div class="chart-card">
|
||||
<div class="chart-title" data-help="yr.invMonthly">Fatturato per mese</div>
|
||||
<div class="chart-hint">Imponibile fatture + acconti − note di credito, per data fattura</div>
|
||||
<div id="chInvMonthly" style="min-height:340px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-6">
|
||||
<div class="col-xl-6 inv-w" data-widget="invcumul" data-title="Fatturato progressivo">
|
||||
<div class="chart-card">
|
||||
<div class="chart-title" data-help="yr.invCumul">Fatturato progressivo dell'anno</div>
|
||||
<div class="chart-hint">Somma da gennaio del fatturato, anno su anno</div>
|
||||
<div id="chInvCumul" style="min-height:340px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="warn-strip mb-3" id="invMissing" style="display:none;"></div>
|
||||
|
||||
<div class="chart-card mb-3" id="invTableCard">
|
||||
<div class="inv-toggle" id="invToggle" role="button" tabindex="0" aria-expanded="false">
|
||||
<span data-help="yr.invTable"><i class="fa-solid fa-table me-2"></i>Tabella dati fatturato</span>
|
||||
<span class="small text-muted d-none d-md-inline">per mese e documenti · esportabile in Excel</span>
|
||||
<i class="fa-solid fa-chevron-down inv-chev"></i>
|
||||
</div>
|
||||
<div id="invTableBody" style="display:none;">
|
||||
<div class="metric-switch my-3" id="invTabs">
|
||||
<button type="button" data-tab="months" class="active"><i class="fa-regular fa-calendar me-1"></i> Per mese</button>
|
||||
<button type="button" data-tab="docs"><i class="fa-regular fa-file-lines me-1"></i> Documenti</button>
|
||||
</div>
|
||||
<div id="invPaneMonths">
|
||||
<div class="table-responsive">
|
||||
<table id="invMonthTable" class="table table-sm table-striped align-middle w-100"></table>
|
||||
<div class="col-12" data-widget="invtable" data-title="Tabella dati fatturato">
|
||||
<div class="warn-strip mb-3" id="invMissing" style="display:none;"></div>
|
||||
<div class="chart-card" id="invTableCard">
|
||||
<div class="inv-toggle" id="invToggle" role="button" tabindex="0" aria-expanded="false">
|
||||
<span data-help="yr.invTable"><i class="fa-solid fa-table me-2"></i>Tabella dati fatturato</span>
|
||||
<span class="small text-muted d-none d-md-inline">per mese e documenti · esportabile in Excel</span>
|
||||
<i class="fa-solid fa-chevron-down inv-chev"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div id="invPaneDocs" style="display:none;">
|
||||
<div class="table-responsive">
|
||||
<table id="invDocTable" class="table table-sm table-striped align-middle w-100"></table>
|
||||
<div id="invTableBody" style="display:none;">
|
||||
<div class="metric-switch my-3" id="invTabs">
|
||||
<button type="button" data-tab="months" class="active"><i class="fa-regular fa-calendar me-1"></i> Per mese</button>
|
||||
<button type="button" data-tab="docs"><i class="fa-regular fa-file-lines me-1"></i> Documenti</button>
|
||||
</div>
|
||||
<div id="invPaneMonths">
|
||||
<div class="table-responsive">
|
||||
<table id="invMonthTable" class="table table-sm table-striped align-middle w-100"></table>
|
||||
</div>
|
||||
</div>
|
||||
<div id="invPaneDocs" style="display:none;">
|
||||
<div class="table-responsive">
|
||||
<table id="invDocTable" class="table table-sm table-striped align-middle w-100"></table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- CLIENTI DA RICHIAMARE -->
|
||||
<div class="chart-card mb-3" id="dormCard">
|
||||
<div class="d-flex justify-content-between align-items-start flex-wrap gap-2 mb-2">
|
||||
<div>
|
||||
<div class="chart-title" data-help="yr.dormant"><i class="fa-solid fa-phone-volume me-2" style="color:#c2410c;"></i>Clienti da richiamare</div>
|
||||
<div class="chart-hint" id="dormHint"> </div>
|
||||
</div>
|
||||
<div class="chip-row" id="dormChips">
|
||||
<button type="button" class="chip active" data-level="" style="--yc:#198754;">Tutti <span class="badge bg-light text-dark" id="dCntAll">0</span></button>
|
||||
<button type="button" class="chip" data-level="watch" style="--yc:#ca8a04;">Attenzione <span class="badge bg-light text-dark" id="dCntWatch">0</span></button>
|
||||
<button type="button" class="chip" data-level="dormant" style="--yc:#c2410c;">Dormienti <span class="badge bg-light text-dark" id="dCntDormant">0</span></button>
|
||||
<button type="button" class="chip" data-level="lost" style="--yc:#b02a37;">Probabilmente persi <span class="badge bg-light text-dark" id="dCntLost">0</span></button>
|
||||
<div class="col-12" data-widget="dormant" data-title="Clienti da richiamare">
|
||||
<div class="chart-card" id="dormCard">
|
||||
<div class="d-flex justify-content-between align-items-start flex-wrap gap-2 mb-2">
|
||||
<div>
|
||||
<div class="chart-title" data-help="yr.dormant"><i class="fa-solid fa-phone-volume me-2" style="color:#c2410c;"></i>Clienti da richiamare</div>
|
||||
<div class="chart-hint" id="dormHint"> </div>
|
||||
</div>
|
||||
<div class="chip-row" id="dormChips">
|
||||
<button type="button" class="chip active" data-level="" style="--yc:#198754;">Tutti <span class="badge bg-light text-dark" id="dCntAll">0</span></button>
|
||||
<button type="button" class="chip" data-level="watch" style="--yc:#ca8a04;">Attenzione <span class="badge bg-light text-dark" id="dCntWatch">0</span></button>
|
||||
<button type="button" class="chip" data-level="dormant" style="--yc:#c2410c;">Dormienti <span class="badge bg-light text-dark" id="dCntDormant">0</span></button>
|
||||
<button type="button" class="chip" data-level="lost" style="--yc:#b02a37;">Probabilmente persi <span class="badge bg-light text-dark" id="dCntLost">0</span></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="dorm-sum mb-2" id="dormSum"></div>
|
||||
<div class="table-responsive">
|
||||
<table id="dormTable" class="table table-striped align-middle w-100"></table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="dorm-sum mb-2" id="dormSum"></div>
|
||||
<div class="table-responsive">
|
||||
<table id="dormTable" class="table table-striped align-middle w-100"></table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- CLIENTI -->
|
||||
<div class="chart-card">
|
||||
<div class="d-flex justify-content-between align-items-center flex-wrap gap-2 mb-2">
|
||||
<div>
|
||||
<div class="chart-title" id="ttlCust" data-help="yr.custcmp">Clienti a confronto</div>
|
||||
<div class="chart-hint" id="custHint">Clicca un cliente per filtrare tutta la pagina</div>
|
||||
<div class="col-12" data-widget="customers" data-title="Clienti a confronto">
|
||||
<div class="chart-card">
|
||||
<div class="d-flex justify-content-between align-items-center flex-wrap gap-2 mb-2">
|
||||
<div>
|
||||
<div class="chart-title" id="ttlCust" data-help="yr.custcmp">Clienti a confronto</div>
|
||||
<div class="chart-hint" id="custHint">Clicca un cliente per filtrare tutta la pagina</div>
|
||||
</div>
|
||||
<div class="chip-row" id="trendChips">
|
||||
<button type="button" class="chip active" data-trend="" style="--yc:#198754;">Tutti <span class="badge bg-light text-dark" id="cntAll">0</span></button>
|
||||
<button type="button" class="chip" data-trend="new" style="--yc:#0369a1;">Nuovi <span class="badge bg-light text-dark" id="cntNew">0</span></button>
|
||||
<button type="button" class="chip" data-trend="lost" style="--yc:#b02a37;">Persi <span class="badge bg-light text-dark" id="cntLost">0</span></button>
|
||||
<button type="button" class="chip" data-trend="up" style="--yc:#15803d;">In crescita <span class="badge bg-light text-dark" id="cntUp">0</span></button>
|
||||
<button type="button" class="chip" data-trend="down" style="--yc:#c2410c;">In calo <span class="badge bg-light text-dark" id="cntDown">0</span></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="table-responsive">
|
||||
<table id="custTable" class="table table-striped align-middle w-100"></table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="chip-row" id="trendChips">
|
||||
<button type="button" class="chip active" data-trend="" style="--yc:#198754;">Tutti <span class="badge bg-light text-dark" id="cntAll">0</span></button>
|
||||
<button type="button" class="chip" data-trend="new" style="--yc:#0369a1;">Nuovi <span class="badge bg-light text-dark" id="cntNew">0</span></button>
|
||||
<button type="button" class="chip" data-trend="lost" style="--yc:#b02a37;">Persi <span class="badge bg-light text-dark" id="cntLost">0</span></button>
|
||||
<button type="button" class="chip" data-trend="up" style="--yc:#15803d;">In crescita <span class="badge bg-light text-dark" id="cntUp">0</span></button>
|
||||
<button type="button" class="chip" data-trend="down" style="--yc:#c2410c;">In calo <span class="badge bg-light text-dark" id="cntDown">0</span></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="table-responsive">
|
||||
<table id="custTable" class="table table-striped align-middle w-100"></table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -2104,7 +2104,7 @@ if ($action === 'data') {
|
||||
// fatturato: sempre in € (indipendente dal selettore N° ordini / Valore)
|
||||
function renderInvoiced(d) {
|
||||
const inv = d.invoiced || {};
|
||||
$('#invRow, #invTableCard').toggle(!!inv.available);
|
||||
$('.inv-w, #invTableCard').toggle(!!inv.available);
|
||||
const miss = (inv.summary || []).filter(r => d.years.includes(+r.y)).reduce((a, r) => a + (+r.missing_amounts || 0), 0);
|
||||
$('#invMissing').toggle(!inv.available || miss > 0).html(!inv.available ?
|
||||
'<i class="fa-solid fa-circle-info me-1"></i> Fatturato non ancora disponibile: eseguire la migrazione <b>mago_sale_doc</b> e una sincronizzazione.' :
|
||||
@@ -2388,7 +2388,7 @@ if ($action === 'data') {
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
<script src="sales_help.js?v=2"></script>
|
||||
<script src="sales_help.js?v=3"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
Reference in New Issue
Block a user