sozsoft-platform/configs/seeds/postgres/object/Stk_P_TransferRecalc.sql

47 lines
3.8 KiB
MySQL
Raw Permalink Normal View History

2026-10-12 21:43:05 +00:00
-- 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), ...
2026-10-19 14:35:08 +00:00
CREATE OR REPLACE PROCEDURE public."Stk_P_TransferRecalc"(p_id uuid)
2026-10-12 21:43:05 +00:00
LANGUAGE plpgsql AS $$
BEGIN
2026-10-19 14:35:08 +00:00
UPDATE "Stk_T_TransferLine" l SET "TrackingMethod" = CASE WHEN p."TrackInventory" AND p."TrackingMethod" IN ('Lot', 'Serial') THEN p."TrackingMethod" END,
2026-10-12 21:43:05 +00:00
"LotFromStock" = COALESCE(src."LocationType" = 'Internal', false)
2026-10-19 14:35:08 +00:00
FROM "Stk_T_Product" p, "Stk_T_Transfer" t
LEFT JOIN "Stk_T_Location" src ON src."Id" = t."SourceLocationId"
2026-10-12 21:43:05 +00:00
WHERE p."Id" = l."ProductId" AND t."Id" = l."TransferId" AND l."TransferId" = p_id AND l."IsDeleted" = false;
2026-10-19 14:35:08 +00:00
UPDATE "Stk_T_TransferLine" l SET
2026-10-12 21:43:05 +00:00
"Quantity" = CASE WHEN t."Status" IN ('Done', 'Cancelled') THEN l."Quantity"
2026-10-19 14:35:08 +00:00
ELSE COALESCE((SELECT SUM(lt."Quantity") FROM "Stk_T_TransferLineLot" lt
2026-10-12 21:43:05 +00:00
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")
2026-10-19 14:35:08 +00:00
FROM "Stk_T_TransferLineLot" lt
2026-10-12 21:43:05 +00:00
WHERE lt."TransferLineId" = l."Id" AND lt."IsDeleted" = false)
2026-10-19 14:35:08 +00:00
FROM "Stk_T_Transfer" t
2026-10-12 21:43:05 +00:00
WHERE t."Id" = l."TransferId" AND l."TransferId" = p_id AND l."IsDeleted" = false AND l."TrackingMethod" IN ('Lot', 'Serial');
2026-10-19 14:35:08 +00:00
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"
2026-10-12 21:43:05 +00:00
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")
2026-10-19 14:35:08 +00:00
FROM "Stk_T_TransferLineLot" lt
2026-10-12 21:43:05 +00:00
WHERE lt."TransferLineId" = l."Id" AND lt."IsDeleted" = false), ''),
E'\n' ORDER BY l."CreationTime", l."Id")
2026-10-19 14:35:08 +00:00
FROM "Stk_T_TransferLine" l
INNER JOIN "Stk_T_Product" p ON p."Id" = l."ProductId"
2026-10-12 21:43:05 +00:00
WHERE l."TransferId" = p_id AND l."IsDeleted" = false)
WHERE t."Id" = p_id;
2026-10-14 09:07:11 +00:00
-- Satır eklenince, silinince ya da belge tamamlanınca talep kaleminin planlanmış payı değişir.
CALL public."Prc_P_MaterialRequestItemSync"(p_id);
2026-10-12 21:43:05 +00:00
END;
$$;