diff --git a/api/alembic/versions/sql/0051_upd_form_cells_subtree.sql b/api/alembic/versions/sql/0051_upd_form_cells_subtree.sql index 6d744a2..cb0f26b 100644 --- a/api/alembic/versions/sql/0051_upd_form_cells_subtree.sql +++ b/api/alembic/versions/sql/0051_upd_form_cells_subtree.sql @@ -1125,6 +1125,8 @@ BEGIN LEFT JOIN agg a ON a.root_id = lt.id LEFT JOIN v3.form_limit fl ON fl.template_id = lt.id AND fl.budget_form_id = p_form_id + WHERE p_focus_lines IS NULL + OR lt.id = ANY(v3._limit_template_path_set(p_focus_lines)) ORDER BY lt.sort_order; RETURN; END IF; @@ -1135,7 +1137,7 @@ BEGIN SELECT 'INPUT'::VARCHAR, 0, - ROW_NUMBER() OVER (ORDER BY rd.id) AS sort_order, + sk._rn AS sort_order, jsonb_build_object( 'id', rd.id, 'line_id', rd.line_id, @@ -1157,11 +1159,17 @@ BEGIN 'total', COALESCE(rd.actual_oct,0)+COALESCE(rd.actual_nov,0)+COALESCE(rd.actual_dec,0)), 'comment', rd.comment ) - FROM v3.rent_detail rd - JOIN v3.budget_line bl ON bl.id = rd.line_id - JOIN v3.vsp v ON v.id = rd.vsp_id - WHERE bl.budget_form_id = p_form_id - ORDER BY rd.id; + FROM ( + SELECT rds.id, ROW_NUMBER() OVER (ORDER BY rds.id) AS _rn + FROM v3.rent_detail rds + JOIN v3.budget_line bl ON bl.id = rds.line_id + JOIN v3.vsp vs ON vs.id = rds.vsp_id + WHERE bl.budget_form_id = p_form_id + ) sk + JOIN v3.rent_detail rd ON rd.id = sk.id + JOIN v3.vsp v ON v.id = rd.vsp_id + WHERE p_focus_lines IS NULL OR rd.id = ANY(p_focus_lines) + ORDER BY sk._rn; RETURN; END IF; @@ -1171,7 +1179,7 @@ BEGIN SELECT 'INPUT'::VARCHAR, 0, - ROW_NUMBER() OVER (ORDER BY ud.id) AS sort_order, + sk._rn AS sort_order, jsonb_build_object( 'id', ud.id, 'line_id', ud.line_id, @@ -1193,11 +1201,17 @@ BEGIN 'total', COALESCE(ud.actual_oct,0)+COALESCE(ud.actual_nov,0)+COALESCE(ud.actual_dec,0)), 'comment', ud.comment ) - FROM v3.utility_detail ud - JOIN v3.budget_line bl ON bl.id = ud.line_id - JOIN v3.vsp v ON v.id = ud.vsp_id - WHERE bl.budget_form_id = p_form_id - ORDER BY ud.id; + FROM ( + SELECT uds.id, ROW_NUMBER() OVER (ORDER BY uds.id) AS _rn + FROM v3.utility_detail uds + JOIN v3.budget_line bl ON bl.id = uds.line_id + JOIN v3.vsp vs ON vs.id = uds.vsp_id + WHERE bl.budget_form_id = p_form_id + ) sk + JOIN v3.utility_detail ud ON ud.id = sk.id + JOIN v3.vsp v ON v.id = ud.vsp_id + WHERE p_focus_lines IS NULL OR ud.id = ANY(p_focus_lines) + ORDER BY sk._rn; RETURN; END IF; @@ -1207,7 +1221,7 @@ BEGIN SELECT 'INPUT'::VARCHAR, 0, - ROW_NUMBER() OVER (ORDER BY sd.id) AS sort_order, + sk._rn AS sort_order, jsonb_build_object( 'id', sd.id, 'line_id', sd.line_id, @@ -1229,11 +1243,17 @@ BEGIN 'total', COALESCE(sd.actual_oct,0)+COALESCE(sd.actual_nov,0)+COALESCE(sd.actual_dec,0)), 'comment', sd.comment ) - FROM v3.security_detail sd - JOIN v3.budget_line bl ON bl.id = sd.line_id - JOIN v3.vsp v ON v.id = sd.vsp_id - WHERE bl.budget_form_id = p_form_id - ORDER BY sd.id; + FROM ( + SELECT sds.id, ROW_NUMBER() OVER (ORDER BY sds.id) AS _rn + FROM v3.security_detail sds + JOIN v3.budget_line bl ON bl.id = sds.line_id + JOIN v3.vsp vs ON vs.id = sds.vsp_id + WHERE bl.budget_form_id = p_form_id + ) sk + JOIN v3.security_detail sd ON sd.id = sk.id + JOIN v3.vsp v ON v.id = sd.vsp_id + WHERE p_focus_lines IS NULL OR sd.id = ANY(p_focus_lines) + ORDER BY sk._rn; RETURN; END IF; @@ -1275,6 +1295,11 @@ BEGIN OVER w_prev, 0) AS cum_da_60415 FROM v3.fixed_asset_report far WHERE far.budget_form_id = p_form_id + AND (p_focus_lines IS NULL OR EXISTS ( + SELECT 1 FROM v3.fixed_asset_report ff + WHERE ff.id = ANY(p_focus_lines) + AND ff.expense_item_id IS NOT DISTINCT FROM far.expense_item_id + AND ff.equipment_name IS NOT DISTINCT FROM far.equipment_name)) WINDOW w AS (PARTITION BY far.budget_form_id, far.expense_item_id, far.equipment_name ORDER BY far.month), w_prev AS (PARTITION BY far.budget_form_id, far.expense_item_id, far.equipment_name @@ -1292,7 +1317,7 @@ BEGIN SELECT 'INPUT'::VARCHAR, 0, - ROW_NUMBER() OVER (ORDER BY eff.expense_item_id, eff.month) AS sort_order, + sk._rn AS sort_order, jsonb_build_object( 'id', eff.id, 'expense_item_id', ei.id, @@ -1332,7 +1357,14 @@ BEGIN ) FROM eff JOIN v3.expense_item ei ON ei.id = eff.expense_item_id - ORDER BY eff.expense_item_id, eff.month; + JOIN ( + SELECT fs.id, + ROW_NUMBER() OVER (ORDER BY fs.expense_item_id, fs.month, fs.id) AS _rn + FROM v3.fixed_asset_report fs + JOIN v3.expense_item eis ON eis.id = fs.expense_item_id + WHERE fs.budget_form_id = p_form_id + ) sk ON sk.id = eff.id + ORDER BY sk._rn; RETURN; END IF;