feat(pos): integrate design system for facturacion, contabilidad, dashboard, config, reportes
Replace 5 POS templates with updated design system pages using tokens.css. Add routes for dashboard, config, and reports pages. Create stub JS files for dashboard, config, and reports modules. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
99
pos/static/js/reports.js
Normal file
99
pos/static/js/reports.js
Normal file
@@ -0,0 +1,99 @@
|
||||
// /home/Autopartes/pos/static/js/reports.js
|
||||
// Reports module: sales reports, inventory reports, financial reports
|
||||
|
||||
const Reports = (() => {
|
||||
function token() {
|
||||
return localStorage.getItem('pos_token') || '';
|
||||
}
|
||||
|
||||
function checkAuth() {
|
||||
if (!token()) {
|
||||
window.location.href = '/pos/login';
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function headers() {
|
||||
return { 'Authorization': `Bearer ${token()}`, 'Content-Type': 'application/json' };
|
||||
}
|
||||
|
||||
function fmt(n) {
|
||||
return parseFloat(n || 0).toLocaleString('es-MX', { minimumFractionDigits: 2, maximumFractionDigits: 2 });
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Theme switcher
|
||||
// -------------------------------------------------------------------------
|
||||
function setTheme(theme) {
|
||||
document.documentElement.setAttribute('data-theme', theme);
|
||||
try { localStorage.setItem('nexus-theme', theme); } catch(e) {}
|
||||
var btnInd = document.getElementById('btn-industrial');
|
||||
var btnMod = document.getElementById('btn-modern');
|
||||
if (btnInd) btnInd.classList.toggle('is-active', theme === 'industrial');
|
||||
if (btnMod) btnMod.classList.toggle('is-active', theme === 'modern');
|
||||
}
|
||||
window.setTheme = setTheme;
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Tab switcher
|
||||
// -------------------------------------------------------------------------
|
||||
function switchTab(id, btn) {
|
||||
document.querySelectorAll('.tab-panel').forEach(function(p) { p.classList.remove('is-active'); });
|
||||
document.querySelectorAll('.tab-btn').forEach(function(b) { b.classList.remove('is-active'); });
|
||||
var panel = document.getElementById('panel-' + id);
|
||||
if (panel) panel.classList.add('is-active');
|
||||
if (btn) btn.classList.add('is-active');
|
||||
}
|
||||
window.switchTab = switchTab;
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Live clock
|
||||
// -------------------------------------------------------------------------
|
||||
function updateClock() {
|
||||
var el = document.getElementById('live-clock');
|
||||
if (!el) return;
|
||||
var now = new Date();
|
||||
var pad = function(n) { return String(n).padStart(2, '0'); };
|
||||
el.textContent = pad(now.getHours()) + ':' + pad(now.getMinutes()) + ':' + pad(now.getSeconds());
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Placeholder API calls
|
||||
// -------------------------------------------------------------------------
|
||||
async function loadSalesReport(params) {
|
||||
// TODO: call /pos/api/cashregister/... with date range
|
||||
}
|
||||
|
||||
async function loadInventoryReport() {
|
||||
// TODO: call /pos/api/inventory/products for stock report
|
||||
}
|
||||
|
||||
async function loadFinancialReport(params) {
|
||||
// TODO: call /pos/api/accounting/... for financial reports
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Init
|
||||
// -------------------------------------------------------------------------
|
||||
function init() {
|
||||
if (!checkAuth()) return;
|
||||
|
||||
// Restore theme
|
||||
try {
|
||||
var saved = localStorage.getItem('nexus-theme') || 'industrial';
|
||||
setTheme(saved);
|
||||
} catch(e) {}
|
||||
|
||||
// Start clock
|
||||
updateClock();
|
||||
setInterval(updateClock, 1000);
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', init);
|
||||
|
||||
return {
|
||||
init, setTheme, switchTab,
|
||||
loadSalesReport, loadInventoryReport, loadFinancialReport, fmt
|
||||
};
|
||||
})();
|
||||
Reference in New Issue
Block a user