41 lines
1.9 KiB
MySQL
41 lines
1.9 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 REPLACE PROCEDURE public."Prc_P_MaterialRequestPlanSuggest"(
|
|||
|
|
p_id uuid,
|
|||
|
|
p_tenant_id uuid,
|
|||
|
|
p_last_modifier_id uuid
|
|||
|
|
)
|
|||
|
|
LANGUAGE plpgsql AS $$
|
|||
|
|
DECLARE v_left numeric(18, 4); v_qty numeric(18, 4); v_key varchar(80); s record;
|
|||
|
|
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);
|
|||
|
|
|
|||
|
|
FOR s IN SELECT "Id", "FreeQuantity"
|
|||
|
|
FROM public."Prc_V_MaterialRequestPlanSource"
|
|||
|
|
WHERE "BaseId" = p_id AND "FreeQuantity" > 0
|
|||
|
|
ORDER BY "IsDestination" DESC, "FreeQuantity" DESC
|
|||
|
|
LOOP
|
|||
|
|
EXIT WHEN v_left <= 0;
|
|||
|
|
v_qty := LEAST(s."FreeQuantity", v_left);
|
|||
|
|
CALL public."Prc_P_MaterialRequestPlanLineSave"(s."Id", 'Transfer', v_qty, p_tenant_id, p_last_modifier_id);
|
|||
|
|
v_left := v_left - v_qty;
|
|||
|
|
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;
|
|||
|
|
$$;
|