Ручной ввод: без обязательных галок, удаление черновика, запрет количества больше остатка; отказ НРД по поручению — красным
- ручных отметок перед отправкой нет: автор виден по учётной записи, клиент/счёт/остаток/
бумага проверены сверкой с DEPO при сохранении; блокировка в QUIK — необязательно,
по умолчанию не требуется (модуль неторговых поручений сейчас не используется)
- «Удалить черновик» в карточке (POST /admin/manual/{id}/delete), только для черновиков
- количество не больше остатка на торговом разделе: проверка в форме (по выбранной бумаге)
и на сервере при сохранении (по счёту DEPO) — поручение с превышением не сохраняется
- отчёт MS010 с отказом: orderResponse.Rejected, OutgoingDeal.Rejected; шаг «Операция
завершена отказом» и бейдж — красные в карточках исходящего и входящего; онлайн-статус
«поручение 16 завершено отказом НРД»
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
This commit is contained in:
@@ -266,6 +266,21 @@ func (s *manualStore) Create(o *ManualOrder) error {
|
||||
}
|
||||
|
||||
// Update — изменение под замком: fn получает текущую запись.
|
||||
// Delete — удалить черновик. Отправленные и отклонённые поручения не удаляются: они след.
|
||||
func (s *manualStore) Delete(id int) error {
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
o, ok := s.items[id]
|
||||
if !ok {
|
||||
return fmt.Errorf("поручение не найдено")
|
||||
}
|
||||
if o.Status != "draft" {
|
||||
return fmt.Errorf("удалить можно только черновик, а поручение уже %s", manualStatusRu(o.Status))
|
||||
}
|
||||
delete(s.items, id)
|
||||
return s.saveLocked()
|
||||
}
|
||||
|
||||
func (s *manualStore) Update(id int, fn func(o *ManualOrder) error) error {
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
@@ -382,11 +397,8 @@ func manualSendBlockers(rc *RuntimeConfig, o *ManualOrder) []string {
|
||||
b = append(b, "сверка с DEPO не пройдена: "+o.Depo.Summary)
|
||||
}
|
||||
}
|
||||
for _, c := range manualPreChecks {
|
||||
if !o.Checks[c.Key].Done {
|
||||
b = append(b, "нет отметки: "+c.Title)
|
||||
}
|
||||
}
|
||||
// Ручных отметок перед отправкой нет: кто создал поручение — видно по учётной записи,
|
||||
// а клиент, счёт, остаток и бумага проверены сверкой с учётной системой при сохранении.
|
||||
switch o.QuikMode {
|
||||
case "auto":
|
||||
if !manualQuikAutoAvailable(rc) {
|
||||
@@ -396,9 +408,8 @@ func manualSendBlockers(rc *RuntimeConfig, o *ManualOrder) []string {
|
||||
if strings.TrimSpace(o.QuikInstr) == "" {
|
||||
b = append(b, "укажите номер поручения на блокировку в торговой системе")
|
||||
}
|
||||
case "none":
|
||||
default:
|
||||
b = append(b, "не выбрано, как заблокированы бумаги в торговой системе")
|
||||
case "none", "":
|
||||
// модуль неторговых поручений QUIK не используется — блокировка не требуется
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user