sozsoft-platform/configs/seeds/postgres/object/Stk_P_TransferLineLotStockSave.sql

56 lines
2.5 KiB
MySQL
Raw Normal View History

2026-10-19 14:35:08 +00:00
-- Stoktan Lot Seçimi (Stk.TransferLineLotStock) satır kaydı: yazılan miktar varsa o, yoksa Seç işaretliyse lotun
2026-10-12 21:43:05 +00:00
-- eldeki miktarı atanır (ekranda Seç aynı değeri yazar); ikisi de yoksa lot satırdan çıkar. Batch kaydı her satırı ayrı ve
-- eşzamanlı istekle gönderir; aynı satırın lotları üst üste yazılmasın diye hareket satırı kilitlenip istekler sırayla işlenir.
2026-10-19 14:35:08 +00:00
CREATE OR REPLACE PROCEDURE public."Stk_P_TransferLineLotStockSave"(
2026-10-12 21:43:05 +00:00
p_id varchar,
p_is_selected boolean DEFAULT NULL,
p_selected_quantity numeric(18, 4) DEFAULT NULL,
p_last_modifier_id uuid DEFAULT NULL
)
LANGUAGE plpgsql AS $$
DECLARE v_line uuid := CAST(left(p_id, 36) AS uuid); v_stock uuid := CAST(substr(p_id, 38, 36) AS uuid);
v_tenant uuid; v_doc uuid; v_status varchar(16); v_lot varchar(64); v_on_hand numeric(18, 4); v_qty numeric(18, 4);
BEGIN
SELECT l."TenantId", l."TransferId"
INTO v_tenant, v_doc
2026-10-19 14:35:08 +00:00
FROM "Stk_T_TransferLine" l
2026-10-12 21:43:05 +00:00
WHERE l."Id" = v_line
FOR UPDATE;
2026-10-19 14:35:08 +00:00
SELECT t."Status", s."LotNo", public."Stk_F_UomConvert"(s."Quantity", s."UomId", l."UomId")
2026-10-12 21:43:05 +00:00
INTO v_status, v_lot, v_on_hand
2026-10-19 14:35:08 +00:00
FROM "Stk_T_TransferLine" l
INNER JOIN "Stk_T_Transfer" t ON t."Id" = l."TransferId"
INNER JOIN "Stk_T_Stock" s ON s."Id" = v_stock AND s."LocationId" = t."SourceLocationId" AND s."ProductId" = l."ProductId"
2026-10-12 21:43:05 +00:00
WHERE l."Id" = v_line;
IF v_lot IS NULL THEN
RAISE EXCEPTION 'Lot, belgenin kaynak konumunda bulunamadı.' USING ERRCODE = 'P0001', DETAIL = '50322';
END IF;
IF v_status IN ('Done', 'Cancelled') THEN
RAISE EXCEPTION 'Tamamlanmış ya da iptal edilmiş belgenin satırı değiştirilemez.' USING ERRCODE = 'P0001', DETAIL = '50313';
END IF;
IF COALESCE(p_selected_quantity, 0) > 0 THEN
v_qty := p_selected_quantity;
ELSIF p_is_selected THEN
v_qty := v_on_hand;
ELSE
v_qty := 0;
END IF;
IF v_qty > v_on_hand THEN
RAISE EXCEPTION 'Seçilen miktar lotun eldeki miktarını aşamaz.' USING ERRCODE = 'P0001', DETAIL = '50324';
END IF;
2026-10-19 14:35:08 +00:00
UPDATE "Stk_T_TransferLineLot" SET "IsDeleted" = true, "DeletionTime" = NOW() AT TIME ZONE 'UTC', "DeleterId" = p_last_modifier_id
2026-10-12 21:43:05 +00:00
WHERE "TransferLineId" = v_line AND "LotNo" = v_lot AND "IsDeleted" = false;
IF v_qty > 0 THEN
2026-10-19 14:35:08 +00:00
INSERT INTO "Stk_T_TransferLineLot" ("Id", "TenantId", "TransferLineId", "LotNo", "Quantity", "CreationTime", "CreatorId", "IsDeleted")
2026-10-12 21:43:05 +00:00
VALUES (gen_random_uuid(), v_tenant, v_line, v_lot, v_qty, NOW() AT TIME ZONE 'UTC', p_last_modifier_id, false);
END IF;
2026-10-19 14:35:08 +00:00
CALL public."Stk_P_TransferRecalc"(v_doc);
2026-10-12 21:43:05 +00:00
END;
$$;