2026-10-14 19:26:03 +00:00
|
|
|
|
-- Onaylanan talebin durumu satınalmada ilerledikçe iş akışının durum alanında devam eder: iptal olmayan bütün kalemleri
|
|
|
|
|
|
-- teslim edildiyse (teslim edilen ≥ istenen: iç transfer, Stoktan ya da alım Doğrula'sıyla) Tamamlandı; değilse kalemlerinden biri
|
2026-10-12 10:27:54 +00:00
|
|
|
|
-- iptal olmayan bir siparişteyse Satınalma Siparişi, gönderilmiş teklif talebindeyse Teklif Talebi Gönderildi,
|
2026-10-14 19:26:03 +00:00
|
|
|
|
-- taslak teklif talebindeyse Teklif Talebi; hiçbirinde değilse Onaylandı'ya döner (iade teslimi geri alırsa Tamamlandı da geri döner).
|
|
|
|
|
|
-- Akış "Onaylandı"da bittiği için bu değerler hiçbir onay düğümüyle eşleşmez ve akış butonları kapalı kalır. p_doc_id verilirse yalnız o
|
|
|
|
|
|
-- belgenin (teklifte bütün ihalenin; transferde satırlarının) kalemlerine bağlı talepler; boşsa onaylanmış bütün talepler yeniden hesaplanır.
|
2026-10-12 10:27:54 +00:00
|
|
|
|
CREATE OR REPLACE PROCEDURE public."Prc_P_MaterialRequestSyncStatus"(p_doc_id uuid DEFAULT NULL)
|
|
|
|
|
|
LANGUAGE plpgsql AS $$
|
|
|
|
|
|
DECLARE v_group uuid;
|
|
|
|
|
|
BEGIN
|
|
|
|
|
|
SELECT COALESCE("TenderGroupId", "Id") INTO v_group FROM "Prc_T_PurchaseRfq" WHERE "Id" = p_doc_id;
|
|
|
|
|
|
IF v_group IS NULL THEN
|
|
|
|
|
|
SELECT COALESCE(q."TenderGroupId", q."Id") INTO v_group
|
|
|
|
|
|
FROM "Prc_T_PurchaseOrder" o
|
|
|
|
|
|
INNER JOIN "Prc_T_PurchaseRfq" q ON q."Id" = o."PurchaseRfqId"
|
|
|
|
|
|
WHERE o."Id" = p_doc_id;
|
|
|
|
|
|
END IF;
|
|
|
|
|
|
|
|
|
|
|
|
UPDATE "Prc_T_MaterialRequest" m SET "ApprovalStatus" = s.stage
|
|
|
|
|
|
FROM (SELECT r."Id", CASE
|
2026-10-14 19:26:03 +00:00
|
|
|
|
WHEN NOT EXISTS (SELECT 1 FROM "Prc_T_MaterialRequestItem" i
|
|
|
|
|
|
WHERE i."MaterialRequestId" = r."Id" AND i."IsDeleted" = false AND i."LineStatus" <> 'Cancelled'
|
|
|
|
|
|
AND i."DeliveredQuantity" < i."Quantity")
|
|
|
|
|
|
AND EXISTS (SELECT 1 FROM "Prc_T_MaterialRequestItem" i
|
|
|
|
|
|
WHERE i."MaterialRequestId" = r."Id" AND i."IsDeleted" = false AND i."LineStatus" <> 'Cancelled') THEN 'Tamamlandı'
|
2026-10-12 10:27:54 +00:00
|
|
|
|
WHEN EXISTS (SELECT 1 FROM "Prc_T_MaterialRequestItem" i
|
|
|
|
|
|
INNER JOIN "Prc_T_PurchaseOrderLine" ol ON ol."MaterialRequestItemId" = i."Id" AND ol."IsDeleted" = false
|
|
|
|
|
|
INNER JOIN "Prc_T_PurchaseOrder" o ON o."Id" = ol."PurchaseOrderId" AND o."IsDeleted" = false AND o."Status" <> 'Cancelled'
|
|
|
|
|
|
WHERE i."MaterialRequestId" = r."Id" AND i."IsDeleted" = false) THEN 'Satınalma Siparişi'
|
|
|
|
|
|
WHEN EXISTS (SELECT 1 FROM "Prc_T_MaterialRequestItem" i
|
|
|
|
|
|
INNER JOIN "Prc_T_PurchaseRfqLine" rl ON rl."MaterialRequestItemId" = i."Id" AND rl."IsDeleted" = false
|
|
|
|
|
|
INNER JOIN "Prc_T_PurchaseRfq" q ON q."Id" = rl."PurchaseRfqId" AND q."IsDeleted" = false AND q."Status" IN ('Sent', 'Purchase')
|
|
|
|
|
|
WHERE i."MaterialRequestId" = r."Id" AND i."IsDeleted" = false) THEN 'Teklif Talebi Gönderildi'
|
|
|
|
|
|
WHEN EXISTS (SELECT 1 FROM "Prc_T_MaterialRequestItem" i
|
|
|
|
|
|
INNER JOIN "Prc_T_PurchaseRfqLine" rl ON rl."MaterialRequestItemId" = i."Id" AND rl."IsDeleted" = false
|
|
|
|
|
|
INNER JOIN "Prc_T_PurchaseRfq" q ON q."Id" = rl."PurchaseRfqId" AND q."IsDeleted" = false AND q."Status" = 'Draft'
|
|
|
|
|
|
WHERE i."MaterialRequestId" = r."Id" AND i."IsDeleted" = false) THEN 'Teklif Talebi'
|
|
|
|
|
|
ELSE 'Onaylandı' END AS stage
|
|
|
|
|
|
FROM "Prc_T_MaterialRequest" r
|
|
|
|
|
|
WHERE r."IsDeleted" = false
|
2026-10-14 19:26:03 +00:00
|
|
|
|
AND r."ApprovalStatus" IN ('Onaylandı', 'Teklif Talebi', 'Teklif Talebi Gönderildi', 'Satınalma Siparişi', 'Tamamlandı')
|
2026-10-12 10:27:54 +00:00
|
|
|
|
-- Silinen satır da kapsamda kalır: kalemi belgeden çıkarılan talep geri dönmelidir.
|
|
|
|
|
|
AND (p_doc_id IS NULL OR EXISTS (
|
|
|
|
|
|
SELECT 1 FROM "Prc_T_MaterialRequestItem" i
|
|
|
|
|
|
WHERE i."MaterialRequestId" = r."Id"
|
|
|
|
|
|
AND (EXISTS (SELECT 1 FROM "Prc_T_PurchaseRfqLine" rl
|
|
|
|
|
|
INNER JOIN "Prc_T_PurchaseRfq" q ON q."Id" = rl."PurchaseRfqId"
|
|
|
|
|
|
WHERE rl."MaterialRequestItemId" = i."Id" AND COALESCE(q."TenderGroupId", q."Id") = v_group)
|
|
|
|
|
|
OR EXISTS (SELECT 1 FROM "Prc_T_PurchaseOrderLine" ol
|
2026-10-14 19:26:03 +00:00
|
|
|
|
WHERE ol."MaterialRequestItemId" = i."Id" AND ol."PurchaseOrderId" = p_doc_id)
|
|
|
|
|
|
OR EXISTS (SELECT 1 FROM "Inv_T_TransferLine" tl
|
|
|
|
|
|
WHERE tl."MaterialRequestItemId" = i."Id" AND tl."TransferId" = p_doc_id))))) s
|
2026-10-12 10:27:54 +00:00
|
|
|
|
WHERE m."Id" = s."Id" AND m."ApprovalStatus" <> s.stage;
|
|
|
|
|
|
END;
|
|
|
|
|
|
$$;
|