Files
Bridge-and-Join-s/internal/lkgateway/web/templates/admin_fancy_queue.html
T

83 lines
8.3 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{{define "content"}}
<div class="hero">
<h1 class="hero-greeting">Обмен с DEPO (Fancy)</h1>
<span class="hero-status">Переводы M2M, переданные в DEPO (база {{.DB}}), и документы, созданные по ним.</span>
</div>
{{if .Flash}}<div class="card" style="background:var(--accent-weak)">{{.Flash}}</div>{{end}}
<div class="card">
<h2>Состояние обмена</h2>
<div style="display:flex;gap:18px;flex-wrap:wrap;font-size:13px;margin-top:6px">
<span>Переводов: <b>{{.Sum.Total}}</b></span>
<span>Ждут обработки: <b>{{.Sum.Pending}}</b></span>
<span>С документом DEPO: <b>{{.Sum.WithDoc}}</b></span>
<span>С ошибками: <b style="{{if .Sum.Errors}}color:var(--err){{end}}">{{.Sum.Errors}}</b></span>
{{if not .Sum.LastEventAt.IsZero}}<span>Последнее событие: <b>{{wall .Sum.LastEventAt}}</b></span>{{end}}
<span>Справочник НРД в DEPO: {{if .Sum.HasHandbook}}<b>{{.Sum.Handbook}}</b> участников{{if not .Sum.HandbookAt.IsZero}} (обновлён {{wall .Sum.HandbookAt}}){{end}}{{else}}<span class="muted">таблица FTV_M2M_HANDBOOK не создана</span>{{end}}</span>
</div>
<p class="muted" style="font-size:12.5px;margin:8px 0 0">Обработчик DEPO: {{if eq .Fancy.DepoJobMode "bj"}}{{if .Fancy.DepoJobLast}}последний вызов {{.Fancy.DepoJobLast}}{{else}}{{.JobMode}}{{end}}{{else}}{{.JobMode}}{{if .Fancy.DepoJobCheck}} · проверка готовности: {{if .Fancy.DepoJobCheckOK}}OK{{else}}не пройдена{{end}}{{end}}{{end}}{{if can "admin"}} · <a href="/admin/setup#fancy">настройки</a>{{end}}</p>
<details style="margin-top:10px"><summary class="muted" style="cursor:pointer;font-size:12.5px">Как это работает</summary>
<p class="muted" style="line-height:1.7;font-size:12.5px">
<span class="badge awaiting_decision">FTV_M2M</span> bj записывает перевод (шапка + строки по бумагам) и событие <code>BJ_*</code> со STATE=<b>TODO</b> →
<span class="badge awaiting_decision">bj2depo</span> процедура FTV_M2M_JOB ({{.JobMode}}) читает события, создаёт документ 16/16-1 в DEPO, отвечает <code>DEPO_ORDER_CREATED</code> (номер документа) или <code>DEPO_ERROR</code> →
<span class="badge sent">документ</span> bj следит за состоянием документа (OD_DOCS: начальный ввод → конец обработки / отмена) и при отмене оповещает →
<span class="badge confirmed">события НРД</span> по ответам MS010 и M2M bj дописывает <code>BJ_ORDER_ACCEPTED / BJ_EXECUTED / BJ_REJECTED / BJ_CANCELLED</code>.
Опрос таблиц — раз в минуту.{{if internalDocs}} Подробности и словарь событий — <a href="/admin/help/fancy-events">страница для программиста Fancy</a>.{{end}}
</p>
</details>
</div>
{{if or .Failures (not .RunAsOK)}}<div class="card" style="border:1px solid var(--err)">
<h2 style="color:var(--err)">Обработчик DEPO не смог обработать записи{{if .Failures}} ({{len .Failures}}){{end}}</h2>
<p class="muted">Пока причина не устранена, документы в DEPO не создаются, а статусы по заявкам ЛК не ставятся. Устраните причину по тексту ошибки и верните записи в очередь: обработчик возьмёт их заново.</p>
{{if not .RunAsOK}}<p style="color:var(--err)">✗ {{.RunAsMsg}}</p>{{end}}
{{if .Failures}}
<div style="overflow-x:auto"><table style="margin-top:8px">
<thead><tr><th>Запись</th><th>Перевод</th><th>Тип / строка</th><th>Когда</th><th>Ошибка обработчика</th></tr></thead>
<tbody>{{range .Failures}}<tr>
<td>{{.TableRu}} №{{.ID}}</td><td><code>{{.GUID}}</code></td><td>{{.Type}}{{if .Ref}}<div class="muted" style="font-size:11px">{{.Ref}}</div>{{end}}</td>
<td style="white-space:nowrap">{{if not .At.IsZero}}{{wall .At}}{{end}}</td><td style="color:var(--err);font-size:12px">{{.Comment}}</td>
</tr>{{end}}</tbody>
</table></div>
<div style="display:flex;gap:10px;flex-wrap:wrap;margin-top:12px">
<form method="post" action="/admin/fancy-queue/requeue" style="margin:0"><button type="submit" class="btn btn-ok" onclick="return confirm('Вернуть записи с ошибкой в очередь обработчика DEPO? Он попробует обработать их заново.')">↻ Вернуть в очередь</button></form>
<form method="post" action="/admin/fancy-queue/dismiss" style="margin:0"><button type="submit" class="btn" onclick="return confirm('Снять эти записи с очереди? Обработчик больше не будет их брать, и они исчезнут из списка ошибок. Применяйте для устаревших/ненужных записей.')">✕ Снять с очереди</button></form>
</div>
<p class="muted" style="margin:8px 0 0;font-size:12px">«Вернуть в очередь» — повторить обработку после устранения причины. «Снять с очереди» — пометить записи как снятые (SKIPPED) и убрать из ошибок, если переобрабатывать их не нужно (например, старые тестовые).</p>
{{end}}
</div>{{end}}
<div class="card">
<h2>Переводы в DEPO ({{len .Rows}})</h2>
{{if .Error}}<p style="color:var(--err)">{{.Error}}</p>{{end}}
{{if .Rows}}
<div style="overflow-x:auto">
<table style="font-size:12.5px">
<thead><tr><th>Создан</th><th>Перевод</th><th>Направление</th><th>Депонент</th><th>Контрагент</th><th>Бумаги</th><th>Документ DEPO</th><th>Состояние</th></tr></thead>
<tbody>
{{range .Rows}}
<tr>
<td style="white-space:nowrap">{{if not .CreatedAt.IsZero}}{{wall .CreatedAt}}{{else}}—{{end}}</td>
<td><a href="/admin/claims?guid={{.GUID}}"><code>{{short 8 .GUID}}</code></a>{{if .Comment}}<div class="muted" style="font-size:11px">{{.Comment}}</div>{{end}}</td>
<td style="white-space:nowrap">{{.DirectionRu}}</td>
<td>{{.Deponent}}{{if .DeponentDoc}}<div class="muted" style="font-size:11px">{{.DeponentDoc}}</div>{{end}}</td>
<td><code>{{.CP}}</code></td>
<td>{{range .Lines}}<div><code>{{.ISIN}}</code>{{if .SecCode}} <span class="muted">{{.SecCode}}</span>{{end}} × {{.Amount}}{{if eq .State "ERROR"}} <span class="badge rejected">ошибка</span>{{end}}</div>{{else}}<span class="muted">—</span>{{end}}</td>
<td>{{if .Doc}}<b>№{{.Doc}}</b><div class="muted" style="font-size:11px">{{.DocState}}{{if not .DocAt.IsZero}} · {{wall .DocAt}}{{end}}</div>{{else}}<span class="muted">не создан</span>{{end}}</td>
<td><span class="badge {{stageCls .}}">{{stageText .}}</span>
{{range .Errors}}<div style="color:var(--err);font-size:11px">{{.}}</div>{{end}}</td>
</tr>
<tr><td colspan="8" style="padding:2px 10px 8px 24px;border-top:none"><div class="muted" style="font-size:11px;display:flex;gap:6px 18px;flex-wrap:wrap">{{range .Events}}<span><span style="{{if eq .State "TODO"}}color:var(--warn);font-weight:600{{end}}">{{.Type}}</span>{{if .Ref}} <code>{{.Ref}}</code>{{end}} · {{wall .At}}{{if .Codes}} · {{.Codes}}{{end}}{{if .Comment}} — {{.Comment}}{{end}}</span>{{else}}<span>событий нет</span>{{end}}</div></td></tr>
{{end}}
</tbody>
</table>
</div>
{{else if not .Error}}
<p class="muted">В трансферных таблицах пока нет переводов. Они появятся при входящем/исходящем переводе M2M{{if devOn}} или при прогоне «Тестирование M2M → выгрузка истории в DEPO»{{end}}.</p>
{{end}}
</div>
{{if internalDocs}}<p style="margin-top:14px"><a href="/admin/help/fancy-events" class="muted">bj ↔ bj2depo: события, таблицы, действия job →</a></p>{{end}}
{{end}}