IDEMPIERE-5567 Support of UUID as Key (FHCA-4195) (#1837)
* IDEMPIERE-5567 Support of UUID as Key (FHCA-4195) - Fix Record UUID editor * - Separate WRecordEditor and WRecordUUIDEditor for ID and UUID * IDEMPIERE-5567 Support of UUID as Key (FHCA-4195) - integrate patch from Heng Sin --------- Co-authored-by: hengsin <hengsin@gmail.com>
This commit is contained in:
parent
7c41f997b2
commit
4a1dcb265b
|
@ -66,7 +66,7 @@ public class MTable extends X_AD_Table implements ImmutablePOSupport
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = -4206879140460545905L;
|
private static final long serialVersionUID = 6308179531110429747L;
|
||||||
|
|
||||||
public final static int MAX_OFFICIAL_ID = 999999;
|
public final static int MAX_OFFICIAL_ID = 999999;
|
||||||
|
|
||||||
|
@ -521,6 +521,17 @@ public class MTable extends X_AD_Table implements ImmutablePOSupport
|
||||||
return (getKeyColumns() != null && getKeyColumns().length == 1 && getKeyColumns()[0].equals(uuColName));
|
return (getKeyColumns() != null && getKeyColumns().length == 1 && getKeyColumns()[0].equals(uuColName));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true if table has a UUID key
|
||||||
|
*/
|
||||||
|
public boolean hasUUIDKey()
|
||||||
|
{
|
||||||
|
String uuColName = PO.getUUIDColumnName(getTableName());
|
||||||
|
if (m_columns == null)
|
||||||
|
getColumns(false);
|
||||||
|
return m_columnNameMap.get(uuColName.toUpperCase()) != null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get Identifier Columns of Table
|
* Get Identifier Columns of Table
|
||||||
* @return Identifier columns
|
* @return Identifier columns
|
||||||
|
|
|
@ -188,9 +188,10 @@ public final class AEnv
|
||||||
if (AD_Window_ID == 0)
|
if (AD_Window_ID == 0)
|
||||||
return;
|
return;
|
||||||
MTable table = MTable.get(Env.getCtx(), AD_Table_ID);
|
MTable table = MTable.get(Env.getCtx(), AD_Table_ID);
|
||||||
MQuery query = MQuery.getEqualQuery(PO.getUUIDColumnName(table.getTableName()), Record_UU);
|
String uuColName = PO.getUUIDColumnName(table.getTableName());
|
||||||
|
MQuery query = MQuery.getEqualQuery(uuColName, Record_UU);
|
||||||
query.setZoomTableName(table.getTableName());
|
query.setZoomTableName(table.getTableName());
|
||||||
query.setZoomColumnName(table.getUUIDColumnName());
|
query.setZoomColumnName(uuColName);
|
||||||
query.setZoomValue(Record_UU);
|
query.setZoomValue(Record_UU);
|
||||||
zoom(AD_Window_ID, query);
|
zoom(AD_Window_ID, query);
|
||||||
} // zoom
|
} // zoom
|
||||||
|
|
|
@ -0,0 +1,476 @@
|
||||||
|
/**********************************************************************
|
||||||
|
* This file is part of iDempiere ERP Open Source *
|
||||||
|
* http://www.idempiere.org *
|
||||||
|
* *
|
||||||
|
* Copyright (C) Contributors *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU General Public License *
|
||||||
|
* as published by the Free Software Foundation; either version 2 *
|
||||||
|
* of the License, or (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This program is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License *
|
||||||
|
* along with this program; if not, write to the Free Software *
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
|
||||||
|
* MA 02110-1301, USA. *
|
||||||
|
* *
|
||||||
|
* Contributors: *
|
||||||
|
* - Igor Pojzl, Cloudempiere *
|
||||||
|
* - Peter Takacs, Cloudempiere *
|
||||||
|
**********************************************************************/
|
||||||
|
package org.adempiere.webui.editor;
|
||||||
|
|
||||||
|
import org.adempiere.util.GridRowCtx;
|
||||||
|
import org.adempiere.webui.ValuePreference;
|
||||||
|
import org.adempiere.webui.component.Textbox;
|
||||||
|
import org.adempiere.webui.component.ToolBarButton;
|
||||||
|
import org.adempiere.webui.event.ContextMenuEvent;
|
||||||
|
import org.adempiere.webui.event.ContextMenuListener;
|
||||||
|
import org.adempiere.webui.event.ValueChangeEvent;
|
||||||
|
import org.adempiere.webui.theme.ThemeManager;
|
||||||
|
import org.adempiere.webui.window.Dialog;
|
||||||
|
import org.adempiere.webui.window.FindWindow;
|
||||||
|
import org.adempiere.webui.window.WFieldRecordInfo;
|
||||||
|
import org.adempiere.webui.window.WRecordIDDialog;
|
||||||
|
import org.compiere.model.GridField;
|
||||||
|
import org.compiere.model.Lookup;
|
||||||
|
import org.compiere.model.MColumn;
|
||||||
|
import org.compiere.model.MLookup;
|
||||||
|
import org.compiere.model.MLookupFactory;
|
||||||
|
import org.compiere.model.MLookupInfo;
|
||||||
|
import org.compiere.model.MTable;
|
||||||
|
import org.compiere.util.DisplayType;
|
||||||
|
import org.compiere.util.Env;
|
||||||
|
import org.compiere.util.Msg;
|
||||||
|
import org.compiere.util.Util;
|
||||||
|
import org.zkoss.zk.ui.Component;
|
||||||
|
import org.zkoss.zk.ui.event.Event;
|
||||||
|
import org.zkoss.zk.ui.event.Events;
|
||||||
|
import org.zkoss.zk.ui.sys.ComponentCtrl;
|
||||||
|
import org.zkoss.zul.Div;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default editor for {@link DisplayType#RecordID} and {@link DisplayType#RecordUU}.<br/>
|
||||||
|
* Implemented with composite component of {@link Textbox} and {@link ToolBarButton}.<br/>
|
||||||
|
* The editor uses {@link WRecordIDDialog} for edit or viewing.
|
||||||
|
* @author Peter Takacs, Cloudempiere
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public abstract class WRecordEditor<T> extends WEditor implements ContextMenuListener, IZoomableEditor {
|
||||||
|
|
||||||
|
/** Is Read/Write enabled on the editor */
|
||||||
|
private boolean m_ReadWrite;
|
||||||
|
/** Record_ID or Record_UU value */
|
||||||
|
protected Object recordIDValue;
|
||||||
|
/** AD_Table_ID value */
|
||||||
|
protected Object tableIDValue;
|
||||||
|
|
||||||
|
/** Current tab's AD_Table_ID GridField */
|
||||||
|
protected GridField tableIDGridField;
|
||||||
|
|
||||||
|
// UI components
|
||||||
|
protected Textbox recordTextBox;
|
||||||
|
protected ToolBarButton editButton;
|
||||||
|
protected ToolBarButton zoomButton;
|
||||||
|
|
||||||
|
// image url for toolbar button
|
||||||
|
private static final String IMAGES_CONTEXT_ZOOM_PNG = "images/Zoom16.png";
|
||||||
|
private static final String IMAGES_CONTEXT_EDIT_RECORD_PNG = "images/EditRecord16.png";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
* @param div
|
||||||
|
* @param gridField
|
||||||
|
* @param tableEditor
|
||||||
|
* @param editorConfiguration
|
||||||
|
*/
|
||||||
|
public WRecordEditor(GridField gridField, boolean tableEditor, IEditorConfiguration editorConfiguration) {
|
||||||
|
super(new Div(), gridField, tableEditor, editorConfiguration);
|
||||||
|
|
||||||
|
getComponent().setSclass("recordid-editor");
|
||||||
|
getComponent().addEventListener(Events.ON_RIGHT_CLICK, this);
|
||||||
|
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Init component and context menu
|
||||||
|
*/
|
||||||
|
protected void init() {
|
||||||
|
if(gridTab != null) {
|
||||||
|
tableIDGridField = gridTab.getField("AD_Table_ID");
|
||||||
|
|
||||||
|
if(tableIDGridField == null) {
|
||||||
|
throw new RuntimeException("AD_Table_ID field not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
tableIDGridField.addPropertyChangeListener(evt -> {
|
||||||
|
if (GridField.PROPERTY.equals(evt.getPropertyName())) {
|
||||||
|
tableIDValue = evt.getNewValue();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
String tableIdTxt = Env.getContext(gridField.getVO().ctx, gridField.getWindowNo(), FindWindow.TABNO, "AD_Table_ID", true);
|
||||||
|
if (!Util.isEmpty(tableIdTxt, true)) {
|
||||||
|
tableIDValue = Integer.parseInt(tableIdTxt);
|
||||||
|
}
|
||||||
|
|
||||||
|
getComponent().addCallback(ComponentCtrl.AFTER_PAGE_ATTACHED, t -> afterPageAttached(t));
|
||||||
|
}
|
||||||
|
|
||||||
|
recordTextBox = new Textbox();
|
||||||
|
recordTextBox.setParent(getComponent());
|
||||||
|
recordTextBox.setWidth("100%");
|
||||||
|
recordTextBox.setReadonly(true);
|
||||||
|
|
||||||
|
editButton = new ToolBarButton();
|
||||||
|
editButton.setStyle("right: 21px;");
|
||||||
|
if (ThemeManager.isUseFontIconForImage())
|
||||||
|
editButton.setIconSclass("z-icon-Edit");
|
||||||
|
else
|
||||||
|
editButton.setImage(ThemeManager.getThemeResource(IMAGES_CONTEXT_EDIT_RECORD_PNG));
|
||||||
|
editButton.setParent(getComponent());
|
||||||
|
editButton.addEventListener(Events.ON_CLICK, this);
|
||||||
|
editButton.setTooltiptext(Msg.getMsg(Env.getCtx(), "Edit"));
|
||||||
|
|
||||||
|
zoomButton = new ToolBarButton();
|
||||||
|
if (ThemeManager.isUseFontIconForImage())
|
||||||
|
zoomButton.setIconSclass("z-icon-Zoom");
|
||||||
|
else
|
||||||
|
zoomButton.setImage(ThemeManager.getThemeResource(IMAGES_CONTEXT_ZOOM_PNG));
|
||||||
|
zoomButton.setParent(getComponent());
|
||||||
|
zoomButton.addEventListener(Events.ON_CLICK, this);
|
||||||
|
zoomButton.setTooltiptext(Msg.getMsg(Env.getCtx(), "Zoom"));
|
||||||
|
|
||||||
|
if (gridField != null)
|
||||||
|
{
|
||||||
|
popupMenu = new WEditorPopupMenu(true, true, isShowPreference());
|
||||||
|
popupMenu.addMenuListener(this);
|
||||||
|
addChangeLogMenu(popupMenu);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle AFTER_PAGE_ATTACHED callback to get AD_Table_ID grid field from find window
|
||||||
|
* @param t
|
||||||
|
*/
|
||||||
|
private void afterPageAttached(Object t) {
|
||||||
|
if (t instanceof Component) {
|
||||||
|
Component component = (Component) t;
|
||||||
|
Component parent = component.getParent();
|
||||||
|
while (parent != null) {
|
||||||
|
if (parent instanceof FindWindow)
|
||||||
|
break;
|
||||||
|
parent = parent.getParent();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (parent != null && parent instanceof FindWindow) {
|
||||||
|
FindWindow fw = (FindWindow) parent;
|
||||||
|
GridField field = fw.getTargetMField("AD_Table_ID");
|
||||||
|
if (field != null) {
|
||||||
|
//search field initialisation code duplicated from FindWindow
|
||||||
|
field = field.clone(gridField.getVO().ctx);
|
||||||
|
field.loadLookupNoValidate();
|
||||||
|
Lookup lookup = field.getLookup();
|
||||||
|
if (lookup != null && lookup instanceof MLookup)
|
||||||
|
{
|
||||||
|
MLookup mLookup = (MLookup) lookup;
|
||||||
|
mLookup.getLookupInfo().tabNo = FindWindow.TABNO;
|
||||||
|
|
||||||
|
if (field.getVO().ValidationCodeLookup != null && !field.getVO().ValidationCodeLookup.isEmpty())
|
||||||
|
{
|
||||||
|
mLookup.getLookupInfo().ValidationCode = field.getVO().ValidationCodeLookup;
|
||||||
|
mLookup.getLookupInfo().IsValidated = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tableIDGridField = field;
|
||||||
|
if (tableIDValue != null)
|
||||||
|
tableIDGridField.setValue(tableIDValue, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Refresh text box display text
|
||||||
|
*/
|
||||||
|
private void actionRefresh()
|
||||||
|
{
|
||||||
|
recordTextBox.setValue(getDisplay());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMenu(ContextMenuEvent evt)
|
||||||
|
{
|
||||||
|
if (WEditorPopupMenu.REQUERY_EVENT.equals(evt.getContextEvent()))
|
||||||
|
{
|
||||||
|
actionRefresh();
|
||||||
|
}
|
||||||
|
else if (WEditorPopupMenu.ZOOM_EVENT.equals(evt.getContextEvent()))
|
||||||
|
{
|
||||||
|
actionZoom();
|
||||||
|
}
|
||||||
|
else if (WEditorPopupMenu.CHANGE_LOG_EVENT.equals(evt.getContextEvent()))
|
||||||
|
{
|
||||||
|
WFieldRecordInfo.start(gridField);
|
||||||
|
}
|
||||||
|
else if (WEditorPopupMenu.PREFERENCE_EVENT.equals(evt.getContextEvent()))
|
||||||
|
{
|
||||||
|
if (isShowPreference())
|
||||||
|
ValuePreference.start (getComponent(), gridField, getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setReadWrite(boolean readWrite) {
|
||||||
|
m_ReadWrite = readWrite;
|
||||||
|
if(editButton != null)
|
||||||
|
editButton.setDisabled(!readWrite);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isReadWrite() {
|
||||||
|
return m_ReadWrite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setValue(Object value) {
|
||||||
|
setValue(value, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Value
|
||||||
|
* @param value new value
|
||||||
|
* @param fire true to fire value change event
|
||||||
|
*/
|
||||||
|
protected void setValue (Object value, boolean fire) {
|
||||||
|
if (value == null || Util.isEmpty(value.toString(), true)) {
|
||||||
|
recordTextBox.setValue("");
|
||||||
|
value = null;
|
||||||
|
} else {
|
||||||
|
recordTextBox.setValue(value.toString());
|
||||||
|
//get initial ad_table_id value
|
||||||
|
if (tableIDValue == null && tableIDGridField != null) {
|
||||||
|
tableIDValue = tableIDGridField.getValue();
|
||||||
|
}
|
||||||
|
if(value != null && tableIDValue != null) {
|
||||||
|
int tableID = Integer.parseInt(String.valueOf(tableIDValue));
|
||||||
|
if (tableID > 0) {
|
||||||
|
Object recordID = toKeyValue(value);
|
||||||
|
if(recordID != null && tableID > 0)
|
||||||
|
recordTextBox.setValue(getIdentifier(tableID, recordID));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fire
|
||||||
|
&&
|
||||||
|
( (value == null && recordIDValue != null)
|
||||||
|
|| (value != null && recordIDValue == null)
|
||||||
|
|| (value != null && !value.equals(recordIDValue))
|
||||||
|
)) {
|
||||||
|
// Record_ID
|
||||||
|
ValueChangeEvent changeEvent = new ValueChangeEvent(this, this.getColumnName(), recordIDValue, value);
|
||||||
|
super.fireValueChange(changeEvent);
|
||||||
|
}
|
||||||
|
recordIDValue = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getValue() {
|
||||||
|
return recordIDValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDisplay() {
|
||||||
|
if (recordIDValue == null)
|
||||||
|
return "";
|
||||||
|
if((tableIDValue != null) && (recordIDValue != null)) {
|
||||||
|
int tableID;
|
||||||
|
Object recordID;
|
||||||
|
try {
|
||||||
|
tableID = Integer.parseInt(String.valueOf(tableIDValue));
|
||||||
|
recordID = toKeyValue(recordIDValue);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
return recordIDValue.toString();
|
||||||
|
}
|
||||||
|
return getIdentifier(tableID, recordID);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return recordIDValue.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDisplayTextForGridView(GridRowCtx gridRowCtx, Object value) {
|
||||||
|
if (value == null)
|
||||||
|
return "";
|
||||||
|
if (gridTab != null) {
|
||||||
|
String key = gridTab.getWindowNo() + "|AD_Table_ID";
|
||||||
|
Object rowTableIdValue = gridRowCtx.get(key);
|
||||||
|
int rowTableID;
|
||||||
|
Object rowRecordID;
|
||||||
|
try {
|
||||||
|
rowTableID = Integer.parseInt(String.valueOf(rowTableIdValue));
|
||||||
|
rowRecordID = toKeyValue(value);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
return value.toString();
|
||||||
|
}
|
||||||
|
return getIdentifier(rowTableID, rowRecordID);
|
||||||
|
} else {
|
||||||
|
return value.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEvent(Event event) throws Exception {
|
||||||
|
if(event.getName().equalsIgnoreCase(Events.ON_CLICK)) {
|
||||||
|
if(event.getTarget().equals(zoomButton)) {
|
||||||
|
actionZoom();
|
||||||
|
}
|
||||||
|
else if(event.getTarget().equals(editButton)) {
|
||||||
|
if (tableIDGridField != null) {
|
||||||
|
//for find window context
|
||||||
|
if (gridTab == null) {
|
||||||
|
String tableIdTxt = Env.getContext(gridField.getVO().ctx, gridField.getWindowNo(), FindWindow.TABNO, "AD_Table_ID", true);
|
||||||
|
if (!Util.isEmpty(tableIdTxt, true)) {
|
||||||
|
tableIDValue = Integer.parseInt(tableIdTxt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (tableIDValue != null && tableIDValue instanceof Integer) {
|
||||||
|
String error = validateTableIdValue((int) tableIDValue);
|
||||||
|
if (!Util.isEmpty(error)) {
|
||||||
|
Dialog.error(tableIDGridField.getWindowNo(), error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
new WRecordIDDialog(recordTextBox.getPage(), this, tableIDGridField);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(event.getName().equalsIgnoreCase(Events.ON_RIGHT_CLICK)) {
|
||||||
|
if(event.getTarget().equals(getComponent())) {
|
||||||
|
popupMenu.open(getComponent());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Lookup
|
||||||
|
* @param tableID
|
||||||
|
* @return null if tableID <= 0 or the table doesn't have any key column, else {@link MLookup}
|
||||||
|
*/
|
||||||
|
public MLookup getRecordsLookup(int tableID) {
|
||||||
|
return getRecordsLookup(tableID, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Lookup
|
||||||
|
* @param tableID
|
||||||
|
* @param tableBased - if the lookup checks for the UUID Key Column based on the table (true), or on the columnName (false)
|
||||||
|
* @return null if tableID <= 0 or the table doesn't have any key column, else {@link MLookup}
|
||||||
|
*/
|
||||||
|
private MLookup getRecordsLookup(int tableID, boolean tableBased) {
|
||||||
|
if(tableID <= 0)
|
||||||
|
return null;
|
||||||
|
MTable mTable = MTable.get(Env.getCtx(), tableID, null);
|
||||||
|
String keyColumn = "";
|
||||||
|
if (tableBased) {
|
||||||
|
String[] keyColumns = mTable.getKeyColumns();
|
||||||
|
keyColumn = keyColumns != null && keyColumns.length > 0 ? keyColumns[0] : null;
|
||||||
|
} else {
|
||||||
|
keyColumn = getKeyColumn(mTable);
|
||||||
|
}
|
||||||
|
if (Util.isEmpty(keyColumn))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
MColumn mColumn = MColumn.get(Env.getCtx(), mTable.getTableName(), keyColumn);
|
||||||
|
|
||||||
|
int tabNo = gridTab != null ? gridTab.getTabNo() : FindWindow.TABNO;
|
||||||
|
int windowNo = gridTab != null ? gridTab.getWindowNo() : gridField.getWindowNo();
|
||||||
|
MLookupInfo lookupInfo = MLookupFactory.getLookupInfo (Env.getCtx(), windowNo, tabNo, mColumn.getAD_Column_ID(), DisplayType.Search);
|
||||||
|
return new MLookup(lookupInfo, tabNo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Identifier String from AD_Table_ID and Record_ID
|
||||||
|
* @param tableID
|
||||||
|
* @param recordID
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public String getIdentifier(int tableID, Object recordID) {
|
||||||
|
MLookup lookup = getRecordsLookup(tableID);
|
||||||
|
return lookup != null ? lookup.getDisplay(recordID) : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Parent Identifier String from AD_Table_ID and Record_ID
|
||||||
|
* @param tableID
|
||||||
|
* @param recordID
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public String getParentIdentifier(int tableID, Object recordID) {
|
||||||
|
MLookup lookup = getRecordsLookup(tableID, true);
|
||||||
|
return lookup != null ? lookup.getDisplay(recordID) : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get AD_Table_ID
|
||||||
|
* @return AD_Table_ID value
|
||||||
|
*/
|
||||||
|
public Object getAD_Table_ID() {
|
||||||
|
return tableIDValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set AD_Table_ID
|
||||||
|
* @param tableID
|
||||||
|
*/
|
||||||
|
public void setAD_Table_ID(Object tableID){
|
||||||
|
// Data Binding
|
||||||
|
// AD_Table_ID
|
||||||
|
if (gridTab != null) {
|
||||||
|
Object oldValue = gridTab.getValue("AD_Table_ID");
|
||||||
|
gridTab.setValue(tableIDGridField, tableID);
|
||||||
|
ValueChangeEvent changeEvent = new ValueChangeEvent(this, "AD_Table_ID", oldValue, tableID);
|
||||||
|
super.fireValueChange(changeEvent);
|
||||||
|
} else {
|
||||||
|
ValueChangeEvent changeEvent = new ValueChangeEvent(this, "AD_Table_ID", tableIDValue, tableID);
|
||||||
|
super.fireValueChange(changeEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
tableIDValue = tableID;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Div getComponent() {
|
||||||
|
return (Div) super.getComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mTable Reference table
|
||||||
|
* @return Key column name
|
||||||
|
*/
|
||||||
|
protected abstract String getKeyColumn(MTable mTable);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert value to key value type
|
||||||
|
* @param value
|
||||||
|
* @return key value
|
||||||
|
*/
|
||||||
|
public abstract T toKeyValue(Object value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate selected table id value
|
||||||
|
* @param tableIDEditor
|
||||||
|
* @param tableId
|
||||||
|
* @return error message or null
|
||||||
|
*/
|
||||||
|
public abstract String validateTableIdValue(int tableId);
|
||||||
|
}
|
|
@ -29,64 +29,25 @@ import java.beans.PropertyChangeEvent;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import org.adempiere.exceptions.AdempiereException;
|
import org.adempiere.exceptions.AdempiereException;
|
||||||
import org.adempiere.util.GridRowCtx;
|
|
||||||
import org.adempiere.webui.ValuePreference;
|
|
||||||
import org.adempiere.webui.apps.AEnv;
|
import org.adempiere.webui.apps.AEnv;
|
||||||
import org.adempiere.webui.component.Textbox;
|
import org.adempiere.webui.component.Textbox;
|
||||||
import org.adempiere.webui.component.ToolBarButton;
|
import org.adempiere.webui.component.ToolBarButton;
|
||||||
import org.adempiere.webui.event.ContextMenuEvent;
|
|
||||||
import org.adempiere.webui.event.ContextMenuListener;
|
|
||||||
import org.adempiere.webui.event.ValueChangeEvent;
|
|
||||||
import org.adempiere.webui.theme.ThemeManager;
|
|
||||||
import org.adempiere.webui.window.Dialog;
|
|
||||||
import org.adempiere.webui.window.FindWindow;
|
|
||||||
import org.adempiere.webui.window.WFieldRecordInfo;
|
|
||||||
import org.adempiere.webui.window.WRecordIDDialog;
|
import org.adempiere.webui.window.WRecordIDDialog;
|
||||||
import org.compiere.model.GridField;
|
import org.compiere.model.GridField;
|
||||||
import org.compiere.model.Lookup;
|
|
||||||
import org.compiere.model.MColumn;
|
|
||||||
import org.compiere.model.MLookup;
|
|
||||||
import org.compiere.model.MLookupFactory;
|
|
||||||
import org.compiere.model.MLookupInfo;
|
|
||||||
import org.compiere.model.MRole;
|
import org.compiere.model.MRole;
|
||||||
import org.compiere.model.MTable;
|
import org.compiere.model.MTable;
|
||||||
import org.compiere.util.DisplayType;
|
import org.compiere.util.DisplayType;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
import org.compiere.util.Msg;
|
import org.compiere.util.Msg;
|
||||||
import org.compiere.util.Util;
|
|
||||||
import org.zkoss.zk.ui.Component;
|
|
||||||
import org.zkoss.zk.ui.event.Event;
|
|
||||||
import org.zkoss.zk.ui.event.Events;
|
|
||||||
import org.zkoss.zk.ui.sys.ComponentCtrl;
|
|
||||||
import org.zkoss.zul.Div;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default editor for {@link DisplayType#RecordID} and {@link DisplayType#RecordUU}.<br/>
|
* Default editor for {@link DisplayType#RecordID}.<br/>
|
||||||
* Implemented with composite component of {@link Textbox} and {@link ToolBarButton}.<br/>
|
* Implemented with composite component of {@link Textbox} and {@link ToolBarButton}.<br/>
|
||||||
* The editor uses {@link WRecordIDDialog} for edit or viewing.
|
* The editor uses {@link WRecordIDDialog} for edit or viewing.
|
||||||
* @author Peter Takacs, Cloudempiere
|
* @author Peter Takacs, Cloudempiere
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class WRecordIDEditor extends WEditor implements ContextMenuListener, IZoomableEditor {
|
public class WRecordIDEditor extends WRecordEditor<Integer> {
|
||||||
|
|
||||||
/** Is Read/Write enabled on the editor */
|
|
||||||
private boolean m_ReadWrite;
|
|
||||||
/** Record_ID or Record_UU value */
|
|
||||||
private Object recordIDValue;
|
|
||||||
/** AD_Table_ID value */
|
|
||||||
private Object tableIDValue;
|
|
||||||
|
|
||||||
/** Current tab's AD_Table_ID GridField */
|
|
||||||
private GridField tableIDGridField;
|
|
||||||
|
|
||||||
// UI components
|
|
||||||
private Textbox recordTextBox;
|
|
||||||
private ToolBarButton editButton;
|
|
||||||
private ToolBarButton zoomButton;
|
|
||||||
|
|
||||||
// image url for toolbar button
|
|
||||||
private static final String IMAGES_CONTEXT_ZOOM_PNG = "images/Zoom16.png";
|
|
||||||
private static final String IMAGES_CONTEXT_EDIT_RECORD_PNG = "images/EditRecord16.png";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
|
@ -95,177 +56,21 @@ public class WRecordIDEditor extends WEditor implements ContextMenuListener, IZo
|
||||||
* @param editorConfiguration
|
* @param editorConfiguration
|
||||||
*/
|
*/
|
||||||
public WRecordIDEditor(GridField gridField, boolean tableEditor, IEditorConfiguration editorConfiguration) {
|
public WRecordIDEditor(GridField gridField, boolean tableEditor, IEditorConfiguration editorConfiguration) {
|
||||||
super(new Div(), gridField, tableEditor, editorConfiguration);
|
super(gridField, tableEditor, editorConfiguration);
|
||||||
|
|
||||||
getComponent().setSclass("recordid-editor");
|
|
||||||
getComponent().addEventListener(Events.ON_RIGHT_CLICK, this);
|
|
||||||
|
|
||||||
init();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Init component and context menu
|
|
||||||
*/
|
|
||||||
private void init() {
|
|
||||||
if(gridTab != null) {
|
|
||||||
tableIDGridField = gridTab.getField("AD_Table_ID");
|
|
||||||
|
|
||||||
if(tableIDGridField == null) {
|
|
||||||
throw new RuntimeException("AD_Table_ID field not found");
|
|
||||||
}
|
|
||||||
|
|
||||||
tableIDGridField.addPropertyChangeListener(evt -> {
|
|
||||||
if (GridField.PROPERTY.equals(evt.getPropertyName())) {
|
|
||||||
tableIDValue = evt.getNewValue();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
String tableIdTxt = Env.getContext(gridField.getVO().ctx, gridField.getWindowNo(), FindWindow.TABNO, "AD_Table_ID", true);
|
|
||||||
if (!Util.isEmpty(tableIdTxt, true)) {
|
|
||||||
tableIDValue = Integer.parseInt(tableIdTxt);
|
|
||||||
}
|
|
||||||
|
|
||||||
getComponent().addCallback(ComponentCtrl.AFTER_PAGE_ATTACHED, t -> afterPageAttached(t));
|
|
||||||
}
|
|
||||||
|
|
||||||
recordTextBox = new Textbox();
|
|
||||||
recordTextBox.setParent(getComponent());
|
|
||||||
recordTextBox.setWidth("100%");
|
|
||||||
recordTextBox.setReadonly(true);
|
|
||||||
|
|
||||||
editButton = new ToolBarButton();
|
|
||||||
editButton.setStyle("right: 21px;");
|
|
||||||
if (ThemeManager.isUseFontIconForImage())
|
|
||||||
editButton.setIconSclass("z-icon-Edit");
|
|
||||||
else
|
|
||||||
editButton.setImage(ThemeManager.getThemeResource(IMAGES_CONTEXT_EDIT_RECORD_PNG));
|
|
||||||
editButton.setParent(getComponent());
|
|
||||||
editButton.addEventListener(Events.ON_CLICK, this);
|
|
||||||
editButton.setTooltiptext(Msg.getMsg(Env.getCtx(), "Edit"));
|
|
||||||
|
|
||||||
zoomButton = new ToolBarButton();
|
|
||||||
if (ThemeManager.isUseFontIconForImage())
|
|
||||||
zoomButton.setIconSclass("z-icon-Zoom");
|
|
||||||
else
|
|
||||||
zoomButton.setImage(ThemeManager.getThemeResource(IMAGES_CONTEXT_ZOOM_PNG));
|
|
||||||
zoomButton.setParent(getComponent());
|
|
||||||
zoomButton.addEventListener(Events.ON_CLICK, this);
|
|
||||||
zoomButton.setTooltiptext(Msg.getMsg(Env.getCtx(), "Zoom"));
|
|
||||||
|
|
||||||
if (gridField != null)
|
|
||||||
{
|
|
||||||
popupMenu = new WEditorPopupMenu(true, true, isShowPreference());
|
|
||||||
popupMenu.addMenuListener(this);
|
|
||||||
addChangeLogMenu(popupMenu);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle AFTER_PAGE_ATTACHED callback to get AD_Table_ID grid field from find window
|
|
||||||
* @param t
|
|
||||||
*/
|
|
||||||
private void afterPageAttached(Object t) {
|
|
||||||
if (t instanceof Component) {
|
|
||||||
Component component = (Component) t;
|
|
||||||
Component parent = component.getParent();
|
|
||||||
while (parent != null) {
|
|
||||||
if (parent instanceof FindWindow)
|
|
||||||
break;
|
|
||||||
parent = parent.getParent();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (parent != null && parent instanceof FindWindow) {
|
|
||||||
FindWindow fw = (FindWindow) parent;
|
|
||||||
GridField field = fw.getTargetMField("AD_Table_ID");
|
|
||||||
if (field != null) {
|
|
||||||
//search field initialisation code duplicated from FindWindow
|
|
||||||
field = field.clone(gridField.getVO().ctx);
|
|
||||||
field.loadLookupNoValidate();
|
|
||||||
Lookup lookup = field.getLookup();
|
|
||||||
if (lookup != null && lookup instanceof MLookup)
|
|
||||||
{
|
|
||||||
MLookup mLookup = (MLookup) lookup;
|
|
||||||
mLookup.getLookupInfo().tabNo = FindWindow.TABNO;
|
|
||||||
|
|
||||||
if (field.getVO().ValidationCodeLookup != null && !field.getVO().ValidationCodeLookup.isEmpty())
|
|
||||||
{
|
|
||||||
mLookup.getLookupInfo().ValidationCode = field.getVO().ValidationCodeLookup;
|
|
||||||
mLookup.getLookupInfo().IsValidated = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tableIDGridField = field;
|
|
||||||
if (tableIDValue != null)
|
|
||||||
tableIDGridField.setValue(tableIDValue, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Refresh text box display text
|
|
||||||
*/
|
|
||||||
private void actionRefresh()
|
|
||||||
{
|
|
||||||
recordTextBox.setValue(getDisplay());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void actionZoom()
|
public void actionZoom()
|
||||||
{
|
{
|
||||||
String s = tableIDValue != null ? String.valueOf(tableIDValue) : "";
|
String s = tableIDValue != null ? String.valueOf(tableIDValue) : "";
|
||||||
int tableID = s.length() > 0 ? Integer.parseInt(s) : 0;
|
int tableID = s.length() > 0 ? Integer.parseInt(s) : 0;
|
||||||
MTable table = MTable.get(tableID);
|
s = recordIDValue != null ? String.valueOf(recordIDValue) : "";
|
||||||
if (table.isUUIDKeyTable()) {
|
int recordID = s.length() > 0 ? Integer.parseInt(s) : 0;
|
||||||
String recordUU = recordIDValue != null ? recordIDValue.toString() : "";
|
if(tableID <= 0 || recordID < 0)
|
||||||
if(tableID <= 0)
|
return;
|
||||||
return;
|
if (!MRole.getDefault().isTableAccess(tableID, false))
|
||||||
if (!MRole.getDefault().isTableAccess(tableID, false))
|
throw new AdempiereException(Msg.getMsg(Env.getCtx(), "AccessTableNoView"));
|
||||||
throw new AdempiereException(Msg.getMsg(Env.getCtx(), "AccessTableNoView"));
|
AEnv.zoom(tableID, recordID);
|
||||||
AEnv.zoomUU(tableID, recordUU);
|
|
||||||
} else {
|
|
||||||
s = recordIDValue != null ? String.valueOf(recordIDValue) : "";
|
|
||||||
int recordID = s.length() > 0 ? Integer.parseInt(s) : 0;
|
|
||||||
if(tableID <= 0 || recordID < 0)
|
|
||||||
return;
|
|
||||||
if (!MRole.getDefault().isTableAccess(tableID, false))
|
|
||||||
throw new AdempiereException(Msg.getMsg(Env.getCtx(), "AccessTableNoView"));
|
|
||||||
AEnv.zoom(tableID, recordID);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onMenu(ContextMenuEvent evt)
|
|
||||||
{
|
|
||||||
if (WEditorPopupMenu.REQUERY_EVENT.equals(evt.getContextEvent()))
|
|
||||||
{
|
|
||||||
actionRefresh();
|
|
||||||
}
|
|
||||||
else if (WEditorPopupMenu.ZOOM_EVENT.equals(evt.getContextEvent()))
|
|
||||||
{
|
|
||||||
actionZoom();
|
|
||||||
}
|
|
||||||
else if (WEditorPopupMenu.CHANGE_LOG_EVENT.equals(evt.getContextEvent()))
|
|
||||||
{
|
|
||||||
WFieldRecordInfo.start(gridField);
|
|
||||||
}
|
|
||||||
else if (WEditorPopupMenu.PREFERENCE_EVENT.equals(evt.getContextEvent()))
|
|
||||||
{
|
|
||||||
if (isShowPreference())
|
|
||||||
ValuePreference.start (getComponent(), gridField, getValue());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setReadWrite(boolean readWrite) {
|
|
||||||
m_ReadWrite = readWrite;
|
|
||||||
if(editButton != null)
|
|
||||||
editButton.setDisabled(!readWrite);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isReadWrite() {
|
|
||||||
return m_ReadWrite;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -276,222 +81,32 @@ public class WRecordIDEditor extends WEditor implements ContextMenuListener, IZo
|
||||||
int tableID = tableIDValue != null ? Integer.parseInt(String.valueOf(tableIDValue)) : 0;
|
int tableID = tableIDValue != null ? Integer.parseInt(String.valueOf(tableIDValue)) : 0;
|
||||||
if (tableID > 0) {
|
if (tableID > 0) {
|
||||||
MTable table = MTable.get(tableID);
|
MTable table = MTable.get(tableID);
|
||||||
if (table.isUUIDKeyTable()) {
|
int recordID = Integer.parseInt(Objects.toString(evt.getNewValue(), "-1"));
|
||||||
String recordUU = Objects.toString(evt.getNewValue(), "");
|
if (tableID > 0 && recordID >= 0)
|
||||||
if (tableID > 0 && recordUU.length() > 0)
|
table.getPO(recordID, null); // calls po.checkCrossTenant() method
|
||||||
table.getPOByUU(recordUU, null); // calls po.checkCrossTenant() method
|
|
||||||
|
|
||||||
} else {
|
|
||||||
int recordID = Integer.parseInt(Objects.toString(evt.getNewValue(), "-1"));
|
|
||||||
if (tableID > 0 && recordID >= 0)
|
|
||||||
table.getPO(recordID, null); // calls po.checkCrossTenant() method
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
setValue(evt.getNewValue(), false);
|
setValue(evt.getNewValue(), false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setValue(Object value) {
|
|
||||||
setValue(value, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set Value
|
|
||||||
* @param value new value
|
|
||||||
* @param fire true to fire value change event
|
|
||||||
*/
|
|
||||||
private void setValue (Object value, boolean fire) {
|
|
||||||
if (value == null || Util.isEmpty(value.toString(), true)) {
|
|
||||||
recordTextBox.setValue("");
|
|
||||||
value = null;
|
|
||||||
} else {
|
|
||||||
recordTextBox.setValue(value.toString());
|
|
||||||
//get initial ad_table_id value
|
|
||||||
if (tableIDValue == null && tableIDGridField != null) {
|
|
||||||
tableIDValue = tableIDGridField.getValue();
|
|
||||||
}
|
|
||||||
if(value != null && tableIDValue != null) {
|
|
||||||
int tableID = Integer.parseInt(String.valueOf(tableIDValue));
|
|
||||||
if (tableID > 0) {
|
|
||||||
MTable table = MTable.get(tableID);
|
|
||||||
Object recordID;
|
|
||||||
if (table.isUUIDKeyTable())
|
|
||||||
recordID = value.toString();
|
|
||||||
else
|
|
||||||
recordID = Integer.parseInt(String.valueOf(value));
|
|
||||||
if(recordID != null && tableID > 0)
|
|
||||||
recordTextBox.setValue(getIdentifier(tableID, recordID));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fire
|
@Override
|
||||||
&&
|
public Integer toKeyValue(Object value) {
|
||||||
( (value == null && recordIDValue != null)
|
return value != null ? Integer.parseInt(String.valueOf(value)) : null;
|
||||||
|| (value != null && recordIDValue == null)
|
|
||||||
|| (value != null && !value.equals(recordIDValue))
|
|
||||||
)) {
|
|
||||||
// Record_ID
|
|
||||||
ValueChangeEvent changeEvent = new ValueChangeEvent(this, this.getColumnName(), recordIDValue, value);
|
|
||||||
super.fireValueChange(changeEvent);
|
|
||||||
}
|
|
||||||
recordIDValue = value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object getValue() {
|
protected String getKeyColumn(MTable mTable) {
|
||||||
return recordIDValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getDisplay() {
|
|
||||||
if (recordIDValue == null)
|
|
||||||
return "";
|
|
||||||
if((tableIDValue != null) && (recordIDValue != null)) {
|
|
||||||
int tableID;
|
|
||||||
Object recordID;
|
|
||||||
try {
|
|
||||||
tableID = Integer.parseInt(String.valueOf(tableIDValue));
|
|
||||||
MTable table = MTable.get(tableID);
|
|
||||||
if (table.isUUIDKeyTable())
|
|
||||||
recordID = recordIDValue.toString();
|
|
||||||
else
|
|
||||||
recordID = Integer.parseInt(String.valueOf(recordIDValue));
|
|
||||||
} catch (NumberFormatException e) {
|
|
||||||
return recordIDValue.toString();
|
|
||||||
}
|
|
||||||
return getIdentifier(tableID, recordID);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return recordIDValue.toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getDisplayTextForGridView(GridRowCtx gridRowCtx, Object value) {
|
|
||||||
if (value == null)
|
|
||||||
return "";
|
|
||||||
if (gridTab != null) {
|
|
||||||
String key = gridTab.getWindowNo() + "|AD_Table_ID";
|
|
||||||
Object rowTableIdValue = gridRowCtx.get(key);
|
|
||||||
int rowTableID;
|
|
||||||
Object rowRecordID;
|
|
||||||
try {
|
|
||||||
rowTableID = Integer.parseInt(String.valueOf(rowTableIdValue));
|
|
||||||
MTable table = MTable.get(rowTableID);
|
|
||||||
if (table.isUUIDKeyTable())
|
|
||||||
rowRecordID = value.toString();
|
|
||||||
else
|
|
||||||
rowRecordID = Integer.parseInt(String.valueOf(value));
|
|
||||||
} catch (NumberFormatException e) {
|
|
||||||
return value.toString();
|
|
||||||
}
|
|
||||||
return getIdentifier(rowTableID, rowRecordID);
|
|
||||||
} else {
|
|
||||||
return value.toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onEvent(Event event) throws Exception {
|
|
||||||
if(event.getName().equalsIgnoreCase(Events.ON_CLICK)) {
|
|
||||||
if(event.getTarget().equals(zoomButton)) {
|
|
||||||
actionZoom();
|
|
||||||
}
|
|
||||||
else if(event.getTarget().equals(editButton)) {
|
|
||||||
if (tableIDGridField != null) {
|
|
||||||
//for find window context
|
|
||||||
if (gridTab == null) {
|
|
||||||
String tableIdTxt = Env.getContext(gridField.getVO().ctx, gridField.getWindowNo(), FindWindow.TABNO, "AD_Table_ID", true);
|
|
||||||
if (!Util.isEmpty(tableIdTxt, true)) {
|
|
||||||
tableIDValue = Integer.parseInt(tableIdTxt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (tableIDValue != null && tableIDValue instanceof Integer) {
|
|
||||||
MTable table = MTable.get((Integer)tableIDValue);
|
|
||||||
if (table.isUUIDKeyTable()) {
|
|
||||||
if (! getColumnName().endsWith("_UU")) {
|
|
||||||
Dialog.error(tableIDGridField.getWindowNo(), "UUTableNotCompatibleWithRecordID");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
new WRecordIDDialog(recordTextBox.getPage(), this, tableIDGridField);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(event.getName().equalsIgnoreCase(Events.ON_RIGHT_CLICK)) {
|
|
||||||
if(event.getTarget().equals(getComponent())) {
|
|
||||||
popupMenu.open(getComponent());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Lookup
|
|
||||||
* @param tableID
|
|
||||||
* @return null if tableID <= 0 or the table doesn't have any key column, else {@link MLookup}
|
|
||||||
*/
|
|
||||||
public MLookup getRecordsLookup(int tableID) {
|
|
||||||
if(tableID <= 0)
|
|
||||||
return null;
|
|
||||||
MTable mTable = MTable.get(Env.getCtx(), tableID, null);
|
|
||||||
String[] keyColumns = mTable.getKeyColumns();
|
String[] keyColumns = mTable.getKeyColumns();
|
||||||
String keyColumn = "";
|
return keyColumns != null && keyColumns.length > 0 ? keyColumns[0] : null;
|
||||||
if(keyColumns.length > 0)
|
|
||||||
keyColumn = keyColumns[0];
|
|
||||||
else
|
|
||||||
return null;
|
|
||||||
MColumn mColumn = MColumn.get(Env.getCtx(), mTable.getTableName(), keyColumn);
|
|
||||||
|
|
||||||
int tabNo = gridTab != null ? gridTab.getTabNo() : FindWindow.TABNO;
|
|
||||||
int windowNo = gridTab != null ? gridTab.getWindowNo() : gridField.getWindowNo();
|
|
||||||
MLookupInfo lookupInfo = MLookupFactory.getLookupInfo (Env.getCtx(), windowNo, tabNo, mColumn.getAD_Column_ID(), DisplayType.Search);
|
|
||||||
return new MLookup(lookupInfo, tabNo);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Identifier String from AD_Table_ID and Record_ID
|
|
||||||
* @param tableID
|
|
||||||
* @param recordID
|
|
||||||
* @return String
|
|
||||||
*/
|
|
||||||
public String getIdentifier(int tableID, Object recordID) {
|
|
||||||
MLookup lookup = getRecordsLookup(tableID);
|
|
||||||
return lookup != null ? lookup.getDisplay(recordID) : "";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get AD_Table_ID
|
|
||||||
* @return AD_Table_ID value
|
|
||||||
*/
|
|
||||||
public Object getAD_Table_ID() {
|
|
||||||
return tableIDValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set AD_Table_ID
|
|
||||||
* @param tableID
|
|
||||||
*/
|
|
||||||
public void setAD_Table_ID(Object tableID){
|
|
||||||
// Data Binding
|
|
||||||
// AD_Table_ID
|
|
||||||
if (gridTab != null) {
|
|
||||||
Object oldValue = gridTab.getValue("AD_Table_ID");
|
|
||||||
gridTab.setValue(tableIDGridField, tableID);
|
|
||||||
ValueChangeEvent changeEvent = new ValueChangeEvent(this, "AD_Table_ID", oldValue, tableID);
|
|
||||||
super.fireValueChange(changeEvent);
|
|
||||||
} else {
|
|
||||||
ValueChangeEvent changeEvent = new ValueChangeEvent(this, "AD_Table_ID", tableIDValue, tableID);
|
|
||||||
super.fireValueChange(changeEvent);
|
|
||||||
}
|
|
||||||
|
|
||||||
tableIDValue = tableID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Div getComponent() {
|
public String validateTableIdValue(int tableId) {
|
||||||
return (Div) super.getComponent();
|
MTable table = MTable.get(tableId);
|
||||||
|
if (table.isUUIDKeyTable())
|
||||||
|
return "UUTableNotCompatibleWithRecordID";
|
||||||
|
if (! table.isIDKeyTable())
|
||||||
|
return "TableHasNoKeyColumn";
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,110 @@
|
||||||
|
/**********************************************************************
|
||||||
|
* This file is part of iDempiere ERP Open Source *
|
||||||
|
* http://www.idempiere.org *
|
||||||
|
* *
|
||||||
|
* Copyright (C) Contributors *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU General Public License *
|
||||||
|
* as published by the Free Software Foundation; either version 2 *
|
||||||
|
* of the License, or (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This program is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License *
|
||||||
|
* along with this program; if not, write to the Free Software *
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
|
||||||
|
* MA 02110-1301, USA. *
|
||||||
|
* *
|
||||||
|
* Contributors: *
|
||||||
|
* - Igor Pojzl, Cloudempiere *
|
||||||
|
* - Peter Takacs, Cloudempiere *
|
||||||
|
**********************************************************************/
|
||||||
|
package org.adempiere.webui.editor;
|
||||||
|
|
||||||
|
import java.beans.PropertyChangeEvent;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import org.adempiere.exceptions.AdempiereException;
|
||||||
|
import org.adempiere.webui.apps.AEnv;
|
||||||
|
import org.adempiere.webui.component.Textbox;
|
||||||
|
import org.adempiere.webui.component.ToolBarButton;
|
||||||
|
import org.adempiere.webui.window.WRecordIDDialog;
|
||||||
|
import org.compiere.model.GridField;
|
||||||
|
import org.compiere.model.MRole;
|
||||||
|
import org.compiere.model.MTable;
|
||||||
|
import org.compiere.model.PO;
|
||||||
|
import org.compiere.util.DisplayType;
|
||||||
|
import org.compiere.util.Env;
|
||||||
|
import org.compiere.util.Msg;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default editor for {@link DisplayType#RecordUU}.<br/>
|
||||||
|
* Implemented with composite component of {@link Textbox} and {@link ToolBarButton}.<br/>
|
||||||
|
* The editor uses {@link WRecordIDDialog} for edit or viewing.
|
||||||
|
* @author Peter Takacs, Cloudempiere
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class WRecordUUIDEditor extends WRecordEditor<String> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
* @param gridField
|
||||||
|
* @param tableEditor
|
||||||
|
* @param editorConfiguration
|
||||||
|
*/
|
||||||
|
public WRecordUUIDEditor(GridField gridField, boolean tableEditor, IEditorConfiguration editorConfiguration) {
|
||||||
|
super(gridField, tableEditor, editorConfiguration);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionZoom()
|
||||||
|
{
|
||||||
|
String s = tableIDValue != null ? String.valueOf(tableIDValue) : "";
|
||||||
|
int tableID = s.length() > 0 ? Integer.parseInt(s) : 0;
|
||||||
|
String recordUU = recordIDValue != null ? recordIDValue.toString() : "";
|
||||||
|
if(tableID <= 0)
|
||||||
|
return;
|
||||||
|
if (!MRole.getDefault().isTableAccess(tableID, false))
|
||||||
|
throw new AdempiereException(Msg.getMsg(Env.getCtx(), "AccessTableNoView"));
|
||||||
|
AEnv.zoomUU(tableID, recordUU);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void propertyChange(PropertyChangeEvent evt)
|
||||||
|
{
|
||||||
|
if (GridField.PROPERTY.equals(evt.getPropertyName()))
|
||||||
|
{
|
||||||
|
int tableID = tableIDValue != null ? Integer.parseInt(String.valueOf(tableIDValue)) : 0;
|
||||||
|
if (tableID > 0) {
|
||||||
|
MTable table = MTable.get(tableID);
|
||||||
|
String recordUU = Objects.toString(evt.getNewValue(), "");
|
||||||
|
if (tableID > 0 && recordUU.length() > 0)
|
||||||
|
table.getPOByUU(recordUU, null); // calls po.checkCrossTenant() method
|
||||||
|
|
||||||
|
}
|
||||||
|
setValue(evt.getNewValue(), false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toKeyValue(Object value) {
|
||||||
|
return value != null ? value.toString() : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getKeyColumn(MTable mTable) {
|
||||||
|
return PO.getUUIDColumnName(mTable.getTableName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String validateTableIdValue(int tableId) {
|
||||||
|
MTable table = MTable.get(tableId);
|
||||||
|
if (! table.hasUUIDKey())
|
||||||
|
return "TableHasNoKeyColumn";
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -38,6 +38,7 @@ import org.adempiere.webui.editor.WPasswordEditor;
|
||||||
import org.adempiere.webui.editor.WPaymentEditor;
|
import org.adempiere.webui.editor.WPaymentEditor;
|
||||||
import org.adempiere.webui.editor.WRadioGroupEditor;
|
import org.adempiere.webui.editor.WRadioGroupEditor;
|
||||||
import org.adempiere.webui.editor.WRecordIDEditor;
|
import org.adempiere.webui.editor.WRecordIDEditor;
|
||||||
|
import org.adempiere.webui.editor.WRecordUUIDEditor;
|
||||||
import org.adempiere.webui.editor.WSearchEditor;
|
import org.adempiere.webui.editor.WSearchEditor;
|
||||||
import org.adempiere.webui.editor.WStringEditor;
|
import org.adempiere.webui.editor.WStringEditor;
|
||||||
import org.adempiere.webui.editor.WTableDirEditor;
|
import org.adempiere.webui.editor.WTableDirEditor;
|
||||||
|
@ -232,9 +233,13 @@ public class DefaultEditorFactory implements IEditorFactory {
|
||||||
{
|
{
|
||||||
editor = new WTimeZoneEditor(gridField, tableEditor);
|
editor = new WTimeZoneEditor(gridField, tableEditor);
|
||||||
}
|
}
|
||||||
else if (displayType == DisplayType.RecordID || displayType == DisplayType.RecordUU)
|
else if (displayType == DisplayType.RecordID)
|
||||||
{
|
{
|
||||||
editor = new WRecordIDEditor(gridField, tableEditor, editorConfiguration);
|
editor = new WRecordIDEditor(gridField, tableEditor, editorConfiguration);
|
||||||
|
}
|
||||||
|
else if (displayType == DisplayType.RecordUU)
|
||||||
|
{
|
||||||
|
editor = new WRecordUUIDEditor(gridField, tableEditor, editorConfiguration);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
package org.adempiere.webui.info;
|
package org.adempiere.webui.info;
|
||||||
|
|
||||||
import org.compiere.model.GridField;
|
import org.compiere.model.GridField;
|
||||||
|
import org.compiere.model.MAsset;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -78,7 +79,7 @@ public class InfoAssetWindow extends InfoWindow {
|
||||||
super.saveSelectionDetail();
|
super.saveSelectionDetail();
|
||||||
|
|
||||||
// publish for Callout to read
|
// publish for Callout to read
|
||||||
Integer ID = getSelectedRowKey();
|
Integer ID = getIntSelectedRowKey(MAsset.Table_ID);
|
||||||
Env.setContext(Env.getCtx(), p_WindowNo, Env.TAB_INFO, "A_Asset_ID", ID == null ? "0" : ID.toString());
|
Env.setContext(Env.getCtx(), p_WindowNo, Env.TAB_INFO, "A_Asset_ID", ID == null ? "0" : ID.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ package org.adempiere.webui.info;
|
||||||
|
|
||||||
import org.adempiere.webui.panel.InvoiceHistory;
|
import org.adempiere.webui.panel.InvoiceHistory;
|
||||||
import org.compiere.model.GridField;
|
import org.compiere.model.GridField;
|
||||||
|
import org.compiere.model.MBPartner;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -86,7 +87,7 @@ public class InfoBPartnerWindow extends InfoWindow {
|
||||||
protected void showHistory()
|
protected void showHistory()
|
||||||
{
|
{
|
||||||
log.info("");
|
log.info("");
|
||||||
Integer C_BPartner_ID = getSelectedRowKey();
|
Integer C_BPartner_ID = getIntSelectedRowKey(MBPartner.Table_ID);
|
||||||
if (C_BPartner_ID == null)
|
if (C_BPartner_ID == null)
|
||||||
return;
|
return;
|
||||||
InvoiceHistory ih = new InvoiceHistory (this, C_BPartner_ID.intValue(),
|
InvoiceHistory ih = new InvoiceHistory (this, C_BPartner_ID.intValue(),
|
||||||
|
@ -105,7 +106,7 @@ public class InfoBPartnerWindow extends InfoWindow {
|
||||||
super.saveSelectionDetail();
|
super.saveSelectionDetail();
|
||||||
|
|
||||||
// publish for Callout to read
|
// publish for Callout to read
|
||||||
Integer ID = getSelectedRowKey();
|
Integer ID = getIntSelectedRowKey(MBPartner.Table_ID);
|
||||||
Env.setContext(Env.getCtx(), p_WindowNo, Env.TAB_INFO, "C_BPartner_ID", ID == null ? "0" : ID.toString());
|
Env.setContext(Env.getCtx(), p_WindowNo, Env.TAB_INFO, "C_BPartner_ID", ID == null ? "0" : ID.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
package org.adempiere.webui.info;
|
package org.adempiere.webui.info;
|
||||||
|
|
||||||
import org.compiere.model.GridField;
|
import org.compiere.model.GridField;
|
||||||
|
import org.compiere.model.MInvoice;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -76,7 +77,7 @@ public class InfoInvoiceWindow extends InfoWindow {
|
||||||
super.saveSelectionDetail();
|
super.saveSelectionDetail();
|
||||||
|
|
||||||
// publish for Callout to read
|
// publish for Callout to read
|
||||||
Integer ID = getSelectedRowKey();
|
Integer ID = getIntSelectedRowKey(MInvoice.Table_ID);
|
||||||
Env.setContext(Env.getCtx(), p_WindowNo, Env.TAB_INFO, "C_Invoice_ID", ID == null ? "0" : ID.toString());
|
Env.setContext(Env.getCtx(), p_WindowNo, Env.TAB_INFO, "C_Invoice_ID", ID == null ? "0" : ID.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,6 +57,7 @@ import org.compiere.minigrid.EmbedWinInfo;
|
||||||
import org.compiere.model.GridField;
|
import org.compiere.model.GridField;
|
||||||
import org.compiere.model.MDocType;
|
import org.compiere.model.MDocType;
|
||||||
import org.compiere.model.MInfoWindow;
|
import org.compiere.model.MInfoWindow;
|
||||||
|
import org.compiere.model.MProduct;
|
||||||
import org.compiere.model.MRole;
|
import org.compiere.model.MRole;
|
||||||
import org.compiere.model.MSysConfig;
|
import org.compiere.model.MSysConfig;
|
||||||
import org.compiere.util.DB;
|
import org.compiere.util.DB;
|
||||||
|
@ -366,7 +367,7 @@ public class InfoProductWindow extends InfoWindow {
|
||||||
public void onEvent(Event event) throws Exception {
|
public void onEvent(Event event) throws Exception {
|
||||||
if (contentPanel.getLayout() != null) {
|
if (contentPanel.getLayout() != null) {
|
||||||
int M_Warehouse_ID = getSelectedWarehouseId();
|
int M_Warehouse_ID = getSelectedWarehouseId();
|
||||||
Integer m_M_Product_ID = getSelectedRowKey();
|
Integer m_M_Product_ID = getIntSelectedRowKey(MProduct.Table_ID);
|
||||||
if (m_M_Product_ID != null)
|
if (m_M_Product_ID != null)
|
||||||
initAtpTab(M_Warehouse_ID, m_M_Product_ID);
|
initAtpTab(M_Warehouse_ID, m_M_Product_ID);
|
||||||
}
|
}
|
||||||
|
@ -470,7 +471,7 @@ public class InfoProductWindow extends InfoWindow {
|
||||||
* handle on click event for product attribute
|
* handle on click event for product attribute
|
||||||
*/
|
*/
|
||||||
protected void onPAttributeClick() {
|
protected void onPAttributeClick() {
|
||||||
Integer productInteger = getSelectedRowKey();
|
Integer productInteger = getIntSelectedRowKey(MProduct.Table_ID);
|
||||||
if (productInteger == null) {
|
if (productInteger == null) {
|
||||||
m_PAttributeButton.setEnabled(false);
|
m_PAttributeButton.setEnabled(false);
|
||||||
return;
|
return;
|
||||||
|
@ -707,7 +708,7 @@ public class InfoProductWindow extends InfoWindow {
|
||||||
*/
|
*/
|
||||||
protected void refresh(int M_Warehouse_ID, int M_PriceList_Version_ID)
|
protected void refresh(int M_Warehouse_ID, int M_PriceList_Version_ID)
|
||||||
{
|
{
|
||||||
int m_M_Product_ID = getSelectedRowKey();
|
int m_M_Product_ID = getIntSelectedRowKey(MProduct.Table_ID);
|
||||||
String sql = m_sqlWarehouse;
|
String sql = m_sqlWarehouse;
|
||||||
if (log.isLoggable(Level.FINEST)) log.finest(sql);
|
if (log.isLoggable(Level.FINEST)) log.finest(sql);
|
||||||
PreparedStatement pstmt = null;
|
PreparedStatement pstmt = null;
|
||||||
|
@ -951,7 +952,7 @@ public class InfoProductWindow extends InfoWindow {
|
||||||
@Override
|
@Override
|
||||||
protected void showHistory() {
|
protected void showHistory() {
|
||||||
log.info("");
|
log.info("");
|
||||||
Integer M_Product_ID = getSelectedRowKey();
|
Integer M_Product_ID = getIntSelectedRowKey(MProduct.Table_ID);
|
||||||
if (M_Product_ID == null)
|
if (M_Product_ID == null)
|
||||||
return;
|
return;
|
||||||
int M_Warehouse_ID = getSelectedWarehouseId();
|
int M_Warehouse_ID = getSelectedWarehouseId();
|
||||||
|
@ -991,7 +992,7 @@ public class InfoProductWindow extends InfoWindow {
|
||||||
String.valueOf(m_M_Locator_ID));
|
String.valueOf(m_M_Locator_ID));
|
||||||
}
|
}
|
||||||
// publish for Callout to read
|
// publish for Callout to read
|
||||||
Integer ID = getSelectedRowKey();
|
Integer ID = getIntSelectedRowKey(MProduct.Table_ID);
|
||||||
Env.setContext(Env.getCtx(), p_WindowNo, Env.TAB_INFO, "M_Product_ID", ID == null ? "0" : ID.toString());
|
Env.setContext(Env.getCtx(), p_WindowNo, Env.TAB_INFO, "M_Product_ID", ID == null ? "0" : ID.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,7 @@ import org.adempiere.webui.event.WTableModelEvent;
|
||||||
import org.adempiere.webui.util.ZKUpdateUtil;
|
import org.adempiere.webui.util.ZKUpdateUtil;
|
||||||
import org.compiere.minigrid.ColumnInfo;
|
import org.compiere.minigrid.ColumnInfo;
|
||||||
import org.compiere.minigrid.IDColumn;
|
import org.compiere.minigrid.IDColumn;
|
||||||
|
import org.compiere.model.MAsset;
|
||||||
import org.compiere.model.MLookupFactory;
|
import org.compiere.model.MLookupFactory;
|
||||||
import org.compiere.model.MQuery;
|
import org.compiere.model.MQuery;
|
||||||
import org.compiere.util.DisplayType;
|
import org.compiere.util.DisplayType;
|
||||||
|
@ -47,10 +48,10 @@ import org.zkoss.zk.ui.event.EventListener;
|
||||||
import org.zkoss.zk.ui.event.Events;
|
import org.zkoss.zk.ui.event.Events;
|
||||||
import org.zkoss.zul.Borderlayout;
|
import org.zkoss.zul.Borderlayout;
|
||||||
import org.zkoss.zul.Center;
|
import org.zkoss.zul.Center;
|
||||||
import org.zkoss.zul.North;
|
|
||||||
import org.zkoss.zul.South;
|
|
||||||
import org.zkoss.zul.Div;
|
import org.zkoss.zul.Div;
|
||||||
|
import org.zkoss.zul.North;
|
||||||
import org.zkoss.zul.Separator;
|
import org.zkoss.zul.Separator;
|
||||||
|
import org.zkoss.zul.South;
|
||||||
import org.zkoss.zul.Vbox;
|
import org.zkoss.zul.Vbox;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -358,7 +359,7 @@ public class InfoAssetPanel extends InfoPanel implements ValueChangeListener, Ev
|
||||||
|
|
||||||
// publish for Callout to read
|
// publish for Callout to read
|
||||||
|
|
||||||
Integer ID = getSelectedRowKey();
|
Integer ID = getIntSelectedRowKey(MAsset.Table_ID);
|
||||||
Env.setContext(Env.getCtx(), p_WindowNo, Env.TAB_INFO, "A_Asset_ID", ID == null ? "0" : ID.toString());
|
Env.setContext(Env.getCtx(), p_WindowNo, Env.TAB_INFO, "A_Asset_ID", ID == null ? "0" : ID.toString());
|
||||||
} // saveSelectionDetail
|
} // saveSelectionDetail
|
||||||
|
|
||||||
|
@ -389,7 +390,7 @@ public class InfoAssetPanel extends InfoPanel implements ValueChangeListener, Ev
|
||||||
public void zoom()
|
public void zoom()
|
||||||
{
|
{
|
||||||
log.info( "InfoAsset.zoom");
|
log.info( "InfoAsset.zoom");
|
||||||
Integer A_Asset_ID = getSelectedRowKey();
|
Integer A_Asset_ID = getIntSelectedRowKey(MAsset.Table_ID);
|
||||||
|
|
||||||
if (A_Asset_ID == null)
|
if (A_Asset_ID == null)
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -17,6 +17,9 @@
|
||||||
|
|
||||||
package org.adempiere.webui.panel;
|
package org.adempiere.webui.panel;
|
||||||
|
|
||||||
|
import static org.compiere.model.SystemIDs.COLUMN_S_RESOURCEASSIGNMENT_S_RESOURCE_ID;
|
||||||
|
import static org.compiere.model.SystemIDs.COLUMN_S_RESOURCE_S_RESOURCETYPE_ID;
|
||||||
|
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
|
@ -42,9 +45,8 @@ import org.compiere.minigrid.ColumnInfo;
|
||||||
import org.compiere.minigrid.IDColumn;
|
import org.compiere.minigrid.IDColumn;
|
||||||
import org.compiere.model.MLookupFactory;
|
import org.compiere.model.MLookupFactory;
|
||||||
import org.compiere.model.MQuery;
|
import org.compiere.model.MQuery;
|
||||||
|
import org.compiere.model.MResourceAssignment;
|
||||||
import static org.compiere.model.SystemIDs.*;
|
import org.compiere.model.SystemIDs;
|
||||||
|
|
||||||
import org.compiere.util.DB;
|
import org.compiere.util.DB;
|
||||||
import org.compiere.util.DisplayType;
|
import org.compiere.util.DisplayType;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
|
@ -54,10 +56,10 @@ import org.zkoss.zk.ui.event.EventListener;
|
||||||
import org.zkoss.zk.ui.event.Events;
|
import org.zkoss.zk.ui.event.Events;
|
||||||
import org.zkoss.zul.Borderlayout;
|
import org.zkoss.zul.Borderlayout;
|
||||||
import org.zkoss.zul.Center;
|
import org.zkoss.zul.Center;
|
||||||
import org.zkoss.zul.North;
|
|
||||||
import org.zkoss.zul.South;
|
|
||||||
import org.zkoss.zul.Div;
|
import org.zkoss.zul.Div;
|
||||||
|
import org.zkoss.zul.North;
|
||||||
import org.zkoss.zul.Separator;
|
import org.zkoss.zul.Separator;
|
||||||
|
import org.zkoss.zul.South;
|
||||||
import org.zkoss.zul.Vbox;
|
import org.zkoss.zul.Vbox;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -396,18 +398,19 @@ public class InfoAssignmentPanel extends InfoPanel implements EventListener<Even
|
||||||
|
|
||||||
public void zoom()
|
public void zoom()
|
||||||
{
|
{
|
||||||
if (getSelectedRowKey() != null && getSelectedRowKey() instanceof Integer && ((Integer)getSelectedRowKey()).intValue() > 0)
|
int id = getIntSelectedRowKey(MResourceAssignment.Table_ID);
|
||||||
|
if (id > 0)
|
||||||
{
|
{
|
||||||
MQuery zoomQuery = new MQuery(); // ColumnName might be changed in MTab.validateQuery
|
MQuery zoomQuery = new MQuery(); // ColumnName might be changed in MTab.validateQuery
|
||||||
String column = getKeyColumn();
|
String column = getKeyColumn();
|
||||||
//strip off table name, fully qualify name doesn't work when zoom into detail tab
|
//strip off table name, fully qualify name doesn't work when zoom into detail tab
|
||||||
if (column.indexOf(".") > 0)
|
if (column.indexOf(".") > 0)
|
||||||
column = column.substring(column.indexOf(".")+1);
|
column = column.substring(column.indexOf(".")+1);
|
||||||
zoomQuery.addRestriction(column, MQuery.EQUAL, getSelectedRowKey());
|
zoomQuery.addRestriction(column, MQuery.EQUAL, id);
|
||||||
zoomQuery.setRecordCount(1);
|
zoomQuery.setRecordCount(1);
|
||||||
zoomQuery.setTableName(column.substring(0, column.length() - 3));
|
zoomQuery.setTableName(column.substring(0, column.length() - 3));
|
||||||
|
|
||||||
AEnv.zoom(236, zoomQuery);
|
AEnv.zoom(SystemIDs.WINDOW_RESOURCE, zoomQuery);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,7 @@ import org.adempiere.webui.event.WTableModelListener;
|
||||||
import org.adempiere.webui.util.ZKUpdateUtil;
|
import org.adempiere.webui.util.ZKUpdateUtil;
|
||||||
import org.compiere.minigrid.ColumnInfo;
|
import org.compiere.minigrid.ColumnInfo;
|
||||||
import org.compiere.minigrid.IDColumn;
|
import org.compiere.minigrid.IDColumn;
|
||||||
|
import org.compiere.model.MBPartner;
|
||||||
import org.compiere.model.MQuery;
|
import org.compiere.model.MQuery;
|
||||||
import org.compiere.util.CLogger;
|
import org.compiere.util.CLogger;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
|
@ -510,7 +511,7 @@ public class InfoBPartnerPanel extends InfoPanel implements EventListener<Event>
|
||||||
C_BPartner_Location_ID = ((KeyNamePair)data).getKey();
|
C_BPartner_Location_ID = ((KeyNamePair)data).getKey();
|
||||||
}
|
}
|
||||||
// publish for Callout to read
|
// publish for Callout to read
|
||||||
Integer ID = getSelectedRowKey();
|
Integer ID = getIntSelectedRowKey(MBPartner.Table_ID);
|
||||||
Env.setContext(Env.getCtx(), p_WindowNo, Env.TAB_INFO, "C_BPartner_ID", ID == null ? "0" : ID.toString());
|
Env.setContext(Env.getCtx(), p_WindowNo, Env.TAB_INFO, "C_BPartner_ID", ID == null ? "0" : ID.toString());
|
||||||
Env.setContext(Env.getCtx(), p_WindowNo, Env.TAB_INFO, "AD_User_ID", String.valueOf(AD_User_ID));
|
Env.setContext(Env.getCtx(), p_WindowNo, Env.TAB_INFO, "AD_User_ID", String.valueOf(AD_User_ID));
|
||||||
Env.setContext(Env.getCtx(), p_WindowNo, Env.TAB_INFO, "C_BPartner_Location_ID", String.valueOf(C_BPartner_Location_ID));
|
Env.setContext(Env.getCtx(), p_WindowNo, Env.TAB_INFO, "C_BPartner_Location_ID", String.valueOf(C_BPartner_Location_ID));
|
||||||
|
@ -524,7 +525,7 @@ public class InfoBPartnerPanel extends InfoPanel implements EventListener<Event>
|
||||||
protected void showHistory()
|
protected void showHistory()
|
||||||
{
|
{
|
||||||
log.info("");
|
log.info("");
|
||||||
Integer C_BPartner_ID = getSelectedRowKey();
|
Integer C_BPartner_ID = getIntSelectedRowKey(MBPartner.Table_ID);
|
||||||
if (C_BPartner_ID == null)
|
if (C_BPartner_ID == null)
|
||||||
return;
|
return;
|
||||||
InvoiceHistory ih = new InvoiceHistory (this, C_BPartner_ID.intValue(),
|
InvoiceHistory ih = new InvoiceHistory (this, C_BPartner_ID.intValue(),
|
||||||
|
@ -548,7 +549,7 @@ public class InfoBPartnerPanel extends InfoPanel implements EventListener<Event>
|
||||||
public void zoom()
|
public void zoom()
|
||||||
{
|
{
|
||||||
log.info( "InfoBPartner.zoom");
|
log.info( "InfoBPartner.zoom");
|
||||||
Integer C_BPartner_ID = getSelectedRowKey();
|
Integer C_BPartner_ID = getIntSelectedRowKey(MBPartner.Table_ID);
|
||||||
if (C_BPartner_ID == null)
|
if (C_BPartner_ID == null)
|
||||||
return;
|
return;
|
||||||
// AEnv.zoom(MBPartner.Table_ID, C_BPartner_ID.intValue(), true); // SO
|
// AEnv.zoom(MBPartner.Table_ID, C_BPartner_ID.intValue(), true); // SO
|
||||||
|
|
|
@ -502,7 +502,7 @@ public class InfoGeneralPanel extends InfoPanel implements EventListener<Event>
|
||||||
+ " (f.IsEncrypted='N' AND f.ObscureType IS NULL)) "
|
+ " (f.IsEncrypted='N' AND f.ObscureType IS NULL)) "
|
||||||
+ " AND c.IsActive = 'Y' "
|
+ " AND c.IsActive = 'Y' "
|
||||||
+ "ORDER BY ");
|
+ "ORDER BY ");
|
||||||
if (table.isUUIDKeyTable())
|
if (table.isUUIDKeyTable() || p_keyColumn.endsWith("_UU"))
|
||||||
sqlc.append("CASE WHEN c.columnname=").append(DB.TO_STRING(uucolName)).append("THEN 0 ELSE 1 END");
|
sqlc.append("CASE WHEN c.columnname=").append(DB.TO_STRING(uucolName)).append("THEN 0 ELSE 1 END");
|
||||||
else
|
else
|
||||||
sqlc.append("c.IsKey DESC");
|
sqlc.append("c.IsKey DESC");
|
||||||
|
@ -514,6 +514,7 @@ public class InfoGeneralPanel extends InfoPanel implements EventListener<Event>
|
||||||
pstmt.setInt(1, AD_Table_ID);
|
pstmt.setInt(1, AD_Table_ID);
|
||||||
pstmt.setInt(2, AD_Window_ID);
|
pstmt.setInt(2, AD_Window_ID);
|
||||||
rs = pstmt.executeQuery();
|
rs = pstmt.executeQuery();
|
||||||
|
boolean keyDefined = false;
|
||||||
while (rs.next())
|
while (rs.next())
|
||||||
{
|
{
|
||||||
String columnName = rs.getString(1);
|
String columnName = rs.getString(1);
|
||||||
|
@ -534,11 +535,12 @@ public class InfoGeneralPanel extends InfoPanel implements EventListener<Event>
|
||||||
StringBuffer colSql = new StringBuffer(columnSql);
|
StringBuffer colSql = new StringBuffer(columnSql);
|
||||||
Class<?> colClass = null;
|
Class<?> colClass = null;
|
||||||
|
|
||||||
if (isKey)
|
if (isKey && !keyDefined)
|
||||||
colClass = IDColumn.class;
|
colClass = IDColumn.class;
|
||||||
else if (uucolName.equals(columnName) && table.isUUIDKeyTable())
|
else if (uucolName.equals(columnName) && (table.isUUIDKeyTable() || p_keyColumn.endsWith("_UU"))) {
|
||||||
colClass = UUIDColumn.class;
|
colClass = UUIDColumn.class;
|
||||||
else if (!isDisplayed)
|
keyDefined = true;
|
||||||
|
} else if (!isDisplayed)
|
||||||
;
|
;
|
||||||
else if (displayType == DisplayType.YesNo)
|
else if (displayType == DisplayType.YesNo)
|
||||||
colClass = Boolean.class;
|
colClass = Boolean.class;
|
||||||
|
|
|
@ -41,6 +41,7 @@ import org.adempiere.webui.event.WTableModelEvent;
|
||||||
import org.adempiere.webui.util.ZKUpdateUtil;
|
import org.adempiere.webui.util.ZKUpdateUtil;
|
||||||
import org.compiere.minigrid.ColumnInfo;
|
import org.compiere.minigrid.ColumnInfo;
|
||||||
import org.compiere.minigrid.IDColumn;
|
import org.compiere.minigrid.IDColumn;
|
||||||
|
import org.compiere.model.MInOut;
|
||||||
import org.compiere.model.MLookupFactory;
|
import org.compiere.model.MLookupFactory;
|
||||||
import org.compiere.model.MQuery;
|
import org.compiere.model.MQuery;
|
||||||
import org.compiere.util.DisplayType;
|
import org.compiere.util.DisplayType;
|
||||||
|
@ -52,11 +53,11 @@ import org.zkoss.zk.ui.event.EventListener;
|
||||||
import org.zkoss.zk.ui.event.Events;
|
import org.zkoss.zk.ui.event.Events;
|
||||||
import org.zkoss.zul.Borderlayout;
|
import org.zkoss.zul.Borderlayout;
|
||||||
import org.zkoss.zul.Center;
|
import org.zkoss.zul.Center;
|
||||||
import org.zkoss.zul.North;
|
|
||||||
import org.zkoss.zul.South;
|
|
||||||
import org.zkoss.zul.Div;
|
import org.zkoss.zul.Div;
|
||||||
import org.zkoss.zul.Hbox;
|
import org.zkoss.zul.Hbox;
|
||||||
|
import org.zkoss.zul.North;
|
||||||
import org.zkoss.zul.Separator;
|
import org.zkoss.zul.Separator;
|
||||||
|
import org.zkoss.zul.South;
|
||||||
import org.zkoss.zul.Vbox;
|
import org.zkoss.zul.Vbox;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -414,7 +415,7 @@ public class InfoInOutPanel extends InfoPanel implements ValueChangeListener, Ev
|
||||||
public void zoom()
|
public void zoom()
|
||||||
{
|
{
|
||||||
log.info( "InfoInOut.zoom");
|
log.info( "InfoInOut.zoom");
|
||||||
Integer M_InOut_ID = getSelectedRowKey();
|
Integer M_InOut_ID = getIntSelectedRowKey(MInOut.Table_ID);
|
||||||
if (M_InOut_ID == null)
|
if (M_InOut_ID == null)
|
||||||
return;
|
return;
|
||||||
MQuery query = new MQuery("M_InOut");
|
MQuery query = new MQuery("M_InOut");
|
||||||
|
|
|
@ -42,6 +42,7 @@ import org.adempiere.webui.event.WTableModelEvent;
|
||||||
import org.adempiere.webui.util.ZKUpdateUtil;
|
import org.adempiere.webui.util.ZKUpdateUtil;
|
||||||
import org.compiere.minigrid.ColumnInfo;
|
import org.compiere.minigrid.ColumnInfo;
|
||||||
import org.compiere.minigrid.IDColumn;
|
import org.compiere.minigrid.IDColumn;
|
||||||
|
import org.compiere.model.MInvoice;
|
||||||
import org.compiere.model.MLookup;
|
import org.compiere.model.MLookup;
|
||||||
import org.compiere.model.MLookupFactory;
|
import org.compiere.model.MLookupFactory;
|
||||||
import org.compiere.model.MQuery;
|
import org.compiere.model.MQuery;
|
||||||
|
@ -53,11 +54,11 @@ import org.compiere.util.Util;
|
||||||
import org.zkoss.zk.ui.WrongValueException;
|
import org.zkoss.zk.ui.WrongValueException;
|
||||||
import org.zkoss.zul.Borderlayout;
|
import org.zkoss.zul.Borderlayout;
|
||||||
import org.zkoss.zul.Center;
|
import org.zkoss.zul.Center;
|
||||||
import org.zkoss.zul.North;
|
|
||||||
import org.zkoss.zul.South;
|
|
||||||
import org.zkoss.zul.Div;
|
import org.zkoss.zul.Div;
|
||||||
import org.zkoss.zul.Hbox;
|
import org.zkoss.zul.Hbox;
|
||||||
|
import org.zkoss.zul.North;
|
||||||
import org.zkoss.zul.Separator;
|
import org.zkoss.zul.Separator;
|
||||||
|
import org.zkoss.zul.South;
|
||||||
import org.zkoss.zul.Vbox;
|
import org.zkoss.zul.Vbox;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -544,7 +545,7 @@ public class InfoInvoicePanel extends InfoPanel implements ValueChangeListener
|
||||||
public void zoom()
|
public void zoom()
|
||||||
{
|
{
|
||||||
log.info( "InfoInvoice.zoom");
|
log.info( "InfoInvoice.zoom");
|
||||||
Integer C_Invoice_ID = getSelectedRowKey();
|
Integer C_Invoice_ID = getIntSelectedRowKey(MInvoice.Table_ID);
|
||||||
if (C_Invoice_ID == null)
|
if (C_Invoice_ID == null)
|
||||||
return;
|
return;
|
||||||
MQuery query = new MQuery("C_Invoice");
|
MQuery query = new MQuery("C_Invoice");
|
||||||
|
@ -584,7 +585,7 @@ public class InfoInvoicePanel extends InfoPanel implements ValueChangeListener
|
||||||
protected void saveSelectionDetail()
|
protected void saveSelectionDetail()
|
||||||
{
|
{
|
||||||
// publish for Callout to read
|
// publish for Callout to read
|
||||||
Integer ID = getSelectedRowKey();
|
Integer ID = getIntSelectedRowKey(MInvoice.Table_ID);
|
||||||
Env.setContext(Env.getCtx(), p_WindowNo, Env.TAB_INFO, "C_Invoice_ID", ID == null ? "0" : ID.toString());
|
Env.setContext(Env.getCtx(), p_WindowNo, Env.TAB_INFO, "C_Invoice_ID", ID == null ? "0" : ID.toString());
|
||||||
//
|
//
|
||||||
int C_InvoicePaySchedule_ID = 0;
|
int C_InvoicePaySchedule_ID = 0;
|
||||||
|
|
|
@ -44,6 +44,7 @@ import org.compiere.minigrid.ColumnInfo;
|
||||||
import org.compiere.minigrid.IDColumn;
|
import org.compiere.minigrid.IDColumn;
|
||||||
import org.compiere.model.MLookup;
|
import org.compiere.model.MLookup;
|
||||||
import org.compiere.model.MLookupFactory;
|
import org.compiere.model.MLookupFactory;
|
||||||
|
import org.compiere.model.MOrder;
|
||||||
import org.compiere.model.MQuery;
|
import org.compiere.model.MQuery;
|
||||||
import org.compiere.util.DisplayType;
|
import org.compiere.util.DisplayType;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
|
@ -52,11 +53,11 @@ import org.compiere.util.Util;
|
||||||
import org.zkoss.zk.ui.WrongValueException;
|
import org.zkoss.zk.ui.WrongValueException;
|
||||||
import org.zkoss.zul.Borderlayout;
|
import org.zkoss.zul.Borderlayout;
|
||||||
import org.zkoss.zul.Center;
|
import org.zkoss.zul.Center;
|
||||||
import org.zkoss.zul.North;
|
|
||||||
import org.zkoss.zul.South;
|
|
||||||
import org.zkoss.zul.Div;
|
import org.zkoss.zul.Div;
|
||||||
import org.zkoss.zul.Hbox;
|
import org.zkoss.zul.Hbox;
|
||||||
|
import org.zkoss.zul.North;
|
||||||
import org.zkoss.zul.Separator;
|
import org.zkoss.zul.Separator;
|
||||||
|
import org.zkoss.zul.South;
|
||||||
import org.zkoss.zul.Vbox;
|
import org.zkoss.zul.Vbox;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -515,7 +516,7 @@ public class InfoOrderPanel extends InfoPanel implements ValueChangeListener
|
||||||
public void zoom()
|
public void zoom()
|
||||||
{
|
{
|
||||||
log.info("");
|
log.info("");
|
||||||
Integer C_Order_ID = getSelectedRowKey();
|
Integer C_Order_ID = getIntSelectedRowKey(MOrder.Table_ID);
|
||||||
if (C_Order_ID == null)
|
if (C_Order_ID == null)
|
||||||
return;
|
return;
|
||||||
MQuery query = new MQuery("C_Order");
|
MQuery query = new MQuery("C_Order");
|
||||||
|
|
|
@ -133,7 +133,7 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = -6216075383041481835L;
|
private static final long serialVersionUID = -3055980415629613992L;
|
||||||
|
|
||||||
protected static final String ON_USER_QUERY_ATTR = "ON_USER_QUERY";
|
protected static final String ON_USER_QUERY_ATTR = "ON_USER_QUERY";
|
||||||
protected static final String INFO_QUERY_TIME_OUT_ERROR = "InfoQueryTimeOutError";
|
protected static final String INFO_QUERY_TIME_OUT_ERROR = "InfoQueryTimeOutError";
|
||||||
|
@ -1538,6 +1538,26 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
|
||||||
return key;
|
return key;
|
||||||
} // getSelectedRowKey
|
} // getSelectedRowKey
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the integer key of currently selected row
|
||||||
|
* @param tableId
|
||||||
|
* @return selected key
|
||||||
|
*/
|
||||||
|
protected Integer getIntSelectedRowKey(int tableId)
|
||||||
|
{
|
||||||
|
Object key = getSelectedRowKey();
|
||||||
|
|
||||||
|
if (key == null)
|
||||||
|
return Integer.valueOf(-1);
|
||||||
|
|
||||||
|
if (key instanceof Integer)
|
||||||
|
return (Integer) key;
|
||||||
|
|
||||||
|
MTable table = MTable.get(tableId);
|
||||||
|
table.getPOByUU((String) key, null);
|
||||||
|
return Integer.valueOf(table.get_ID());
|
||||||
|
} // getIntSelectedRowKey
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the keys of selected row/s based on layout defined in prepareTable
|
* Get the keys of selected row/s based on layout defined in prepareTable
|
||||||
* @deprecated
|
* @deprecated
|
||||||
|
|
|
@ -42,6 +42,7 @@ import org.adempiere.webui.util.ZKUpdateUtil;
|
||||||
import org.compiere.minigrid.ColumnInfo;
|
import org.compiere.minigrid.ColumnInfo;
|
||||||
import org.compiere.minigrid.IDColumn;
|
import org.compiere.minigrid.IDColumn;
|
||||||
import org.compiere.model.MLookupFactory;
|
import org.compiere.model.MLookupFactory;
|
||||||
|
import org.compiere.model.MPayment;
|
||||||
import org.compiere.model.MQuery;
|
import org.compiere.model.MQuery;
|
||||||
import org.compiere.util.DisplayType;
|
import org.compiere.util.DisplayType;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
|
@ -477,7 +478,7 @@ public class InfoPaymentPanel extends InfoPanel implements ValueChangeListener,
|
||||||
public void zoom()
|
public void zoom()
|
||||||
{
|
{
|
||||||
log.info( "InfoPayment.zoom");
|
log.info( "InfoPayment.zoom");
|
||||||
Integer C_Payment_ID = getSelectedRowKey();
|
Integer C_Payment_ID = getIntSelectedRowKey(MPayment.Table_ID);
|
||||||
if (C_Payment_ID == null)
|
if (C_Payment_ID == null)
|
||||||
return;
|
return;
|
||||||
MQuery query = new MQuery("C_Payment");
|
MQuery query = new MQuery("C_Payment");
|
||||||
|
|
|
@ -69,6 +69,7 @@ import org.adempiere.webui.util.ZKUpdateUtil;
|
||||||
import org.compiere.minigrid.ColumnInfo;
|
import org.compiere.minigrid.ColumnInfo;
|
||||||
import org.compiere.minigrid.IDColumn;
|
import org.compiere.minigrid.IDColumn;
|
||||||
import org.compiere.model.MDocType;
|
import org.compiere.model.MDocType;
|
||||||
|
import org.compiere.model.MProduct;
|
||||||
import org.compiere.model.MQuery;
|
import org.compiere.model.MQuery;
|
||||||
import org.compiere.model.MRole;
|
import org.compiere.model.MRole;
|
||||||
import org.compiere.util.CLogMgt;
|
import org.compiere.util.CLogMgt;
|
||||||
|
@ -690,7 +691,7 @@ public class InfoProductPanel extends InfoPanel implements EventListener<Event>
|
||||||
rs = null; pstmt = null;
|
rs = null; pstmt = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_M_Product_ID = getSelectedRowKey();
|
m_M_Product_ID = getIntSelectedRowKey(MProduct.Table_ID);
|
||||||
sql = "SELECT DocumentNote FROM M_Product WHERE M_Product_ID=?";
|
sql = "SELECT DocumentNote FROM M_Product WHERE M_Product_ID=?";
|
||||||
fieldDescription.setText(DB.getSQLValueString(null, sql, m_M_Product_ID));
|
fieldDescription.setText(DB.getSQLValueString(null, sql, m_M_Product_ID));
|
||||||
|
|
||||||
|
@ -1170,7 +1171,7 @@ public class InfoProductPanel extends InfoPanel implements EventListener<Event>
|
||||||
protected void showHistory()
|
protected void showHistory()
|
||||||
{
|
{
|
||||||
log.info("");
|
log.info("");
|
||||||
Integer M_Product_ID = getSelectedRowKey();
|
Integer M_Product_ID = getIntSelectedRowKey(MProduct.Table_ID);
|
||||||
if (M_Product_ID == null)
|
if (M_Product_ID == null)
|
||||||
return;
|
return;
|
||||||
int M_Warehouse_ID = 0;
|
int M_Warehouse_ID = 0;
|
||||||
|
@ -1204,7 +1205,7 @@ public class InfoProductPanel extends InfoPanel implements EventListener<Event>
|
||||||
public void zoom()
|
public void zoom()
|
||||||
{
|
{
|
||||||
log.info("");
|
log.info("");
|
||||||
Integer M_Product_ID = getSelectedRowKey();
|
Integer M_Product_ID = getIntSelectedRowKey(MProduct.Table_ID);
|
||||||
if (M_Product_ID == null)
|
if (M_Product_ID == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -1248,7 +1249,7 @@ public class InfoProductPanel extends InfoPanel implements EventListener<Event>
|
||||||
protected void saveSelectionDetail()
|
protected void saveSelectionDetail()
|
||||||
{
|
{
|
||||||
// publish for Callout to read
|
// publish for Callout to read
|
||||||
Integer ID = getSelectedRowKey();
|
Integer ID = getIntSelectedRowKey(MProduct.Table_ID);
|
||||||
Env.setContext(Env.getCtx(), p_WindowNo, Env.TAB_INFO, "M_Product_ID", ID == null ? "0" : ID.toString());
|
Env.setContext(Env.getCtx(), p_WindowNo, Env.TAB_INFO, "M_Product_ID", ID == null ? "0" : ID.toString());
|
||||||
ListItem pickPL = (ListItem)pickPriceList.getSelectedItem();
|
ListItem pickPL = (ListItem)pickPriceList.getSelectedItem();
|
||||||
if (pickPL!=null)
|
if (pickPL!=null)
|
||||||
|
@ -1399,7 +1400,7 @@ public class InfoProductPanel extends InfoPanel implements EventListener<Event>
|
||||||
int row = contentPanel != null ? contentPanel.getSelectedRow() : -1;
|
int row = contentPanel != null ? contentPanel.getSelectedRow() : -1;
|
||||||
if (component.equals(m_PAttributeButton) && row != -1)
|
if (component.equals(m_PAttributeButton) && row != -1)
|
||||||
{
|
{
|
||||||
Integer productInteger = getSelectedRowKey();
|
Integer productInteger = getIntSelectedRowKey(MProduct.Table_ID);
|
||||||
String productName = (String)contentPanel.getValueAt(row, INDEX_NAME);
|
String productName = (String)contentPanel.getValueAt(row, INDEX_NAME);
|
||||||
|
|
||||||
ListItem warehouse = pickWarehouse.getSelectedItem();
|
ListItem warehouse = pickWarehouse.getSelectedItem();
|
||||||
|
|
|
@ -31,7 +31,7 @@ import org.adempiere.webui.component.ConfirmPanel;
|
||||||
import org.adempiere.webui.component.Textbox;
|
import org.adempiere.webui.component.Textbox;
|
||||||
import org.adempiere.webui.component.Window;
|
import org.adempiere.webui.component.Window;
|
||||||
import org.adempiere.webui.editor.WEditor;
|
import org.adempiere.webui.editor.WEditor;
|
||||||
import org.adempiere.webui.editor.WRecordIDEditor;
|
import org.adempiere.webui.editor.WRecordEditor;
|
||||||
import org.adempiere.webui.editor.WSearchEditor;
|
import org.adempiere.webui.editor.WSearchEditor;
|
||||||
import org.adempiere.webui.editor.WTableDirEditor;
|
import org.adempiere.webui.editor.WTableDirEditor;
|
||||||
import org.adempiere.webui.event.ValueChangeEvent;
|
import org.adempiere.webui.event.ValueChangeEvent;
|
||||||
|
@ -44,6 +44,7 @@ import org.compiere.model.PO;
|
||||||
import org.compiere.util.DisplayType;
|
import org.compiere.util.DisplayType;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
import org.compiere.util.Msg;
|
import org.compiere.util.Msg;
|
||||||
|
import org.compiere.util.Util;
|
||||||
import org.zkoss.zhtml.Text;
|
import org.zkoss.zhtml.Text;
|
||||||
import org.zkoss.zk.ui.HtmlBasedComponent;
|
import org.zkoss.zk.ui.HtmlBasedComponent;
|
||||||
import org.zkoss.zk.ui.Page;
|
import org.zkoss.zk.ui.Page;
|
||||||
|
@ -60,14 +61,13 @@ import org.zkoss.zul.Vlayout;
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class WRecordIDDialog extends Window implements EventListener<Event>, ValueChangeListener {
|
public class WRecordIDDialog extends Window implements EventListener<Event>, ValueChangeListener {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* generated serial id
|
* generated serial id
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 8126107952514403099L;
|
private static final long serialVersionUID = 1791159320699080384L;
|
||||||
|
|
||||||
/** Record_ID editor from which the window is opened */
|
/** Record_ID editor from which the window is opened */
|
||||||
private WRecordIDEditor editor;
|
private WRecordEditor<?> editor;
|
||||||
/** Current tab's AD_Table_ID GrodField */
|
/** Current tab's AD_Table_ID GrodField */
|
||||||
private GridField tableIDGridField;
|
private GridField tableIDGridField;
|
||||||
/** Current Record_ID value from {@link #editor} */
|
/** Current Record_ID value from {@link #editor} */
|
||||||
|
@ -93,7 +93,7 @@ public class WRecordIDDialog extends Window implements EventListener<Event>, Val
|
||||||
* @param editor
|
* @param editor
|
||||||
* @param tableIDGridField
|
* @param tableIDGridField
|
||||||
*/
|
*/
|
||||||
public WRecordIDDialog(Page page, WRecordIDEditor editor, GridField tableIDGridField) {
|
public WRecordIDDialog(Page page, WRecordEditor<?> editor, GridField tableIDGridField) {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
this.editor = editor;
|
this.editor = editor;
|
||||||
|
@ -109,17 +109,7 @@ public class WRecordIDDialog extends Window implements EventListener<Event>, Val
|
||||||
|
|
||||||
|
|
||||||
this.tableIDGridField = tableIDGridField;
|
this.tableIDGridField = tableIDGridField;
|
||||||
if(editor.getValue() instanceof Integer) {
|
this.recordIDValue = editor.toKeyValue(editor.getValue());
|
||||||
this.recordIDValue = (Integer)editor.getValue();
|
|
||||||
} else {
|
|
||||||
if (editor.getValue() == null)
|
|
||||||
this.recordIDValue = null;
|
|
||||||
else {
|
|
||||||
MTable table = MTable.get(tableIDValue);
|
|
||||||
if (editor.getValue() instanceof String && table != null && table.isUUIDKeyTable())
|
|
||||||
this.recordIDValue = editor.getValue().toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
init(page);
|
init(page);
|
||||||
}
|
}
|
||||||
|
@ -145,7 +135,7 @@ public class WRecordIDDialog extends Window implements EventListener<Event>, Val
|
||||||
int tableID = tableIDValue != null ? tableIDValue.intValue() : 0;
|
int tableID = tableIDValue != null ? tableIDValue.intValue() : 0;
|
||||||
MLookup recordsLookup = editor.getRecordsLookup(tableID);
|
MLookup recordsLookup = editor.getRecordsLookup(tableID);
|
||||||
if(recordsLookup != null)
|
if(recordsLookup != null)
|
||||||
recordsEditor = new WSearchEditor("Record_ID", false, false, true, recordsLookup);
|
recordsEditor = new WSearchEditor(editor.getColumnName(), false, false, true, recordsLookup);
|
||||||
|
|
||||||
setPage(page);
|
setPage(page);
|
||||||
setClosable(true);
|
setClosable(true);
|
||||||
|
@ -159,13 +149,13 @@ public class WRecordIDDialog extends Window implements EventListener<Event>, Val
|
||||||
if (editor.getGridField().getGridTab() != null) {
|
if (editor.getGridField().getGridTab() != null) {
|
||||||
parentTextBox = new Textbox();
|
parentTextBox = new Textbox();
|
||||||
parentTextBox.setReadonly(true);
|
parentTextBox.setReadonly(true);
|
||||||
MTable table = MTable.get(tableID);
|
MTable parentTable = MTable.get(editor.getGridField().getGridTab().getAD_Table_ID());
|
||||||
Object recordId;
|
Object parentRecordId;
|
||||||
if (table.isUUIDKeyTable())
|
if (parentTable.isUUIDKeyTable())
|
||||||
recordId = editor.getGridField().getGridTab().getValue(PO.getUUIDColumnName(table.getTableName()));
|
parentRecordId = editor.getGridField().getGridTab().getValue(PO.getUUIDColumnName(parentTable.getTableName()));
|
||||||
else
|
else
|
||||||
recordId = editor.getGridField().getGridTab().getRecord_ID();
|
parentRecordId = editor.getGridField().getGridTab().getRecord_ID();
|
||||||
parentTextBox.setValue(editor.getIdentifier(tableID, recordId));
|
parentTextBox.setValue(editor.getParentIdentifier(parentTable.getAD_Table_ID(), parentRecordId));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (recordsEditor != null)
|
if (recordsEditor != null)
|
||||||
|
@ -233,10 +223,9 @@ public class WRecordIDDialog extends Window implements EventListener<Event>, Val
|
||||||
if (evt.getSource().equals(tableIDEditor)) {
|
if (evt.getSource().equals(tableIDEditor)) {
|
||||||
int tableID = Integer.parseInt(Objects.toString(evt.getNewValue(), "-1"));
|
int tableID = Integer.parseInt(Objects.toString(evt.getNewValue(), "-1"));
|
||||||
if (tableID > 0) {
|
if (tableID > 0) {
|
||||||
MTable table = MTable.get(tableID);
|
String error = editor.validateTableIdValue(tableID);
|
||||||
if (table.isUUIDKeyTable()) {
|
if (!Util.isEmpty(error)) {
|
||||||
if (! editor.getColumnName().endsWith("_UU"))
|
throw new WrongValueException(tableIDEditor.getComponent(), Msg.getMsg(Env.getCtx(), error));
|
||||||
throw new WrongValueException(tableIDEditor.getComponent(), Msg.getMsg(Env.getCtx(), "UUTableNotCompatibleWithRecordID"));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -248,7 +237,7 @@ public class WRecordIDDialog extends Window implements EventListener<Event>, Val
|
||||||
}
|
}
|
||||||
MLookup recordsLookup = editor.getRecordsLookup(tableID);
|
MLookup recordsLookup = editor.getRecordsLookup(tableID);
|
||||||
if(recordsLookup != null) {
|
if(recordsLookup != null) {
|
||||||
recordsEditor = new WSearchEditor("Record_ID", false, false, true, recordsLookup);
|
recordsEditor = new WSearchEditor(editor.getColumnName(), false, false, true, recordsLookup);
|
||||||
labelsDiv.appendChild(recordsEditorLabel);
|
labelsDiv.appendChild(recordsEditorLabel);
|
||||||
fieldsDiv.appendChild(recordsEditor.getComponent());
|
fieldsDiv.appendChild(recordsEditor.getComponent());
|
||||||
recordsEditor.getComponent().focus();
|
recordsEditor.getComponent().focus();
|
||||||
|
|
Loading…
Reference in New Issue