Карточка входящего: отклонённый перевод — 16/1 не требуется, операция завершена; черновик отмечается только если реально получен

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
zuevav
2026-09-16 15:47:07 +03:00
parent 7288c86fba
commit cfd6dfa1e8
3 changed files with 120 additions and 21 deletions
+40 -14
View File
@@ -176,20 +176,11 @@ func registerIncoming(mux *http.ServeMux, a *admin, deps incomingDeps) {
}
}
}
data := struct {
page
It *IncomingTransfer
Flash string
OrderResponses []orderResponse
OrderDone bool
OrderDoneAt string
DraftReceived string
Depo depoResult // сверка с DEPO — эмуляция ответа, ничего не отправляется
Quik []*QuikLink
QuikOn bool
Watch *OrderWatch
DepoL *DepoLink
}{nowPage("Входящий перевод", "incoming"), it, r.URL.Query().Get("flash"), orderResps, orderDone, orderDoneAt, draftReceivedTime(it.GUID), depoResult{}, globalQuikLinks.ForGUID(it.GUID), deps.rc.Snapshot().Quik.WritesEnabled, globalOrderWatch.Get(it.GUID), globalDepoLinks.Get(it.GUID)}
rejected, codes := incomingRejectedAll(it)
data := incomingDetailData{page: nowPage("Входящий перевод", "incoming"), It: it, Flash: r.URL.Query().Get("flash"),
OrderResponses: orderResps, OrderDone: orderDone, OrderDoneAt: orderDoneAt, DraftReceived: draftReceivedTime(it.GUID),
Quik: globalQuikLinks.ForGUID(it.GUID), QuikOn: quikActive(deps.rc.Snapshot().Quik), Watch: globalOrderWatch.Get(it.GUID), DepoL: globalDepoLinks.Get(it.GUID),
Rejected: rejected, RejectCodes: codes, AutoMode: deps.rc.Snapshot().M2MAuto.Enabled}
// Сверка выполняется при открытии карточки; итог сохраняем для бейджа в списке.
data.Depo = runDepoCheck(it)
if data.Depo.Ran {
@@ -234,3 +225,38 @@ func handleIncomingAnswer(w http.ResponseWriter, r *http.Request, deps incomingD
}
http.Redirect(w, r, "/admin/incoming/"+id+"?flash="+url.QueryEscape(msg), http.StatusSeeOther)
}
// incomingDetailData — карточка входящего перевода.
type incomingDetailData struct {
page
It *IncomingTransfer
Flash string
OrderResponses []orderResponse
OrderDone bool
OrderDoneAt string
DraftReceived string
Depo depoResult // сверка с DEPO — эмуляция ответа, ничего не отправляется
Quik []*QuikLink
QuikOn bool
Watch *OrderWatch
DepoL *DepoLink
Rejected bool // решение отправлено и ни одна бумага не принята — перевод завершён отказом
RejectCodes string // коды отказа через запятую
AutoMode bool // автоматический режим M2M (поручение 16/1 подаст bj)
}
// incomingRejectedAll — перевод отвечен и ни одна бумага не принята (поручение 16/1 не нужно).
func incomingRejectedAll(it *IncomingTransfer) (bool, string) {
if it.Status != "answered" || incomingHasConfirmed(it) {
return false, ""
}
var codes []string
seen := map[string]bool{}
for _, s := range it.Securities {
if s.RejectCode != "" && !seen[s.RejectCode] {
seen[s.RejectCode] = true
codes = append(codes, s.RejectCode)
}
}
return true, strings.Join(codes, ", ")
}