2026-10-12 21:43:05 +00:00
-- Transfer belgesinin durum butonları : Confirm (Hazı rla, taslakta), Check (Hazı rla, bekleyende), Validate (Tamamla), Cancel (İptal Et), Return (İade Et).
CREATE OR ALTER PROCEDURE [ dbo ] . [ Inv_P_TransferSetStatus ]
@ Id uniqueidentifier ,
@ Action nvarchar ( 16 ) ,
@ UserId uniqueidentifier = NULL
AS
BEGIN
SET NOCOUNT ON ;
DECLARE @ Status nvarchar ( 16 ) , @ Kind nvarchar ( 32 ) , @ Approval nvarchar ( 50 ) , @ Src uniqueidentifier , @ Dst uniqueidentifier , @ New uniqueidentifier ;
SELECT @ Status = Status , @ Kind = OperationKind , @ Approval = ApprovalStatus , @ Src = SourceLocationId , @ Dst = DestinationLocationId
FROM Inv_T_Transfer WHERE Id = @ Id ;
UPDATE Inv_T_Transfer SET PendingAction = NULL WHERE Id = @ Id ;
-- İç transfer depo içinde taşı madı r: iki uç da stok tutan iç konum ve birbirinden farklı olmalı (dı ş konuma giden mal stoktan düşer, hiçbir yere girmez).
-- İade belgesi muaftı r: yanlı şlı kla dı ş konuma yapı lmı ş transfer İade Et ile geri alı nabilmeli.
IF @ Kind = ' InternalTransfer ' AND @ Action IN ( ' Confirm ' , ' Check ' , ' Validate ' )
AND NOT EXISTS ( SELECT 1 FROM Inv_T_Transfer WHERE Id = @ Id AND ReturnOfId IS NOT NULL )
BEGIN
IF @ Src = @ Dst THROW 50325 , N ' Kaynak ve hedef konum aynı olamaz. ' , 1 ;
IF EXISTS ( SELECT 1 FROM Inv_T_Location WHERE Id IN ( @ Src , @ Dst ) AND LocationType < > ' Internal ' )
THROW 50326 , N ' İç transferde kaynak ve hedef konum iç konum olmalı dı r. ' , 1 ;
END
IF @ Action = ' Confirm '
BEGIN
IF @ Status < > ' Draft ' THROW 50301 , N ' Yalnı z taslak belge hazı rlanabilir. ' , 1 ;
IF NOT EXISTS ( SELECT 1 FROM Inv_T_TransferLine WHERE TransferId = @ Id AND IsDeleted = 0 )
THROW 50302 , N ' Ürün satı rı olmayan belge hazı rlanamaz. ' , 1 ;
IF @ Src IS NULL OR @ Dst IS NULL THROW 50303 , N ' Kaynak ve hedef konum seçilmelidir. ' , 1 ;
IF @ Kind = ' InternalTransfer ' AND ISNULL ( @ Approval , N ' ' ) NOT IN ( N ' Onaylandı ' , N ' Onay Gerekmez ' )
THROW 50304 , N ' Kaynak depo onayı tamamlanmadan iç transfer hazı rlanamaz. ' , 1 ;
EXEC Inv_P_TransferCheckAvailability @ Id ;
END
ELSE IF @ Action = ' Check '
BEGIN
IF @ Status NOT IN ( ' Waiting ' , ' Ready ' ) THROW 50305 , N ' Stok kontrolü yalnı z bekleyen ya da hazı r belgede yapı lı r. ' , 1 ;
EXEC Inv_P_TransferCheckAvailability @ Id ;
END
ELSE IF @ Action = ' Validate '
BEGIN
IF @ Status < > ' Ready ' THROW 50306 , N ' Yalnı z hazı r belge tamamlanabilir. ' , 1 ;
EXEC Inv_P_TransferValidate @ Id , @ UserId ;
END
ELSE IF @ Action = ' Cancel '
BEGIN
IF @ Status IN ( ' Done ' , ' Cancelled ' ) THROW 50307 , N ' Tamamlanmı ş ya da iptal edilmiş belge iptal edilemez. ' , 1 ;
UPDATE Inv_T_Transfer SET Status = ' Cancelled ' WHERE Id = @ Id ;
2026-10-14 09:07:11 +00:00
-- İptal edilen transferin payı talep kalemine geri döner.
EXEC Prc_P_MaterialRequestItemSync @ Id ;
2026-10-12 21:43:05 +00:00
END
ELSE IF @ Action = ' Return '
BEGIN
IF @ Status < > ' Done ' THROW 50308 , N ' Yalnı z tamamlanmı ş belge iade edilebilir. ' , 1 ;
EXEC Inv_P_TransferCopy @ Id , ' Return ' , @ UserId , @ New OUTPUT ;
END
END