sozsoft-platform/configs/seeds/sql/object/Prc_P_MaterialRequestPlanSuggest.sql
2026-10-19 17:35:08 +03:00

55 lines
2.5 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.

-- Planla diyaloğunun Öner'i (Prc.MaterialRequestPlanLine › InsertCommand):
-- kalemin taslak planını sıfırlayıp planlanacak kalanı dağıtır. Önce stok, Prc_V_MaterialRequestPlanSource'un RemovalRank sırasıyla: teslim
-- konumu (stoktan karşılama), sonra ürün kategorisinin çıkış stratejisi (FIFO/LIFO); lot/seri takipli üründe lotlar da bu sırayla seçilir.
-- Her satır alabileceği en fazla miktarı alır (eksi miktar, kullanılabilir stok kuralı kayıt yordamındadır). Kalan kısım satınalma: Prc_V_MaterialRequestPlanVendor'ın SuggestRank'ı ilk olan,
-- fiyat listesinde ya da alım geçmişinde bulunan tedarikçi (hiç bilinmeyen kontak seçilmez, kalan planlanmadan kalır). Satırlar
-- Prc_P_MaterialRequestPlanLineSave ile yazılır; kalem, stok ve kalan kuralları oradadır.
CREATE OR ALTER PROCEDURE [dbo].[Prc_P_MaterialRequestPlanSuggest]
@Id uniqueidentifier,
@TenantId uniqueidentifier,
@LastModifierId uniqueidentifier
AS
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT ON;
DECLARE @Left decimal(18, 4), @Key nvarchar(160);
BEGIN TRANSACTION;
DELETE FROM Prc_T_MaterialRequestPlanLine
WHERE MaterialRequestItemId = @Id AND (TenantId = @TenantId OR (TenantId IS NULL AND @TenantId IS NULL));
SELECT @Left = ISNULL(RemainingQuantity, 0) FROM Prc_V_MaterialRequestItemPlan WHERE Id = @Id;
DECLARE sources CURSOR LOCAL STATIC FOR
SELECT Id
FROM Prc_V_MaterialRequestPlanSource
WHERE BaseId = @Id AND FreeQuantity > 0
ORDER BY RemovalRank;
OPEN sources;
FETCH NEXT FROM sources INTO @Key;
WHILE @@FETCH_STATUS = 0 AND @Left > 0
BEGIN
EXEC Prc_P_MaterialRequestPlanLineSave @Key, 'Transfer', -1, @TenantId, @LastModifierId;
SELECT @Left = ISNULL(ip.RemainingQuantity, 0) - ISNULL((SELECT SUM(x.Quantity) FROM Prc_T_MaterialRequestPlanLine x
WHERE x.MaterialRequestItemId = @Id AND x.IsDeleted = 0), 0)
FROM Prc_V_MaterialRequestItemPlan ip
WHERE ip.Id = @Id;
FETCH NEXT FROM sources INTO @Key;
END
CLOSE sources;
DEALLOCATE sources;
IF @Left > 0
BEGIN
SET @Key = NULL;
SELECT TOP 1 @Key = Id
FROM Prc_V_MaterialRequestPlanVendor
WHERE BaseId = @Id AND (Price IS NOT NULL OR LastPurchaseDate IS NOT NULL)
ORDER BY SuggestRank;
IF @Key IS NOT NULL
EXEC Prc_P_MaterialRequestPlanLineSave @Key, 'Purchase', @Left, @TenantId, @LastModifierId;
END
COMMIT TRANSACTION;
END
GO