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