feat: simplify dashboard for staff without data access
This commit is contained in:
parent
7e920e999d
commit
08a58d8cfc
50
index.php
50
index.php
@ -2666,7 +2666,6 @@ $page = $_GET['page'] ?? 'dashboard';
|
|||||||
|
|
||||||
// Permission map for pages
|
// Permission map for pages
|
||||||
$page_permissions = [
|
$page_permissions = [
|
||||||
'dashboard' => 'dashboard_view',
|
|
||||||
'pos' => 'pos_view',
|
'pos' => 'pos_view',
|
||||||
'sales' => 'sales_view',
|
'sales' => 'sales_view',
|
||||||
'sales_returns' => 'sales_returns_view',
|
'sales_returns' => 'sales_returns_view',
|
||||||
@ -3681,24 +3680,26 @@ switch ($page) {
|
|||||||
$data['users'] = db()->query("SELECT id, username FROM users ORDER BY username ASC")->fetchAll();
|
$data['users'] = db()->query("SELECT id, username FROM users ORDER BY username ASC")->fetchAll();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
$data['customers'] = db()->query("SELECT * FROM customers ORDER BY id DESC LIMIT 5")->fetchAll();
|
if (can('dashboard_view')) {
|
||||||
$data['stats'] = [
|
$data['customers'] = db()->query("SELECT * FROM customers ORDER BY id DESC LIMIT 5")->fetchAll();
|
||||||
'total_customers' => db()->query("SELECT COUNT(*) FROM customers")->fetchColumn(),
|
$data['stats'] = [
|
||||||
'total_items' => db()->query("SELECT COUNT(*) FROM stock_items")->fetchColumn(),
|
'total_customers' => db()->query("SELECT COUNT(*) FROM customers")->fetchColumn(),
|
||||||
'total_sales' => (db()->query("SELECT SUM(total_with_vat) FROM invoices")->fetchColumn() ?: 0) + (db()->query("SELECT SUM(net_amount) FROM pos_transactions WHERE status = 'completed'")->fetchColumn() ?: 0),
|
'total_items' => db()->query("SELECT COUNT(*) FROM stock_items")->fetchColumn(),
|
||||||
'total_received' => (db()->query("SELECT SUM(amount) FROM payments")->fetchColumn() ?: 0) + (db()->query("SELECT SUM(amount) FROM pos_payments")->fetchColumn() ?: 0),
|
'total_sales' => (db()->query("SELECT SUM(total_with_vat) FROM invoices")->fetchColumn() ?: 0) + (db()->query("SELECT SUM(net_amount) FROM pos_transactions WHERE status = 'completed'")->fetchColumn() ?: 0),
|
||||||
'total_purchases' => db()->query("SELECT SUM(total_with_vat) FROM purchases")->fetchColumn() ?: 0,
|
'total_received' => (db()->query("SELECT SUM(amount) FROM payments")->fetchColumn() ?: 0) + (db()->query("SELECT SUM(amount) FROM pos_payments")->fetchColumn() ?: 0),
|
||||||
'total_paid' => db()->query("SELECT SUM(amount) FROM purchase_payments")->fetchColumn() ?: 0,
|
'total_purchases' => db()->query("SELECT SUM(total_with_vat) FROM purchases")->fetchColumn() ?: 0,
|
||||||
'expired_items' => db()->query("SELECT COUNT(*) FROM stock_items WHERE expiry_date IS NOT NULL AND expiry_date <= CURDATE()")->fetchColumn(),
|
'total_paid' => db()->query("SELECT SUM(amount) FROM purchase_payments")->fetchColumn() ?: 0,
|
||||||
'near_expiry_items' => db()->query("SELECT COUNT(*) FROM stock_items WHERE expiry_date IS NOT NULL AND expiry_date > CURDATE() AND expiry_date <= DATE_ADD(CURDATE(), INTERVAL 30 DAY)")->fetchColumn(),
|
'expired_items' => db()->query("SELECT COUNT(*) FROM stock_items WHERE expiry_date IS NOT NULL AND expiry_date <= CURDATE()")->fetchColumn(),
|
||||||
'low_stock_items_count' => db()->query("SELECT COUNT(*) FROM stock_items WHERE stock_quantity <= min_stock_level")->fetchColumn(),
|
'near_expiry_items' => db()->query("SELECT COUNT(*) FROM stock_items WHERE expiry_date IS NOT NULL AND expiry_date > CURDATE() AND expiry_date <= DATE_ADD(CURDATE(), INTERVAL 30 DAY)")->fetchColumn(),
|
||||||
];
|
'low_stock_items_count' => db()->query("SELECT COUNT(*) FROM stock_items WHERE stock_quantity <= min_stock_level")->fetchColumn(),
|
||||||
$data['stats']['total_receivable'] = $data['stats']['total_sales'] - $data['stats']['total_received'];
|
];
|
||||||
$data['stats']['total_payable'] = $data['stats']['total_purchases'] - $data['stats']['total_paid'];
|
$data['stats']['total_receivable'] = $data['stats']['total_sales'] - $data['stats']['total_received'];
|
||||||
|
$data['stats']['total_payable'] = $data['stats']['total_purchases'] - $data['stats']['total_paid'];
|
||||||
|
|
||||||
// Sales Chart Data
|
// Sales Chart Data
|
||||||
$data['monthly_sales'] = db()->query("SELECT DATE_FORMAT(invoice_date, '%M %Y') as label, SUM(total_with_vat) as total FROM invoices GROUP BY DATE_FORMAT(invoice_date, '%Y-%m') ORDER BY invoice_date ASC LIMIT 12")->fetchAll(PDO::FETCH_ASSOC);
|
$data['monthly_sales'] = db()->query("SELECT DATE_FORMAT(invoice_date, '%M %Y') as label, SUM(total_with_vat) as total FROM invoices GROUP BY DATE_FORMAT(invoice_date, '%Y-%m') ORDER BY invoice_date ASC LIMIT 12")->fetchAll(PDO::FETCH_ASSOC);
|
||||||
$data['yearly_sales'] = db()->query("SELECT YEAR(invoice_date) as label, SUM(total_with_vat) as total FROM invoices GROUP BY label ORDER BY label ASC LIMIT 5")->fetchAll(PDO::FETCH_ASSOC);
|
$data['yearly_sales'] = db()->query("SELECT YEAR(invoice_date) as label, SUM(total_with_vat) as total FROM invoices GROUP BY label ORDER BY label ASC LIMIT 5")->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3859,11 +3860,9 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
|
|||||||
</div>
|
</div>
|
||||||
<nav class="mt-4">
|
<nav class="mt-4">
|
||||||
<!-- General Section -->
|
<!-- General Section -->
|
||||||
<?php if (can('dashboard_view')): ?>
|
|
||||||
<a href="index.php?page=dashboard" class="nav-link <?= !isset($_GET['page']) || $_GET['page'] === 'dashboard' ? 'active' : '' ?>">
|
<a href="index.php?page=dashboard" class="nav-link <?= !isset($_GET['page']) || $_GET['page'] === 'dashboard' ? 'active' : '' ?>">
|
||||||
<i class="fas fa-chart-pie"></i> <span><?= __('dashboard') ?></span>
|
<i class="fas fa-chart-pie"></i> <span><?= __('dashboard') ?></span>
|
||||||
</a>
|
</a>
|
||||||
<?php endif; ?>
|
|
||||||
|
|
||||||
<!-- POS Section -->
|
<!-- POS Section -->
|
||||||
<?php if (can('pos_view')): ?>
|
<?php if (can('pos_view')): ?>
|
||||||
@ -4264,6 +4263,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
|
|||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<?php if ($page === 'dashboard'): ?>
|
<?php if ($page === 'dashboard'): ?>
|
||||||
|
|
||||||
|
<?php if (can('dashboard_view')): ?>
|
||||||
<?php
|
<?php
|
||||||
$purchaseAlertsCount = count(getPurchaseAlerts());
|
$purchaseAlertsCount = count(getPurchaseAlerts());
|
||||||
if ($data['stats']['expired_items'] > 0 || $data['stats']['near_expiry_items'] > 0 || $data['stats']['low_stock_items_count'] > 0 || $purchaseAlertsCount > 0): ?>
|
if ($data['stats']['expired_items'] > 0 || $data['stats']['near_expiry_items'] > 0 || $data['stats']['low_stock_items_count'] > 0 || $purchaseAlertsCount > 0): ?>
|
||||||
@ -4480,6 +4480,14 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<?php else: ?>
|
||||||
|
<div class="d-flex flex-column justify-content-center align-items-center h-100" style="min-height: 70vh;">
|
||||||
|
<?php if (!empty($data['settings']['company_logo'])): ?>
|
||||||
|
<img src="<?= htmlspecialchars($data['settings']['company_logo']) ?>" alt="Company Logo" class="mb-4" style="max-height: 200px; max-width: 350px; object-fit: contain;">
|
||||||
|
<?php endif; ?>
|
||||||
|
<h1 class="display-4 fw-bold text-muted text-center mt-3"><?= htmlspecialchars($data['settings']['company_name'] ?? 'Company Name') ?></h1>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
<?php elseif ($page === 'customers' || $page === 'suppliers'): ?>
|
<?php elseif ($page === 'customers' || $page === 'suppliers'): ?>
|
||||||
<div class="card p-4">
|
<div class="card p-4">
|
||||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
<div class="d-flex justify-content-between align-items-center mb-4">
|
||||||
@ -14120,7 +14128,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||||||
observer.observe(document.body, { childList: true, subtree: true });
|
observer.observe(document.body, { childList: true, subtree: true });
|
||||||
});
|
});
|
||||||
// -----------------------------
|
// -----------------------------
|
||||||
<?php if ($page === 'dashboard'): ?>
|
<?php if ($page === 'dashboard' && can('dashboard_view')): ?>
|
||||||
const monthlyData = <?= json_encode($data['monthly_sales']) ?>;
|
const monthlyData = <?= json_encode($data['monthly_sales']) ?>;
|
||||||
const yearlyData = <?= json_encode($data['yearly_sales']) ?>;
|
const yearlyData = <?= json_encode($data['yearly_sales']) ?>;
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user