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 REPLACE PROCEDURE public . " Prc_P_MaterialRequestPlanSuggest " (
p_id uuid ,
p_tenant_id uuid ,
p_last_modifier_id uuid
)
LANGUAGE plpgsql AS $ $
2026-10-14 19:26:03 +00:00
DECLARE v_left numeric ( 18 , 4 ) ; v_key varchar ( 160 ) ; s record ;
2026-10-14 09:07:11 +00:00
BEGIN
DELETE FROM " Prc_T_MaterialRequestPlanLine " WHERE " MaterialRequestItemId " = p_id AND " TenantId " IS NOT DISTINCT FROM p_tenant_id ;
SELECT COALESCE ( " RemainingQuantity " , 0 ) INTO v_left FROM public . " Prc_V_MaterialRequestItemPlan " WHERE " Id " = p_id ;
v_left : = COALESCE ( v_left , 0 ) ;
2026-10-14 19:26:03 +00:00
FOR s IN SELECT " Id "
2026-10-14 09:07:11 +00:00
FROM public . " Prc_V_MaterialRequestPlanSource "
WHERE " BaseId " = p_id AND " FreeQuantity " > 0
2026-10-14 19:26:03 +00:00
ORDER BY " RemovalRank "
2026-10-14 09:07:11 +00:00
LOOP
EXIT WHEN v_left < = 0 ;
2026-10-14 19:26:03 +00:00
CALL public . " Prc_P_MaterialRequestPlanLineSave " ( s . " Id " , ' Transfer ' , - 1 , p_tenant_id , p_last_modifier_id ) ;
SELECT COALESCE ( ip . " RemainingQuantity " , 0 ) - COALESCE ( ( SELECT SUM ( x . " Quantity " ) FROM " Prc_T_MaterialRequestPlanLine " x
WHERE x . " MaterialRequestItemId " = p_id AND x . " IsDeleted " = false ) , 0 )
INTO v_left
FROM public . " Prc_V_MaterialRequestItemPlan " ip
WHERE ip . " Id " = p_id ;
2026-10-14 09:07:11 +00:00
END LOOP ;
IF v_left > 0 THEN
SELECT " Id " INTO v_key
FROM public . " Prc_V_MaterialRequestPlanVendor "
WHERE " BaseId " = p_id AND ( " Price " IS NOT NULL OR " LastPurchaseDate " IS NOT NULL )
ORDER BY " SuggestRank "
LIMIT 1 ;
IF v_key IS NOT NULL THEN
CALL public . " Prc_P_MaterialRequestPlanLineSave " ( v_key , ' Purchase ' , v_left , p_tenant_id , p_last_modifier_id ) ;
END IF ;
END IF ;
END ;
$ $ ;