55 lines
2.6 KiB
Transact-SQL
55 lines
2.6 KiB
Transact-SQL
-- Planla diyaloğunun Öner'i (App.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
|