ui: add B2B olmayan stok (orphans) page

This commit is contained in:
M_Kececi
2026-06-25 17:24:42 +03:00
parent dfad548963
commit 810c0e5eff

View File

@@ -107,11 +107,43 @@ func PostProductSeriesDefinitionHandler(pg *sql.DB) http.HandlerFunc {
ctx, cancel := context.WithTimeout(r.Context(), 30*time.Second) ctx, cancel := context.WithTimeout(r.Context(), 30*time.Second)
defer cancel() defer cancel()
err := pg.QueryRowContext(ctx, ` err := pg.QueryRowContext(ctx, `
INSERT INTO dfgrp (code, title, is_active, typ, master, parent_filter, sort_order, is_required, notes) WITH updated AS (
VALUES ($1, $2, COALESCE($3, TRUE), 'opt', 'zbggseri', $4, $5, FALSE, $6) UPDATE dfgrp
SET title=$2,
is_active=COALESCE($3, TRUE),
parent_filter=$4,
sort_order=$5,
notes=$6
WHERE master='zbggseri' AND code=$1
RETURNING id RETURNING id
),
inserted AS (
INSERT INTO dfgrp (code, title, is_active, typ, master, parent_filter, sort_order, is_required, notes)
SELECT $1, $2, COALESCE($3, TRUE), 'opt', 'zbggseri', $4, $5, FALSE, $6
WHERE NOT EXISTS (SELECT 1 FROM updated)
RETURNING id
)
SELECT id FROM updated
UNION ALL
SELECT id FROM inserted
LIMIT 1
`, req.Code, req.Title, req.IsActive, req.ParentFilter, req.SortOrder, req.Notes).Scan(&req.ID) `, req.Code, req.Title, req.IsActive, req.ParentFilter, req.SortOrder, req.Notes).Scan(&req.ID)
if err != nil { if err != nil {
if isPostgresUniqueViolation(err, "ndx_dfgrp_uq4") {
if selErr := pg.QueryRowContext(ctx, `
UPDATE dfgrp
SET title=$2,
is_active=COALESCE($3, TRUE),
parent_filter=$4,
sort_order=$5,
notes=$6
WHERE master='zbggseri' AND code=$1
RETURNING id
`, req.Code, req.Title, req.IsActive, req.ParentFilter, req.SortOrder, req.Notes).Scan(&req.ID); selErr == nil {
writeJSON(w, req)
return
}
}
http.Error(w, "Seri tanimi eklenemedi: "+err.Error(), http.StatusInternalServerError) http.Error(w, "Seri tanimi eklenemedi: "+err.Error(), http.StatusInternalServerError)
return return
} }
@@ -151,6 +183,10 @@ SET code=$2,
WHERE id=$1 AND master='zbggseri' WHERE id=$1 AND master='zbggseri'
`, id, req.Code, req.Title, req.IsActive, req.ParentFilter, req.SortOrder, req.Notes) `, id, req.Code, req.Title, req.IsActive, req.ParentFilter, req.SortOrder, req.Notes)
if err != nil { if err != nil {
if isPostgresUniqueViolation(err, "ndx_dfgrp_uq4") {
http.Error(w, "Bu seri kodu zaten var. Mevcut seri satirini duzenleyin veya farkli kod kullanin.", http.StatusConflict)
return
}
http.Error(w, "Seri tanimi guncellenemedi: "+err.Error(), http.StatusInternalServerError) http.Error(w, "Seri tanimi guncellenemedi: "+err.Error(), http.StatusInternalServerError)
return return
} }
@@ -1155,3 +1191,14 @@ func writeJSON(w http.ResponseWriter, payload any) {
w.Header().Set("Content-Type", "application/json; charset=utf-8") w.Header().Set("Content-Type", "application/json; charset=utf-8")
_ = json.NewEncoder(w).Encode(payload) _ = json.NewEncoder(w).Encode(payload)
} }
func isPostgresUniqueViolation(err error, constraint string) bool {
if err == nil {
return false
}
pqErr, ok := err.(*pq.Error)
if !ok {
return false
}
return string(pqErr.Code) == "23505" && (constraint == "" || pqErr.Constraint == constraint)
}