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;
|
|
|
|
|
|
$$;
|