Журнал: онлайн-статус «чего ждёт заявка», ссылка из ручного ввода в журнал, правки формы

- livestatus.go: одна фраза состояния для исходящих (сделка M2M + черновик/подача/MS010
  поручения 16) и входящих (наше решение → поручение 16/1); признак «в работе»
- строки журналов и карточки показывают её и обновляют по /admin/journal/live каждые 8 с,
  пока заявка в работе; завершённые и отклонённые не опрашиваются
- ручной ввод: у отправленного поручения ссылка «в журнале →» и тот же онлайн-статус;
  вид документа занимает две колонки
- выбор участника: по ИНН и коду с кнопки, а не по номеру строки; Enter выбирает только
  при единственном совпадении

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
This commit is contained in:
zuevav
2026-09-18 11:55:39 +03:00
parent 7ac41c0335
commit 46e55e1277
11 changed files with 190 additions and 14 deletions
+7 -2
View File
@@ -24,6 +24,8 @@ type journalRow struct {
StatusText string // человекочитаемый текст статуса (русский)
Outcome string // для входящих: «Принято» / «Отказано» / «Частично …»
Href string
LiveKey string // out:<id> | in:<id> — для онлайн-обновления строки
Live LiveStatus // чего ждёт заявка
}
// incomingJournalStatus — статус входящего для журнала: класс бейджа (цвет),
@@ -63,6 +65,7 @@ func incomingStatusOf(it *IncomingTransfer) incomingStatusVM {
// registerJournal вешает /admin/journal — объединённая лента вход+исход.
func registerJournal(mux *http.ServeMux, a *admin, svc *Service, store *IncomingStore) {
registerLiveStatus(mux, svc, store) // «чего ждёт заявка» для строк в работе
mux.HandleFunc("/admin/journal", func(w http.ResponseWriter, r *http.Request) {
var rows []journalRow
@@ -79,7 +82,8 @@ func registerJournal(mux *http.ServeMux, a *admin, svc *Service, store *Incoming
Time: c.CreatedAt, Dir: "Исходящий", DirKind: "out",
Party: party, SecN: len(c.Securities),
Status: c.Status, StatusText: russianState(c.Status),
Href: "/admin/claims/" + c.ID,
Href: "/admin/claims/" + c.ID,
LiveKey: "out:" + c.ID, Live: liveOutgoing(c),
})
}
}
@@ -99,7 +103,8 @@ func registerJournal(mux *http.ServeMux, a *admin, svc *Service, store *Incoming
Time: it.ReceivedAt, Dir: "Входящий", DirKind: "in",
Party: party, SecN: len(it.Securities),
Status: cls, StatusText: txt, Outcome: outcome,
Href: "/admin/incoming/" + it.ID,
Href: "/admin/incoming/" + it.ID,
LiveKey: "in:" + it.ID, Live: liveIncoming(it),
})
}
sort.Slice(rows, func(i, j int) bool { return rows[i].Time.After(rows[j].Time) })