@@ -452,14 +429,14 @@
/>Current Data
diff --git a/spp_change_request_v2/views/conflict_extensions.xml b/spp_change_request_v2/views/conflict_extensions.xml
index a7c83a65..03072957 100644
--- a/spp_change_request_v2/views/conflict_extensions.xml
+++ b/spp_change_request_v2/views/conflict_extensions.xml
@@ -173,7 +173,7 @@
string="Check for Updates"
type="object"
class="btn-link"
- invisible="approval_state != 'draft'"
+ invisible="approval_state != 'draft' or not is_conflict_detection_enabled"
help="Check if other requests have been completed"
/>
diff --git a/spp_change_request_v2/views/create_wizard_views.xml b/spp_change_request_v2/views/create_wizard_views.xml
index e1ea5ac4..e5796896 100644
--- a/spp_change_request_v2/views/create_wizard_views.xml
+++ b/spp_change_request_v2/views/create_wizard_views.xml
@@ -32,31 +32,51 @@
-
+
-
+
+
+
-
+
+
-
+
+
+
+
+
+
+
""").format(reason)
+ # ══════════════════════════════════════════════════════════════════════════
+ # SEARCH ACTIONS
+ # ══════════════════════════════════════════════════════════════════════════
+
+ @api.onchange("_selected_partner_id")
+ def _onchange_selected_partner(self):
+ """Convert the bridge integer to a Many2one registrant_id."""
+ if self._selected_partner_id:
+ self.registrant_id = self.env["res.partner"].browse(self._selected_partner_id)
+
+ _SEARCH_PAGE_SIZE = 10
+
+ @api.onchange("search_text")
+ def _onchange_search_text(self):
+ """Reset page and run search when text changes."""
+ self.search_results_html = False
+ self.registrant_id = False
+ self._search_page = 0
+
+ if not self.search_text or len(self.search_text) < 2:
+ return
+
+ self._render_search_results()
+
+ @api.onchange("_search_page")
+ def _onchange_search_page(self):
+ """Re-render results when page changes."""
+ if self.search_text and len(self.search_text) >= 2:
+ self._render_search_results()
+
+ def _get_search_domain(self):
+ """Build the search domain based on search text and target type."""
+ domain = [("is_registrant", "=", True)]
+ if self.request_type_id and self.request_type_id.target_type:
+ target = self.request_type_id.target_type
+ if target == "individual":
+ domain.append(("is_group", "=", False))
+ elif target == "group":
+ domain.append(("is_group", "=", True))
+ return domain + [
+ "|",
+ ("name", "ilike", self.search_text),
+ ("reg_ids.value", "=", self.search_text),
+ ]
+
+ def _render_search_results(self):
+ """Search and render paginated HTML results."""
+ search_domain = self._get_search_domain()
+ total = self.env["res.partner"].search_count(search_domain)
+
+ if not total:
+ self.search_results_html = Markup("No registrants found.
")
+ return
+
+ page = self._search_page or 0
+ page_size = self._SEARCH_PAGE_SIZE
+ max_page = (total - 1) // page_size
+ page = min(page, max_page)
+
+ offset = page * page_size
+ partners = self.env["res.partner"].search(search_domain, limit=page_size, offset=offset)
+
+ rows = []
+ for p in partners:
+ ptype = '