Idempiere 4058 (#312)
* IDEMPIERE-4058 - tab editor: new options for editing and customizing fields (window customization) * IDEMPIERE-4058 tab editor: new options for editing and customizing fields (window customization) Fix issues with migration scripts Co-authored-by: muriloht <muriloht@devcoffee.com.br>
This commit is contained in:
parent
82a5897bb4
commit
014b45246f
|
@ -0,0 +1,43 @@
|
||||||
|
SET SQLBLANKLINES ON
|
||||||
|
SET DEFINE OFF
|
||||||
|
|
||||||
|
-- IDEMPIERE-4058 tab editor: new options for editing and customizing fields (window customization)
|
||||||
|
-- Oct 8, 2019, 1:34:57 PM BRT
|
||||||
|
UPDATE AD_Process SET AccessLevel='7',Updated=TO_DATE('2019-10-08 13:34:57','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=0 WHERE AD_Process_ID=200015
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Oct 8, 2019, 1:35:16 PM BRT
|
||||||
|
INSERT INTO AD_ToolBarButton (AD_Client_ID,AD_Org_ID,Created,CreatedBy,ComponentName,IsActive,AD_ToolBarButton_ID,Name,Updated,UpdatedBy,IsCustomization,AD_ToolBarButton_UU,Action,AD_Tab_ID,AD_Process_ID,DisplayLogic,SeqNo,EntityType) VALUES (0,0,TO_DATE('2019-10-08 13:35:16','YYYY-MM-DD HH24:MI:SS'),0,'Tab Editor','Y',200109,'Tab Editor',TO_DATE('2019-10-08 13:35:16','YYYY-MM-DD HH24:MI:SS'),0,'N','3efa5e1a-99f1-4316-9724-7cc6f5b694eb','W',394,200015,'@IsActive@=Y',10,'D')
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Oct 8, 2019, 1:37:02 PM BRT
|
||||||
|
INSERT INTO AD_Column (AD_Column_ID,Version,Name,Description,Help,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,IsHtml) VALUES (214327,0,'Field Group','Logical grouping of fields','The Field Group indicates the logical group that this field belongs to (History, Amounts, Quantities)',464,'AD_FieldGroup_ID',22,'N','N','N','N','N',0,'N',19,0,0,'Y',TO_DATE('2019-10-08 13:37:02','YYYY-MM-DD HH24:MI:SS'),0,TO_DATE('2019-10-08 13:37:02','YYYY-MM-DD HH24:MI:SS'),0,1500,'Y','N','D','N','N','N','Y','f69f9b76-94c6-466e-b7b7-5bd86ae339ba','Y',0,'N','N','N')
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Oct 8, 2019, 1:37:07 PM BRT
|
||||||
|
UPDATE AD_Column SET FKConstraintName='ADFieldGroup_ADUserDefField', FKConstraintType='N',Updated=TO_DATE('2019-10-08 13:37:07','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=0 WHERE AD_Column_ID=214327
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Oct 8, 2019, 1:37:07 PM BRT
|
||||||
|
ALTER TABLE AD_UserDef_Field ADD AD_FieldGroup_ID NUMBER(10) DEFAULT NULL
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Oct 8, 2019, 1:37:07 PM BRT
|
||||||
|
ALTER TABLE AD_UserDef_Field ADD CONSTRAINT ADFieldGroup_ADUserDefField FOREIGN KEY (AD_FieldGroup_ID) REFERENCES ad_fieldgroup(ad_fieldgroup_id) DEFERRABLE INITIALLY DEFERRED
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Oct 8, 2019, 1:37:45 PM BRT
|
||||||
|
INSERT INTO AD_Field (AD_Field_ID,Name,Description,Help,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,ColumnSpan) VALUES (206521,'Field Group','Logical grouping of fields','The Field Group indicates the logical group that this field belongs to (History, Amounts, Quantities)',395,214327,'Y',22,330,'N','N','N','N',0,0,'Y',TO_DATE('2019-10-08 13:37:45','YYYY-MM-DD HH24:MI:SS'),0,TO_DATE('2019-10-08 13:37:45','YYYY-MM-DD HH24:MI:SS'),0,'N','Y','D','6f71bd66-6a96-40ad-a016-42f74fcb3c95','Y',330,2)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Oct 8, 2019, 1:38:59 PM BRT
|
||||||
|
UPDATE AD_Field SET SeqNo=155, AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, IsToolbarButton=NULL,Updated=TO_DATE('2019-10-08 13:38:59','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=0 WHERE AD_Field_ID=206521
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Oct 9, 2020, 8:40:22 AM BRT
|
||||||
|
INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('I','Window customization Language != Session Language',0,0,'Y',TO_DATE('2020-10-09 08:40:22','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2020-10-09 08:40:22','YYYY-MM-DD HH24:MI:SS'),100,200641,'TabEditorWrongLanguage','D','dcf44ca0-91e1-4c26-a684-6c645ef11eeb')
|
||||||
|
;
|
||||||
|
|
||||||
|
SELECT register_migration_script('202010211353_IDEMPIERE-4058.sql') FROM dual
|
||||||
|
;
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
-- IDEMPIERE-4058 tab editor: new options for editing and customizing fields (window customization)
|
||||||
|
-- Oct 8, 2019, 1:34:57 PM BRT
|
||||||
|
UPDATE AD_Process SET AccessLevel='7',Updated=TO_TIMESTAMP('2019-10-08 13:34:57','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=0 WHERE AD_Process_ID=200015
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Oct 8, 2019, 1:35:16 PM BRT
|
||||||
|
INSERT INTO AD_ToolBarButton (AD_Client_ID,AD_Org_ID,Created,CreatedBy,ComponentName,IsActive,AD_ToolBarButton_ID,Name,Updated,UpdatedBy,IsCustomization,AD_ToolBarButton_UU,"action",AD_Tab_ID,AD_Process_ID,DisplayLogic,SeqNo,EntityType) VALUES (0,0,TO_TIMESTAMP('2019-10-08 13:35:16','YYYY-MM-DD HH24:MI:SS'),0,'Tab Editor','Y',200109,'Tab Editor',TO_TIMESTAMP('2019-10-08 13:35:16','YYYY-MM-DD HH24:MI:SS'),0,'N','3efa5e1a-99f1-4316-9724-7cc6f5b694eb','W',394,200015,'@IsActive@=Y',10,'D')
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Oct 8, 2019, 1:37:02 PM BRT
|
||||||
|
INSERT INTO AD_Column (AD_Column_ID,Version,Name,Description,Help,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,IsHtml) VALUES (214327,0,'Field Group','Logical grouping of fields','The Field Group indicates the logical group that this field belongs to (History, Amounts, Quantities)',464,'AD_FieldGroup_ID',22,'N','N','N','N','N',0,'N',19,0,0,'Y',TO_TIMESTAMP('2019-10-08 13:37:02','YYYY-MM-DD HH24:MI:SS'),0,TO_TIMESTAMP('2019-10-08 13:37:02','YYYY-MM-DD HH24:MI:SS'),0,1500,'Y','N','D','N','N','N','Y','f69f9b76-94c6-466e-b7b7-5bd86ae339ba','Y',0,'N','N','N')
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Oct 8, 2019, 1:37:07 PM BRT
|
||||||
|
UPDATE AD_Column SET FKConstraintName='ADFieldGroup_ADUserDefField', FKConstraintType='N',Updated=TO_TIMESTAMP('2019-10-08 13:37:07','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=0 WHERE AD_Column_ID=214327
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Oct 8, 2019, 1:37:07 PM BRT
|
||||||
|
ALTER TABLE AD_UserDef_Field ADD COLUMN AD_FieldGroup_ID NUMERIC(10) DEFAULT NULL
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Oct 8, 2019, 1:37:07 PM BRT
|
||||||
|
ALTER TABLE AD_UserDef_Field ADD CONSTRAINT ADFieldGroup_ADUserDefField FOREIGN KEY (AD_FieldGroup_ID) REFERENCES ad_fieldgroup(ad_fieldgroup_id) DEFERRABLE INITIALLY DEFERRED
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Oct 8, 2019, 1:37:45 PM BRT
|
||||||
|
INSERT INTO AD_Field (AD_Field_ID,Name,Description,Help,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,ColumnSpan) VALUES (206521,'Field Group','Logical grouping of fields','The Field Group indicates the logical group that this field belongs to (History, Amounts, Quantities)',395,214327,'Y',22,330,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2019-10-08 13:37:45','YYYY-MM-DD HH24:MI:SS'),0,TO_TIMESTAMP('2019-10-08 13:37:45','YYYY-MM-DD HH24:MI:SS'),0,'N','Y','D','6f71bd66-6a96-40ad-a016-42f74fcb3c95','Y',330,2)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Oct 8, 2019, 1:38:59 PM BRT
|
||||||
|
UPDATE AD_Field SET SeqNo=155, AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, IsToolbarButton=NULL,Updated=TO_TIMESTAMP('2019-10-08 13:38:59','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=0 WHERE AD_Field_ID=206521
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Oct 9, 2020, 8:40:22 AM BRT
|
||||||
|
INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('I','Window customization Language != Session Language',0,0,'Y',TO_TIMESTAMP('2020-10-09 08:40:22','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-10-09 08:40:22','YYYY-MM-DD HH24:MI:SS'),100,200641,'TabEditorWrongLanguage','D','dcf44ca0-91e1-4c26-a684-6c645ef11eeb')
|
||||||
|
;
|
||||||
|
|
||||||
|
SELECT register_migration_script('202010211353_IDEMPIERE-4058.sql') FROM dual
|
||||||
|
;
|
||||||
|
|
|
@ -186,6 +186,14 @@ public class GridFieldVO implements Serializable, Cloneable
|
||||||
if (userDef.getPlaceholder() != null)
|
if (userDef.getPlaceholder() != null)
|
||||||
vo.Placeholder = userDef.getPlaceholder();
|
vo.Placeholder = userDef.getPlaceholder();
|
||||||
|
|
||||||
|
//devCoffee 8535
|
||||||
|
if (userDef.getAD_FieldGroup_ID() > 0)
|
||||||
|
{
|
||||||
|
vo.FieldGroup = ((X_AD_FieldGroup)userDef.getAD_FieldGroup()).get_Translation(I_AD_FieldGroup.COLUMNNAME_Name);
|
||||||
|
vo.FieldGroupType = userDef.getAD_FieldGroup().getFieldGroupType();
|
||||||
|
}
|
||||||
|
//fim devCoffee 8535
|
||||||
|
|
||||||
if (userDef.getIsAutocomplete() != null)
|
if (userDef.getIsAutocomplete() != null)
|
||||||
vo.IsAutocomplete = "Y".equals(userDef.getIsAutocomplete());
|
vo.IsAutocomplete = "Y".equals(userDef.getIsAutocomplete());
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,21 @@ public interface I_AD_UserDef_Field
|
||||||
*/
|
*/
|
||||||
public int getAD_Client_ID();
|
public int getAD_Client_ID();
|
||||||
|
|
||||||
|
/** Column name AD_FieldGroup_ID */
|
||||||
|
public static final String COLUMNNAME_AD_FieldGroup_ID = "AD_FieldGroup_ID";
|
||||||
|
|
||||||
|
/** Set Field Group.
|
||||||
|
* Logical grouping of fields
|
||||||
|
*/
|
||||||
|
public void setAD_FieldGroup_ID (int AD_FieldGroup_ID);
|
||||||
|
|
||||||
|
/** Get Field Group.
|
||||||
|
* Logical grouping of fields
|
||||||
|
*/
|
||||||
|
public int getAD_FieldGroup_ID();
|
||||||
|
|
||||||
|
public org.compiere.model.I_AD_FieldGroup getAD_FieldGroup() throws RuntimeException;
|
||||||
|
|
||||||
/** Column name AD_Field_ID */
|
/** Column name AD_Field_ID */
|
||||||
public static final String COLUMNNAME_AD_Field_ID = "AD_Field_ID";
|
public static final String COLUMNNAME_AD_Field_ID = "AD_Field_ID";
|
||||||
|
|
||||||
|
|
|
@ -110,6 +110,20 @@ public class MUserDefField extends X_AD_UserDef_Field implements ImmutablePOSupp
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static MUserDefField get (Properties ctx, int AD_Field_ID, int AD_Tab_ID, int AD_Window_ID )
|
public static MUserDefField get (Properties ctx, int AD_Field_ID, int AD_Tab_ID, int AD_Window_ID )
|
||||||
|
{
|
||||||
|
return get(ctx, AD_Field_ID, AD_Tab_ID, AD_Window_ID, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get matching MUserDefField related to current field and user definition for window and tab
|
||||||
|
* @param ctx
|
||||||
|
* @param AD_Field_ID
|
||||||
|
* @param AD_Tab_ID
|
||||||
|
* @param AD_Window_ID
|
||||||
|
* @param reload
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static MUserDefField get (Properties ctx, int AD_Field_ID, int AD_Tab_ID, int AD_Window_ID , boolean reload)
|
||||||
{
|
{
|
||||||
|
|
||||||
MUserDefWin userdefWin = MUserDefWin.getBestMatch(ctx, AD_Window_ID);
|
MUserDefWin userdefWin = MUserDefWin.getBestMatch(ctx, AD_Window_ID);
|
||||||
|
@ -123,7 +137,7 @@ public class MUserDefField extends X_AD_UserDef_Field implements ImmutablePOSupp
|
||||||
String key = new StringBuilder().append(AD_Field_ID).append("_")
|
String key = new StringBuilder().append(AD_Field_ID).append("_")
|
||||||
.append(userdefTab.getAD_UserDef_Tab_ID())
|
.append(userdefTab.getAD_UserDef_Tab_ID())
|
||||||
.toString();
|
.toString();
|
||||||
if (s_cache.containsKey(key))
|
if (!reload && s_cache.containsKey(key))
|
||||||
return s_cache.get(ctx, key, e -> new MUserDefField(ctx, e));
|
return s_cache.get(ctx, key, e -> new MUserDefField(ctx, e));
|
||||||
|
|
||||||
MUserDefField retValue = null;
|
MUserDefField retValue = null;
|
||||||
|
|
|
@ -74,6 +74,34 @@ public class X_AD_UserDef_Field extends PO implements I_AD_UserDef_Field, I_Pers
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public org.compiere.model.I_AD_FieldGroup getAD_FieldGroup() throws RuntimeException
|
||||||
|
{
|
||||||
|
return (org.compiere.model.I_AD_FieldGroup)MTable.get(getCtx(), org.compiere.model.I_AD_FieldGroup.Table_Name)
|
||||||
|
.getPO(getAD_FieldGroup_ID(), get_TrxName()); }
|
||||||
|
|
||||||
|
/** Set Field Group.
|
||||||
|
@param AD_FieldGroup_ID
|
||||||
|
Logical grouping of fields
|
||||||
|
*/
|
||||||
|
public void setAD_FieldGroup_ID (int AD_FieldGroup_ID)
|
||||||
|
{
|
||||||
|
if (AD_FieldGroup_ID < 1)
|
||||||
|
set_ValueNoCheck (COLUMNNAME_AD_FieldGroup_ID, null);
|
||||||
|
else
|
||||||
|
set_ValueNoCheck (COLUMNNAME_AD_FieldGroup_ID, Integer.valueOf(AD_FieldGroup_ID));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get Field Group.
|
||||||
|
@return Logical grouping of fields
|
||||||
|
*/
|
||||||
|
public int getAD_FieldGroup_ID ()
|
||||||
|
{
|
||||||
|
Integer ii = (Integer)get_Value(COLUMNNAME_AD_FieldGroup_ID);
|
||||||
|
if (ii == null)
|
||||||
|
return 0;
|
||||||
|
return ii.intValue();
|
||||||
|
}
|
||||||
|
|
||||||
public org.compiere.model.I_AD_Field getAD_Field() throws RuntimeException
|
public org.compiere.model.I_AD_Field getAD_Field() throws RuntimeException
|
||||||
{
|
{
|
||||||
return (org.compiere.model.I_AD_Field)MTable.get(getCtx(), org.compiere.model.I_AD_Field.Table_Name)
|
return (org.compiere.model.I_AD_Field)MTable.get(getCtx(), org.compiere.model.I_AD_Field.Table_Name)
|
||||||
|
|
|
@ -37,6 +37,7 @@ import org.adempiere.webui.component.ListItem;
|
||||||
import org.adempiere.webui.component.Listbox;
|
import org.adempiere.webui.component.Listbox;
|
||||||
import org.adempiere.webui.component.Row;
|
import org.adempiere.webui.component.Row;
|
||||||
import org.adempiere.webui.component.Rows;
|
import org.adempiere.webui.component.Rows;
|
||||||
|
import org.adempiere.webui.component.Textbox;
|
||||||
import org.adempiere.webui.editor.WEditor;
|
import org.adempiere.webui.editor.WEditor;
|
||||||
import org.adempiere.webui.editor.WImageEditor;
|
import org.adempiere.webui.editor.WImageEditor;
|
||||||
import org.adempiere.webui.editor.WNumberEditor;
|
import org.adempiere.webui.editor.WNumberEditor;
|
||||||
|
@ -51,11 +52,14 @@ import org.adempiere.webui.panel.IFormController;
|
||||||
import org.adempiere.webui.panel.WTabEditorForm;
|
import org.adempiere.webui.panel.WTabEditorForm;
|
||||||
import org.adempiere.webui.session.SessionManager;
|
import org.adempiere.webui.session.SessionManager;
|
||||||
import org.adempiere.webui.util.ZKUpdateUtil;
|
import org.adempiere.webui.util.ZKUpdateUtil;
|
||||||
|
import org.adempiere.webui.window.FDialog;
|
||||||
import org.compiere.apps.form.TabEditor;
|
import org.compiere.apps.form.TabEditor;
|
||||||
import org.compiere.model.GridField;
|
import org.compiere.model.GridField;
|
||||||
|
import org.compiere.model.MColumn;
|
||||||
import org.compiere.model.MField;
|
import org.compiere.model.MField;
|
||||||
import org.compiere.model.MLookup;
|
import org.compiere.model.MLookup;
|
||||||
import org.compiere.model.MLookupFactory;
|
import org.compiere.model.MLookupFactory;
|
||||||
|
import org.compiere.model.MUserDefTab;
|
||||||
import org.compiere.model.X_AD_FieldGroup;
|
import org.compiere.model.X_AD_FieldGroup;
|
||||||
import org.compiere.util.DisplayType;
|
import org.compiere.util.DisplayType;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
|
@ -90,7 +94,7 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
{
|
{
|
||||||
// TODO: create messages Property, VisibleFields, NonVisibleField
|
// TODO: create messages Property, VisibleFields, NonVisibleField
|
||||||
|
|
||||||
private WTabEditorForm tabform =null;
|
private WTabEditorForm tabform = null;
|
||||||
|
|
||||||
private Borderlayout mainLayout = new Borderlayout();
|
private Borderlayout mainLayout = new Borderlayout();
|
||||||
|
|
||||||
|
@ -103,12 +107,20 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
private ConfirmPanel confirmPanel = new ConfirmPanel(true);
|
private ConfirmPanel confirmPanel = new ConfirmPanel(true);
|
||||||
|
|
||||||
WEditor editorName = null;
|
WEditor editorName = null;
|
||||||
|
WEditor editorDescription = null;
|
||||||
|
WEditor editorHelp = null;
|
||||||
|
WEditor editorPlaceholder = null;
|
||||||
WEditor editorAD_FieldGroup_ID = null;
|
WEditor editorAD_FieldGroup_ID = null;
|
||||||
WEditor editorIsDisplayed = null;
|
WEditor editorIsDisplayed = null;
|
||||||
WEditor editorSeqNo = null;
|
WEditor editorSeqNo = null;
|
||||||
WEditor editorXPosition = null;
|
WEditor editorXPosition = null;
|
||||||
WEditor editorColumnSpan = null;
|
WEditor editorColumnSpan = null;
|
||||||
WEditor editorNumLines = null;
|
WEditor editorNumLines = null;
|
||||||
|
WEditor editorDisplayLogic = null;
|
||||||
|
WEditor editorMandatoryLogic = null;
|
||||||
|
WEditor editorReadOnlyLogic = null;
|
||||||
|
WEditor editorColumn = null;
|
||||||
|
WYesNoEditor editorIsReadOnly = null;
|
||||||
|
|
||||||
private Listbox visible = new Listbox();
|
private Listbox visible = new Listbox();
|
||||||
private Listbox invisible = new Listbox();
|
private Listbox invisible = new Listbox();
|
||||||
|
@ -122,7 +134,7 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
|
|
||||||
Grid form;
|
Grid form;
|
||||||
Vlayout centerVLayout;
|
Vlayout centerVLayout;
|
||||||
Vlayout westVLayout ;
|
Vlayout westVLayout;
|
||||||
|
|
||||||
private static final int POSSEQMULTIPLIER = 10000000;
|
private static final int POSSEQMULTIPLIER = 10000000;
|
||||||
|
|
||||||
|
@ -135,7 +147,25 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
public void initForm() {
|
public void initForm() {
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
initMFields(tabform.getWindowNo(), tabform.getProcessInfo().getRecord_ID());
|
int Table_ID = tabform.getProcessInfo().getTable_ID();
|
||||||
|
int Record_ID = tabform.getProcessInfo().getRecord_ID();
|
||||||
|
// check if the editor is running from system or client (tab customization)
|
||||||
|
if (Table_ID == MUserDefTab.Table_ID)
|
||||||
|
{
|
||||||
|
MUserDefTab udt = new MUserDefTab(Env.getCtx(), Record_ID, null);
|
||||||
|
|
||||||
|
if (udt.getAD_UserDef_Win().getAD_Language() != null && !udt.getAD_UserDef_Win().getAD_Language().equals(Env.getAD_Language(Env.getCtx())))
|
||||||
|
{
|
||||||
|
FDialog.error(m_WindowNo, "TabEditorWrongLanguage");
|
||||||
|
tabform.detach();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Record_ID = udt.getAD_Tab_ID();
|
||||||
|
isSystem = false;
|
||||||
|
AD_UserDef_Tab_ID = tabform.getProcessInfo().getRecord_ID();
|
||||||
|
}
|
||||||
|
initMFields(tabform.getWindowNo(), Record_ID);
|
||||||
dynList();
|
dynList();
|
||||||
jbInit();
|
jbInit();
|
||||||
LayoutUtils.sendDeferLayoutEvent(mainLayout, 100);
|
LayoutUtils.sendDeferLayoutEvent(mainLayout, 100);
|
||||||
|
@ -185,7 +215,7 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
|
|
||||||
int numCols = getNumColumns();
|
int numCols = getNumColumns();
|
||||||
if (numCols <= 0) {
|
if (numCols <= 0) {
|
||||||
numCols=4;
|
numCols = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
// set size in percentage per column leaving a MARGIN on right
|
// set size in percentage per column leaving a MARGIN on right
|
||||||
|
@ -193,7 +223,7 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
form.appendChild(columns);
|
form.appendChild(columns);
|
||||||
int equalWidth = 98 / numCols;
|
int equalWidth = 98 / numCols;
|
||||||
|
|
||||||
for (int h=0;h<numCols;h++){
|
for (int h = 0; h < numCols; h++) {
|
||||||
Column col = new Column();
|
Column col = new Column();
|
||||||
ZKUpdateUtil.setWidth(col, equalWidth + "%");
|
ZKUpdateUtil.setWidth(col, equalWidth + "%");
|
||||||
columns.appendChild(col);
|
columns.appendChild(col);
|
||||||
|
@ -211,13 +241,17 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
if (!gridField.isDisplayed() || gridField.isToolbarOnlyButton())
|
if (!gridField.isDisplayed() || gridField.isToolbarOnlyButton())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
// when the field is at client level reload with customization
|
||||||
|
if (!isSystem && !field.is_Changed())
|
||||||
|
field = loadUserDefField(field);
|
||||||
|
|
||||||
// field group
|
// field group
|
||||||
String fieldGroup = gridField.getFieldGroup();
|
String fieldGroup = gridField.getFieldGroup();
|
||||||
if (!Util.isEmpty(fieldGroup) && !fieldGroup.equals(currentFieldGroup)) // group changed
|
if (!Util.isEmpty(fieldGroup) && !fieldGroup.equals(currentFieldGroup)) // group changed
|
||||||
{
|
{
|
||||||
currentFieldGroup = fieldGroup;
|
currentFieldGroup = fieldGroup;
|
||||||
|
|
||||||
while(numCols - actualxpos + 1 > 0) {
|
while (numCols - actualxpos + 1 > 0) {
|
||||||
row.appendCellChild(createSpacer(), 1);
|
row.appendCellChild(createSpacer(), 1);
|
||||||
setLastCellProps(row.getLastCell(), actualxpos, field.getSeqNo());
|
setLastCellProps(row.getLastCell(), actualxpos, field.getSeqNo());
|
||||||
actualxpos++;
|
actualxpos++;
|
||||||
|
@ -248,7 +282,7 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
Group rowg = new Group(fieldGroup);
|
Group rowg = new Group(fieldGroup);
|
||||||
Cell cell = (Cell) rowg.getFirstChild();
|
Cell cell = (Cell) rowg.getFirstChild();
|
||||||
cell.setSclass("z-group-inner");
|
cell.setSclass("z-group-inner");
|
||||||
cell.setColspan(numCols+1);
|
cell.setColspan(numCols + 1);
|
||||||
// rowg.appendChild(cell);
|
// rowg.appendChild(cell);
|
||||||
if (X_AD_FieldGroup.FIELDGROUPTYPE_Tab.equals(gridField.getFieldGroupType()) || gridField.getIsCollapsedByDefault())
|
if (X_AD_FieldGroup.FIELDGROUPTYPE_Tab.equals(gridField.getFieldGroupType()) || gridField.getIsCollapsedByDefault())
|
||||||
{
|
{
|
||||||
|
@ -262,10 +296,10 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
actualxpos = 0;
|
actualxpos = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//normal field
|
// normal field
|
||||||
if (gridField.getXPosition() <= actualxpos) {
|
if (gridField.getXPosition() <= actualxpos) {
|
||||||
// Fill right part of the row with spacers until number of columns
|
// Fill right part of the row with spacers until number of columns
|
||||||
while(numCols - actualxpos + 1 > 0) {
|
while (numCols - actualxpos + 1 > 0) {
|
||||||
row.appendCellChild(createSpacer(), 1);
|
row.appendCellChild(createSpacer(), 1);
|
||||||
setLastCellProps(row.getLastCell(), actualxpos, field.getSeqNo());
|
setLastCellProps(row.getLastCell(), actualxpos, field.getSeqNo());
|
||||||
actualxpos++;
|
actualxpos++;
|
||||||
|
@ -274,21 +308,21 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
rows.appendChild(row);
|
rows.appendChild(row);
|
||||||
if (rowList != null)
|
if (rowList != null)
|
||||||
rowList.add(row);
|
rowList.add(row);
|
||||||
row=new Row();
|
row = new Row();
|
||||||
actualxpos = 0;
|
actualxpos = 0;
|
||||||
}
|
}
|
||||||
// Fill left part of the field
|
// Fill left part of the field
|
||||||
if (gridField.getXPosition()-1 - actualxpos > 0) {
|
if (gridField.getXPosition() - 1 - actualxpos > 0) {
|
||||||
row.appendCellChild(createSpacer(), gridField.getXPosition()-1 - actualxpos);
|
row.appendCellChild(createSpacer(), gridField.getXPosition() - 1 - actualxpos);
|
||||||
setLastCellProps(row.getLastCell(), actualxpos, field.getSeqNo());
|
setLastCellProps(row.getLastCell(), actualxpos, field.getSeqNo());
|
||||||
}
|
}
|
||||||
boolean paintLabel = ! (gridField.getDisplayType() == DisplayType.Button || gridField.getDisplayType() == DisplayType.YesNo || gridField.isFieldOnly());
|
boolean paintLabel = ! (gridField.getDisplayType() == DisplayType.Button || gridField.getDisplayType() == DisplayType.YesNo || gridField.isFieldOnly());
|
||||||
if (gridField.isHeading())
|
if (gridField.isHeading())
|
||||||
actualxpos = gridField.getXPosition();
|
actualxpos = gridField.getXPosition();
|
||||||
else
|
else
|
||||||
actualxpos = gridField.getXPosition() + gridField.getColumnSpan()-1 + (paintLabel ? 1 : 0);
|
actualxpos = gridField.getXPosition() + gridField.getColumnSpan() - 1 + (paintLabel ? 1 : 0);
|
||||||
|
|
||||||
if (! gridField.isHeading()) {
|
if (!gridField.isHeading()) {
|
||||||
|
|
||||||
WEditor editor = WebEditorFactory.getEditor(null, gridField, false);
|
WEditor editor = WebEditorFactory.getEditor(null, gridField, false);
|
||||||
|
|
||||||
|
@ -311,20 +345,20 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
div.appendChild(label);
|
div.appendChild(label);
|
||||||
if (label.getDecorator() != null)
|
if (label.getDecorator() != null)
|
||||||
div.appendChild(label.getDecorator());
|
div.appendChild(label.getDecorator());
|
||||||
row.appendCellChild(div,1);
|
row.appendCellChild(div, 1);
|
||||||
setLastCellProps(row.getLastCell(), gridField);
|
setLastCellProps(row.getLastCell(), gridField);
|
||||||
}
|
}
|
||||||
row.appendCellChild(editor.getComponent(), gridField.getColumnSpan());
|
row.appendCellChild(editor.getComponent(), gridField.getColumnSpan());
|
||||||
setLastCellProps(row.getLastCell(), gridField);
|
setLastCellProps(row.getLastCell(), gridField);
|
||||||
|
|
||||||
//stretch component to fill grid cell
|
// stretch component to fill grid cell
|
||||||
editor.fillHorizontal();
|
editor.fillHorizontal();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // just heading
|
else // just heading
|
||||||
{
|
{
|
||||||
//display just a label if we are "heading only"
|
// display just a label if we are "heading only"
|
||||||
Label label = new Label(gridField.getHeader());
|
Label label = new Label(gridField.getHeader());
|
||||||
Div div = new Div();
|
Div div = new Div();
|
||||||
div.setStyle("text-align: center;");
|
div.setStyle("text-align: center;");
|
||||||
|
@ -336,7 +370,7 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
lastseq = field.getSeqNo();
|
lastseq = field.getSeqNo();
|
||||||
}
|
}
|
||||||
|
|
||||||
while(numCols - actualxpos + 1 > 0) {
|
while (numCols - actualxpos + 1 > 0) {
|
||||||
row.appendCellChild(createSpacer(), 1);
|
row.appendCellChild(createSpacer(), 1);
|
||||||
lastseq = lastseq + 10;
|
lastseq = lastseq + 10;
|
||||||
// make every empty space droppable at the end
|
// make every empty space droppable at the end
|
||||||
|
@ -361,7 +395,7 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
private void setLastCellProps(Cell lastCell, int actualxpos, int seqNo) {
|
private void setLastCellProps(Cell lastCell, int actualxpos, int seqNo) {
|
||||||
lastCell.setDroppable("true");
|
lastCell.setDroppable("true");
|
||||||
lastCell.addEventListener(Events.ON_DROP, this);
|
lastCell.addEventListener(Events.ON_DROP, this);
|
||||||
int value = (actualxpos+1) * POSSEQMULTIPLIER + seqNo;
|
int value = (actualxpos + 1) * POSSEQMULTIPLIER + seqNo;
|
||||||
mapEmptyCellField.put(lastCell, value);
|
mapEmptyCellField.put(lastCell, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -370,7 +404,7 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getNumColumns() {
|
private int getNumColumns() {
|
||||||
int maxcol=0;
|
int maxcol = 0;
|
||||||
for (GridField gridField : getGridFields())
|
for (GridField gridField : getGridFields())
|
||||||
{
|
{
|
||||||
if (!gridField.isDisplayed() || gridField.isToolbarOnlyButton())
|
if (!gridField.isDisplayed() || gridField.isToolbarOnlyButton())
|
||||||
|
@ -398,9 +432,12 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
//
|
//
|
||||||
Columns columns = new Columns();
|
Columns columns = new Columns();
|
||||||
gridView.appendChild(columns);
|
gridView.appendChild(columns);
|
||||||
|
gridView.setVflex(true);
|
||||||
|
gridView.setStyle("overflow-h: hidden");
|
||||||
//
|
//
|
||||||
Column column = new Column();
|
Column column = new Column();
|
||||||
columns.appendChild(column);
|
columns.appendChild(column);
|
||||||
|
|
||||||
ZKUpdateUtil.setHflex(column, "min");
|
ZKUpdateUtil.setHflex(column, "min");
|
||||||
column.setAlign("right");
|
column.setAlign("right");
|
||||||
|
|
||||||
|
@ -414,28 +451,74 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
|
|
||||||
row = new Row();
|
row = new Row();
|
||||||
Group group = new Group(Msg.getMsg(Env.getCtx(), "Property"));
|
Group group = new Group(Msg.getMsg(Env.getCtx(), "Property"));
|
||||||
|
//group.setStyle("padding-right: 15px");
|
||||||
Cell cell = (Cell) group.getFirstChild();
|
Cell cell = (Cell) group.getFirstChild();
|
||||||
cell.setSclass("z-group-inner");
|
cell.setSclass("z-group-inner");
|
||||||
cell.setColspan(2);
|
cell.setColspan(2);
|
||||||
group.setOpen(true);
|
group.setOpen(true);
|
||||||
|
|
||||||
rows.appendChild(group);
|
rows.appendChild(group);
|
||||||
|
|
||||||
row = new Row();
|
row = new Row();
|
||||||
Label labelName = new Label(Msg.getElement(Env.getCtx(), MField.COLUMNNAME_Name));
|
Label labelName = new Label(Msg.getElement(Env.getCtx(), MField.COLUMNNAME_Name));
|
||||||
editorName = new WStringEditor(MField.COLUMNNAME_Name, false, true, false, 0, 0, null, null);
|
editorName = new WStringEditor(MField.COLUMNNAME_Name, false, false, true, 1000, 1000, null, null);
|
||||||
ZKUpdateUtil.setHflex(((WStringEditor) editorName).getComponent(), "1");
|
ZKUpdateUtil.setHflex(((WStringEditor) editorName).getComponent(), "1");
|
||||||
row.appendChild(labelName.rightAlign());
|
row.appendChild(labelName.rightAlign());
|
||||||
row.appendChild(editorName.getComponent());
|
row.appendChild(editorName.getComponent());
|
||||||
// editorName.addValueChangeListener(this);
|
editorName.addValueChangeListener(this);
|
||||||
|
row.setGroup(group);
|
||||||
|
rows.appendChild(row);
|
||||||
|
|
||||||
|
row = new Row();
|
||||||
|
Label labelDescription = new Label(Msg.getElement(Env.getCtx(), MField.COLUMNNAME_Description));
|
||||||
|
editorDescription = new WStringEditor(MField.COLUMNNAME_Description, false, false, false, 1000, 1000, null,
|
||||||
|
null);
|
||||||
|
((Textbox) editorDescription.getComponent()).setMultiline(true);
|
||||||
|
row.appendChild(labelDescription.rightAlign());
|
||||||
|
row.appendChild(editorDescription.getComponent());
|
||||||
|
//ZKUpdateUtil.setWidth((HtmlBasedComponent) row.getLastChild(), "100%");
|
||||||
|
//ZKUpdateUtil.setHeight((HtmlBasedComponent) row.getLastChild(), "80px");
|
||||||
|
editorDescription.addValueChangeListener(this);
|
||||||
|
row.setGroup(group);
|
||||||
|
rows.appendChild(row);
|
||||||
|
|
||||||
|
row = new Row();
|
||||||
|
Label labelHelp = new Label(Msg.getElement(Env.getCtx(), MField.COLUMNNAME_Help));
|
||||||
|
editorHelp = new WStringEditor(MField.COLUMNNAME_Help, false, false, false, 0, 0, null, null);
|
||||||
|
((Textbox) editorHelp.getComponent()).setMultiline(true);
|
||||||
|
row.appendChild(labelHelp.rightAlign());
|
||||||
|
row.appendChild(editorHelp.getComponent());
|
||||||
|
//ZKUpdateUtil.setWidth((HtmlBasedComponent) row.getLastChild(), "100%");
|
||||||
|
//ZKUpdateUtil.setHeight((HtmlBasedComponent) row.getLastChild(), "80px");
|
||||||
|
editorHelp.addValueChangeListener(this);
|
||||||
|
row.setGroup(group);
|
||||||
|
rows.appendChild(row);
|
||||||
|
|
||||||
|
row = new Row();
|
||||||
|
Label labelPlaceholder = new Label(Msg.getElement(Env.getCtx(), MField.COLUMNNAME_Placeholder));
|
||||||
|
editorPlaceholder = new WStringEditor(MField.COLUMNNAME_Placeholder, false, false, true, 1000, 1000, null,
|
||||||
|
null);
|
||||||
|
ZKUpdateUtil.setHflex(((WStringEditor) editorPlaceholder).getComponent(), "1");
|
||||||
|
row.appendChild(labelPlaceholder.rightAlign());
|
||||||
|
row.appendChild(editorPlaceholder.getComponent());
|
||||||
|
editorPlaceholder.addValueChangeListener(this);
|
||||||
|
row.setGroup(group);
|
||||||
|
rows.appendChild(row);
|
||||||
|
|
||||||
|
row = new Row();
|
||||||
|
Label labelColumn = new Label(Msg.getElement(Env.getCtx(), MField.COLUMNNAME_AD_Column_ID));
|
||||||
|
editorColumn = new WStringEditor(MField.COLUMNNAME_AD_Column_ID, false, true, false, 0, 0, null, null);
|
||||||
|
row.appendChild(labelColumn.rightAlign());
|
||||||
|
row.appendChild(editorColumn.getComponent());
|
||||||
row.setGroup(group);
|
row.setGroup(group);
|
||||||
rows.appendChild(row);
|
rows.appendChild(row);
|
||||||
|
|
||||||
row = new Row();
|
row = new Row();
|
||||||
Label labelIsDisplayed = new Label(Msg.getElement(Env.getCtx(), MField.COLUMNNAME_IsDisplayed));
|
Label labelIsDisplayed = new Label(Msg.getElement(Env.getCtx(), MField.COLUMNNAME_IsDisplayed));
|
||||||
editorIsDisplayed = new WYesNoEditor(MField.COLUMNNAME_IsDisplayed, "", labelIsDisplayed.getValue(), false, true, false);
|
editorIsDisplayed = new WYesNoEditor(MField.COLUMNNAME_IsDisplayed, "", labelIsDisplayed.getValue(), false, false, false);
|
||||||
row.appendChild(labelIsDisplayed.rightAlign());
|
row.appendChild(labelIsDisplayed.rightAlign());
|
||||||
row.appendChild(editorIsDisplayed.getComponent());
|
row.appendChild(editorIsDisplayed.getComponent());
|
||||||
// editorIsDisplayed.addValueChangeListener(this);
|
editorIsDisplayed.addValueChangeListener(this);
|
||||||
row.setGroup(group);
|
row.setGroup(group);
|
||||||
rows.appendChild(row);
|
rows.appendChild(row);
|
||||||
|
|
||||||
|
@ -444,13 +527,13 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
editorSeqNo = new WNumberEditor(MField.COLUMNNAME_SeqNo, false, true, false, DisplayType.Integer, labelSeqNo.getValue());
|
editorSeqNo = new WNumberEditor(MField.COLUMNNAME_SeqNo, false, true, false, DisplayType.Integer, labelSeqNo.getValue());
|
||||||
row.appendChild(labelSeqNo.rightAlign());
|
row.appendChild(labelSeqNo.rightAlign());
|
||||||
row.appendChild(editorSeqNo.getComponent());
|
row.appendChild(editorSeqNo.getComponent());
|
||||||
// editorSeqNo.addValueChangeListener(this);
|
// editorSeqNo.addValueChangeListener(this);
|
||||||
row.setGroup(group);
|
row.setGroup(group);
|
||||||
rows.appendChild(row);
|
rows.appendChild(row);
|
||||||
|
|
||||||
row = new Row();
|
row = new Row();
|
||||||
Label labelAD_FieldGroup_ID = new Label(Msg.getElement(Env.getCtx(), MField.COLUMNNAME_AD_FieldGroup_ID));
|
Label labelAD_FieldGroup_ID = new Label(Msg.getElement(Env.getCtx(), MField.COLUMNNAME_AD_FieldGroup_ID));
|
||||||
MLookup lookup = MLookupFactory.get (Env.getCtx(), tabform.getWindowNo(), 0, COLUMN_AD_FIELD_AD_FIELDGROUP_ID, DisplayType.TableDir);
|
MLookup lookup = MLookupFactory.get(Env.getCtx(), tabform.getWindowNo(), 0, COLUMN_AD_FIELD_AD_FIELDGROUP_ID, DisplayType.TableDir);
|
||||||
editorAD_FieldGroup_ID = new WTableDirEditor(MField.COLUMNNAME_AD_FieldGroup_ID, false, false, true, lookup);
|
editorAD_FieldGroup_ID = new WTableDirEditor(MField.COLUMNNAME_AD_FieldGroup_ID, false, false, true, lookup);
|
||||||
ZKUpdateUtil.setHflex(((WTableDirEditor) editorAD_FieldGroup_ID).getComponent(), "1");
|
ZKUpdateUtil.setHflex(((WTableDirEditor) editorAD_FieldGroup_ID).getComponent(), "1");
|
||||||
row.appendChild(labelAD_FieldGroup_ID.rightAlign());
|
row.appendChild(labelAD_FieldGroup_ID.rightAlign());
|
||||||
|
@ -486,6 +569,54 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
row.setGroup(group);
|
row.setGroup(group);
|
||||||
rows.appendChild(row);
|
rows.appendChild(row);
|
||||||
|
|
||||||
|
row = new Row();
|
||||||
|
Label labelDisplayLogic = new Label(Msg.getElement(Env.getCtx(), MField.COLUMNNAME_DisplayLogic));
|
||||||
|
editorDisplayLogic = new WStringEditor(MField.COLUMNNAME_DisplayLogic, false, false, true, 1000, 1000, null,
|
||||||
|
null);
|
||||||
|
((Textbox) editorDisplayLogic.getComponent()).setMultiline(true);
|
||||||
|
row.appendChild(labelDisplayLogic.rightAlign());
|
||||||
|
row.appendChild(editorDisplayLogic.getComponent());
|
||||||
|
//ZKUpdateUtil.setWidth((HtmlBasedComponent) row.getLastChild(), "100%");
|
||||||
|
//ZKUpdateUtil.setHeight((HtmlBasedComponent) row.getLastChild(), "80px");
|
||||||
|
editorDisplayLogic.addValueChangeListener(this);
|
||||||
|
row.setGroup(group);
|
||||||
|
rows.appendChild(row);
|
||||||
|
|
||||||
|
row = new Row();
|
||||||
|
Label labelMandatoryLogic = new Label(Msg.getElement(Env.getCtx(), MField.COLUMNNAME_MandatoryLogic));
|
||||||
|
editorMandatoryLogic = new WStringEditor(MField.COLUMNNAME_MandatoryLogic, false, false, true, 1000, 1000, null,
|
||||||
|
null);
|
||||||
|
((Textbox) editorMandatoryLogic.getComponent()).setMultiline(true);
|
||||||
|
row.appendChild(labelMandatoryLogic.rightAlign());
|
||||||
|
row.appendChild(editorMandatoryLogic.getComponent());
|
||||||
|
//ZKUpdateUtil.setWidth((HtmlBasedComponent) row.getLastChild(), "100%");
|
||||||
|
//ZKUpdateUtil.setHeight((HtmlBasedComponent) row.getLastChild(), "80px");
|
||||||
|
editorMandatoryLogic.addValueChangeListener(this);
|
||||||
|
row.setGroup(group);
|
||||||
|
rows.appendChild(row);
|
||||||
|
|
||||||
|
row = new Row();
|
||||||
|
Label labelReadOnlyLogic = new Label(Msg.getElement(Env.getCtx(), MField.COLUMNNAME_ReadOnlyLogic));
|
||||||
|
editorReadOnlyLogic = new WStringEditor(MField.COLUMNNAME_ReadOnlyLogic, false, false, true, 1000, 1000, null,
|
||||||
|
null);
|
||||||
|
((Textbox) editorReadOnlyLogic.getComponent()).setMultiline(true);
|
||||||
|
row.appendChild(labelReadOnlyLogic.rightAlign());
|
||||||
|
row.appendChild(editorReadOnlyLogic.getComponent());
|
||||||
|
//ZKUpdateUtil.setWidth((HtmlBasedComponent) row.getLastChild(), "100%");
|
||||||
|
//ZKUpdateUtil.setHeight((HtmlBasedComponent) row.getLastChild(), "80px");
|
||||||
|
editorReadOnlyLogic.addValueChangeListener(this);
|
||||||
|
row.setGroup(group);
|
||||||
|
rows.appendChild(row);
|
||||||
|
|
||||||
|
row = new Row();
|
||||||
|
Label labelIsReadOnly = new Label(Msg.getElement(Env.getCtx(), MField.COLUMNNAME_IsReadOnly));
|
||||||
|
editorIsReadOnly = new WYesNoEditor(MField.COLUMNNAME_IsReadOnly, "", "", true, false, true);
|
||||||
|
row.appendChild(labelIsReadOnly.rightAlign());
|
||||||
|
row.appendChild(editorIsReadOnly.getComponent());
|
||||||
|
editorIsReadOnly.addValueChangeListener(this);
|
||||||
|
row.setGroup(group);
|
||||||
|
rows.appendChild(row);
|
||||||
|
|
||||||
row = new Row();
|
row = new Row();
|
||||||
Separator esep = new Separator("horizontal");
|
Separator esep = new Separator("horizontal");
|
||||||
esep.setSpacing("10px");
|
esep.setSpacing("10px");
|
||||||
|
@ -512,7 +643,7 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
tabform.setMaximizable(true);
|
tabform.setMaximizable(true);
|
||||||
ZKUpdateUtil.setWidth(tabform, "95%");
|
ZKUpdateUtil.setWidth(tabform, "95%");
|
||||||
ZKUpdateUtil.setHeight(tabform, "95%");
|
ZKUpdateUtil.setHeight(tabform, "95%");
|
||||||
tabform.appendChild (mainLayout);
|
tabform.appendChild(mainLayout);
|
||||||
LayoutUtils.addSclass("tab-editor-form-content", mainLayout);
|
LayoutUtils.addSclass("tab-editor-form-content", mainLayout);
|
||||||
tabform.setBorder("normal");
|
tabform.setBorder("normal");
|
||||||
|
|
||||||
|
@ -525,6 +656,8 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
mainLayout.appendChild(east);
|
mainLayout.appendChild(east);
|
||||||
east.appendChild(propGrid);
|
east.appendChild(propGrid);
|
||||||
ZKUpdateUtil.setWidth(east, "320px");
|
ZKUpdateUtil.setWidth(east, "320px");
|
||||||
|
east.setCollapsible(true);
|
||||||
|
east.setSplittable(true);
|
||||||
|
|
||||||
ListHead visibleHead = new ListHead();
|
ListHead visibleHead = new ListHead();
|
||||||
visibleHead.setParent(visible);
|
visibleHead.setParent(visible);
|
||||||
|
@ -628,7 +761,7 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
if (mult == -1 && field.getColumnSpan() <= 1) {
|
if (mult == -1 && field.getColumnSpan() <= 1) {
|
||||||
// shrinking when colspan = 1 is not valid
|
// shrinking when colspan = 1 is not valid
|
||||||
} else {
|
} else {
|
||||||
field.setColumnSpan(field.getColumnSpan()+mult);
|
field.setColumnSpan(field.getColumnSpan() + mult);
|
||||||
}
|
}
|
||||||
// select the field on the visible list and set focus
|
// select the field on the visible list and set focus
|
||||||
for (Listitem item : visible.getItems()) {
|
for (Listitem item : visible.getItems()) {
|
||||||
|
@ -644,7 +777,7 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (e instanceof DropEvent ) {
|
else if (e instanceof DropEvent) {
|
||||||
DropEvent me = (DropEvent) e;
|
DropEvent me = (DropEvent) e;
|
||||||
ListItem startItem = null;
|
ListItem startItem = null;
|
||||||
if (me.getDragged() instanceof ListItem) {
|
if (me.getDragged() instanceof ListItem) {
|
||||||
|
@ -664,7 +797,7 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
int actualxpos = posseq / POSSEQMULTIPLIER;
|
int actualxpos = posseq / POSSEQMULTIPLIER;
|
||||||
int seqno = posseq - (actualxpos * POSSEQMULTIPLIER);
|
int seqno = posseq - (actualxpos * POSSEQMULTIPLIER);
|
||||||
MField field = getMField((Integer) startItem.getValue());
|
MField field = getMField((Integer) startItem.getValue());
|
||||||
field.setSeqNo(seqno-5);
|
field.setSeqNo(seqno - 5);
|
||||||
field.setIsDisplayed(true);
|
field.setIsDisplayed(true);
|
||||||
field.setXPosition(actualxpos);
|
field.setXPosition(actualxpos);
|
||||||
resortArrays();
|
resortArrays();
|
||||||
|
@ -696,7 +829,7 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
// item moved from invisible to visible
|
// item moved from invisible to visible
|
||||||
MField field = getMField((Integer) startItem.getValue());
|
MField field = getMField((Integer) startItem.getValue());
|
||||||
MField fieldTo = getMField((Integer) endItem.getValue());
|
MField fieldTo = getMField((Integer) endItem.getValue());
|
||||||
field.setSeqNo(fieldTo.getSeqNo()-5);
|
field.setSeqNo(fieldTo.getSeqNo() - 5);
|
||||||
field.setIsDisplayed(true);
|
field.setIsDisplayed(true);
|
||||||
field.setXPosition(fieldTo.getXPosition());
|
field.setXPosition(fieldTo.getXPosition());
|
||||||
resortArrays();
|
resortArrays();
|
||||||
|
@ -711,7 +844,7 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
// item moved from visible to visible - reorder
|
// item moved from visible to visible - reorder
|
||||||
MField field = getMField((Integer) startItem.getValue());
|
MField field = getMField((Integer) startItem.getValue());
|
||||||
MField fieldTo = getMField((Integer) endItem.getValue());
|
MField fieldTo = getMField((Integer) endItem.getValue());
|
||||||
field.setSeqNo(fieldTo.getSeqNo()-5);
|
field.setSeqNo(fieldTo.getSeqNo() - 5);
|
||||||
field.setIsDisplayed(true);
|
field.setIsDisplayed(true);
|
||||||
field.setXPosition(fieldTo.getXPosition());
|
field.setXPosition(fieldTo.getXPosition());
|
||||||
resortArrays();
|
resortArrays();
|
||||||
|
@ -752,7 +885,7 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
private void setBackgroundField(MField field) {
|
private void setBackgroundField(MField field) {
|
||||||
Iterator<Entry<Cell, GridField>> it = mapCellField.entrySet().iterator();
|
Iterator<Entry<Cell, GridField>> it = mapCellField.entrySet().iterator();
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
Map.Entry<Cell, GridField> pairs = (Map.Entry<Cell, GridField>)it.next();
|
Map.Entry<Cell, GridField> pairs = (Map.Entry<Cell, GridField>) it.next();
|
||||||
Cell cell = pairs.getKey();
|
Cell cell = pairs.getKey();
|
||||||
GridField gridField = pairs.getValue();
|
GridField gridField = pairs.getValue();
|
||||||
if (gridField.getAD_Field_ID() == field.getAD_Field_ID()) {
|
if (gridField.getAD_Field_ID() == field.getAD_Field_ID()) {
|
||||||
|
@ -762,11 +895,17 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setProperties(MField field) {
|
private void setProperties(MField field) {
|
||||||
|
String displayLogic = field.getDisplayLogic() == null ? "" : field.getDisplayLogic();
|
||||||
|
String mandatoryLogic = field.getMandatoryLogic() == null ? "" : field.getMandatoryLogic();
|
||||||
|
String readOnlyLogic = field.getReadOnlyLogic() == null ? "" : field.getReadOnlyLogic();
|
||||||
|
|
||||||
editorName.setValue(field.getName());
|
editorName.setValue(field.getName());
|
||||||
|
editorDescription.setValue(field.getDescription());
|
||||||
|
editorHelp.setValue(field.getHelp());
|
||||||
|
editorPlaceholder.setValue(field.getPlaceholder());
|
||||||
editorSeqNo.setValue(field.getSeqNo());
|
editorSeqNo.setValue(field.getSeqNo());
|
||||||
editorIsDisplayed.setValue(field.isDisplayed());
|
editorIsDisplayed.setValue(field.isDisplayed());
|
||||||
if (field.getAD_FieldGroup_ID() > 0)
|
if (field.getAD_FieldGroup_ID() > 0)
|
||||||
|
@ -776,20 +915,40 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
editorXPosition.setValue(field.getXPosition());
|
editorXPosition.setValue(field.getXPosition());
|
||||||
editorColumnSpan.setValue(field.getColumnSpan());
|
editorColumnSpan.setValue(field.getColumnSpan());
|
||||||
editorNumLines.setValue(field.getNumLines());
|
editorNumLines.setValue(field.getNumLines());
|
||||||
|
editorDisplayLogic.setValue(displayLogic);
|
||||||
|
editorMandatoryLogic.setValue(mandatoryLogic);
|
||||||
|
editorReadOnlyLogic.setValue(readOnlyLogic);
|
||||||
|
editorIsReadOnly.setValue(field.isReadOnly());
|
||||||
|
editorColumn.setValue(MColumn.getColumnName(Env.getCtx(), field.getAD_Column_ID()));
|
||||||
|
|
||||||
GridField gridField = getGridField(field);
|
GridField gridField = getGridField(field);
|
||||||
String fieldGroup = "";
|
String fieldGroup = "";
|
||||||
String fieldGroupType = "";
|
String fieldGroupType = "";
|
||||||
if (field.getAD_FieldGroup_ID() > 0) {
|
if (field.getAD_FieldGroup_ID() > 0) {
|
||||||
|
if (isBaseLang)
|
||||||
|
{
|
||||||
fieldGroup = field.getAD_FieldGroup().getName();
|
fieldGroup = field.getAD_FieldGroup().getName();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fieldGroup = ((X_AD_FieldGroup) field.getAD_FieldGroup()).get_Translation(X_AD_FieldGroup.COLUMNNAME_Name);
|
||||||
|
}
|
||||||
fieldGroupType = field.getAD_FieldGroup().getFieldGroupType();
|
fieldGroupType = field.getAD_FieldGroup().getFieldGroupType();
|
||||||
}
|
}
|
||||||
|
gridField.getVO().Header = field.getName();
|
||||||
|
gridField.getVO().Description = field.getDescription();
|
||||||
|
gridField.getVO().Help = field.getHelp();
|
||||||
|
gridField.getVO().Placeholder = field.getPlaceholder();
|
||||||
gridField.getVO().IsDisplayed = field.isDisplayed();
|
gridField.getVO().IsDisplayed = field.isDisplayed();
|
||||||
gridField.getVO().FieldGroup = fieldGroup;
|
gridField.getVO().FieldGroup = fieldGroup;
|
||||||
gridField.getVO().FieldGroupType = fieldGroupType;
|
gridField.getVO().FieldGroupType = fieldGroupType;
|
||||||
gridField.getVO().XPosition = field.getXPosition();
|
gridField.getVO().XPosition = field.getXPosition();
|
||||||
gridField.getVO().ColumnSpan = field.getColumnSpan();
|
gridField.getVO().ColumnSpan = field.getColumnSpan();
|
||||||
gridField.getVO().NumLines = field.getNumLines();
|
gridField.getVO().NumLines = field.getNumLines();
|
||||||
|
gridField.getVO().DisplayLogic = displayLogic;
|
||||||
|
gridField.getVO().MandatoryLogic = mandatoryLogic;
|
||||||
|
gridField.getVO().ReadOnlyLogic = readOnlyLogic;
|
||||||
|
gridField.getVO().IsReadOnly = field.isReadOnly();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -798,7 +957,7 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
return tabform;
|
return tabform;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateLists(MField focusField){
|
private void updateLists(MField focusField) {
|
||||||
visible.removeAllItems();
|
visible.removeAllItems();
|
||||||
invisible.removeAllItems();
|
invisible.removeAllItems();
|
||||||
|
|
||||||
|
@ -807,6 +966,11 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
GridField gridField = getGridField(field);
|
GridField gridField = getGridField(field);
|
||||||
if (!field.isActive() || gridField.isToolbarOnlyButton())
|
if (!field.isActive() || gridField.isToolbarOnlyButton())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
// when the field is at client level reload with customization
|
||||||
|
if (!isSystem && !field.is_Changed())
|
||||||
|
field = loadUserDefField(field);
|
||||||
|
|
||||||
KeyNamePair pair = new KeyNamePair(field.getAD_Field_ID(), field.getName());
|
KeyNamePair pair = new KeyNamePair(field.getAD_Field_ID(), field.getName());
|
||||||
if (field.isDisplayed()) {
|
if (field.isDisplayed()) {
|
||||||
visible.addItem(pair);
|
visible.addItem(pair);
|
||||||
|
@ -827,21 +991,53 @@ public class WTabEditor extends TabEditor implements IFormController, EventListe
|
||||||
public void valueChange(ValueChangeEvent e) {
|
public void valueChange(ValueChangeEvent e) {
|
||||||
// changed a value on the properties editors
|
// changed a value on the properties editors
|
||||||
MField field = getActiveMField();
|
MField field = getActiveMField();
|
||||||
|
// when the field is at client level reload with customization
|
||||||
|
if (!isSystem && !field.is_Changed())
|
||||||
|
field = loadUserDefField(field);
|
||||||
|
|
||||||
if (field != null) {
|
if (field != null) {
|
||||||
String propertyName = e.getPropertyName();
|
String propertyName = e.getPropertyName();
|
||||||
int intvalue = 0;
|
int intValue = 0;
|
||||||
|
String stringValue = "";
|
||||||
|
Boolean booleanValue = false;
|
||||||
if (e.getNewValue() != null)
|
if (e.getNewValue() != null)
|
||||||
intvalue = (Integer) e.getNewValue();
|
{
|
||||||
|
if (String.class.isInstance(e.getNewValue()))
|
||||||
|
stringValue = (String) e.getNewValue();
|
||||||
|
else if (e.getNewValue() instanceof Boolean)
|
||||||
|
booleanValue = (boolean) e.getNewValue();
|
||||||
|
else
|
||||||
|
intValue = (Integer) e.getNewValue();
|
||||||
|
}
|
||||||
|
|
||||||
if (MField.COLUMNNAME_AD_FieldGroup_ID.equals(propertyName)) {
|
if (MField.COLUMNNAME_AD_FieldGroup_ID.equals(propertyName)) {
|
||||||
field.setAD_FieldGroup_ID(intvalue);
|
field.setAD_FieldGroup_ID(intValue);
|
||||||
} else if (MField.COLUMNNAME_XPosition.equals(propertyName)) {
|
} else if (MField.COLUMNNAME_XPosition.equals(propertyName)) {
|
||||||
field.setXPosition(intvalue);
|
field.setXPosition(intValue);
|
||||||
} else if (MField.COLUMNNAME_ColumnSpan.equals(propertyName)) {
|
} else if (MField.COLUMNNAME_ColumnSpan.equals(propertyName)) {
|
||||||
int prevcolspan = field.getColumnSpan();
|
int prevcolspan = field.getColumnSpan();
|
||||||
if (!field.set_ValueOfColumnReturningBoolean(MField.COLUMNNAME_ColumnSpan, intvalue))
|
if (!field.set_ValueOfColumnReturningBoolean(MField.COLUMNNAME_ColumnSpan, intValue))
|
||||||
field.setColumnSpan(prevcolspan);
|
field.setColumnSpan(prevcolspan);
|
||||||
} else if (MField.COLUMNNAME_NumLines.equals(propertyName)) {
|
} else if (MField.COLUMNNAME_NumLines.equals(propertyName)) {
|
||||||
field.setNumLines(intvalue);
|
field.setNumLines(intValue);
|
||||||
|
} else if (MField.COLUMNNAME_DisplayLogic.equals(propertyName)) {
|
||||||
|
field.setDisplayLogic(stringValue);
|
||||||
|
} else if (MField.COLUMNNAME_MandatoryLogic.equals(propertyName)) {
|
||||||
|
field.setMandatoryLogic(stringValue);
|
||||||
|
} else if (MField.COLUMNNAME_ReadOnlyLogic.equals(propertyName)) {
|
||||||
|
field.setReadOnlyLogic(stringValue);
|
||||||
|
} else if (MField.COLUMNNAME_IsReadOnly.equals(propertyName)) {
|
||||||
|
field.setIsReadOnly(booleanValue);
|
||||||
|
} else if (MField.COLUMNNAME_Name.equals(propertyName)) {
|
||||||
|
field.setName(stringValue);
|
||||||
|
} else if (MField.COLUMNNAME_IsDisplayed.equals(propertyName)) {
|
||||||
|
field.setIsDisplayed(booleanValue);
|
||||||
|
} else if (MField.COLUMNNAME_Description.equals(propertyName)) {
|
||||||
|
field.setDescription(stringValue);
|
||||||
|
} else if (MField.COLUMNNAME_Help.equals(propertyName)) {
|
||||||
|
field.setHelp(stringValue);
|
||||||
|
} else if (MField.COLUMNNAME_Placeholder.equals(propertyName)) {
|
||||||
|
field.setPlaceholder(stringValue);
|
||||||
}
|
}
|
||||||
setProperties(field);
|
setProperties(field);
|
||||||
repaintGrid();
|
repaintGrid();
|
||||||
|
|
|
@ -14,17 +14,23 @@
|
||||||
|
|
||||||
package org.compiere.apps.form;
|
package org.compiere.apps.form;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.sql.Timestamp;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.compiere.model.GridField;
|
import org.compiere.model.GridField;
|
||||||
|
import org.compiere.model.I_AD_Field;
|
||||||
import org.compiere.model.MField;
|
import org.compiere.model.MField;
|
||||||
import org.compiere.model.MTab;
|
import org.compiere.model.MTab;
|
||||||
|
import org.compiere.model.MUserDefField;
|
||||||
import org.compiere.util.CLogger;
|
import org.compiere.util.CLogger;
|
||||||
|
import org.compiere.util.DB;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -51,6 +57,12 @@ public class TabEditor
|
||||||
|
|
||||||
private Map<Integer, GridField> mapGridField = new HashMap<Integer, GridField>();
|
private Map<Integer, GridField> mapGridField = new HashMap<Integer, GridField>();
|
||||||
|
|
||||||
|
protected boolean isBaseLang = Env.isBaseLanguage(Env.getCtx(), null);
|
||||||
|
|
||||||
|
protected boolean isSystem = true;
|
||||||
|
|
||||||
|
protected int AD_UserDef_Tab_ID;
|
||||||
|
|
||||||
public List<GridField> getGridFields() {
|
public List<GridField> getGridFields() {
|
||||||
return gridFields;
|
return gridFields;
|
||||||
}
|
}
|
||||||
|
@ -60,6 +72,7 @@ public class TabEditor
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<MField> getMFields() {
|
public List<MField> getMFields() {
|
||||||
|
|
||||||
return fields;
|
return fields;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,6 +83,36 @@ public class TabEditor
|
||||||
gridFields.add(gridField);
|
gridFields.add(gridField);
|
||||||
mapGridField.put(gridField.getAD_Field_ID(), gridField);
|
mapGridField.put(gridField.getAD_Field_ID(), gridField);
|
||||||
MField field = new MField(Env.getCtx(), gridField.getAD_Field_ID(), null);
|
MField field = new MField(Env.getCtx(), gridField.getAD_Field_ID(), null);
|
||||||
|
|
||||||
|
// load translated values and ovewrite field with it
|
||||||
|
if (!isBaseLang)
|
||||||
|
{
|
||||||
|
field.setName(field.get_Translation(MField.COLUMNNAME_Name, Env.getLanguage(Env.getCtx()).getAD_Language(), true));
|
||||||
|
field.setDescription(field.get_Translation(MField.COLUMNNAME_Description, Env.getLanguage(Env.getCtx()).getAD_Language(), true));
|
||||||
|
field.setPlaceholder(field.get_Translation(MField.COLUMNNAME_Placeholder, Env.getLanguage(Env.getCtx()).getAD_Language(), true));
|
||||||
|
field.setHelp(field.get_Translation(MField.COLUMNNAME_Help, Env.getLanguage(Env.getCtx()).getAD_Language(), true));
|
||||||
|
gridField.getVO().Header = field.get_Translation(MField.COLUMNNAME_Name, Env.getLanguage(Env.getCtx()).getAD_Language(), true);
|
||||||
|
gridField.getVO().Description = field.get_Translation(MField.COLUMNNAME_Description, Env.getLanguage(Env.getCtx()).getAD_Language(), true);
|
||||||
|
gridField.getVO().Placeholder = field.get_Translation(MField.COLUMNNAME_Placeholder, Env.getLanguage(Env.getCtx()).getAD_Language(), true);
|
||||||
|
gridField.getVO().Help = field.get_Translation(MField.COLUMNNAME_Help, Env.getLanguage(Env.getCtx()).getAD_Language(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// if not system level load customization values and field with it
|
||||||
|
if (!isSystem) {
|
||||||
|
field = loadUserDefField(field);
|
||||||
|
if (field != null)
|
||||||
|
{
|
||||||
|
gridField.getVO().Header = field.getName();
|
||||||
|
gridField.getVO().Description = field.getDescription();
|
||||||
|
gridField.getVO().Placeholder = field.getPlaceholder();
|
||||||
|
gridField.getVO().Help = field.getHelp();
|
||||||
|
gridField.getVO().NumLines = field.getNumLines();
|
||||||
|
gridField.getVO().XPosition = field.getXPosition();
|
||||||
|
gridField.getVO().ColumnSpan = field.getColumnSpan();
|
||||||
|
gridField.getVO().IsDisplayed = field.isDisplayed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fields.add(field);
|
fields.add(field);
|
||||||
mapField.put(field.getAD_Field_ID(), field);
|
mapField.put(field.getAD_Field_ID(), field);
|
||||||
gridField.getVO().IsReadOnly = true;
|
gridField.getVO().IsReadOnly = true;
|
||||||
|
@ -82,8 +125,14 @@ public class TabEditor
|
||||||
|
|
||||||
public boolean cmd_save() {
|
public boolean cmd_save() {
|
||||||
for (MField field : fields) {
|
for (MField field : fields) {
|
||||||
if (field.isActive())
|
if (field.isActive()) {
|
||||||
|
if (isSystem) {
|
||||||
|
updateTrl(field);
|
||||||
field.saveEx();
|
field.saveEx();
|
||||||
|
} else {
|
||||||
|
saveUserDefField(field);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -93,7 +142,7 @@ public class TabEditor
|
||||||
}
|
}
|
||||||
|
|
||||||
protected GridField getGridField(MField field) {
|
protected GridField getGridField(MField field) {
|
||||||
return mapGridField.get( field.getAD_Field_ID());
|
return mapGridField.get(field.getAD_Field_ID());
|
||||||
}
|
}
|
||||||
|
|
||||||
public MField getActiveMField() {
|
public MField getActiveMField() {
|
||||||
|
@ -119,7 +168,8 @@ public class TabEditor
|
||||||
return compare1.compareTo(compare2);
|
return compare1.compareTo(compare2);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
// only apply the SeqNo increment when running on system level
|
||||||
|
if (isSystem) {
|
||||||
int seq = 10;
|
int seq = 10;
|
||||||
for (MField field : fields) {
|
for (MField field : fields) {
|
||||||
if (field.isDisplayed()) {
|
if (field.isDisplayed()) {
|
||||||
|
@ -129,6 +179,7 @@ public class TabEditor
|
||||||
field.setSeqNo(0);
|
field.setSeqNo(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Collections.sort(gridFields, new Comparator<GridField>() {
|
Collections.sort(gridFields, new Comparator<GridField>() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -149,4 +200,252 @@ public class TabEditor
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load MUserDefField data to MField
|
||||||
|
*
|
||||||
|
* @param field
|
||||||
|
* @return MField
|
||||||
|
*/
|
||||||
|
protected MField loadUserDefField(MField field) {
|
||||||
|
|
||||||
|
if (field == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
MUserDefField userDefField = MUserDefField.get(Env.getCtx(), field.getAD_Field_ID(), m_tab.getAD_Tab_ID(), m_tab.getAD_Window_ID(), true);
|
||||||
|
|
||||||
|
if (userDefField != null) {
|
||||||
|
if (userDefField.getName() != null)
|
||||||
|
field.setName(userDefField.getName());
|
||||||
|
|
||||||
|
if (userDefField.getDescription() != null)
|
||||||
|
field.setDescription(userDefField.getDescription());
|
||||||
|
|
||||||
|
if (userDefField.getHelp() != null)
|
||||||
|
field.setHelp(userDefField.getHelp());
|
||||||
|
|
||||||
|
if (userDefField.getPlaceholder() != null)
|
||||||
|
field.setPlaceholder(userDefField.getPlaceholder());
|
||||||
|
|
||||||
|
field.setIsActive(userDefField.isActive());
|
||||||
|
field.setDisplayLogic(userDefField.getDisplayLogic());
|
||||||
|
field.setDisplayLength(userDefField.getDisplayLength());
|
||||||
|
field.setIsDisplayed(userDefField.getIsDisplayed() == null ? field.isDisplayed()
|
||||||
|
: "Y".equals(userDefField.getIsDisplayed()));
|
||||||
|
field.setIsReadOnly(userDefField.getIsReadOnly() == null ? field.isReadOnly()
|
||||||
|
: "Y".equals(userDefField.getIsReadOnly()));
|
||||||
|
field.setSeqNo(userDefField.getSeqNo() != 0 ? userDefField.getSeqNo() : field.getSeqNo());
|
||||||
|
field.setXPosition(userDefField.getXPosition() > 0 ? userDefField.getXPosition():field.getXPosition());
|
||||||
|
field.setNumLines(userDefField.getNumLines() > 0?userDefField.getNumLines():field.getNumLines());
|
||||||
|
field.setColumnSpan(userDefField.getColumnSpan() > 0?userDefField.getColumnSpan():field.getColumnSpan());
|
||||||
|
field.setSortNo(BigDecimal.valueOf(userDefField.getSortNo()));
|
||||||
|
field.setReadOnlyLogic(userDefField.getReadOnlyLogic());
|
||||||
|
field.setMandatoryLogic(userDefField.getMandatoryLogic());
|
||||||
|
|
||||||
|
if (userDefField.getAD_FieldGroup_ID() > 0)
|
||||||
|
field.setAD_FieldGroup_ID(userDefField.getAD_FieldGroup_ID());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return field;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert MField to MUserDefField and save
|
||||||
|
*
|
||||||
|
* @param field
|
||||||
|
*/
|
||||||
|
protected void saveUserDefField(MField field) {
|
||||||
|
|
||||||
|
MField defaultField = new MField(Env.getCtx(), field.get_ID(), null);
|
||||||
|
|
||||||
|
// check if translated values was really changed and restore default value if not
|
||||||
|
if (field.getName() != null && field.getName().equals(defaultField.get_Translation(MField.COLUMNNAME_Name, Env.getAD_Language(Env.getCtx()), true)))
|
||||||
|
field.setName(defaultField.getName());
|
||||||
|
if (field.getDescription() != null && field.getDescription().equals(defaultField.get_Translation(MField.COLUMNNAME_Description, Env.getAD_Language(Env.getCtx()), true)))
|
||||||
|
field.setDescription(defaultField.getDescription());
|
||||||
|
if (field.getHelp() != null && field.getHelp().equals(defaultField.get_Translation(MField.COLUMNNAME_Help, Env.getAD_Language(Env.getCtx()), true)))
|
||||||
|
field.setHelp(defaultField.getHelp());
|
||||||
|
if (field.getPlaceholder() != null && field.getPlaceholder().equals(defaultField.get_Translation(MField.COLUMNNAME_Placeholder, Env.getAD_Language(Env.getCtx()), true)))
|
||||||
|
field.setPlaceholder(defaultField.getPlaceholder());
|
||||||
|
|
||||||
|
if (!field.is_Changed())
|
||||||
|
return;
|
||||||
|
|
||||||
|
MUserDefField udfield = MUserDefField.get(Env.getCtx(), field.getAD_Field_ID(), m_tab.getAD_Tab_ID(), m_tab.getAD_Window_ID(), true);
|
||||||
|
int AD_UserDef_Field_ID = 0;
|
||||||
|
if (udfield != null)
|
||||||
|
AD_UserDef_Field_ID = udfield.getAD_UserDef_Field_ID();
|
||||||
|
|
||||||
|
udfield = new MUserDefField(Env.getCtx(), AD_UserDef_Field_ID, null);
|
||||||
|
|
||||||
|
if (field.getName() != null)
|
||||||
|
udfield.setName(field.getName());
|
||||||
|
|
||||||
|
if (field.getDescription() != null)
|
||||||
|
udfield.setDescription(field.getDescription());
|
||||||
|
|
||||||
|
if (field.getHelp() != null)
|
||||||
|
udfield.setHelp(field.getHelp());
|
||||||
|
|
||||||
|
if (field.getPlaceholder() != null)
|
||||||
|
udfield.setPlaceholder(field.getPlaceholder());
|
||||||
|
|
||||||
|
udfield.setIsActive(field.isActive());
|
||||||
|
udfield.setDisplayLogic(field.getDisplayLogic());
|
||||||
|
udfield.setDisplayLength(field.getDisplayLength());
|
||||||
|
udfield.setIsDisplayed(field.isDisplayed() ? "Y" : "N");
|
||||||
|
udfield.setIsReadOnly(field.isReadOnly() ? "Y" : "N");
|
||||||
|
udfield.setAD_Field_ID(field.get_ID());
|
||||||
|
udfield.setSeqNo(field.getSeqNo());
|
||||||
|
udfield.setXPosition(field.getXPosition());
|
||||||
|
udfield.setNumLines(field.getNumLines());
|
||||||
|
udfield.setColumnSpan(field.getColumnSpan());
|
||||||
|
udfield.setAD_UserDef_Tab_ID(AD_UserDef_Tab_ID);
|
||||||
|
udfield.setSortNo(field.getSortNo().intValue());
|
||||||
|
udfield.setAD_Org_ID(m_tab.getAD_Org_ID());
|
||||||
|
udfield.setMandatoryLogic(field.getMandatoryLogic());
|
||||||
|
udfield.setReadOnlyLogic(field.getReadOnlyLogic());
|
||||||
|
|
||||||
|
if (field.getAD_FieldGroup_ID() > 0)
|
||||||
|
udfield.setAD_FieldGroup_ID(field.getAD_FieldGroup_ID());
|
||||||
|
else
|
||||||
|
udfield.set_ValueOfColumn("ad_fieldgroup_id", null);
|
||||||
|
|
||||||
|
udfield.saveEx();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When Tab Editor is called in System Role and not in Base Language, this
|
||||||
|
* method saves changes in ad_field_trl table when some change is made on translated field
|
||||||
|
*
|
||||||
|
* @param field
|
||||||
|
*/
|
||||||
|
private void updateTrl(MField field) {
|
||||||
|
|
||||||
|
// only execute when is not base language
|
||||||
|
if (isBaseLang)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// save current field values
|
||||||
|
String name = field.getName();
|
||||||
|
String description = field.getDescription();
|
||||||
|
String help = field.getHelp();
|
||||||
|
String placeholder = field.getPlaceholder();
|
||||||
|
|
||||||
|
// original values for compare
|
||||||
|
MField dbField = new MField(Env.getCtx(), field.getAD_Field_ID(), null);
|
||||||
|
String nameDB = isBaseLang ? dbField.getName() : dbField.get_Translation(MField.COLUMNNAME_Name, Env.getAD_Language(Env.getCtx()), true);
|
||||||
|
String descriptionDB = isBaseLang ? dbField.getDescription() : dbField.get_Translation(MField.COLUMNNAME_Description, Env.getAD_Language(Env.getCtx()), true);
|
||||||
|
String helpDB = isBaseLang ? dbField.getHelp() : dbField.get_Translation(MField.COLUMNNAME_Help, Env.getAD_Language(Env.getCtx()), true);
|
||||||
|
String placeholderDB = isBaseLang ? dbField.getPlaceholder() : dbField.get_Translation(MField.COLUMNNAME_Placeholder, Env.getAD_Language(Env.getCtx()), true);
|
||||||
|
|
||||||
|
// always restore db field values to avoid wrong changes
|
||||||
|
field.setName(dbField.getName());
|
||||||
|
field.setDescription(dbField.getDescription());
|
||||||
|
field.setHelp(dbField.getHelp());
|
||||||
|
field.setPlaceholder(dbField.getPlaceholder());
|
||||||
|
|
||||||
|
// compare values when changed and restore the state if needed
|
||||||
|
if (name != null && name.equals(nameDB))
|
||||||
|
{
|
||||||
|
name = null;
|
||||||
|
}
|
||||||
|
if (description != null && description.equals(descriptionDB))
|
||||||
|
{
|
||||||
|
description = null;
|
||||||
|
}
|
||||||
|
if (help != null && help.equals(helpDB))
|
||||||
|
{
|
||||||
|
help = null;
|
||||||
|
}
|
||||||
|
if (placeholder != null && placeholder.equals(placeholderDB))
|
||||||
|
{
|
||||||
|
placeholder = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// nothing to do if all fields are not changed
|
||||||
|
if (name == null && description == null && help == null && placeholder == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
StringBuilder mainSQL = new StringBuilder("UPDATE ").append(field.get_TableName()).append("_Trl SET ");
|
||||||
|
|
||||||
|
StringBuilder setSQL = new StringBuilder();
|
||||||
|
if (name != null)
|
||||||
|
{
|
||||||
|
setSQL.append(I_AD_Field.COLUMNNAME_Name).append("='").append(name).append("' ");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(description != null)
|
||||||
|
{
|
||||||
|
if (setSQL.length() > 0)
|
||||||
|
setSQL.append(",");
|
||||||
|
setSQL.append(I_AD_Field.COLUMNNAME_Description).append("='").append(description).append("' ");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(help != null)
|
||||||
|
{
|
||||||
|
if (setSQL.length() > 0)
|
||||||
|
setSQL.append(",");
|
||||||
|
setSQL.append(I_AD_Field.COLUMNNAME_Help).append("='").append(help).append("' ");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(placeholder != null)
|
||||||
|
{
|
||||||
|
if (setSQL.length() > 0)
|
||||||
|
setSQL.append(",");
|
||||||
|
setSQL.append(I_AD_Field.COLUMNNAME_Placeholder).append("='").append(placeholder).append("' ");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (setSQL.length() > 0)
|
||||||
|
setSQL.append(",");
|
||||||
|
|
||||||
|
setSQL.append(I_AD_Field.COLUMNNAME_Updated).append("=").append(DB.TO_DATE(new Timestamp(System.currentTimeMillis()), false)).append(", ");
|
||||||
|
setSQL.append(I_AD_Field.COLUMNNAME_UpdatedBy).append("=").append(Env.getAD_User_ID(Env.getCtx()));
|
||||||
|
|
||||||
|
mainSQL.append(setSQL.toString());
|
||||||
|
|
||||||
|
mainSQL.append(" WHERE ").append(I_AD_Field.COLUMNNAME_AD_Field_ID).append("=").append(field.getAD_Field_ID()).append(" AND AD_Language ='").append(Env.getAD_Language(Env.getCtx())).append("'");
|
||||||
|
|
||||||
|
// Execute
|
||||||
|
int no = DB.executeUpdate(mainSQL.toString(), null);
|
||||||
|
if (no == 1)
|
||||||
|
{
|
||||||
|
if (log.isLoggable(Level.FINE)) log.fine(mainSQL.toString());
|
||||||
|
}
|
||||||
|
else if (no == 0)
|
||||||
|
log.warning ("Not Found - " + mainSQL.toString());
|
||||||
|
else
|
||||||
|
log.severe ("Update Rows=" + no + " (Should be 1) - " + mainSQL.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the current field list with new reloaded values for a field
|
||||||
|
*
|
||||||
|
* @param field
|
||||||
|
*/
|
||||||
|
public void updateFieldList(MField field) {
|
||||||
|
for (MField lstField : fields) {
|
||||||
|
if (lstField.getAD_Field_ID() == field.getAD_Field_ID()) {
|
||||||
|
lstField.setName(field.getName());
|
||||||
|
lstField.setDescription(field.getDescription());
|
||||||
|
lstField.setHelp(field.getHelp());
|
||||||
|
lstField.setPlaceholder(field.getPlaceholder());
|
||||||
|
lstField.setIsActive(field.isActive());
|
||||||
|
lstField.setDisplayLogic(field.getDisplayLogic());
|
||||||
|
lstField.setDisplayLength(field.getDisplayLength());
|
||||||
|
lstField.setIsDisplayed(field.isDisplayed());
|
||||||
|
lstField.setIsReadOnly(field.isReadOnly());
|
||||||
|
lstField.setSeqNo(field.getSeqNo());
|
||||||
|
lstField.setXPosition(field.getXPosition());
|
||||||
|
lstField.setNumLines(field.getNumLines());
|
||||||
|
lstField.setColumnSpan(field.getColumnSpan());
|
||||||
|
lstField.setSortNo(field.getSortNo());
|
||||||
|
mapField.put(lstField.get_ID(), lstField);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // TabEditor
|
} // TabEditor
|
||||||
|
|
Loading…
Reference in New Issue