Мастер, «Организация»: одна кнопка «Сохранить»; в строке справочника — своя запись
- Организация и депозитарные реквизиты в НРД сохраняются одной кнопкой внизу шага (поля реквизитов — в общей форме org-form; saveOrg сохраняет и их, если они пришли; в настройках формы прежние). Повтор «Из DEPO: … подставлено» в мастере убран — то же в зелёной плашке. - «Найти себя в справочнике участников M2M» не пустая: по коду и ИНН из полей показывается своя запись и «✓ Есть в справочнике участников M2M»; нет в справочнике — предупреждение. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
+45
-21
@@ -75,13 +75,39 @@ func orgName(s Settings) string {
|
||||
return ""
|
||||
}
|
||||
|
||||
// saveOrg — POST /admin/setup/org: организация выбрана из справочника (hb=код) или введена вручную.
|
||||
// saveOrg — POST /admin/setup/org: организация выбрана из справочника (hb=код) или введена вручную. В мастере
|
||||
// та же форма несёт и депозитарные реквизиты в НРД (deponent_code…): на шаге одна кнопка «Сохранить».
|
||||
func (h *setupHandlers) saveOrg(w http.ResponseWriter, r *http.Request) {
|
||||
if r.Method != http.MethodPost {
|
||||
http.Error(w, "method", http.StatusMethodNotAllowed)
|
||||
return
|
||||
}
|
||||
s := h.rc.Snapshot().NSD
|
||||
changedCode, bad := orgFromForm(r, &s)
|
||||
if bad == "" && r.PostForm.Has("deponent_code") {
|
||||
bad = nsdReqFromForm(r, &s)
|
||||
}
|
||||
if bad != "" {
|
||||
setupFlash(w, r, bad)
|
||||
return
|
||||
}
|
||||
if err := h.rc.UpdateNSD(s); err != nil {
|
||||
setupFlash(w, r, "Организация: ошибка сохранения: "+err.Error())
|
||||
return
|
||||
}
|
||||
msg := "Организация сохранена: " + pick(s.OrgName, "—") + ", ИНН " + pick(s.OrgINN, "—") + ", код " + pick(s.OrgCode, "—")
|
||||
if r.PostForm.Has("deponent_code") {
|
||||
msg += ". Реквизиты в НРД: код " + pick(s.DeponentCode, "—") + ", счёт " + pick(s.AccountID, "—") + ", раздел " + pick(s.SectionID, "—")
|
||||
}
|
||||
if changedCode {
|
||||
msg += ". Код отправителя применится после перезапуска bj-server."
|
||||
}
|
||||
setupFlash(w, r, msg)
|
||||
}
|
||||
|
||||
// orgFromForm — код, ИНН и наименование организации из формы (выбор из справочника или вручную).
|
||||
// Возвращает, сменился ли код, и текст ошибки.
|
||||
func orgFromForm(r *http.Request, s *NSDSettings) (bool, string) {
|
||||
code := strings.ToUpper(strings.TrimSpace(r.FormValue("org_code")))
|
||||
inn := strings.TrimSpace(r.FormValue("org_inn"))
|
||||
name := strings.TrimSpace(r.FormValue("org_name"))
|
||||
@@ -91,27 +117,17 @@ func (h *setupHandlers) saveOrg(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
}
|
||||
if inn != "" && !manualINNRe.MatchString(inn) {
|
||||
setupFlash(w, r, "Организация: ИНН юридического лица — 10 цифр")
|
||||
return
|
||||
return false, "Организация: ИНН юридического лица — 10 цифр"
|
||||
}
|
||||
if code != "" && !regexpMCCode.MatchString(code) {
|
||||
setupFlash(w, r, "Организация: код участника — вида MC0000000000")
|
||||
return
|
||||
return false, "Организация: код участника — вида MC0000000000"
|
||||
}
|
||||
changedCode := code != s.OrgCode
|
||||
s.OrgCode, s.OrgINN, s.OrgName = code, inn, name
|
||||
if s.DeponentCode == "" {
|
||||
s.DeponentCode = code
|
||||
}
|
||||
if err := h.rc.UpdateNSD(s); err != nil {
|
||||
setupFlash(w, r, "Организация: ошибка сохранения: "+err.Error())
|
||||
return
|
||||
}
|
||||
msg := "Организация сохранена: " + pick(name, "—") + ", ИНН " + pick(inn, "—") + ", код " + pick(code, "—")
|
||||
if changedCode {
|
||||
msg += ". Код отправителя применится после перезапуска bj-server."
|
||||
}
|
||||
setupFlash(w, r, msg)
|
||||
return changedCode, ""
|
||||
}
|
||||
|
||||
var nsdReqRe = regexp.MustCompile(`^[A-Z0-9]{4,30}$`)
|
||||
@@ -124,19 +140,27 @@ func (h *setupHandlers) saveNSDRequisites(w http.ResponseWriter, r *http.Request
|
||||
return
|
||||
}
|
||||
s := h.rc.Snapshot().NSD
|
||||
if bad := nsdReqFromForm(r, &s); bad != "" {
|
||||
setupFlash(w, r, bad)
|
||||
return
|
||||
}
|
||||
if err := h.rc.UpdateNSD(s); err != nil {
|
||||
setupFlash(w, r, "Реквизиты НРД: ошибка сохранения: "+err.Error())
|
||||
return
|
||||
}
|
||||
setupFlash(w, r, "Реквизиты НРД сохранены: код "+pick(s.DeponentCode, "—")+", счёт "+pick(s.AccountID, "—")+", раздел "+pick(s.SectionID, "—"))
|
||||
}
|
||||
|
||||
// nsdReqFromForm — депозитарный код, счёт и раздел организации в НРД из формы; текст ошибки.
|
||||
func nsdReqFromForm(r *http.Request, s *NSDSettings) string {
|
||||
dep := strings.ToUpper(strings.TrimSpace(r.FormValue("deponent_code")))
|
||||
acc := strings.ToUpper(strings.TrimSpace(r.FormValue("account_id")))
|
||||
sec := strings.ToUpper(strings.TrimSpace(r.FormValue("section_id")))
|
||||
for _, v := range []struct{ name, val string }{{"депозитарный код", dep}, {"депозитарный счёт", acc}, {"раздел счёта", sec}} {
|
||||
if v.val != "" && !nsdReqRe.MatchString(v.val) {
|
||||
setupFlash(w, r, "Реквизиты НРД: "+v.name+" — латинские буквы и цифры, без пробелов")
|
||||
return
|
||||
return "Реквизиты НРД: " + v.name + " — латинские буквы и цифры, без пробелов"
|
||||
}
|
||||
}
|
||||
s.DeponentCode, s.AccountID, s.SectionID = dep, acc, sec
|
||||
if err := h.rc.UpdateNSD(s); err != nil {
|
||||
setupFlash(w, r, "Реквизиты НРД: ошибка сохранения: "+err.Error())
|
||||
return
|
||||
}
|
||||
setupFlash(w, r, "Реквизиты НРД сохранены: код "+pick(dep, "—")+", счёт "+pick(acc, "—")+", раздел "+pick(sec, "—"))
|
||||
return ""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user