2026-10-19 14:35:08 +00:00
-- Planla diyaloğunun Öner'i (Prc.MaterialRequestPlanLine › InsertCommand):
2026-10-14 19:26:03 +00:00
-- 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 ;
2026-10-14 19:26:03 +00:00
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 ;
2026-10-14 19:26:03 +00:00
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
2026-10-14 19:26:03 +00:00
ORDER BY RemovalRank ;
2026-10-14 09:07:11 +00:00
OPEN sources ;
2026-10-14 19:26:03 +00:00
FETCH NEXT FROM sources INTO @ Key ;
2026-10-14 09:07:11 +00:00
WHILE @ @ FETCH_STATUS = 0 AND @ Left > 0
BEGIN
2026-10-14 19:26:03 +00:00
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