sozsoft-platform/configs/seeds/postgres/object/Prc_P_PurchaseRfqComparisonSave.sql
2026-10-19 17:35:08 +03:00

40 lines
2.1 KiB
PL/PgSQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- Fiyat Girişi (Prc.PurchaseRfqComparison) satır kaydı. Batch kaydı her satırı ayrı ve eşzamanlı istekle gönderir;
-- satır güncellemesi ile teklifin yeniden hesabı aynı işlemde, önce ihalenin kök teklifi kilitlenerek yapılır. Grid ihalenin
-- bütün tedarikçi tekliflerinin satırlarını taşır; kilit ihale düzeyinde olduğu için bu satırlar sırayla işlenir ve satırı
-- kilitleyip diğer isteğin satırını bekleyen iki istek kilitlenmez (deadlock).
CREATE OR REPLACE PROCEDURE public."Prc_P_PurchaseRfqComparisonSave"(
p_id uuid,
p_unit_price numeric(18, 4),
p_delivery_date timestamp,
p_is_selected boolean,
p_tenant_id uuid,
p_last_modification_time timestamp,
p_last_modifier_id uuid
)
LANGUAGE plpgsql AS $$
DECLARE v_rfq uuid; v_group uuid; v_status varchar(16);
BEGIN
SELECT "PurchaseRfqId" INTO v_rfq FROM "Prc_T_PurchaseRfqLine" WHERE "Id" = p_id;
SELECT COALESCE("TenderGroupId", "Id") INTO v_group FROM "Prc_T_PurchaseRfq" WHERE "Id" = v_rfq;
PERFORM 1 FROM "Prc_T_PurchaseRfq" WHERE "Id" = v_group FOR UPDATE;
SELECT "Status" INTO v_status FROM "Prc_T_PurchaseRfq" WHERE "Id" = v_rfq;
IF v_status IN ('Purchase', 'Cancelled') THEN
RAISE EXCEPTION 'Siparişe dönüştürülmüş ya da iptal edilmiş teklifin kalemi değiştirilemez.' USING ERRCODE = 'P0001', DETAIL = '50142';
END IF;
UPDATE "Prc_T_PurchaseRfqLine"
SET "UnitPrice" = p_unit_price, "DeliveryDate" = p_delivery_date, "IsSelected" = p_is_selected,
"LastModificationTime" = p_last_modification_time, "LastModifierId" = p_last_modifier_id
WHERE "Id" = p_id AND "TenantId" IS NOT DISTINCT FROM p_tenant_id;
-- Fiyatı girilen teklif yanıtlanmış sayılır; geçerlilik verilmemişse sipariş son tarihine kadar geçerlidir.
IF p_unit_price > 0 THEN
UPDATE "Prc_T_PurchaseRfq"
SET "SupplierResponse" = 'Quoted', "QuoteDate" = COALESCE("QuoteDate", NOW() AT TIME ZONE 'UTC'),
"QuoteValidUntil" = COALESCE("QuoteValidUntil", CAST("OrderDeadline" AS date))
WHERE "Id" = v_rfq AND "SupplierResponse" = 'Waiting';
END IF;
CALL public."Prc_P_PurchaseRfqRecalc"(v_rfq);
END;
$$;