sozsoft-platform/configs/seeds/postgres/object/Prc_P_PurchaseOrderSend.sql
2026-10-11 17:01:11 +03:00

45 lines
3 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.

CREATE OR REPLACE PROCEDURE public."Prc_P_PurchaseOrderSend"(p_id uuid, p_user_id uuid DEFAULT NULL)
LANGUAGE plpgsql AS $$
DECLARE v_tenant uuid; v_no varchar(32); v_status varchar(16); v_email varchar(256); v_supplier varchar(256);
v_type_name varchar(64); v_type uuid; v_subject varchar(256); v_lines text; v_total numeric; v_cur varchar(8);
BEGIN
SELECT o."TenantId", o."OrderNo", o."Status", c."Email", c."Name", o."TotalAmount", o."CurrencyId"
INTO v_tenant, v_no, v_status, v_email, v_supplier, v_total, v_cur
FROM "Prc_T_PurchaseOrder" o LEFT JOIN "Adm_T_Contact" c ON c."Id" = o."SupplierId"
WHERE o."Id" = p_id;
IF NOT EXISTS (SELECT 1 FROM "Prc_T_PurchaseOrderLine" WHERE "PurchaseOrderId" = p_id AND "IsDeleted" = false) THEN
RAISE EXCEPTION 'Kalemi olmayan belge gönderilemez.';
END IF;
IF COALESCE(v_email, '') = '' THEN
RAISE EXCEPTION 'Tedarikçinin kontak kartında e-posta adresi yok.';
END IF;
IF v_status = 'Purchase' THEN v_type_name := 'Prc.PurchaseOrderSent'; v_subject := 'Satınalma Siparişi ' || v_no;
ELSE v_type_name := 'Prc.RfqSent'; v_subject := 'Teklif Talebi ' || v_no; END IF;
SELECT "Id" INTO v_type FROM "Adm_T_NotificationType"
WHERE "Name" = v_type_name AND "IsDeleted" = false AND ("TenantId" = v_tenant OR ("TenantId" IS NULL AND v_tenant IS NULL)) LIMIT 1;
SELECT string_agg('<tr><td>' || COALESCE(p."Name", '') || '</td><td>' || COALESCE(l."Description", '') || '</td><td style="text-align:right">'
|| TRIM(TO_CHAR(l."Quantity", 'FM999G999G990D##')) || ' ' || l."UomId" || '</td><td style="text-align:right">'
|| TRIM(TO_CHAR(l."UnitPrice", 'FM999G999G990D00')) || '</td><td style="text-align:right">%'
|| TRIM(TO_CHAR(l."TaxRate", 'FM990')) || '</td><td style="text-align:right">'
|| TRIM(TO_CHAR(l."Amount", 'FM999G999G990D00')) || '</td></tr>', '' ORDER BY l."CreationTime")
INTO v_lines
FROM "Prc_T_PurchaseOrderLine" l LEFT JOIN "Inv_T_Product" p ON p."Id" = l."ProductId"
WHERE l."PurchaseOrderId" = p_id AND l."IsDeleted" = false;
INSERT INTO "Adm_T_Notification" ("Id", "TenantId", "NotificationTypeId", "NotificationChannel", "Identifier", "Subject", "Message",
"IsSent", "IsRead", "CreationTime", "CreatorId", "IsDeleted")
VALUES (gen_random_uuid(), v_tenant, v_type, 'Mail', v_email, v_subject,
'<p>Sayın ' || COALESCE(v_supplier, '') || ',</p><p>' || v_subject || ' aşağıda bilgilerinize sunulmuştur.</p>'
|| '<table border="1" cellpadding="4" cellspacing="0"><tr><th>Ürün</th><th>Açıklama</th><th>Miktar</th><th>Birim Fiyat</th><th>KDV</th><th>Tutar</th></tr>'
|| COALESCE(v_lines, '') || '</table><p><b>Toplam: ' || TRIM(TO_CHAR(v_total, 'FM999G999G990D00')) || ' ' || v_cur || '</b></p>',
false, false, CURRENT_TIMESTAMP, p_user_id, false);
UPDATE "Prc_T_PurchaseOrder" SET "LastSentDate" = CURRENT_TIMESTAMP,
"Status" = CASE WHEN "Status" = 'Draft' THEN 'Sent' ELSE "Status" END
WHERE "Id" = p_id;
END;
$$;