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

36 lines
2 KiB
MySQL
Raw Permalink Normal View History

2026-10-11 19:57:23 +00:00
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.
2026-10-12 10:27:54 +00:00
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;
2026-10-11 19:57:23 +00:00
END;
$$;