diff --git a/spp_studio_events/README.rst b/spp_studio_events/README.rst
index 7a9f5f71..13665098 100644
--- a/spp_studio_events/README.rst
+++ b/spp_studio_events/README.rst
@@ -137,6 +137,25 @@ Dependencies
Changelog
=========
+19.0.2.0.2
+~~~~~~~~~~
+
+- fix(views): the basic Create Event wizard's step 1 is now
+ self-explanatory for Studio-backed event types. The misleading raw
+ JSON field is hidden; an info banner announces the next stage; the
+ "Create Event" button is renamed "Next" so users know there's a second
+ step where the structured fields appear. Non-Studio event types keep
+ the original step-1 UI unchanged. Backed by a new computed
+ ``is_studio_event_type`` boolean on ``spp.create.event.wizard``.
+
+19.0.2.0.1
+~~~~~~~~~~
+
+- fix(views): clicking the **Events** smart button on a Studio Event
+ Type form no longer crashes with ``View types not defined tree``.
+ ``action_view_events`` returned ``view_mode="tree,form"``, but Odoo 19
+ renamed ``tree`` to ``list``; switched to ``view_mode="list,form"``.
+
19.0.2.0.0
~~~~~~~~~~
diff --git a/spp_studio_events/__manifest__.py b/spp_studio_events/__manifest__.py
index 33478458..b49d023d 100644
--- a/spp_studio_events/__manifest__.py
+++ b/spp_studio_events/__manifest__.py
@@ -1,7 +1,7 @@
# pylint: disable-next=pointless-statement
{
"name": "OpenSPP Studio - Events",
- "version": "19.0.2.0.0",
+ "version": "19.0.2.0.2",
"category": "OpenSPP/Configuration",
"summary": "No-code event type designer for data collection",
"author": "OpenSPP.org",
@@ -22,6 +22,7 @@
# Wizards
"wizard/event_type_wizard_views.xml",
"wizard/event_data_entry_wizard_views.xml",
+ "wizard/create_event_wizard_views.xml",
# Data
"data/event_field_templates.xml",
],
diff --git a/spp_studio_events/models/studio_event_type.py b/spp_studio_events/models/studio_event_type.py
index 6862d325..2ff78ec0 100644
--- a/spp_studio_events/models/studio_event_type.py
+++ b/spp_studio_events/models/studio_event_type.py
@@ -723,7 +723,7 @@ def action_view_events(self):
"type": "ir.actions.act_window",
"name": _("Events: %(name)s", name=self.name),
"res_model": "spp.event.data",
- "view_mode": "tree,form",
+ "view_mode": "list,form",
"domain": [("event_type_id", "=", self.spp_event_type_id.id)],
"context": {"default_event_type_id": self.spp_event_type_id.id},
}
diff --git a/spp_studio_events/readme/HISTORY.md b/spp_studio_events/readme/HISTORY.md
index 4aaf9afe..19e03e55 100644
--- a/spp_studio_events/readme/HISTORY.md
+++ b/spp_studio_events/readme/HISTORY.md
@@ -1,3 +1,11 @@
+### 19.0.2.0.2
+
+- fix(views): the basic Create Event wizard's step 1 is now self-explanatory for Studio-backed event types. The misleading raw JSON field is hidden; an info banner announces the next stage; the "Create Event" button is renamed "Next" so users know there's a second step where the structured fields appear. Non-Studio event types keep the original step-1 UI unchanged. Backed by a new computed `is_studio_event_type` boolean on `spp.create.event.wizard`.
+
+### 19.0.2.0.1
+
+- fix(views): clicking the **Events** smart button on a Studio Event Type form no longer crashes with `View types not defined tree`. `action_view_events` returned `view_mode="tree,form"`, but Odoo 19 renamed `tree` to `list`; switched to `view_mode="list,form"`.
+
### 19.0.2.0.0
- Initial migration to OpenSPP2
diff --git a/spp_studio_events/static/description/index.html b/spp_studio_events/static/description/index.html
index 24f52786..675f8a11 100644
--- a/spp_studio_events/static/description/index.html
+++ b/spp_studio_events/static/description/index.html
@@ -516,6 +516,27 @@
fix(views): the basic Create Event wizard’s step 1 is now
+self-explanatory for Studio-backed event types. The misleading raw
+JSON field is hidden; an info banner announces the next stage; the
+“Create Event” button is renamed “Next” so users know there’s a second
+step where the structured fields appear. Non-Studio event types keep
+the original step-1 UI unchanged. Backed by a new computed
+is_studio_event_type boolean on spp.create.event.wizard.
+
+
+
+
19.0.2.0.1
+
+
fix(views): clicking the Events smart button on a Studio Event
+Type form no longer crashes with View types not defined tree.
+action_view_events returned view_mode="tree,form", but Odoo 19
+renamed tree to list; switched to view_mode="list,form".
+
+
+
19.0.2.0.0
Initial migration to OpenSPP2
diff --git a/spp_studio_events/tests/test_create_event_wizard_integration.py b/spp_studio_events/tests/test_create_event_wizard_integration.py
index a586714a..b43a63fc 100644
--- a/spp_studio_events/tests/test_create_event_wizard_integration.py
+++ b/spp_studio_events/tests/test_create_event_wizard_integration.py
@@ -156,6 +156,26 @@ def test_studio_wizard_has_dynamic_fields(self):
field_name = f"x_evt_{test_field.technical_name}"
self.assertIn(field_name, studio_wizard._fields)
+ def test_is_studio_event_type_flag(self):
+ """Test the is_studio_event_type computed field that drives step-1 UX."""
+ # Studio-backed event type → flag is True
+ wizard = self.env["spp.create.event.wizard"].create(
+ {
+ "partner_id": self.registrant.id,
+ "event_type_id": self.event_type.id,
+ "collection_date": date.today(),
+ }
+ )
+ self.assertTrue(wizard.is_studio_event_type)
+
+ # Switching to a non-Studio event type → flag flips to False
+ wizard.event_type_id = self.regular_event_type
+ self.assertFalse(wizard.is_studio_event_type)
+
+ # Clearing the event type → flag is False
+ wizard.event_type_id = False
+ self.assertFalse(wizard.is_studio_event_type)
+
def test_inactive_studio_type_does_not_redirect(self):
"""Test that inactive Studio types don't trigger redirect."""
# Deactivate the Studio event type
diff --git a/spp_studio_events/wizard/create_event_wizard.py b/spp_studio_events/wizard/create_event_wizard.py
index f828172b..42af0081 100644
--- a/spp_studio_events/wizard/create_event_wizard.py
+++ b/spp_studio_events/wizard/create_event_wizard.py
@@ -2,7 +2,7 @@
import logging
-from odoo import _, models
+from odoo import _, api, fields, models
_logger = logging.getLogger(__name__)
@@ -12,6 +12,22 @@ class SPPCreateEventWizardStudioExtension(models.TransientModel):
_inherit = "spp.create.event.wizard"
+ is_studio_event_type = fields.Boolean(
+ compute="_compute_is_studio_event_type",
+ help=(
+ "True when the selected event type was created via Studio and "
+ "renders structured fields in the next stage. Drives the basic "
+ "wizard's UX: hides the misleading raw JSON input, shows an "
+ "info banner, and renames the submit button to 'Next' so users "
+ "know there's a second step coming."
+ ),
+ )
+
+ @api.depends("event_type_id")
+ def _compute_is_studio_event_type(self):
+ for rec in self:
+ rec.is_studio_event_type = bool(rec.event_type_id and rec.event_type_id._get_active_studio_event_type())
+
def create_event(self):
"""Override to redirect to Studio wizard if applicable.
diff --git a/spp_studio_events/wizard/create_event_wizard_views.xml b/spp_studio_events/wizard/create_event_wizard_views.xml
new file mode 100644
index 00000000..1c020498
--- /dev/null
+++ b/spp_studio_events/wizard/create_event_wizard_views.xml
@@ -0,0 +1,75 @@
+
+
+
+
+ spp.create.event.wizard.form.studio
+ spp.create.event.wizard
+
+
+
+
+
+
+
+
+
+
+ This event type uses structured fields.
+ Click Next to enter them — you'll be
+ moved to the second stage where each defined field
+ appears as its own input.
+
+
+
+
+
+ not event_type_id or is_studio_event_type
+
+
+
+
+ not event_type_id or is_studio_event_type
+
+
+
+
+
+
+
+
+