sozsoft-platform/configs/seeds/sql/object/Inv_P_TransferAfterSave.sql
2026-10-13 00:43:05 +03:00

52 lines
3.4 KiB
Transact-SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 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