Skip to content

Commit

Permalink
✨ [#5074] Transform data for selectboxes based on openForms.transform…
Browse files Browse the repository at this point in the history
…Data
  • Loading branch information
stevenbal committed Feb 4, 2025
1 parent 3f79ba2 commit cfe7a0c
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 1 deletion.
25 changes: 24 additions & 1 deletion src/openforms/submissions/models/submission_value_variable.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from __future__ import annotations

import logging
from dataclasses import dataclass, field
from datetime import date, datetime, time
from typing import TYPE_CHECKING, Any, Literal, overload
Expand All @@ -11,6 +12,8 @@
from django.utils.functional import empty
from django.utils.translation import gettext_lazy as _

from glom import glom

from openforms.formio.service import FormioData
from openforms.forms.models.form_variable import FormVariable
from openforms.typing import DataMapping, JSONEncodable, JSONObject, JSONSerializable
Expand All @@ -19,11 +22,14 @@
from openforms.variables.service import VariablesRegistry, get_static_variables

from ..constants import SubmissionValueVariableSources
from ..transform_data import TRANSFORM_DATA_MAPPING
from .submission import Submission

if TYPE_CHECKING:
from .submission_step import SubmissionStep

logger = logging.getLogger(__name__)


class ValueEncoder(DjangoJSONEncoder):
def default(self, obj: JSONEncodable | JSONSerializable) -> JSONEncodable:
Expand Down Expand Up @@ -104,7 +110,24 @@ def get_data(
continue

if variable.source != SubmissionValueVariableSources.sensitive_data_cleaner:
formio_data[variable_key] = variable.value
component_configuration = (
variable.submission.total_configuration_wrapper[variable.key]
)

if glom(component_configuration, "openForms.transformData"):
transform_function = TRANSFORM_DATA_MAPPING.get(
component_configuration["type"]
)
if not transform_function:
logger.warning(
"Incorrect configuration, component of type `%s` has `openForms.transformData` "
"set to true, but no transform function is defined in TRANSFORM_DATA_MAPPING",
component_configuration["type"],
)
transform_function = lambda value: value
formio_data[variable_key] = transform_function(variable.value)
else:
formio_data[variable_key] = variable.value
return formio_data if as_formio_data else formio_data.data

def get_variables_in_submission_step(
Expand Down
8 changes: 8 additions & 0 deletions src/openforms/submissions/transform_data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
def transform_selectboxes_data(value: dict[str, bool] | None) -> list[str] | None:
if value:
return sorted([key for key, value in value.items() if value])


TRANSFORM_DATA_MAPPING = {
"selectboxes": transform_selectboxes_data,
}

0 comments on commit cfe7a0c

Please sign in to comment.