diff --git a/api/app/static/css/style.css b/api/app/static/css/style.css
index ef3e79d..d992814 100644
--- a/api/app/static/css/style.css
+++ b/api/app/static/css/style.css
@@ -1059,3 +1059,37 @@ tr.mapping-deleted td {
border-color: var(--accent);
font-weight: 500;
}
+
+/* ── Logs OK toggle ────────────────────── */
+.log-ok-toggle {
+ padding: 8px 12px;
+ color: var(--text-secondary);
+ cursor: pointer;
+ font-size: 0.85rem;
+ border-top: 1px solid var(--border-subtle);
+}
+.log-ok-toggle:hover { background: var(--surface-raised); }
+
+/* ── Welcome card ──────────────────────── */
+.welcome-card {
+ background: var(--accent-light);
+ border: 1px solid var(--accent);
+ border-radius: 8px;
+ padding: 16px 20px;
+ margin-bottom: 12px;
+}
+.welcome-steps {
+ display: flex;
+ gap: 16px;
+ flex-wrap: wrap;
+ font-size: 0.875rem;
+}
+.welcome-step {
+ display: inline-flex;
+ align-items: center;
+ gap: 4px;
+}
+.welcome-step a {
+ color: var(--info);
+ text-decoration: underline;
+}
diff --git a/api/app/static/js/logs.js b/api/app/static/js/logs.js
index ea65639..b4c6165 100644
--- a/api/app/static/js/logs.js
+++ b/api/app/static/js/logs.js
@@ -141,7 +141,11 @@ async function loadRunOrders(runId, statusFilter, page) {
if (orders.length === 0) {
tbody.innerHTML = '
| Nicio comanda |
';
} else {
- tbody.innerHTML = orders.map((o, i) => {
+ const problemOrders = orders.filter(o => ['ERROR', 'SKIPPED'].includes(o.status));
+ const okOrders = orders.filter(o => ['IMPORTED', 'ALREADY_IMPORTED'].includes(o.status));
+ const otherOrders = orders.filter(o => !['ERROR', 'SKIPPED', 'IMPORTED', 'ALREADY_IMPORTED'].includes(o.status));
+
+ function orderRow(o, i) {
const dateStr = fmtDate(o.order_date);
const orderTotal = o.order_total != null ? Number(o.order_total).toFixed(2) : '-';
return `
@@ -155,7 +159,31 @@ async function loadRunOrders(runId, statusFilter, page) {
| ${fmtCost(o.discount_total)} |
${orderTotal} |
`;
- }).join('');
+ }
+
+ let html = '';
+ // Show problem orders first (always visible)
+ problemOrders.forEach((o, i) => { html += orderRow(o, i); });
+ otherOrders.forEach((o, i) => { html += orderRow(o, problemOrders.length + i); });
+
+ // Collapsible OK orders
+ if (okOrders.length > 0) {
+ const toggleId = 'okOrdersCollapse_' + Date.now();
+ html += `|
+
+ ▶ ${okOrders.length} comenzi importate cu succes
+
+
+
+
+ ${okOrders.map((o, i) => orderRow(o, problemOrders.length + otherOrders.length + i)).join('')}
+
+
+
+ |
`;
+ }
+
+ tbody.innerHTML = html;
}
// Mobile flat rows
@@ -164,7 +192,11 @@ async function loadRunOrders(runId, statusFilter, page) {
if (orders.length === 0) {
mobileList.innerHTML = 'Nicio comanda
';
} else {
- mobileList.innerHTML = orders.map(o => {
+ const problemOrders = orders.filter(o => ['ERROR', 'SKIPPED'].includes(o.status));
+ const okOrders = orders.filter(o => ['IMPORTED', 'ALREADY_IMPORTED'].includes(o.status));
+ const otherOrders = orders.filter(o => !['ERROR', 'SKIPPED', 'IMPORTED', 'ALREADY_IMPORTED'].includes(o.status));
+
+ function mobileRow(o) {
const d = o.order_date || '';
let dateFmt = '-';
if (d.length >= 10) {
@@ -178,7 +210,22 @@ async function loadRunOrders(runId, statusFilter, page) {
${esc(o.customer_name || '—')}
x${o.items_count || 0}${totalStr ? ' · ' + totalStr + '' : ''}
`;
- }).join('');
+ }
+
+ let mobileHtml = '';
+ problemOrders.forEach(o => { mobileHtml += mobileRow(o); });
+ otherOrders.forEach(o => { mobileHtml += mobileRow(o); });
+
+ if (okOrders.length > 0) {
+ mobileHtml += `
+ ▶ ${okOrders.length} comenzi importate cu succes
+
+
+ ${okOrders.map(o => mobileRow(o)).join('')}
+
`;
+ }
+
+ mobileList.innerHTML = mobileHtml;
}
}
diff --git a/api/app/templates/base.html b/api/app/templates/base.html
index 37dd61c..0b2dc73 100644
--- a/api/app/templates/base.html
+++ b/api/app/templates/base.html
@@ -19,7 +19,7 @@
{% set rp = request.scope.get('root_path', '') %}
-
+
diff --git a/api/app/templates/logs.html b/api/app/templates/logs.html
index 34999a3..a6720cb 100644
--- a/api/app/templates/logs.html
+++ b/api/app/templates/logs.html
@@ -102,5 +102,5 @@
{% endblock %}
{% block scripts %}
-
+
{% endblock %}