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

38 lines
1.8 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.

CREATE OR ALTER PROCEDURE [dbo].[Prc_P_PurchaseOrderSetStatus]
@Id uniqueidentifier,
@Action nvarchar(16),
@UserId uniqueidentifier = NULL
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Status nvarchar(16);
SELECT @Status = Status FROM Prc_T_PurchaseOrder WHERE Id = @Id;
UPDATE Prc_T_PurchaseOrder SET PendingAction = NULL WHERE Id = @Id;
IF @Action = 'Confirm'
BEGIN
IF @Status <> 'Draft' THROW 50181, N'Yalnız taslak sipariş onaylanabilir.', 1;
IF NOT EXISTS (SELECT 1 FROM Prc_T_PurchaseOrderLine WHERE PurchaseOrderId = @Id AND IsDeleted = 0)
THROW 50182, N'Kalemi olmayan sipariş onaylanamaz.', 1;
UPDATE Prc_T_PurchaseOrder SET Status = 'Purchase', ConfirmDate = GETUTCDATE() WHERE Id = @Id;
EXEC Inv_P_TransferFromPurchaseOrder @Id, @UserId;
END
ELSE IF @Action = 'Send'
BEGIN
IF @Status = 'Cancelled' THROW 50183, N'İptal edilmiş sipariş gönderilemez.', 1;
EXEC Prc_P_PurchaseOrderSend @Id, @UserId;
END
ELSE IF @Action = 'Cancel'
BEGIN
IF EXISTS (SELECT 1 FROM Inv_T_Transfer WHERE PurchaseOrderId = @Id AND IsDeleted = 0 AND Status = 'Done')
THROW 50318, N'Teslim alınmış (yapılmış alımı olan) sipariş iptal edilemez.', 1;
UPDATE Prc_T_PurchaseOrder SET Status = 'Cancelled' WHERE Id = @Id;
-- Siparişin yapılmamış alımları da iptal olur; sipariş yeniden onaylanırsa yeni alım açılır.
UPDATE Inv_T_Transfer SET Status = 'Cancelled' WHERE PurchaseOrderId = @Id AND IsDeleted = 0 AND Status IN ('Draft', 'Waiting', 'Ready');
END
ELSE IF @Action = 'Draft'
BEGIN
IF @Status <> 'Cancelled' THROW 50184, N'Yalnız iptal edilmiş sipariş taslağa alınabilir.', 1;
UPDATE Prc_T_PurchaseOrder SET Status = 'Draft', ConfirmDate = NULL WHERE Id = @Id;
END
END