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. @DocId 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 ALTER PROCEDURE [dbo].[Prc_P_MaterialRequestSyncStatus]
|
|
|
|
|
|
@DocId uniqueidentifier = NULL
|
|
|
|
|
|
AS
|
|
|
|
|
|
BEGIN
|
|
|
|
|
|
SET NOCOUNT ON;
|
|
|
|
|
|
DECLARE @Group uniqueidentifier = (SELECT ISNULL(TenderGroupId, Id) FROM Prc_T_PurchaseRfq WHERE Id = @DocId);
|
|
|
|
|
|
IF @Group IS NULL
|
|
|
|
|
|
SELECT @Group = ISNULL(q.TenderGroupId, q.Id)
|
|
|
|
|
|
FROM Prc_T_PurchaseOrder o
|
|
|
|
|
|
INNER JOIN Prc_T_PurchaseRfq q ON q.Id = o.PurchaseRfqId
|
|
|
|
|
|
WHERE o.Id = @DocId;
|
|
|
|
|
|
|
|
|
|
|
|
UPDATE m SET ApprovalStatus = s.Stage
|
|
|
|
|
|
FROM Prc_T_MaterialRequest m
|
|
|
|
|
|
CROSS APPLY (SELECT CASE
|
2026-10-14 19:26:03 +00:00
|
|
|
|
WHEN NOT EXISTS (SELECT 1 FROM Prc_T_MaterialRequestItem i
|
|
|
|
|
|
WHERE i.MaterialRequestId = m.Id AND i.IsDeleted = 0 AND i.LineStatus <> 'Cancelled'
|
|
|
|
|
|
AND i.DeliveredQuantity < i.Quantity)
|
|
|
|
|
|
AND EXISTS (SELECT 1 FROM Prc_T_MaterialRequestItem i
|
|
|
|
|
|
WHERE i.MaterialRequestId = m.Id AND i.IsDeleted = 0 AND i.LineStatus <> 'Cancelled') THEN N'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 = 0
|
|
|
|
|
|
INNER JOIN Prc_T_PurchaseOrder o ON o.Id = ol.PurchaseOrderId AND o.IsDeleted = 0 AND o.Status <> 'Cancelled'
|
|
|
|
|
|
WHERE i.MaterialRequestId = m.Id AND i.IsDeleted = 0) THEN N'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 = 0
|
|
|
|
|
|
INNER JOIN Prc_T_PurchaseRfq q ON q.Id = rl.PurchaseRfqId AND q.IsDeleted = 0 AND q.Status IN ('Sent', 'Purchase')
|
|
|
|
|
|
WHERE i.MaterialRequestId = m.Id AND i.IsDeleted = 0) THEN N'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 = 0
|
|
|
|
|
|
INNER JOIN Prc_T_PurchaseRfq q ON q.Id = rl.PurchaseRfqId AND q.IsDeleted = 0 AND q.Status = 'Draft'
|
|
|
|
|
|
WHERE i.MaterialRequestId = m.Id AND i.IsDeleted = 0) THEN N'Teklif Talebi'
|
|
|
|
|
|
ELSE N'Onaylandı' END AS Stage) s
|
|
|
|
|
|
WHERE m.IsDeleted = 0
|
2026-10-14 19:26:03 +00:00
|
|
|
|
AND m.ApprovalStatus IN (N'Onaylandı', N'Teklif Talebi', N'Teklif Talebi Gönderildi', N'Satınalma Siparişi', N'Tamamlandı')
|
2026-10-12 10:27:54 +00:00
|
|
|
|
AND m.ApprovalStatus <> s.Stage
|
|
|
|
|
|
-- Silinen satır da kapsamda kalır: kalemi belgeden çıkarılan talep geri dönmelidir.
|
|
|
|
|
|
AND (@DocId IS NULL OR EXISTS (
|
|
|
|
|
|
SELECT 1 FROM Prc_T_MaterialRequestItem i
|
|
|
|
|
|
WHERE i.MaterialRequestId = m.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 ISNULL(q.TenderGroupId, q.Id) = @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 = @DocId)
|
2026-10-19 14:35:08 +00:00
|
|
|
|
OR EXISTS (SELECT 1 FROM Stk_T_TransferLine tl
|
2026-10-14 19:26:03 +00:00
|
|
|
|
WHERE tl.MaterialRequestItemId = i.Id AND tl.TransferId = @DocId))));
|
2026-10-12 10:27:54 +00:00
|
|
|
|
END
|