Шапка «Шлюз НРД»: зелёная при работающем обмене, всплывающая панель; плашка анкеты в НРД

Общий цвет цепочки — по участкам с известным состоянием: несделанная
M2M-проверка больше не делает серым работающий обмен. Вместо title —
всплывающая панель по участкам с цветными точками, без повтора
«последнего ответа НРД».

Раздел НРД: наверху плашка, пока анкета участника не принята НРД (не
отправлена / ждёт ответа / отклонена с текстом НРД), со ссылкой на анкету;
пропадает после приёма. Только в боевом контуре.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
fontvielle
2026-10-22 10:58:24 +03:00
parent 60b4d46277
commit 2aa682e97f
5 changed files with 89 additions and 19 deletions
+29
View File
@@ -6,6 +6,7 @@ package lkgateway
import (
"encoding/json"
"html/template"
"os"
"strings"
"sync"
@@ -138,3 +139,31 @@ func recordParticipantReply(status string, resp *m2m.M2MTransferResponse, rawFil
r.RawFile = rawFile
})
}
// participantAccepted — последняя отправленная анкета принята НРД.
func participantAccepted() bool {
r := loadParticipantReg()
return !r.RespAt.IsZero() && !strings.EqualFold(r.Status, "ERROR")
}
// participantBanner — плашка наверху раздела НРД: анкета не отправлена, ждёт ответа или отклонена.
// Пропадает, когда НРД принял анкету. Анкету шлём только в боевом контуре — в тестовом плашки нет.
func participantBanner() template.HTML {
if participantAccepted() || contourOf(currentNSDProfile()) != "prod" {
return ""
}
esc := template.HTMLEscapeString
r := loadParticipantReg()
cls, head, body := "stc-err", "Анкета участника M2M не отправлена",
"Без регистрации участника НРД не принимает запросы на переводы. Проверьте анкету и отправьте её."
switch {
case r.SentAt.IsZero():
case r.RespAt.IsZero():
cls, head, body = "stc-run", "Анкета участника M2M ждёт ответа НРД", "Отправлена "+r.SentAt.In(listMSK).Format("02.01.2006 15:04")+". Плашка пропадёт, когда НРД примет анкету."
case strings.EqualFold(r.Status, "ERROR"):
cls, head = "stc-err", "НРД отклонил анкету участника M2M"
body = r.RespAt.In(listMSK).Format("02.01.2006 15:04") + ": " + r.RespText + ". Исправьте и отправьте снова."
}
return template.HTML(`<div class="stc ` + cls + `" style="margin:0 0 14px"><span class="stc-ic"></span><div class="stc-b"><b>` + esc(head) +
`</b><small>` + esc(body) + ` <a href="#nsd-participant" onclick="var d=document.getElementById('pf-box');if(d)d.open=true">Открыть анкету →</a></small></div></div>`)
}