sozsoft-platform/configs/seeds/postgres/object/Prc_P_PurchaseRfqAfterSave.sql
2026-10-12 13:27:54 +03:00

35 lines
2 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.

CREATE OR REPLACE PROCEDURE public."Prc_P_PurchaseRfqAfterSave"(p_id uuid, p_user_id uuid DEFAULT NULL)
LANGUAGE plpgsql AS $$
DECLARE v_act varchar(16);
BEGIN
SELECT "PendingAction" INTO v_act FROM "Prc_T_PurchaseRfq" WHERE "Id" = p_id;
IF EXISTS (SELECT 1 FROM "Prc_T_PurchaseRfq" WHERE "Id" = p_id AND "PriceWeight" + "DeliveryWeight" <> 100) THEN
RAISE EXCEPTION 'Fiyat ve termin ağırlıklarının toplamı 100 olmalıdır.' USING ERRCODE = 'P0001', DETAIL = '50153';
END IF;
-- İhalenin kökü ilk belgedir; alternatifler kökün Id'sini taşır.
UPDATE "Prc_T_PurchaseRfq" r SET
"TenderGroupId" = COALESCE(r."TenderGroupId", r."Id"),
"QuoteDate" = CASE WHEN r."SupplierResponse" <> 'Waiting' THEN COALESCE(r."QuoteDate", NOW() AT TIME ZONE 'UTC') ELSE r."QuoteDate" END,
"PaymentTermId" = COALESCE(r."PaymentTermId", c."PurchasePaymentTermId"),
"IncotermId" = COALESCE(r."IncotermId", c."PurchaseIncotermId"),
"IncotermLocation" = COALESCE(r."IncotermLocation", c."PurchaseIncotermLocation"),
"BuyerUserId" = CASE WHEN r."LastModificationTime" IS NULL AND c."BuyerUserId" IS NOT NULL THEN c."BuyerUserId" ELSE r."BuyerUserId" END
FROM "Adm_T_Contact" c
WHERE r."Id" = p_id AND c."Id" = r."SupplierId";
-- Kıyas ağırlıkları ihale geneli tek değerdir; hangi belgede değişirse diğerlerine yazılır.
UPDATE "Prc_T_PurchaseRfq" x SET "PriceWeight" = r."PriceWeight", "DeliveryWeight" = r."DeliveryWeight"
FROM "Prc_T_PurchaseRfq" r
WHERE r."Id" = p_id AND x."TenderGroupId" = r."TenderGroupId" AND x."Id" <> r."Id"
AND (x."PriceWeight" <> r."PriceWeight" OR x."DeliveryWeight" <> r."DeliveryWeight");
CALL public."Prc_P_PurchaseRfqFromAgreement"(p_id);
CALL public."Prc_P_PurchaseRfqRecalc"(p_id);
-- Durum butonlari islemi PendingAction alanina yazip ekranin guncelleme ucuyla kaydeder.
IF v_act IS NOT NULL THEN
CALL public."Prc_P_PurchaseRfqSetStatus"(p_id, v_act, p_user_id);
CALL public."Prc_P_MaterialRequestSyncStatus"(p_id);
END IF;
END;
$$;