45 lines
3 KiB
PL/PgSQL
45 lines
3 KiB
PL/PgSQL
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;
|
||
$$;
|