The JS read pret_roa from order.price_check.items[idx] which doesn't exist. The backend puts pret_roa and price_match directly on each item in the items array. Fixed both desktop table and mobile view to read from item.pret_roa and item.price_match instead. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
171 lines
10 KiB
HTML
171 lines
10 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="ro">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>{% block title %}GoMag Import Manager{% endblock %}</title>
|
|
<!-- FOUC prevention: apply saved theme before any rendering -->
|
|
<script>
|
|
try {
|
|
var t = localStorage.getItem('theme');
|
|
if (!t) t = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
|
if (t === 'dark') document.documentElement.setAttribute('data-theme', 'dark');
|
|
} catch(e) {}
|
|
</script>
|
|
<!-- Fonts (DESIGN.md) -->
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,300;0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700;1,9..40,400&family=JetBrains+Mono:wght@400;500;600&family=Space+Grotesk:wght@400;500;600;700&display=swap" rel="stylesheet">
|
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
|
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.2/font/bootstrap-icons.css" rel="stylesheet">
|
|
{% set rp = request.scope.get('root_path', '') %}
|
|
<link href="{{ rp }}/static/css/style.css?v=24" rel="stylesheet">
|
|
</head>
|
|
<body>
|
|
<!-- Top Navbar (hidden on mobile via CSS) -->
|
|
<nav class="top-navbar">
|
|
<div class="navbar-brand">GoMag Import</div>
|
|
<div class="navbar-links">
|
|
<a href="{{ rp }}/" class="nav-tab {% block nav_dashboard %}{% endblock %}"><span class="d-none d-md-inline">Dashboard</span><span class="d-md-none">Acasa</span></a>
|
|
<a href="{{ rp }}/mappings" class="nav-tab {% block nav_mappings %}{% endblock %}"><span class="d-none d-md-inline">Mapari SKU</span><span class="d-md-none">Mapari</span></a>
|
|
<a href="{{ rp }}/missing-skus" class="nav-tab {% block nav_missing %}{% endblock %}"><span class="d-none d-md-inline">SKU-uri Lipsa</span><span class="d-md-none">Lipsa</span></a>
|
|
<a href="{{ rp }}/logs" class="nav-tab {% block nav_logs %}{% endblock %}"><span class="d-none d-md-inline">Jurnale Import</span><span class="d-md-none">Jurnale</span></a>
|
|
<a href="{{ rp }}/settings" class="nav-tab {% block nav_settings %}{% endblock %}"><span class="d-none d-md-inline">Setari</span><span class="d-md-none">Setari</span></a>
|
|
</div>
|
|
<button class="dark-toggle" onclick="toggleDarkMode()" title="Comuta tema" aria-label="Comuta tema intunecata">
|
|
<i class="bi bi-sun-fill"></i>
|
|
</button>
|
|
</nav>
|
|
|
|
<!-- Bottom Nav (mobile only, shown via CSS) -->
|
|
<nav class="bottom-nav">
|
|
<a href="{{ rp }}/" class="bottom-nav-item {% block bnav_dashboard %}{% endblock %}"><i class="bi bi-speedometer2"></i><span>Dashboard</span></a>
|
|
<a href="{{ rp }}/mappings" class="bottom-nav-item {% block bnav_mappings %}{% endblock %}"><i class="bi bi-arrow-left-right"></i><span>Mapari</span></a>
|
|
<a href="{{ rp }}/missing-skus" class="bottom-nav-item {% block bnav_missing %}{% endblock %}"><i class="bi bi-exclamation-triangle"></i><span>Lipsa</span></a>
|
|
<a href="{{ rp }}/logs" class="bottom-nav-item {% block bnav_logs %}{% endblock %}"><i class="bi bi-journal-text"></i><span>Jurnale</span></a>
|
|
<a href="{{ rp }}/settings" class="bottom-nav-item {% block bnav_settings %}{% endblock %}"><i class="bi bi-gear"></i><span>Setari</span></a>
|
|
</nav>
|
|
|
|
<!-- Main content -->
|
|
<main class="main-content {% block main_class %}{% endblock %}">
|
|
{% block content %}{% endblock %}
|
|
</main>
|
|
|
|
<!-- Shared Quick Map Modal -->
|
|
<div class="modal fade" id="quickMapModal" tabindex="-1" data-bs-backdrop="static">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title">Mapeaza SKU: <code id="qmSku"></code></h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<div style="margin-bottom:8px; font-size:0.85rem">
|
|
<small class="text-muted">Produs:</small> <strong id="qmProductName"></strong>
|
|
</div>
|
|
<div class="qm-row" style="font-size:0.7rem; color:var(--text-muted); padding:0 0 2px">
|
|
<span style="flex:1">CODMAT</span>
|
|
<span style="width:70px">Cant.</span>
|
|
<span style="width:30px"></span>
|
|
</div>
|
|
<div id="qmCodmatLines"></div>
|
|
<button type="button" class="btn btn-sm btn-outline-secondary mt-1" onclick="addQmCodmatLine()" style="font-size:0.8rem; padding:2px 10px">
|
|
+ CODMAT
|
|
</button>
|
|
<div id="qmDirectInfo" class="alert alert-info mt-2" style="display:none; font-size:0.85rem; padding:8px 12px;"></div>
|
|
<div id="qmPctWarning" class="text-danger mt-2" style="display:none;"></div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Anuleaza</button>
|
|
<button type="button" class="btn btn-primary" id="qmSaveBtn" onclick="saveQuickMapping()">Salveaza</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Shared Order Detail Modal -->
|
|
<div class="modal fade" id="orderDetailModal" tabindex="-1">
|
|
<div class="modal-dialog modal-lg">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title">Comanda <code id="detailOrderNumber"></code></h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<div class="row mb-3">
|
|
<div class="col-md-6">
|
|
<small class="text-muted">Client:</small> <strong id="detailCustomer"></strong><br>
|
|
<small class="text-muted">Data comanda:</small> <span id="detailDate"></span><br>
|
|
<small class="text-muted">Status:</small> <span id="detailStatus"></span><span id="detailPriceCheck" class="ms-2"></span>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<small class="text-muted">ID Comanda ROA:</small> <span id="detailIdComanda">-</span><br>
|
|
<small class="text-muted">ID Partener:</small> <span id="detailIdPartener">-</span><br>
|
|
<small class="text-muted">ID Adr. Facturare:</small> <span id="detailIdAdresaFact">-</span><br>
|
|
<small class="text-muted">ID Adr. Livrare:</small> <span id="detailIdAdresaLivr">-</span>
|
|
<div id="detailInvoiceInfo" style="display:none; margin-top:4px;">
|
|
<small class="text-muted">Factura:</small> <span id="detailInvoiceNumber"></span>
|
|
<span class="ms-2"><small class="text-muted">din</small> <span id="detailInvoiceDate"></span></span>
|
|
<div id="detailInvoiceRecon" class="mt-1" style="display:none"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="table-responsive d-none d-md-block">
|
|
<table class="table table-sm table-bordered mb-0">
|
|
<thead class="table-light">
|
|
<tr>
|
|
<th>SKU</th>
|
|
<th>Produs</th>
|
|
<th>CODMAT</th>
|
|
<th class="text-end">Cant.</th>
|
|
<th class="text-end">Pret GoMag</th>
|
|
<th class="text-end">Pret ROA</th>
|
|
<th class="text-end">TVA%</th>
|
|
<th class="text-end">Valoare</th>
|
|
<th class="text-center">✓</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody id="detailItemsBody">
|
|
</tbody>
|
|
</table>
|
|
<div id="detailReceipt" class="d-flex flex-wrap gap-2 mt-1 justify-content-end"></div>
|
|
</div>
|
|
<div class="d-md-none" id="detailItemsMobile"></div>
|
|
<div id="detailReceiptMobile" class="d-flex flex-wrap gap-2 mt-1 d-md-none justify-content-end"></div>
|
|
<div id="detailError" class="alert alert-danger mt-3" style="display:none;"></div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="button" id="detailRetryBtn" class="btn btn-sm btn-outline-primary" style="display:none"><i class="bi bi-arrow-clockwise"></i> Reimporta</button>
|
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Inchide</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script>window.ROOT_PATH = "{{ rp }}";</script>
|
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
|
|
<script src="{{ rp }}/static/js/shared.js?v=20"></script>
|
|
<script>
|
|
// Dark mode toggle
|
|
function toggleDarkMode() {
|
|
var isDark = document.documentElement.getAttribute('data-theme') === 'dark';
|
|
var newTheme = isDark ? 'light' : 'dark';
|
|
document.documentElement.setAttribute('data-theme', newTheme);
|
|
try { localStorage.setItem('theme', newTheme); } catch(e) {}
|
|
updateDarkToggleIcon();
|
|
// Sync settings page toggle if present
|
|
var settToggle = document.getElementById('settDarkMode');
|
|
if (settToggle) settToggle.checked = (newTheme === 'dark');
|
|
}
|
|
function updateDarkToggleIcon() {
|
|
var isDark = document.documentElement.getAttribute('data-theme') === 'dark';
|
|
document.querySelectorAll('.dark-toggle i').forEach(function(el) {
|
|
el.className = isDark ? 'bi bi-moon-fill' : 'bi bi-sun-fill';
|
|
});
|
|
}
|
|
updateDarkToggleIcon();
|
|
</script>
|
|
{% block scripts %}{% endblock %}
|
|
</body>
|
|
</html>
|