@@ -658,7 +658,7 @@ <h2><a class="toc-backref" href="#toc-entry-1">Changelog</a></h2>
658658</ div >
659659</ div >
660660< div class ="section " id ="section-1 ">
661- < h1 > 19.0.2.1.1 </ h1 >
661+ < h1 > 19.0.2.1.2 </ h1 >
662662< ul class ="simple ">
663663< li > fix(security): align Program Viewer / Validator / Cycle Approver roles
664664with the OP#951 menu audit — Program Viewer additionally gets
@@ -677,6 +677,15 @@ <h1>19.0.2.1.1</h1>
677677</ ul >
678678</ div >
679679< div class ="section " id ="section-2 ">
680+ < h1 > 19.0.2.1.1</ h1 >
681+ < ul class ="simple ">
682+ < li > fix(views): apply < tt class ="docutils literal "> spp_registry.x2many_no_padding</ tt > widget to the
683+ Programs and Entitlements lists on registrant forms and to Program
684+ Membership inline lines — removes the four empty placeholder rows Odoo
685+ 19 inserts on inline list-in-form views (#943).</ li >
686+ </ ul >
687+ </ div >
688+ < div class ="section " id ="section-3 ">
680689< h1 > 19.0.2.0.11</ h1 >
681690< ul class ="simple ">
682691< li > Fix < tt class ="docutils literal "> TypeError: 'NoneType' object is not iterable</ tt > when clicking
@@ -687,7 +696,7 @@ <h1>19.0.2.0.11</h1>
687696omit the state filter instead of crashing on < tt class ="docutils literal "> tuple(None)</ tt > </ li >
688697</ ul >
689698</ div >
690- < div class ="section " id ="section-3 ">
699+ < div class ="section " id ="section-4 ">
691700< h1 > 19.0.2.0.10</ h1 >
692701< ul class ="simple ">
693702< li > Increase parallel-safe channel limits (cycle, eligibility_manager,
@@ -700,7 +709,7 @@ <h1>19.0.2.0.10</h1>
700709submission on double-click</ li >
701710</ ul >
702711</ div >
703- < div class ="section " id ="section-4 ">
712+ < div class ="section " id ="section-5 ">
704713< h1 > 19.0.2.0.9</ h1 >
705714< ul class ="simple ">
706715< li > Add context flags (< tt class ="docutils literal "> skip_registrant_statistics</ tt > ,
@@ -713,7 +722,7 @@ <h1>19.0.2.0.9</h1>
713722< tt class ="docutils literal "> _compute_has_members</ tt > </ li >
714723</ ul >
715724</ div >
716- < div class ="section " id ="section-5 ">
725+ < div class ="section " id ="section-6 ">
717726< h1 > 19.0.2.0.8</ h1 >
718727< ul class ="simple ">
719728< li > Replace OFFSET pagination with NTILE-based ID-range batching in all
@@ -724,7 +733,7 @@ <h1>19.0.2.0.8</h1>
724733program and cycle</ li >
725734</ ul >
726735</ div >
727- < div class ="section " id ="section-6 ">
736+ < div class ="section " id ="section-7 ">
728737< h1 > 19.0.2.0.7</ h1 >
729738< ul class ="simple ">
730739< li > Bulk membership creation using raw SQL INSERT ON CONFLICT DO NOTHING
@@ -733,7 +742,7 @@ <h1>19.0.2.0.7</h1>
733742< tt class ="docutils literal "> _add_beneficiaries</ tt > with bulk SQL path</ li >
734743</ ul >
735744</ div >
736- < div class ="section " id ="section-7 ">
745+ < div class ="section " id ="section-8 ">
737746< h1 > 19.0.2.0.6</ h1 >
738747< ul class ="simple ">
739748< li > Remove unused entitlement_base_model.py (dead code, never imported)</ li >
@@ -742,34 +751,34 @@ <h1>19.0.2.0.6</h1>
742751payment, and fund tests (172 → 492 tests)</ li >
743752</ ul >
744753</ div >
745- < div class ="section " id ="section-8 ">
754+ < div class ="section " id ="section-9 ">
746755< h1 > 19.0.2.0.5</ h1 >
747756< ul class ="simple ">
748757< li > Batch create entitlements and payments instead of one-by-one ORM
749758creates</ li >
750759</ ul >
751760</ div >
752- < div class ="section " id ="section-9 ">
761+ < div class ="section " id ="section-10 ">
753762< h1 > 19.0.2.0.4</ h1 >
754763< ul class ="simple ">
755764< li > Fetch fund balance once per approval batch instead of per entitlement</ li >
756765</ ul >
757766</ div >
758- < div class ="section " id ="section-10 ">
767+ < div class ="section " id ="section-11 ">
759768< h1 > 19.0.2.0.3</ h1 >
760769< ul class ="simple ">
761770< li > Replace cycle computed fields (total_amount, entitlements_count,
762771approval flags) with SQL aggregation queries</ li >
763772</ ul >
764773</ div >
765- < div class ="section " id ="section-11 ">
774+ < div class ="section " id ="section-12 ">
766775< h1 > 19.0.2.0.2</ h1 >
767776< ul class ="simple ">
768777< li > Add composite indexes for frequent query patterns on entitlements and
769778program memberships</ li >
770779</ ul >
771780</ div >
772- < div class ="section " id ="section-12 ">
781+ < div class ="section " id ="section-13 ">
773782< h1 > 19.0.2.0.1</ h1 >
774783< ul class ="simple ">
775784< li > Replace Python-level uniqueness checks with SQL UNIQUE constraints for
@@ -778,7 +787,7 @@ <h1>19.0.2.0.1</h1>
778787constraint creation</ li >
779788</ ul >
780789</ div >
781- < div class ="section " id ="section-13 ">
790+ < div class ="section " id ="section-14 ">
782791< h1 > 19.0.2.0.0</ h1 >
783792< ul class ="simple ">
784793< li > Initial migration to OpenSPP2</ li >
0 commit comments