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