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

41 lines
2.1 KiB
MySQL
Raw Normal View History

2026-10-19 14:35:08 +00:00
-- Fiyat Girişi (Prc.PurchaseRfqComparison) satır kaydı. Batch kaydı her satırı ayrı ve eşzamanlı istekle gönderir;
2026-10-12 10:27:54 +00:00
-- 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;
$$;