sozsoft-platform/configs/seeds/postgres/object/Stk_P_TransferRecalc.sql
2026-10-19 17:35:08 +03:00

46 lines
3.8 KiB
PL/PgSQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- Belgenin ağırlığını (ürün ağırlığı × miktar, ürün biriminde) ve yazdırılan satır özetini yeniler; satırın takip yöntemini
-- (Lot/Serial, envanter takibi kapalıysa boş) üründen, lotun stoktan seçilip seçilmeyeceğini (kaynak iç konum) belgeden yazar —
-- satırın Lot/Seri butonları ve açılan lot ekranı bu iki kolona göre belirlenir. Lot/seri takipli satırda lot girilmişse yapılan
-- miktar lot toplamıdır (lot seçmek o kadar teslim etmektir) ve seçilen lotlar satırın LotNumbers kolonunda listelenir.
-- Özet satırı: [Referans] Ürün: talep / yapılan birim · lot (miktar), ...
CREATE OR REPLACE PROCEDURE public."Stk_P_TransferRecalc"(p_id uuid)
LANGUAGE plpgsql AS $$
BEGIN
UPDATE "Stk_T_TransferLine" l SET "TrackingMethod" = CASE WHEN p."TrackInventory" AND p."TrackingMethod" IN ('Lot', 'Serial') THEN p."TrackingMethod" END,
"LotFromStock" = COALESCE(src."LocationType" = 'Internal', false)
FROM "Stk_T_Product" p, "Stk_T_Transfer" t
LEFT JOIN "Stk_T_Location" src ON src."Id" = t."SourceLocationId"
WHERE p."Id" = l."ProductId" AND t."Id" = l."TransferId" AND l."TransferId" = p_id AND l."IsDeleted" = false;
UPDATE "Stk_T_TransferLine" l SET
"Quantity" = CASE WHEN t."Status" IN ('Done', 'Cancelled') THEN l."Quantity"
ELSE COALESCE((SELECT SUM(lt."Quantity") FROM "Stk_T_TransferLineLot" lt
WHERE lt."TransferLineId" = l."Id" AND lt."IsDeleted" = false), l."Quantity") END,
"LotNumbers" = (SELECT string_agg(CASE WHEN l."TrackingMethod" = 'Serial' THEN lt."LotNo"
ELSE lt."LotNo" || ' (' || rtrim(rtrim(lt."Quantity"::text, '0'), '.') || ')' END, ', ' ORDER BY lt."LotNo")
FROM "Stk_T_TransferLineLot" lt
WHERE lt."TransferLineId" = l."Id" AND lt."IsDeleted" = false)
FROM "Stk_T_Transfer" t
WHERE t."Id" = l."TransferId" AND l."TransferId" = p_id AND l."IsDeleted" = false AND l."TrackingMethod" IN ('Lot', 'Serial');
UPDATE "Stk_T_Transfer" t SET
"Weight" = COALESCE((SELECT SUM(public."Stk_F_UomConvert"(CASE WHEN l."Quantity" > 0 THEN l."Quantity" ELSE l."DemandQuantity" END, l."UomId", p."UomId") * COALESCE(p."Weight", 0))
FROM "Stk_T_TransferLine" l
INNER JOIN "Stk_T_Product" p ON p."Id" = l."ProductId"
WHERE l."TransferId" = p_id AND l."IsDeleted" = false), 0),
"LineSummary" = (SELECT string_agg(
CASE WHEN COALESCE(p."InternalReference", '') = '' THEN '' ELSE '[' || p."InternalReference" || '] ' END || p."Name" || ': ' ||
rtrim(rtrim(l."DemandQuantity"::text, '0'), '.') || ' / ' || rtrim(rtrim(l."Quantity"::text, '0'), '.') || ' ' || l."UomId" ||
COALESCE(' · ' || (SELECT string_agg(lt."LotNo" || ' (' || rtrim(rtrim(lt."Quantity"::text, '0'), '.') || ')', ', ' ORDER BY lt."CreationTime", lt."Id")
FROM "Stk_T_TransferLineLot" lt
WHERE lt."TransferLineId" = l."Id" AND lt."IsDeleted" = false), ''),
E'\n' ORDER BY l."CreationTime", l."Id")
FROM "Stk_T_TransferLine" l
INNER JOIN "Stk_T_Product" p ON p."Id" = l."ProductId"
WHERE l."TransferId" = p_id AND l."IsDeleted" = false)
WHERE t."Id" = p_id;
-- Satır eklenince, silinince ya da belge tamamlanınca talep kaleminin planlanmış payı değişir.
CALL public."Prc_P_MaterialRequestItemSync"(p_id);
END;
$$;