-- Tedarikçiden fiyat ve termin isteyen e-postayı bildirim kuyruğuna yazar; fiyat gönderilmez.
CREATE OR REPLACE PROCEDURE public."Prc_P_PurchaseRfqSend"(p_id uuid, p_user_id uuid DEFAULT NULL)
LANGUAGE plpgsql AS $$
DECLARE v_tenant uuid; v_no varchar(32); v_email varchar(256); v_supplier varchar(256); v_deadline timestamp;
v_subject varchar(256); v_lines text;
BEGIN
SELECT r."TenantId", r."RfqNo", c."Email", c."Name", r."OrderDeadline"
INTO v_tenant, v_no, v_email, v_supplier, v_deadline
FROM "Prc_T_PurchaseRfq" r LEFT JOIN "Adm_T_Contact" c ON c."Id" = r."SupplierId"
WHERE r."Id" = p_id;
IF NOT EXISTS (SELECT 1 FROM "Prc_T_PurchaseRfqLine" WHERE "PurchaseRfqId" = p_id AND "IsDeleted" = false) THEN
RAISE EXCEPTION '%: kalemi olmayan teklif talebi gönderilemez.', v_no USING ERRCODE = 'P0001', DETAIL = '50165';
END IF;
IF COALESCE(v_email, '') = '' THEN
RAISE EXCEPTION '%: tedarikçinin (%) kontak kartında e-posta adresi yok.', v_no, v_supplier USING ERRCODE = 'P0001', DETAIL = '50166';
END IF;
v_subject := 'Teklif Talebi ' || v_no;
SELECT string_agg('
| ' || COALESCE(p."Name", '') || ' | ' || COALESCE(l."Description", '') || ' | '
|| TRIM(TO_CHAR(l."Quantity", 'FM999G999G990D00')) || ' ' || l."UomId" || ' | '
|| COALESCE(TO_CHAR(l."DeliveryDate", 'DD.MM.YYYY'), '') || ' |
', '' ORDER BY l."CreationTime")
INTO v_lines
FROM "Prc_T_PurchaseRfqLine" l LEFT JOIN "Inv_T_Product" p ON p."Id" = l."ProductId"
WHERE l."PurchaseRfqId" = p_id AND l."IsDeleted" = false;
-- 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",
"IsSent", "IsRead", "CreationTime", "CreatorId", "IsDeleted")
SELECT gen_random_uuid(), v_tenant, r."Id", t."Id", r."Channel", v_email, v_subject, LEFT(
'Sayın ' || COALESCE(v_supplier, '') || ',
Aşağıdaki ürünler için birim fiyat ve teslim tarihi içeren teklifinizi'
|| COALESCE(' en geç ' || TO_CHAR(v_deadline, 'DD.MM.YYYY HH24:MI'), '') || ' iletmenizi rica ederiz. Teklif referansı: ' || v_no || '
'
|| '| Ürün | Açıklama | Miktar | İstenen Termin |
'
|| COALESCE(v_lines, '') || '
',
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" = 'TeklifTalebiGonderildi' AND t."IsDeleted" = false AND t."TenantId" IS NOT DISTINCT FROM v_tenant;
UPDATE "Prc_T_PurchaseRfq" SET "LastSentDate" = NOW() AT TIME ZONE 'UTC',
"Status" = CASE WHEN "Status" = 'Draft' THEN 'Sent' ELSE "Status" END
WHERE "Id" = p_id;
END;
$$;