53 lines
3.4 KiB
MySQL
53 lines
3.4 KiB
MySQL
|
|
-- 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
|