2026-10-12 10:27:54 +00:00
|
|
|
|
-- Talep Kalemleri sekmesinde seçilen kalemi (p_key = belge|kalem) teklif talebine ya da taslak siparişe kopyalar.
|
|
|
|
|
|
-- Kalem yalnız belgenin şubesindeki talepten gelir. Fiyat: sözleşme kalemi › tedarikçi fiyatı › 0; termin talebin istenen tarihidir.
|
|
|
|
|
|
CREATE OR REPLACE PROCEDURE public."Prc_P_PurchaseImportItem"(p_key varchar)
|
2026-10-11 19:57:23 +00:00
|
|
|
|
LANGUAGE plpgsql AS $$
|
2026-10-12 10:27:54 +00:00
|
|
|
|
DECLARE v_doc uuid; v_item uuid; v_is_order boolean := false; v_tenant uuid; v_branch uuid; v_supplier uuid; v_agr uuid; v_status varchar(16);
|
2026-10-11 19:57:23 +00:00
|
|
|
|
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 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;
|
|
|
|
|
|
|
2026-10-12 10:27:54 +00:00
|
|
|
|
SELECT "TenantId", "BranchId", "SupplierId", "AgreementId", "Status" INTO v_tenant, v_branch, v_supplier, v_agr, v_status
|
2026-10-11 19:57:23 +00:00
|
|
|
|
FROM "Prc_T_PurchaseRfq" WHERE "Id" = v_doc AND "IsDeleted" = false AND "Status" IN ('Draft', 'Sent');
|
|
|
|
|
|
IF v_status IS NULL THEN
|
2026-10-12 10:27:54 +00:00
|
|
|
|
SELECT "TenantId", "BranchId", "SupplierId", "AgreementId", "Status", true INTO v_tenant, v_branch, v_supplier, v_agr, v_status, v_is_order
|
2026-10-11 19:57:23 +00:00
|
|
|
|
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"
|
2026-10-12 10:27:54 +00:00
|
|
|
|
WHERE a."Id" = v_item AND a."BranchId" = v_branch AND a."TenantId" IS NOT DISTINCT FROM v_tenant;
|
2026-10-11 19:57:23 +00:00
|
|
|
|
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;
|
|
|
|
|
|
$$;
|