sozsoft-platform/configs/seeds/sql/object/Prc_P_MaterialRequestPlanSuggest.sql

56 lines
2.6 KiB
MySQL
Raw Normal View History

2026-10-14 09:07:11 +00:00
-- 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,
2026-10-14 09:07:11 +00:00
-- 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);
2026-10-14 09:07:11 +00:00
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
2026-10-14 09:07:11 +00:00
FROM Prc_V_MaterialRequestPlanSource
WHERE BaseId = @Id AND FreeQuantity > 0
ORDER BY RemovalRank;
2026-10-14 09:07:11 +00:00
OPEN sources;
FETCH NEXT FROM sources INTO @Key;
2026-10-14 09:07:11 +00:00
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;
2026-10-14 09:07:11 +00:00
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