2026-10-11 19:57:23 +00:00
|
|
|
|
-- İhaleyi kalem bazında siparişe çevirir: kalemin Seçili satırı varsa o, yoksa Önerilen satır kazanır.
|
|
|
|
|
|
-- Kazanan her teklif talebi için bir satınalma siparişi açılır (Kaynak = teklif no); kazanan teklif
|
|
|
|
|
|
-- Satınalma Siparişi, hiç kalem kazanamayan teklif İptal Edildi olur.
|
|
|
|
|
|
CREATE OR REPLACE PROCEDURE public."Prc_P_PurchaseRfqAward"(p_id uuid, p_user_id uuid DEFAULT NULL)
|
|
|
|
|
|
LANGUAGE plpgsql AS $$
|
|
|
|
|
|
DECLARE v_group uuid; v_tenant uuid; v_rfq uuid; v_po uuid; v_no varchar(128);
|
|
|
|
|
|
BEGIN
|
|
|
|
|
|
SELECT "TenderGroupId", "TenantId" INTO v_group, v_tenant FROM "Prc_T_PurchaseRfq" WHERE "Id" = p_id;
|
|
|
|
|
|
IF EXISTS (SELECT 1 FROM "Prc_T_PurchaseRfq" WHERE "TenderGroupId" = v_group AND "IsDeleted" = false AND "Status" = 'Purchase') THEN
|
|
|
|
|
|
RAISE EXCEPTION 'Bu ihale zaten siparişe dönüştürüldü.' USING ERRCODE = 'P0001', DETAIL = '50171';
|
|
|
|
|
|
END IF;
|
|
|
|
|
|
|
|
|
|
|
|
DROP TABLE IF EXISTS pg_temp.prc_award_win;
|
|
|
|
|
|
CREATE TEMP TABLE prc_award_win ON COMMIT DROP AS
|
|
|
|
|
|
SELECT c."Id" AS line_id, c."PurchaseRfqId" AS rfq_id
|
|
|
|
|
|
FROM "Prc_V_PurchaseRfqComparison" c
|
|
|
|
|
|
WHERE c."BaseId" = p_id AND c."Status" <> 'Cancelled'
|
|
|
|
|
|
AND (c."IsSelected"
|
|
|
|
|
|
OR (c."IsRecommended" AND NOT EXISTS (SELECT 1 FROM "Prc_V_PurchaseRfqComparison" s
|
|
|
|
|
|
WHERE s."BaseId" = p_id AND s."TenderLineId" = c."TenderLineId"
|
|
|
|
|
|
AND s."IsSelected" AND s."Status" <> 'Cancelled')));
|
|
|
|
|
|
IF NOT EXISTS (SELECT 1 FROM prc_award_win) THEN
|
|
|
|
|
|
RAISE EXCEPTION 'Siparişe dönüştürülecek kalem yok: tedarikçi fiyat ve terminlerini girin ya da Fiyat Karşılaştırması sekmesinde kazananı seçin.'
|
|
|
|
|
|
USING ERRCODE = 'P0001', DETAIL = '50172';
|
|
|
|
|
|
END IF;
|
|
|
|
|
|
|
|
|
|
|
|
FOR v_rfq IN SELECT DISTINCT rfq_id FROM prc_award_win LOOP
|
|
|
|
|
|
v_po := gen_random_uuid();
|
2026-10-12 21:43:05 +00:00
|
|
|
|
CALL public."Adm_P_SequenceNext"('Prc.PurchaseOrder', v_tenant, v_no);
|
2026-10-11 19:57:23 +00:00
|
|
|
|
|
2026-10-12 10:27:54 +00:00
|
|
|
|
INSERT INTO "Prc_T_PurchaseOrder" ("Id", "TenantId", "OrderNo", "PurchaseRfqId", "SupplierId", "SupplierReference", "AgreementId", "BranchId", "OperationTypeId", "WarehouseId", "CurrencyId",
|
|
|
|
|
|
"ExpectedArrival", "ConfirmDate", "BuyerUserId", "ProjectId", "IncotermId", "IncotermLocation", "PaymentTermId", "Terms",
|
2026-10-11 19:57:23 +00:00
|
|
|
|
"Status", "CreationTime", "CreatorId", "IsDeleted")
|
2026-10-12 10:27:54 +00:00
|
|
|
|
SELECT v_po, "TenantId", v_no, "Id", "SupplierId", "SupplierReference", "AgreementId", "BranchId", "OperationTypeId", "WarehouseId", "CurrencyId",
|
|
|
|
|
|
"ExpectedArrival", NOW() AT TIME ZONE 'UTC', "BuyerUserId", "ProjectId", "IncotermId", "IncotermLocation", "PaymentTermId", "Terms",
|
2026-10-11 19:57:23 +00:00
|
|
|
|
'Purchase', NOW() AT TIME ZONE 'UTC', p_user_id, false
|
|
|
|
|
|
FROM "Prc_T_PurchaseRfq" WHERE "Id" = v_rfq;
|
|
|
|
|
|
|
|
|
|
|
|
INSERT INTO "Prc_T_PurchaseOrderLine" ("Id", "TenantId", "PurchaseOrderId", "ProductId", "Description", "Quantity", "UomId", "UnitPrice", "TaxRate",
|
|
|
|
|
|
"Amount", "DeliveryDate", "MaterialRequestItemId", "PurchaseRfqLineId", "CreationTime", "CreatorId", "IsDeleted")
|
|
|
|
|
|
SELECT gen_random_uuid(), l."TenantId", v_po, l."ProductId", l."Description", l."Quantity", l."UomId", l."UnitPrice", l."TaxRate",
|
|
|
|
|
|
0, l."DeliveryDate", l."MaterialRequestItemId", l."Id", NOW() AT TIME ZONE 'UTC', p_user_id, false
|
|
|
|
|
|
FROM "Prc_T_PurchaseRfqLine" l
|
|
|
|
|
|
INNER JOIN prc_award_win w ON w.line_id = l."Id"
|
|
|
|
|
|
WHERE w.rfq_id = v_rfq;
|
|
|
|
|
|
|
|
|
|
|
|
CALL public."Prc_P_PurchaseOrderRecalc"(v_po);
|
2026-10-12 21:43:05 +00:00
|
|
|
|
CALL public."Inv_P_TransferFromPurchaseOrder"(v_po, p_user_id);
|
2026-10-11 19:57:23 +00:00
|
|
|
|
END LOOP;
|
|
|
|
|
|
|
|
|
|
|
|
UPDATE "Prc_T_PurchaseRfqLine" l SET "IsSelected" = EXISTS (SELECT 1 FROM prc_award_win w WHERE w.line_id = l."Id")
|
|
|
|
|
|
FROM "Prc_T_PurchaseRfq" r
|
|
|
|
|
|
WHERE r."Id" = l."PurchaseRfqId" AND r."TenderGroupId" = v_group AND r."IsDeleted" = false AND r."Status" <> 'Cancelled';
|
|
|
|
|
|
|
|
|
|
|
|
UPDATE "Prc_T_PurchaseRfq" r
|
|
|
|
|
|
SET "Status" = CASE WHEN EXISTS (SELECT 1 FROM prc_award_win w WHERE w.rfq_id = r."Id") THEN 'Purchase' ELSE 'Cancelled' END
|
|
|
|
|
|
WHERE r."TenderGroupId" = v_group AND r."IsDeleted" = false AND r."Status" <> 'Cancelled';
|
|
|
|
|
|
END;
|
|
|
|
|
|
$$;
|