This is an automated email from the ASF dual-hosted git repository.

pandeypranay pushed a commit to branch OFBIZ-13503-indicator-field-default
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git

commit 44aa0788121f53afa097238f58049512803f9ad3
Author: Pranay Pandey <[email protected]>
AuthorDate: Thu Oct 8 14:28:06 2026 +0530

    Improved: Auto-generated indicator (Y/N) fields silently default to "Y" and 
overwrite a NULL value on unrelated form saves (OFBIZ-13503)
    
    Auto-generated create/update forms rendered indicator (Y/N) fields as a 
drop-down with only "Y" and "N" options. For a nullable column holding NULL the 
browser preselected "Y", so saving any unrelated field on the form silently 
persisted "Y" (e.g. ProductStore.allocateInventory). OFBIZ-12001 addressed this 
for allocateInventory only; this applies it
    to every auto-generated indicator field.
    
    - ModelFormFieldBuilder now adds a blank option to indicator drop-downs on 
non-find forms when the entity field is nullable; not-null fields keep only 
Y/N. Find forms already had the blank option.
    - GenericEntity.set() now converts an empty string on an indicator field to 
null, so selecting the blank option stores NULL rather than an empty string. 
Note that setting "" on a not-null indicator field now fails instead of storing 
an empty value.
---
 .../main/java/org/apache/ofbiz/entity/GenericEntity.java   |  3 +++
 .../apache/ofbiz/widget/model/ModelFormFieldBuilder.java   | 14 +++++++++++---
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git 
a/framework/entity/src/main/java/org/apache/ofbiz/entity/GenericEntity.java 
b/framework/entity/src/main/java/org/apache/ofbiz/entity/GenericEntity.java
index 427444ba2a..deddc52a95 100644
--- a/framework/entity/src/main/java/org/apache/ofbiz/entity/GenericEntity.java
+++ b/framework/entity/src/main/java/org/apache/ofbiz/entity/GenericEntity.java
@@ -533,6 +533,9 @@ public class GenericEntity implements Map<String, Object>, 
LocalizedMap<Object>,
                         + 
this.getDelegator().getEntityGroupName(this.getEntityName()) + "]");
             }
 
+            if (value instanceof String && ((String) value).isEmpty() && 
"indicator".equals(modelField.getType())) {
+                value = null;
+            }
             if (value instanceof Boolean) {
                 // if this is a Boolean check to see if we should convert from 
an indicator or just leave as is
                 try {
diff --git 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelFormFieldBuilder.java
 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelFormFieldBuilder.java
index 2fdfbfdb4d..d6d833ff2c 100644
--- 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelFormFieldBuilder.java
+++ 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelFormFieldBuilder.java
@@ -795,9 +795,17 @@ public class ModelFormFieldBuilder {
             this.setFieldInfo(hiddenField);
         } else {
             if ("indicator".equals(fieldType)) {
-                List<OptionSource> optionSources = UtilMisc.toList(
-                        new ModelFormField.SingleOption("Y", null, null),
-                        new ModelFormField.SingleOption("N", null, null));
+                List<OptionSource> optionSources;
+                if (modelField.getIsNotNull()) {
+                    optionSources = UtilMisc.toList(
+                            new ModelFormField.SingleOption("Y", null, null),
+                            new ModelFormField.SingleOption("N", null, null));
+                } else {
+                    optionSources = UtilMisc.toList(
+                            new ModelFormField.SingleOption("", null, null),
+                            new ModelFormField.SingleOption("Y", null, null),
+                            new ModelFormField.SingleOption("N", null, null));
+                }
                 ModelFormField.DropDownField dropDownField = new 
ModelFormField.DropDownField(FieldInfo.SOURCE_AUTO_ENTITY,
                         optionSources);
                 this.setFieldInfo(dropDownField);

Reply via email to