fix(views): apply spp_registry.x2many_no_padding widget to the
+Bank Information list on group and individual registrant forms —
+removes the four empty placeholder rows Odoo 19 inserts on inline
+list-in-form views (#943).
+
+
+
19.0.2.0.0
Initial migration to OpenSPP2
diff --git a/spp_banking/views/groups_view.xml b/spp_banking/views/groups_view.xml
index 9500b743..185c84bc 100644
--- a/spp_banking/views/groups_view.xml
+++ b/spp_banking/views/groups_view.xml
@@ -15,7 +15,13 @@
0
-
+
diff --git a/spp_banking/views/individuals_view.xml b/spp_banking/views/individuals_view.xml
index 163619bf..4b173646 100644
--- a/spp_banking/views/individuals_view.xml
+++ b/spp_banking/views/individuals_view.xml
@@ -12,7 +12,13 @@
0
-
+
diff --git a/spp_consent/README.rst b/spp_consent/README.rst
index 30940735..a025e6cd 100644
--- a/spp_consent/README.rst
+++ b/spp_consent/README.rst
@@ -193,6 +193,15 @@ Dependencies
Changelog
=========
+19.0.2.0.1
+~~~~~~~~~~
+
+- fix(views): apply ``spp_registry.x2many_no_padding`` widget to the
+ Consents list on registrant forms, and hide the table entirely when
+ there are no consents (showing a muted info line instead) — matches
+ the empty-state treatment of read-only / no-create lists elsewhere
+ (#943).
+
19.0.2.0.0
~~~~~~~~~~
diff --git a/spp_consent/__manifest__.py b/spp_consent/__manifest__.py
index a8a5d3ce..5c957050 100644
--- a/spp_consent/__manifest__.py
+++ b/spp_consent/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "OpenSPP Consent",
"category": "OpenSPP",
- "version": "19.0.2.0.0",
+ "version": "19.0.2.0.1",
"summary": """DPV-aligned consent management for social protection programs.
Implements ISO/IEC TS 27560:2023 consent record information structure
diff --git a/spp_consent/readme/HISTORY.md b/spp_consent/readme/HISTORY.md
index 4aaf9afe..c9a9bc34 100644
--- a/spp_consent/readme/HISTORY.md
+++ b/spp_consent/readme/HISTORY.md
@@ -1,3 +1,7 @@
+### 19.0.2.0.1
+
+- fix(views): apply `spp_registry.x2many_no_padding` widget to the Consents list on registrant forms, and hide the table entirely when there are no consents (showing a muted info line instead) — matches the empty-state treatment of read-only / no-create lists elsewhere (#943).
+
### 19.0.2.0.0
- Initial migration to OpenSPP2
diff --git a/spp_consent/static/description/index.html b/spp_consent/static/description/index.html
index 4ec5f51f..556808ef 100644
--- a/spp_consent/static/description/index.html
+++ b/spp_consent/static/description/index.html
@@ -589,6 +589,16 @@
fix(views): apply spp_registry.x2many_no_padding widget to the
+Consents list on registrant forms, and hide the table entirely when
+there are no consents (showing a muted info line instead) — matches
+the empty-state treatment of read-only / no-create lists elsewhere
+(#943).
+
+
+
19.0.2.0.0
Initial migration to OpenSPP2
diff --git a/spp_consent/views/registrant_view.xml b/spp_consent/views/registrant_view.xml
index b7bfa551..7b1baed0 100644
--- a/spp_consent/views/registrant_view.xml
+++ b/spp_consent/views/registrant_view.xml
@@ -17,13 +17,24 @@ Part of OpenSPP. See LICENSE file for full copyright and licensing details.
-
+
+
+
+ No consents recorded yet. Click "Record Consent" above to add one.
+
@@ -59,13 +70,24 @@ Part of OpenSPP. See LICENSE file for full copyright and licensing details.
-
+
+
+
+ No consents recorded yet. Click "Record Consent" above to add one.
+
diff --git a/spp_disability_registry/README.rst b/spp_disability_registry/README.rst
index 72b4864a..408cb994 100644
--- a/spp_disability_registry/README.rst
+++ b/spp_disability_registry/README.rst
@@ -53,6 +53,13 @@ Key Features
Changelog
=========
+19.0.2.0.1
+~~~~~~~~~~
+
+- fix(views): apply ``spp_registry.x2many_no_padding`` widget to the
+ disability assessments list on registrant forms, and hide the table
+ when empty (showing a muted info line instead) (#943).
+
19.0.2.0.0
~~~~~~~~~~
diff --git a/spp_disability_registry/__manifest__.py b/spp_disability_registry/__manifest__.py
index 5c370b26..ea1779c5 100644
--- a/spp_disability_registry/__manifest__.py
+++ b/spp_disability_registry/__manifest__.py
@@ -1,6 +1,6 @@
{
"name": "OpenSPP Disability Registry",
- "version": "19.0.2.0.0",
+ "version": "19.0.2.0.1",
"category": "OpenSPP",
"summary": "Disability assessment and registry management for social protection",
"author": "OpenSPP.org",
diff --git a/spp_disability_registry/readme/HISTORY.md b/spp_disability_registry/readme/HISTORY.md
index 4aaf9afe..96a0cd81 100644
--- a/spp_disability_registry/readme/HISTORY.md
+++ b/spp_disability_registry/readme/HISTORY.md
@@ -1,3 +1,7 @@
+### 19.0.2.0.1
+
+- fix(views): apply `spp_registry.x2many_no_padding` widget to the disability assessments list on registrant forms, and hide the table when empty (showing a muted info line instead) (#943).
+
### 19.0.2.0.0
- Initial migration to OpenSPP2
diff --git a/spp_disability_registry/static/description/index.html b/spp_disability_registry/static/description/index.html
index 093161cb..27db6080 100644
--- a/spp_disability_registry/static/description/index.html
+++ b/spp_disability_registry/static/description/index.html
@@ -403,6 +403,14 @@
fix(views): apply spp_registry.x2many_no_padding widget to the
+disability assessments list on registrant forms, and hide the table
+when empty (showing a muted info line instead) (#943).
+
+
+
19.0.2.0.0
Initial migration to OpenSPP2
diff --git a/spp_disability_registry/views/registrant_views.xml b/spp_disability_registry/views/registrant_views.xml
index f863a324..2f7a7ddb 100644
--- a/spp_disability_registry/views/registrant_views.xml
+++ b/spp_disability_registry/views/registrant_views.xml
@@ -168,10 +168,18 @@
New Assessment
fix(views): apply spp_registry.x2many_no_padding widget to the
+Events list on registrant forms, and hide the table when empty
+(showing a muted info line instead) (#943).
fix(views): apply spp_registry.x2many_no_padding widget to the
+farm activities list on farm forms — removes the four empty
+placeholder rows Odoo 19 inserts on inline list-in-form views (#943).
+
+
+
19.0.2.0.0
Initial migration to OpenSPP2
diff --git a/spp_farmer_registry/views/farm_views.xml b/spp_farmer_registry/views/farm_views.xml
index affbecec..8e3fd57b 100644
--- a/spp_farmer_registry/views/farm_views.xml
+++ b/spp_farmer_registry/views/farm_views.xml
@@ -61,6 +61,7 @@
@@ -88,6 +89,7 @@
@@ -113,6 +115,7 @@
@@ -131,7 +134,7 @@
-
+
@@ -142,7 +145,7 @@
-
+
@@ -150,7 +153,11 @@
-
+
@@ -160,7 +167,7 @@
-
+
diff --git a/spp_grm_registry/README.rst b/spp_grm_registry/README.rst
index d7e1365e..56772be1 100644
--- a/spp_grm_registry/README.rst
+++ b/spp_grm_registry/README.rst
@@ -120,6 +120,13 @@ Dependencies
Changelog
=========
+19.0.2.0.1
+~~~~~~~~~~
+
+- fix(views): apply ``spp_registry.x2many_no_padding`` widget to the GRM
+ tickets list on registrant forms, and hide the table when empty
+ (showing a muted info line instead) (#943).
+
19.0.2.0.0
~~~~~~~~~~
diff --git a/spp_grm_registry/__manifest__.py b/spp_grm_registry/__manifest__.py
index 994de44d..f0268a0c 100644
--- a/spp_grm_registry/__manifest__.py
+++ b/spp_grm_registry/__manifest__.py
@@ -1,7 +1,7 @@
# pylint: disable=pointless-statement
{
"name": "OpenSPP GRM Registry Integration",
- "version": "19.0.2.0.0",
+ "version": "19.0.2.0.1",
"category": "OpenSPP/Monitoring",
"summary": "Link GRM tickets to OpenSPP registry (registrants)",
"author": "OpenSPP.org",
diff --git a/spp_grm_registry/readme/HISTORY.md b/spp_grm_registry/readme/HISTORY.md
index 4aaf9afe..fe4ea763 100644
--- a/spp_grm_registry/readme/HISTORY.md
+++ b/spp_grm_registry/readme/HISTORY.md
@@ -1,3 +1,7 @@
+### 19.0.2.0.1
+
+- fix(views): apply `spp_registry.x2many_no_padding` widget to the GRM tickets list on registrant forms, and hide the table when empty (showing a muted info line instead) (#943).
+
### 19.0.2.0.0
- Initial migration to OpenSPP2
diff --git a/spp_grm_registry/static/description/index.html b/spp_grm_registry/static/description/index.html
index feceb152..67ecfa7b 100644
--- a/spp_grm_registry/static/description/index.html
+++ b/spp_grm_registry/static/description/index.html
@@ -479,6 +479,14 @@
fix(views): apply spp_registry.x2many_no_padding widget to the GRM
+tickets list on registrant forms, and hide the table when empty
+(showing a muted info line instead) (#943).
fix(views): apply spp_registry.x2many_no_padding widget to the
+hazard impacts list on registrant forms, and hide the table when empty
+(showing a muted info line instead) (#943).
fix(views): apply spp_registry.x2many_no_padding widget to the
+Programs and Entitlements lists on registrant forms and to Program
+Membership inline lines — removes the four empty placeholder rows Odoo
+19 inserts on inline list-in-form views (#943).
+
+
+
19.0.2.0.11
Fix TypeError: 'NoneType' object is not iterable when clicking
@@ -668,7 +677,7 @@
19.0.2.0.11
omit the state filter instead of crashing on tuple(None)
fix(views): add reusable x2many_no_padding JS widget that
+suppresses the four empty placeholder rows Odoo 19 hardcodes on inline
+list-in-form views. Apply it to the Phone, IDs, Relationships, Group
+Membership, and Group Members lists on registrant forms so blank cells
+don’t bloat the layout (#943).
+
+
+
19.0.2.0.0
Initial migration to OpenSPP2
diff --git a/spp_registry/static/src/js/x2many_no_padding_field.js b/spp_registry/static/src/js/x2many_no_padding_field.js
new file mode 100644
index 00000000..6cf2c567
--- /dev/null
+++ b/spp_registry/static/src/js/x2many_no_padding_field.js
@@ -0,0 +1,44 @@
+/** @odoo-module **/
+
+import {ListRenderer} from "@web/views/list/list_renderer";
+import {X2ManyField, x2ManyField} from "@web/views/fields/x2many/x2many_field";
+import {registry} from "@web/core/registry";
+
+/**
+ * Drop-in replacement for the standard x2many list widget that suppresses
+ * the trailing empty placeholder rows. See OP#943.
+ *
+ * Odoo 19's ListRenderer hardcodes a 4-row minimum (list_renderer.js
+ * `getEmptyRowIds`), padding inline One2many tables with empty rows in
+ * readonly view. Those empty rows look like unfinished data entry. This
+ * widget overrides `getEmptyRowIds` to always return an empty list, so
+ * only populated rows render.
+ *
+ * Usage:
+ *
+ *
+ * ...
+ *
+ *
+ *
+ * "Add a line" still works in edit mode — only the visual padding rows
+ * are removed.
+ */
+export class NoPaddingListRenderer extends ListRenderer {
+ get getEmptyRowIds() {
+ return [];
+ }
+}
+
+export class X2ManyNoPaddingField extends X2ManyField {}
+X2ManyNoPaddingField.components = {
+ ...X2ManyField.components,
+ ListRenderer: NoPaddingListRenderer,
+};
+
+export const x2ManyNoPaddingField = {
+ ...x2ManyField,
+ component: X2ManyNoPaddingField,
+};
+
+registry.category("fields").add("x2many_no_padding", x2ManyNoPaddingField);
diff --git a/spp_registry/views/group_membership_views.xml b/spp_registry/views/group_membership_views.xml
index aa47d412..26154730 100644
--- a/spp_registry/views/group_membership_views.xml
+++ b/spp_registry/views/group_membership_views.xml
@@ -14,7 +14,12 @@
-
+
+
19.0.2.0.1
+
+
fix(views): apply spp_registry.x2many_no_padding widget to the
+service points list on group forms — removes the four empty
+placeholder rows Odoo 19 inserts on inline list-in-form views (#943).