da12a9ec1c
- bj_exchange и «кран» Fancy убраны: данные модуля ЛК в PostgreSQL (схема lk) - трансферные таблицы FTV_M2M: создание при установке, события, справочник участников - сверка с DEPO: счёт, ФИО, дата рождения, ИИС по договору, квал-инвестор из опции DEPO - боевой ЛК ЕСИА Финанс при тестовом ИШ: журнал, отказ через DEPO, статусы в ЛК - онлайн-лицензирование в bj, план тестирования M2M для контрагента (интерактивный HTML) - модули QUIK МНП, экспорт QUIK, НПР/УДС; документы и тестовые материалы Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
52 lines
3.1 KiB
HTML
52 lines
3.1 KiB
HTML
{{define "content"}}
|
|
<div class="hero">
|
|
<h1 class="hero-greeting">Входящие переводы</h1>
|
|
<span class="hero-status">Запросы на перевод, где контрагент (или робот в сценарии 3333) — передающая сторона. Нужно ответить: принять или отказать по каждой бумаге.</span>
|
|
</div>
|
|
|
|
<div class="card">
|
|
<h2>Список ({{len .Items}})</h2>
|
|
{{if .Items}}
|
|
<table>
|
|
<thead><tr><th>Получен</th><th>GUID</th><th>От кого</th><th>ЦБ</th><th>Статус</th><th></th></tr></thead>
|
|
<tbody>
|
|
{{range .Items}}
|
|
<tr>
|
|
<td>{{msk .ReceivedAt}}</td>
|
|
<td><code>{{short 8 .GUID}}</code></td>
|
|
<td>{{$nm := m2mParty .SenderCode}}{{if not $nm}}{{$nm = m2mParty .SenderINN}}{{end}}{{if $nm}}<strong>{{$nm}}</strong><br>{{end}}<code>{{.SenderCode}}</code>{{if .SenderINN}} · ИНН {{.SenderINN}}{{end}}</td>
|
|
<td>{{len .Securities}}</td>
|
|
<td>{{$s := inStatus .}}<span class="badge {{$s.Class}}">{{$s.Text}}</span>{{if $s.Outcome}} <span class="badge {{if eq $s.Outcome "Принято"}}confirmed{{else if eq $s.Outcome "Отказано"}}rejected{{else}}awaiting_decision{{end}}">{{$s.Outcome}}</span>{{end}}{{if .DepoSummary}}<br><span class="badge {{if eq .DepoRecommend "confirm"}}confirmed{{else if eq .DepoRecommend "reject"}}rejected{{else}}awaiting_decision{{end}}" style="font-size:11px;margin-top:4px" title="Сверка с DEPO — эмуляция ответа, ничего не отправлено">сверка: {{.DepoSummary}}</span>{{end}}</td>
|
|
<td><a href="/admin/incoming/{{.ID}}">{{if eq .Status "answered"}}просмотр{{else}}ответить{{end}} →</a></td>
|
|
</tr>
|
|
{{end}}
|
|
</tbody>
|
|
</table>
|
|
{{else}}
|
|
<p class="muted">Входящих переводов нет. Они появляются, когда другая сторона инициирует перевод к нам (напр. робот НРД в сценарии 3333 «Выступить принимающей стороной»).</p>
|
|
{{end}}
|
|
<p class="muted" style="font-size:12px;margin-top:10px">🔄 Страница обновляется автоматически при появлении нового входящего.</p>
|
|
</div>
|
|
<script>
|
|
// Авто-обновление: раз в 7с опрашиваем фид; если состав/статусы входящих
|
|
// изменились — перезагружаем страницу, чтобы всегда видеть актуальные данные.
|
|
(function(){
|
|
function sig(d){
|
|
if(!d||!d.pending) return String(d&&d.count||0);
|
|
return d.pending.map(function(p){return p.id+':'+(p.count||0);}).sort().join(',');
|
|
}
|
|
var last=null;
|
|
async function tick(){
|
|
try{
|
|
var r=await fetch('/admin/incoming/feed',{headers:{'X-Requested-With':'fetch'}});
|
|
if(!r.ok) return;
|
|
var d=await r.json(); var s=sig(d);
|
|
if(last!==null && s!==last){ location.reload(); return; }
|
|
last=s;
|
|
}catch(e){}
|
|
}
|
|
tick(); setInterval(tick, 7000);
|
|
})();
|
|
</script>
|
|
{{end}}
|