32 lines
2 KiB
PL/PgSQL
32 lines
2 KiB
PL/PgSQL
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); END IF;
|
||
END;
|
||
$$;
|