Журнал: ответы НРД ищутся только по сделкам в работе; завершённые помечены «не проверяется»
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
This commit is contained in:
@@ -41,7 +41,7 @@ func form16Snapshot() map[string]*OutgoingDeal {
|
|||||||
}
|
}
|
||||||
m := map[string]*OutgoingDeal{}
|
m := map[string]*OutgoingDeal{}
|
||||||
if globalOutgoingStore != nil {
|
if globalOutgoingStore != nil {
|
||||||
for _, d := range scanForm16Drafts(globalOutgoingStore) {
|
for _, d := range scanForm16DraftsOpt(globalOutgoingStore, false) { // ответы — только по сделкам в работе, ниже
|
||||||
m[d.GUID] = d
|
m[d.GUID] = d
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -54,7 +54,13 @@ func liveOutgoing(c ClaimView) LiveStatus {
|
|||||||
guid := string(c.M2MGUID)
|
guid := string(c.M2MGUID)
|
||||||
var depo *OutgoingDeal
|
var depo *OutgoingDeal
|
||||||
if guid != "" && c.Status == "confirmed" { // каталог нужен только на этапе депо-исполнения
|
if guid != "" && c.Status == "confirmed" { // каталог нужен только на этапе депо-исполнения
|
||||||
depo = form16Snapshot()[guid]
|
if d := form16Snapshot()[guid]; d != nil {
|
||||||
|
cp := *d
|
||||||
|
if cp.Submitted && len(cp.Responses) == 0 && !cp.Done {
|
||||||
|
cp.Responses, cp.Done = outgoingResponses(cp.ContrDIDs) // ответы ищем только для этой, живой сделки
|
||||||
|
}
|
||||||
|
depo = &cp
|
||||||
|
}
|
||||||
}
|
}
|
||||||
var watch *OrderWatch
|
var watch *OrderWatch
|
||||||
if guid != "" && globalOrderWatch != nil {
|
if guid != "" && globalOrderWatch != nil {
|
||||||
|
|||||||
@@ -188,6 +188,13 @@ func mf010Text(p string, info os.FileInfo) (string, bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func scanForm16Drafts(store *OutgoingStore) []*OutgoingDeal {
|
func scanForm16Drafts(store *OutgoingStore) []*OutgoingDeal {
|
||||||
|
return scanForm16DraftsOpt(store, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
// scanForm16DraftsOpt — то же, но ответы НРД (MS010 и др.) собираются только при withResponses:
|
||||||
|
// поиск ответов по номерам поручений — самая дорогая часть, и для журнала она нужна лишь
|
||||||
|
// по сделкам в работе, а не по всем, что когда-либо были.
|
||||||
|
func scanForm16DraftsOpt(store *OutgoingStore, withResponses bool) []*OutgoingDeal {
|
||||||
byGUID := map[string]*OutgoingDeal{}
|
byGUID := map[string]*OutgoingDeal{}
|
||||||
_ = filepath.Walk(igwInboxDir, func(p string, info os.FileInfo, err error) error {
|
_ = filepath.Walk(igwInboxDir, func(p string, info os.FileInfo, err error) error {
|
||||||
if err != nil || info.IsDir() {
|
if err != nil || info.IsDir() {
|
||||||
@@ -238,7 +245,9 @@ func scanForm16Drafts(store *OutgoingStore) []*OutgoingDeal {
|
|||||||
d.OrderAt = sub.OrderAt
|
d.OrderAt = sub.OrderAt
|
||||||
d.OrderXML = sub.OrderXML
|
d.OrderXML = sub.OrderXML
|
||||||
d.ContrDIDs = sub.ContrDIDs
|
d.ContrDIDs = sub.ContrDIDs
|
||||||
d.Responses, d.Done = outgoingResponses(sub.ContrDIDs)
|
if withResponses {
|
||||||
|
d.Responses, d.Done = outgoingResponses(sub.ContrDIDs)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
out = append(out, d)
|
out = append(out, d)
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
{{if .Flash}}<div class="card" style="background:var(--accent-weak,#e7f0fb)">{{.Flash}}</div>{{end}}
|
{{if .Flash}}<div class="card" style="background:var(--accent-weak,#e7f0fb)">{{.Flash}}</div>{{end}}
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<h2>Заявка <code>{{slice .Claim.ID 0 8}}</code> · <span class="badge {{.Claim.Status}}">{{ruState .Claim.Status}}</span></h2>
|
<h2>Заявка <code>{{slice .Claim.ID 0 8}}</code> · <span class="badge {{.Claim.Status}}">{{ruState .Claim.Status}}</span></h2>
|
||||||
{{$l := liveOut .Claim}}<div class="live live-big live-{{$l.Kind}}" data-live="out:{{.Claim.ID}}"{{if $l.Active}} data-active="1"{{end}}>{{$l.Text}}</div>
|
{{$l := liveOut .Claim}}<div class="live live-big live-{{$l.Kind}}" data-live="out:{{.Claim.ID}}"{{if $l.Active}} data-active="1"{{else}} title="Завершено: состояние больше не проверяется"{{end}}>{{$l.Text}}</div>
|
||||||
<table>
|
<table>
|
||||||
<tr><td style="width:200px" class="muted">Создана</td><td>{{.Claim.CreatedAt.Format "02.01.2006 15:04:05"}}</td></tr>
|
<tr><td style="width:200px" class="muted">Создана</td><td>{{.Claim.CreatedAt.Format "02.01.2006 15:04:05"}}</td></tr>
|
||||||
<tr><td class="muted">Обновлена</td><td>{{.Claim.UpdatedAt.Format "02.01.2006 15:04:05"}}</td></tr>
|
<tr><td class="muted">Обновлена</td><td>{{.Claim.UpdatedAt.Format "02.01.2006 15:04:05"}}</td></tr>
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
<td>{{len .Securities}}</td>
|
<td>{{len .Securities}}</td>
|
||||||
<td>{{$f := m2mParty .TransferringDepositoryINN}}{{if $f}}<span style="font-size:11px">{{$f}}</span><br>{{end}}<code style="font-size:11px">{{.TransferringDepositoryINN}}</code></td>
|
<td>{{$f := m2mParty .TransferringDepositoryINN}}{{if $f}}<span style="font-size:11px">{{$f}}</span><br>{{end}}<code style="font-size:11px">{{.TransferringDepositoryINN}}</code></td>
|
||||||
<td>{{$t := m2mParty .ReceivingDepositoryINN}}{{if $t}}<span style="font-size:11px">{{$t}}</span><br>{{end}}<code style="font-size:11px">{{.ReceivingDepositoryINN}}</code></td>
|
<td>{{$t := m2mParty .ReceivingDepositoryINN}}{{if $t}}<span style="font-size:11px">{{$t}}</span><br>{{end}}<code style="font-size:11px">{{.ReceivingDepositoryINN}}</code></td>
|
||||||
<td>{{$l := liveOut .}}<span class="badge {{.Status}}">{{ruState .Status}}</span><div class="live live-{{$l.Kind}}" data-live="out:{{.ID}}"{{if $l.Active}} data-active="1"{{end}}>{{$l.Text}}</div></td>
|
<td>{{$l := liveOut .}}<span class="badge {{.Status}}">{{ruState .Status}}</span><div class="live live-{{$l.Kind}}" data-live="out:{{.ID}}"{{if $l.Active}} data-active="1"{{else}} title="Завершено: состояние больше не проверяется"{{end}}>{{$l.Text}}</div></td>
|
||||||
<td><a href="/admin/claims/{{.ID}}">детали →</a></td>
|
<td><a href="/admin/claims/{{.ID}}">детали →</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
<td><code>{{short 8 .GUID}}</code></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>{{$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>{{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 — {{if devOn}}эмуляция ответа{{else}}рекомендация{{end}}, ничего не отправлено">сверка: {{.DepoSummary}}</span>{{end}}{{$l := liveIn .}}<div class="live live-{{$l.Kind}}" data-live="in:{{.ID}}"{{if $l.Active}} data-active="1"{{end}}>{{$l.Text}}</div></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 — {{if devOn}}эмуляция ответа{{else}}рекомендация{{end}}, ничего не отправлено">сверка: {{.DepoSummary}}</span>{{end}}{{$l := liveIn .}}<div class="live live-{{$l.Kind}}" data-live="in:{{.ID}}"{{if $l.Active}} data-active="1"{{else}} title="Завершено: состояние больше не проверяется"{{end}}>{{$l.Text}}</div></td>
|
||||||
<td><a href="/admin/incoming/{{.ID}}">{{if eq .Status "answered"}}просмотр{{else}}ответить{{end}} →</a></td>
|
<td><a href="/admin/incoming/{{.ID}}">{{if eq .Status "answered"}}просмотр{{else}}ответить{{end}} →</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<h2>Входящий перевод <code>{{short 8 .It.GUID}}</code>
|
<h2>Входящий перевод <code>{{short 8 .It.GUID}}</code>
|
||||||
{{if $answered}}<span class="badge confirmed">отвечено</span>{{else}}<span class="badge awaiting_decision">ждёт решения</span>{{end}}
|
{{if $answered}}<span class="badge confirmed">отвечено</span>{{else}}<span class="badge awaiting_decision">ждёт решения</span>{{end}}
|
||||||
</h2>
|
</h2>
|
||||||
{{$l := liveIn .It}}<div class="live live-big live-{{$l.Kind}}" data-live="in:{{.It.ID}}"{{if $l.Active}} data-active="1"{{end}}>{{$l.Text}}</div>
|
{{$l := liveIn .It}}<div class="live live-big live-{{$l.Kind}}" data-live="in:{{.It.ID}}"{{if $l.Active}} data-active="1"{{else}} title="Завершено: состояние больше не проверяется"{{end}}>{{$l.Text}}</div>
|
||||||
<table>
|
<table>
|
||||||
<tr><td style="width:220px" class="muted">Запрос сформирован (отправитель)</td><td>{{msk .It.RequestCreated}}</td></tr>
|
<tr><td style="width:220px" class="muted">Запрос сформирован (отправитель)</td><td>{{msk .It.RequestCreated}}</td></tr>
|
||||||
<tr><td class="muted">Забрали из шлюза (получено нами)</td><td>{{msk .It.ReceivedAt}}{{if not .It.RequestCreated.IsZero}} <span class="muted" style="font-size:12px">· прохождение: {{transit .It.RequestCreated .It.ReceivedAt}}</span>{{end}}</td></tr>
|
<tr><td class="muted">Забрали из шлюза (получено нами)</td><td>{{msk .It.ReceivedAt}}{{if not .It.RequestCreated.IsZero}} <span class="muted" style="font-size:12px">· прохождение: {{transit .It.RequestCreated .It.ReceivedAt}}</span>{{end}}</td></tr>
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
<td>{{if eq .DirKind "out"}}<span class="badge" style="background:#e7f0fb;color:#1f4e79">↗ Исходящий</span>{{else}}<span class="badge" style="background:#e6f4ea;color:#1a7f37">↘ Входящий</span>{{end}}</td>
|
<td>{{if eq .DirKind "out"}}<span class="badge" style="background:#e7f0fb;color:#1f4e79">↗ Исходящий</span>{{else}}<span class="badge" style="background:#e6f4ea;color:#1a7f37">↘ Входящий</span>{{end}}</td>
|
||||||
<td>{{.Party}}</td>
|
<td>{{.Party}}</td>
|
||||||
<td>{{.SecN}}</td>
|
<td>{{.SecN}}</td>
|
||||||
<td><span class="badge {{.Status}}">{{.StatusText}}</span>{{if .Outcome}} <span class="badge {{if eq .Outcome "Принято"}}confirmed{{else if eq .Outcome "Отказано"}}rejected{{else}}awaiting_decision{{end}}">{{.Outcome}}</span>{{end}}<div class="live live-{{.Live.Kind}}" data-live="{{.LiveKey}}"{{if .Live.Active}} data-active="1"{{end}}>{{.Live.Text}}</div></td>
|
<td><span class="badge {{.Status}}">{{.StatusText}}</span>{{if .Outcome}} <span class="badge {{if eq .Outcome "Принято"}}confirmed{{else if eq .Outcome "Отказано"}}rejected{{else}}awaiting_decision{{end}}">{{.Outcome}}</span>{{end}}<div class="live live-{{.Live.Kind}}" data-live="{{.LiveKey}}"{{if .Live.Active}} data-active="1"{{else}} title="Завершено: состояние больше не проверяется"{{end}}>{{.Live.Text}}</div></td>
|
||||||
<td><a href="{{.Href}}" class="muted">открыть →</a></td>
|
<td><a href="{{.Href}}" class="muted">открыть →</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|||||||
Reference in New Issue
Block a user