-- 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."Inv_P_TransferRecalc"(p_id uuid) LANGUAGE plpgsql AS $$ BEGIN UPDATE "Inv_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 "Inv_T_Product" p, "Inv_T_Transfer" t LEFT JOIN "Inv_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 "Inv_T_TransferLine" l SET "Quantity" = CASE WHEN t."Status" IN ('Done', 'Cancelled') THEN l."Quantity" ELSE COALESCE((SELECT SUM(lt."Quantity") FROM "Inv_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 "Inv_T_TransferLineLot" lt WHERE lt."TransferLineId" = l."Id" AND lt."IsDeleted" = false) FROM "Inv_T_Transfer" t WHERE t."Id" = l."TransferId" AND l."TransferId" = p_id AND l."IsDeleted" = false AND l."TrackingMethod" IN ('Lot', 'Serial'); UPDATE "Inv_T_Transfer" t SET "Weight" = COALESCE((SELECT SUM(public."Inv_F_UomConvert"(CASE WHEN l."Quantity" > 0 THEN l."Quantity" ELSE l."DemandQuantity" END, l."UomId", p."UomId") * COALESCE(p."Weight", 0)) FROM "Inv_T_TransferLine" l INNER JOIN "Inv_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 "Inv_T_TransferLineLot" lt WHERE lt."TransferLineId" = l."Id" AND lt."IsDeleted" = false), ''), E'\n' ORDER BY l."CreationTime", l."Id") FROM "Inv_T_TransferLine" l INNER JOIN "Inv_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; $$;