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

52 lines
3.6 KiB
MySQL
Raw Normal View History

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;
$$;