CREATE OR ALTER PROCEDURE [dbo].[Prc_P_PurchaseRfqSetStatus] @Id uniqueidentifier, @Action nvarchar(16), @UserId uniqueidentifier = NULL AS BEGIN SET NOCOUNT ON; DECLARE @Status nvarchar(16), @Group uniqueidentifier, @Draft uniqueidentifier; SELECT @Status = Status, @Group = TenderGroupId FROM Prc_T_PurchaseRfq WHERE Id = @Id; UPDATE Prc_T_PurchaseRfq SET PendingAction = NULL WHERE Id = @Id; IF @Action IN ('Send', 'SendTender', 'Award') AND @Status NOT IN ('Draft', 'Sent') THROW 50173, N'Yalnız teklif aşamasındaki (Teklif Talebi / Gönderildi) belge gönderilebilir ya da siparişe dönüştürülebilir.', 1; IF @Action = 'Send' EXEC Prc_P_PurchaseRfqSend @Id, @UserId; ELSE IF @Action = 'SendTender' BEGIN -- İhalenin henüz gönderilmemiş bütün belgeleri (açık belge dahil) tedarikçilerine gider. DECLARE drafts CURSOR LOCAL FAST_FORWARD FOR SELECT Id FROM Prc_T_PurchaseRfq WHERE TenderGroupId = @Group AND IsDeleted = 0 AND Status = 'Draft'; OPEN drafts; FETCH NEXT FROM drafts INTO @Draft; WHILE @@FETCH_STATUS = 0 BEGIN EXEC Prc_P_PurchaseRfqSend @Draft, @UserId; FETCH NEXT FROM drafts INTO @Draft; END CLOSE drafts; DEALLOCATE drafts; END ELSE IF @Action = 'Award' EXEC Prc_P_PurchaseRfqAward @Id, @UserId; ELSE IF @Action = 'Cancel' BEGIN IF @Status = 'Purchase' THROW 50174, N'Siparişe dönüştürülmüş teklif iptal edilemez; satınalma siparişini iptal edin.', 1; UPDATE Prc_T_PurchaseRfq SET Status = 'Cancelled' WHERE Id = @Id; END ELSE IF @Action = 'Draft' BEGIN IF @Status <> 'Cancelled' THROW 50175, N'Yalnız iptal edilmiş teklif taslağa alınabilir.', 1; IF EXISTS (SELECT 1 FROM Prc_T_PurchaseRfq WHERE TenderGroupId = @Group AND IsDeleted = 0 AND Status = 'Purchase') THROW 50176, N'İhale siparişe dönüştürüldüğü için teklif yeniden açılamaz.', 1; UPDATE Prc_T_PurchaseRfq SET Status = 'Draft' WHERE Id = @Id; END END