43 lines
3.6 KiB
PL/PgSQL
43 lines
3.6 KiB
PL/PgSQL
-- 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;
|
||
END;
|
||
$$;
|