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

52 lines
3.6 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.

-- Talep Kalemleri sekmesinde işaretlenen kalemi (p_key = belge|kalem) teklif talebine ya da taslak siparişe kopyalar.
-- Fiyat: sözleşme kalemi › tedarikçi fiyatı › 0; termin talebin istenen tarihidir.
CREATE OR REPLACE PROCEDURE public."Prc_P_PurchaseImportItem"(p_key varchar, p_transfer boolean DEFAULT true)
LANGUAGE plpgsql AS $$
DECLARE v_doc uuid; v_item uuid; v_is_order boolean := false; v_tenant uuid; v_supplier uuid; v_agr uuid; v_status varchar(16);
v_product uuid; v_description varchar(512); v_quantity numeric(18, 4); v_uom varchar(50); v_price numeric(18, 4);
v_tax numeric(18, 4); v_due timestamp;
BEGIN
IF NOT COALESCE(p_transfer, false) THEN RETURN; END IF;
IF p_key !~* '^[0-9a-f-]{36}\|[0-9a-f-]{36}$' THEN
RAISE EXCEPTION 'Talep kalemi yalnız teklif aşamasındaki teklif talebine ya da taslak siparişe aktarılabilir.' USING ERRCODE = 'P0001', DETAIL = '50161';
END IF;
v_doc := left(p_key, 36)::uuid;
v_item := right(p_key, 36)::uuid;
SELECT "TenantId", "SupplierId", "AgreementId", "Status" INTO v_tenant, v_supplier, v_agr, v_status
FROM "Prc_T_PurchaseRfq" WHERE "Id" = v_doc AND "IsDeleted" = false AND "Status" IN ('Draft', 'Sent');
IF v_status IS NULL THEN
SELECT "TenantId", "SupplierId", "AgreementId", "Status", true INTO v_tenant, v_supplier, v_agr, v_status, v_is_order
FROM "Prc_T_PurchaseOrder" WHERE "Id" = v_doc AND "IsDeleted" = false AND "Status" = 'Draft';
END IF;
IF v_status IS NULL THEN
RAISE EXCEPTION 'Talep kalemi yalnız teklif aşamasındaki teklif talebine ya da taslak siparişe aktarılabilir.' USING ERRCODE = 'P0001', DETAIL = '50161';
END IF;
SELECT a."ProductId", a."RequestReason", a."Quantity", a."UomId", a."DueDate", COALESCE(p."PurchaseTaxRate", 0),
COALESCE((SELECT al."UnitPrice" FROM "Prc_T_PurchaseAgreementLine" al
WHERE al."AgreementId" = v_agr AND al."ProductId" = a."ProductId" AND al."IsDeleted" = false LIMIT 1),
(SELECT ps."Price" FROM "Inv_T_ProductSupplier" ps
WHERE ps."ProductId" = a."ProductId" AND ps."ContactId" = v_supplier AND ps."IsDeleted" = false
ORDER BY ps."MinQuantity" LIMIT 1), 0)
INTO v_product, v_description, v_quantity, v_uom, v_due, v_tax, v_price
FROM "Prc_V_MaterialRequestAvailableItem" a
LEFT JOIN "Inv_T_Product" p ON p."Id" = a."ProductId"
WHERE a."Id" = v_item AND a."TenantId" IS NOT DISTINCT FROM v_tenant;
IF v_product IS NULL THEN
RAISE EXCEPTION 'Talep kalemi artık aktarılamaz: başka bir teklife ya da siparişe aktarılmış veya talep değişmiş.' USING ERRCODE = 'P0001', DETAIL = '50162';
END IF;
IF v_is_order THEN
INSERT INTO "Prc_T_PurchaseOrderLine" ("Id", "TenantId", "PurchaseOrderId", "ProductId", "Description", "Quantity", "UomId",
"UnitPrice", "TaxRate", "Amount", "DeliveryDate", "MaterialRequestItemId", "CreationTime", "IsDeleted")
VALUES (gen_random_uuid(), v_tenant, v_doc, v_product, v_description, v_quantity, v_uom, v_price, v_tax, 0, v_due, v_item, NOW() AT TIME ZONE 'UTC', false);
CALL public."Prc_P_PurchaseOrderRecalc"(v_doc);
ELSE
INSERT INTO "Prc_T_PurchaseRfqLine" ("Id", "TenantId", "PurchaseRfqId", "ProductId", "Description", "Quantity", "UomId",
"UnitPrice", "TaxRate", "Amount", "DeliveryDate", "MaterialRequestItemId", "CreationTime", "IsDeleted")
VALUES (gen_random_uuid(), v_tenant, v_doc, v_product, v_description, v_quantity, v_uom, v_price, v_tax, 0, v_due, v_item, NOW() AT TIME ZONE 'UTC', false);
CALL public."Prc_P_PurchaseRfqRecalc"(v_doc);
END IF;
END;
$$;