sozsoft-platform/configs/seeds/postgres/object/Prc_P_PurchaseRfqCreateAlternative.sql
2026-10-11 22:57:23 +03:00

41 lines
3.1 KiB
PL/PgSQL
Raw 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.

-- Teklifler sekmesinde Ekle ile seçilen tedarikçi için belgenin kopyasını aynı ihalede açar: kalemler TenderLineId ile
-- birlikte kopyalanır, fiyat tedarikçinin fiyat listesinden, para birimi ve koşullar kontak kartından gelir.
CREATE OR REPLACE PROCEDURE public."Prc_P_PurchaseRfqCreateAlternative"(p_id uuid, p_supplier_id uuid, p_user_id uuid DEFAULT NULL)
LANGUAGE plpgsql AS $$
DECLARE v_tenant uuid; v_status varchar(16); v_group uuid; v_new uuid := gen_random_uuid(); v_no varchar(128);
BEGIN
SELECT "TenantId", "Status", "TenderGroupId" INTO v_tenant, v_status, v_group FROM "Prc_T_PurchaseRfq" WHERE "Id" = p_id;
IF COALESCE(v_status, '') NOT IN ('Draft', 'Sent') THEN
RAISE EXCEPTION 'Siparişe dönüştürülmüş ya da iptal edilmiş teklife alternatif eklenemez.' USING ERRCODE = 'P0001', DETAIL = '50164';
END IF;
IF EXISTS (SELECT 1 FROM "Prc_T_PurchaseRfq" WHERE "TenderGroupId" = v_group AND "SupplierId" = p_supplier_id AND "IsDeleted" = false AND "Status" <> 'Cancelled') THEN
RAISE EXCEPTION 'Bu tedarikçinin ihalede zaten bir teklif talebi var.' USING ERRCODE = 'P0001', DETAIL = '50167';
END IF;
CALL public."Adm_P_SequenceNext"('PurchaseRfq', v_tenant, v_no);
INSERT INTO "Prc_T_PurchaseRfq" ("Id", "TenantId", "RfqNo", "TenderGroupId", "SupplierId", "AgreementId", "CurrencyId", "OrderDeadline",
"ExpectedArrival", "RequireConfirmation", "OperationTypeId", "BuyerUserId", "ProjectId", "IncotermId", "IncotermLocation", "PaymentTermId",
"Terms", "PriceWeight", "DeliveryWeight", "CreationTime", "CreatorId", "IsDeleted")
SELECT v_new, r."TenantId", v_no, r."TenderGroupId", c."Id", NULL, COALESCE(c."SupplierCurrency", r."CurrencyId"), r."OrderDeadline",
r."ExpectedArrival", r."RequireConfirmation", r."OperationTypeId", r."BuyerUserId", r."ProjectId",
COALESCE(c."PurchaseIncotermId", r."IncotermId"), COALESCE(c."PurchaseIncotermLocation", r."IncotermLocation"),
COALESCE(c."PurchasePaymentTermId", r."PaymentTermId"), r."Terms", r."PriceWeight", r."DeliveryWeight",
NOW() AT TIME ZONE 'UTC', p_user_id, false
FROM "Prc_T_PurchaseRfq" r
INNER JOIN "Adm_T_Contact" c ON c."Id" = p_supplier_id
WHERE r."Id" = p_id;
INSERT INTO "Prc_T_PurchaseRfqLine" ("Id", "TenantId", "PurchaseRfqId", "TenderLineId", "ProductId", "Description", "Quantity", "UomId",
"UnitPrice", "TaxRate", "Amount", "DeliveryDate", "MaterialRequestItemId", "CreationTime", "CreatorId", "IsDeleted")
SELECT gen_random_uuid(), l."TenantId", v_new, l."TenderLineId", l."ProductId", l."Description", l."Quantity", l."UomId",
COALESCE((SELECT ps."Price" FROM "Inv_T_ProductSupplier" ps
WHERE ps."ProductId" = l."ProductId" AND ps."ContactId" = p_supplier_id AND ps."IsDeleted" = false
ORDER BY ps."MinQuantity" LIMIT 1), 0),
l."TaxRate", 0, l."DeliveryDate", l."MaterialRequestItemId", NOW() AT TIME ZONE 'UTC', p_user_id, false
FROM "Prc_T_PurchaseRfqLine" l
WHERE l."PurchaseRfqId" = p_id AND l."IsDeleted" = false;
CALL public."Prc_P_PurchaseRfqRecalc"(v_new);
END;
$$;