53 lines
2.2 KiB
MySQL
53 lines
2.2 KiB
MySQL
|
|
-- 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
|