All checks were successful
Build and deploy / Validate source (push) Successful in 6s
Build and deploy / Integration suite on a real stack (push) Successful in 2m33s
Build and deploy / Secret scan and release gate (push) Successful in 7s
Build and deploy / Publish images (push) Successful in 1m48s
Moves: an order can go back one stage (BACK in app/runtime.py) with an internal reason, flagged in the history as movements.back. The customer is not notified and approved finals stay; "production started" and "ready" are now enqueued once per order, so undoing and redoing a move sends nothing twice. Dragging only goes forward and highlights the allowed column. Move errors are in Portuguese. Lists: the send log, payments (open, resolved as history, all) and quotes are paged on the server with a total, 20 rows by default (10/20/50/100), first/previous/page/next/last. The send log filters by destination, status, event and order. Older finished orders load on demand. The board no longer carries the send log or payment rows, only the open-payment count. Kanban: Pagamentos and Integrações are separate tabs; messages are brief, bottom notifications that clear themselves; wording is shorter. Full CI integration sequence passes locally, with new checks for undo, paging and filters. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
71 lines
3.6 KiB
HTML
71 lines
3.6 KiB
HTML
<!doctype html>
|
|
<html lang="pt-BR"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
|
<title>Kanban DTF</title>
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&display=swap">
|
|
<link rel="stylesheet" href="/kanban.css?v=redesign-7">
|
|
</head><body>
|
|
<form id="login" class="login" hidden>
|
|
<div class="brand"><i aria-hidden="true">D</i>Kanban DTF</div>
|
|
<label>E-mail <input id="email" type="email" autocomplete="username" required></label>
|
|
<label>Senha <input id="password" type="password" autocomplete="current-password" required></label>
|
|
<button class="btn primary">Entrar</button>
|
|
<p id="login-status" class="hint" role="alert"></p>
|
|
</form>
|
|
|
|
<div id="app" hidden>
|
|
<header class="top">
|
|
<div class="brand"><i aria-hidden="true">D</i>Kanban DTF</div>
|
|
<nav class="tabs" aria-label="Seções">
|
|
<button type="button" data-tab="board" aria-selected="true">Produção <span class="count" id="count-board"></span></button>
|
|
<button type="button" data-tab="quotes" aria-selected="false">Cotações <span class="badge" id="badge-quotes"></span></button>
|
|
<button type="button" data-tab="payments" aria-selected="false">Pagamentos <span class="badge warn" id="badge-payments"></span></button>
|
|
<button type="button" data-tab="integrations" aria-selected="false">Integrações</button>
|
|
</nav>
|
|
<label class="search">
|
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><circle cx="11" cy="11" r="7"></circle><path d="M20 20l-3.5-3.5"></path></svg>
|
|
<input id="search" type="search" placeholder="Buscar pedido, cliente ou CNPJ" aria-label="Buscar pedido, cliente ou CNPJ">
|
|
</label>
|
|
<span id="tiny" class="tinydot"></span>
|
|
<span id="who" class="who"></span>
|
|
<button class="btn ghost" id="refresh" type="button">Atualizar</button>
|
|
<button class="btn ghost" id="logout" type="button">Sair</button>
|
|
</header>
|
|
<p id="status" role="status"></p>
|
|
<main>
|
|
<section id="tab-board">
|
|
<div class="bar"><h1>Produção</h1><span class="muted" id="board-summary"></span><div class="chips" id="filters"></div></div>
|
|
<div class="kan" id="kan"></div>
|
|
</section>
|
|
<section id="tab-quotes" hidden>
|
|
<div class="split">
|
|
<div class="list">
|
|
<h1>Cotações</h1>
|
|
<div class="chips" id="quote-filters"></div>
|
|
<div id="quote-list" style="display:flex;flex-direction:column;gap:8px"></div>
|
|
</div>
|
|
<div class="pane" id="reviews"></div>
|
|
</div>
|
|
</section>
|
|
<section id="tab-payments" class="page" hidden>
|
|
<h1>Pagamentos</h1>
|
|
<section id="payments"></section>
|
|
</section>
|
|
<section id="tab-integrations" class="page" hidden>
|
|
<h1>Integrações</h1>
|
|
<section><div class="grid4" id="integrations"></div></section>
|
|
<section><h2>Registro de envios</h2>
|
|
<div class="filters" id="event-filters"></div>
|
|
<table class="log"><thead><tr><th scope="col">Quando</th><th scope="col">Pedido</th><th scope="col">Destino</th><th scope="col">Evento</th><th scope="col">Resultado</th></tr></thead><tbody id="events"></tbody></table>
|
|
<div id="events-more"></div>
|
|
</section>
|
|
</section>
|
|
</main>
|
|
</div>
|
|
|
|
<div class="drawer" id="drawer" hidden>
|
|
<div class="scrim" id="scrim"></div>
|
|
<aside class="panel" id="panel" aria-label="Pedido"></aside>
|
|
</div>
|
|
<script src="/upload.js"></script><script src="/kanban.js?v=redesign-8"></script></body></html>
|