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

46 lines
3.2 KiB
MySQL
Raw Permalink Normal View History

2026-10-11 14:01:11 +00:00
CREATE OR REPLACE PROCEDURE public."Prc_P_PurchaseOrderSend"(p_id uuid, p_user_id uuid DEFAULT NULL)
LANGUAGE plpgsql AS $$
2026-10-11 19:57:23 +00:00
DECLARE v_tenant uuid; v_no varchar(32); v_email varchar(256); v_supplier varchar(256);
v_subject varchar(256); v_lines text; v_total numeric; v_cur varchar(8);
2026-10-11 14:01:11 +00:00
BEGIN
2026-10-11 19:57:23 +00:00
SELECT o."TenantId", o."OrderNo", c."Email", c."Name", o."TotalAmount", o."CurrencyId"
INTO v_tenant, v_no, v_email, v_supplier, v_total, v_cur
2026-10-11 14:01:11 +00:00
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
2026-10-11 19:57:23 +00:00
RAISE EXCEPTION 'Kalemi olmayan sipariş gönderilemez.' USING ERRCODE = 'P0001', DETAIL = '50185';
2026-10-11 14:01:11 +00:00
END IF;
IF COALESCE(v_email, '') = '' THEN
2026-10-11 19:57:23 +00:00
RAISE EXCEPTION 'Tedarikçinin kontak kartında e-posta adresi yok.' USING ERRCODE = 'P0001', DETAIL = '50186';
2026-10-11 14:01:11 +00:00
END IF;
2026-10-11 19:57:23 +00:00
v_subject := 'Satınalma Siparişi ' || v_no;
2026-10-11 14:01:11 +00:00
2026-10-11 19:57:23 +00:00
SELECT string_agg('<tr><td>' || COALESCE(p."Name", '') || '</td><td>' || COALESCE(l."Description", '') || '</td><td>'
|| TRIM(TO_CHAR(l."Quantity", 'FM999G999G990D00')) || ' ' || l."UomId" || '</td><td>'
|| TRIM(TO_CHAR(l."UnitPrice", 'FM999G999G990D00')) || '</td><td>%'
|| TRIM(TO_CHAR(l."TaxRate", 'FM990')) || '</td><td>'
|| TRIM(TO_CHAR(l."Amount", 'FM999G999G990D00')) || '</td><td>'
|| COALESCE(TO_CHAR(l."DeliveryDate", 'DD.MM.YYYY'), '') || '</td></tr>', '' ORDER BY l."CreationTime")
2026-10-11 14:01:11 +00:00
INTO v_lines
2026-10-19 14:35:08 +00:00
FROM "Prc_T_PurchaseOrderLine" l LEFT JOIN "Stk_T_Product" p ON p."Id" = l."ProductId"
2026-10-11 14:01:11 +00:00
WHERE l."PurchaseOrderId" = p_id AND l."IsDeleted" = false;
2026-10-11 19:57:23 +00:00
-- Alıcı tedarikçinin e-postasıdır; tipin aktif Custom Mail kuralı gönderimi açar (kural kapatılırsa e-posta kuyruğa girmez).
INSERT INTO "Adm_T_Notification" ("Id", "TenantId", "NotificationRuleId", "NotificationTypeId", "NotificationChannel", "Identifier", "Subject", "Message",
2026-10-11 14:01:11 +00:00
"IsSent", "IsRead", "CreationTime", "CreatorId", "IsDeleted")
2026-10-11 19:57:23 +00:00
SELECT gen_random_uuid(), v_tenant, r."Id", t."Id", r."Channel", v_email, v_subject, LEFT(
2026-10-11 14:01:11 +00:00
'<p>Sayın ' || COALESCE(v_supplier, '') || ',</p><p>' || v_subject || ' aşağıda bilgilerinize sunulmuştur.</p>'
2026-10-11 19:57:23 +00:00
|| '<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><th>Termin</th></tr>'
2026-10-11 14:01:11 +00:00
|| COALESCE(v_lines, '') || '</table><p><b>Toplam: ' || TRIM(TO_CHAR(v_total, 'FM999G999G990D00')) || ' ' || v_cur || '</b></p>',
2026-10-11 19:57:23 +00:00
2048), false, false, NOW() AT TIME ZONE 'UTC', p_user_id, false
FROM "Adm_T_NotificationType" t
INNER JOIN "Adm_T_NotificationRule" r ON r."NotificationTypeId" = t."Id" AND r."IsActive" = true AND r."IsCustomized" = false AND r."IsDeleted" = false
AND r."RecipientType" = 'Custom' AND r."RecipientId" IS NULL AND r."Channel" = 'Mail'
WHERE t."Name" = 'SatinalmaSiparisiGonderildi' AND t."IsDeleted" = false AND t."TenantId" IS NOT DISTINCT FROM v_tenant;
2026-10-11 14:01:11 +00:00
2026-10-11 19:57:23 +00:00
UPDATE "Prc_T_PurchaseOrder" SET "LastSentDate" = NOW() AT TIME ZONE 'UTC' WHERE "Id" = p_id;
2026-10-11 14:01:11 +00:00
END;
$$;