52 lines
3.4 KiB
Transact-SQL
52 lines
3.4 KiB
Transact-SQL
-- Transfer belgesi kaydı (ve iş akışı adımları) sonrası: tür, şube, depo ve boş konumlar operasyon türünden gelir (formda olmayan alımın
|
||
-- kaynağı ve teslimatın hedefi her zaman, iade belgesi hariç); teslimat politikası
|
||
-- yalnız teslimatta tutulur; iç transferin onaycısı kaynak konumun depo sorumlusudur (kullanıcı adı; iş akışı onaycıyı adla eşler),
|
||
-- sorumlusu olmayan konumdan transfer onay beklemez.
|
||
-- Numara, özet ve durum butonunun işlemi (PendingAction) buradan çalışır.
|
||
CREATE OR ALTER PROCEDURE [dbo].[Inv_P_TransferAfterSave]
|
||
@Id uniqueidentifier,
|
||
@UserId uniqueidentifier = NULL
|
||
AS
|
||
BEGIN
|
||
SET NOCOUNT ON;
|
||
DECLARE @Act nvarchar(16) = (SELECT PendingAction FROM Inv_T_Transfer WHERE Id = @Id);
|
||
|
||
UPDATE t SET
|
||
OperationKind = ot.OperationKind,
|
||
BranchId = ot.BranchId,
|
||
WarehouseId = ot.WarehouseId,
|
||
SourceLocationId = CASE WHEN t.ReturnOfId IS NULL AND (ot.OperationKind = 'Receipt' OR t.SourceLocationId IS NULL)
|
||
THEN COALESCE(ot.SourceLocationId, t.SourceLocationId) ELSE t.SourceLocationId END,
|
||
DestinationLocationId = CASE WHEN t.ReturnOfId IS NULL AND (ot.OperationKind = 'Delivery' OR t.DestinationLocationId IS NULL)
|
||
THEN COALESCE(ot.DestinationLocationId, t.DestinationLocationId) ELSE t.DestinationLocationId END,
|
||
DeliveryPolicy = CASE WHEN ot.OperationKind = 'Delivery' THEN COALESCE(t.DeliveryPolicy, 'Direct') END
|
||
FROM Inv_T_Transfer t
|
||
INNER JOIN Inv_T_OperationType ot ON ot.Id = t.OperationTypeId
|
||
WHERE t.Id = @Id;
|
||
|
||
UPDATE t SET
|
||
SourceApproverUserNames = NULLIF(l.ResponsibleUserName, ''),
|
||
ApprovalStatus = CASE WHEN NULLIF(l.ResponsibleUserName, '') IS NULL AND t.ApprovalStatus IS NULL THEN N'Onay Gerekmez'
|
||
WHEN NULLIF(l.ResponsibleUserName, '') IS NOT NULL AND t.ApprovalStatus = N'Onay Gerekmez' THEN NULL
|
||
ELSE t.ApprovalStatus END
|
||
FROM Inv_T_Transfer t
|
||
LEFT JOIN Inv_T_Location l ON l.Id = t.SourceLocationId
|
||
WHERE t.Id = @Id AND t.OperationKind = 'InternalTransfer' AND t.Status = 'Draft';
|
||
|
||
EXEC Inv_P_TransferNumber @Id;
|
||
EXEC Inv_P_TransferRecalc @Id;
|
||
-- Durum butonları işlemi PendingAction alanına yazıp ekranın güncelleme ucuyla kaydeder.
|
||
IF @Act IS NOT NULL
|
||
EXEC Inv_P_TransferSetStatus @Id, @Act, @UserId;
|
||
-- Kaynak depo onayı verilen taslak iç transfer kendiliğinden hazırlanır (kullanıcı kararı: onay → Hazırla tek adım).
|
||
-- Hazırla'nın şartları (satır, farklı iki iç konum) sağlanmıyorsa denenmez: onay kaydı bozulmaz, belge taslak kalır ve
|
||
-- Hazırla elle basılınca hatayı gösterir.
|
||
ELSE IF EXISTS (SELECT 1
|
||
FROM Inv_T_Transfer t
|
||
INNER JOIN Inv_T_Location s ON s.Id = t.SourceLocationId AND s.LocationType = 'Internal'
|
||
INNER JOIN Inv_T_Location d ON d.Id = t.DestinationLocationId AND d.LocationType = 'Internal'
|
||
WHERE t.Id = @Id AND t.OperationKind = 'InternalTransfer' AND t.Status = 'Draft' AND t.ApprovalStatus = N'Onaylandı'
|
||
AND s.Id <> d.Id
|
||
AND EXISTS (SELECT 1 FROM Inv_T_TransferLine l WHERE l.TransferId = t.Id AND l.IsDeleted = 0))
|
||
EXEC Inv_P_TransferSetStatus @Id, 'Confirm', @UserId;
|
||
END
|