52 lines
2.2 KiB
Transact-SQL
52 lines
2.2 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: teslim konumu (stoktan karşılama), sonra serbest stoğu en çok
|
||
-- olan konum (Prc_V_MaterialRequestPlanSource); 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), @Qty decimal(18, 4), @Free decimal(18, 4), @Key nvarchar(80);
|
||
|
||
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 FAST_FORWARD FOR
|
||
SELECT Id, FreeQuantity
|
||
FROM Prc_V_MaterialRequestPlanSource
|
||
WHERE BaseId = @Id AND FreeQuantity > 0
|
||
ORDER BY IsDestination DESC, FreeQuantity DESC;
|
||
OPEN sources;
|
||
FETCH NEXT FROM sources INTO @Key, @Free;
|
||
WHILE @@FETCH_STATUS = 0 AND @Left > 0
|
||
BEGIN
|
||
SET @Qty = CASE WHEN @Free < @Left THEN @Free ELSE @Left END;
|
||
EXEC Prc_P_MaterialRequestPlanLineSave @Key, 'Transfer', @Qty, @TenantId, @LastModifierId;
|
||
SET @Left = @Left - @Qty;
|
||
FETCH NEXT FROM sources INTO @Key, @Free;
|
||
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
|