From cc18b9f146f9674641db2c8339426366b17ac134 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Fri, 21 Aug 2015 07:37:06 -0500 Subject: [PATCH 01/10] IDEMPIERE-2779 Financial Report can be broken if include source accounts with no transaction --- .../src/org/compiere/report/FinReport.java | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/org.adempiere.base/src/org/compiere/report/FinReport.java b/org.adempiere.base/src/org/compiere/report/FinReport.java index 2c635eecb2..e4948487cd 100644 --- a/org.adempiere.base/src/org/compiere/report/FinReport.java +++ b/org.adempiere.base/src/org/compiere/report/FinReport.java @@ -1429,18 +1429,6 @@ public class FinReport extends SvrProcess sb.append (")"); unionWhere.append(sb.toString ()); } - // Posting Type - String PostingType = m_lines[line].getPostingType(); - if (PostingType != null && PostingType.length() > 0) - { - if (unionWhere.length() > 0) - unionWhere.append(" AND "); - unionWhere.append("PostingType='" + PostingType + "'"); - if (MReportLine.POSTINGTYPE_Budget.equals(PostingType)) { - if (m_lines[line].getGL_Budget_ID() > 0) - unionWhere.append(" AND GL_Budget_ID=" + m_lines[line].getGL_Budget_ID()); - } - } } // From 2f0204288c19f1b9f3814ca998d0d7cb5bbacb00 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Fri, 21 Aug 2015 14:16:17 -0500 Subject: [PATCH 02/10] IDEMPIERE-2781 Client Field empty when adding a record on System / IDEMPIERE-2672 --- .../src/org/compiere/model/GridField.java | 27 ++++++++++++++----- .../src/org/compiere/model/GridTab.java | 7 +++-- .../src/org/compiere/model/MLookup.java | 13 ++++++--- .../webui/editor/WPAttributeEditor.java | 5 ++-- 4 files changed, 34 insertions(+), 18 deletions(-) diff --git a/org.adempiere.base/src/org/compiere/model/GridField.java b/org.adempiere.base/src/org/compiere/model/GridField.java index 3e87c08998..258121fe44 100644 --- a/org.adempiere.base/src/org/compiere/model/GridField.java +++ b/org.adempiere.base/src/org/compiere/model/GridField.java @@ -278,8 +278,11 @@ public class GridField */ public boolean refreshLookup() { - // if there is a validation string, the lookup is unstable - if (m_lookup == null || m_lookup.getValidation().length() == 0) + if (m_lookup == null) + return true; + + // if there is a validation string, the lookup is unstable - read-only fields are not loaded initially + if (m_lookup.getValidation().length() == 0 && m_lookup.isLoaded()) return true; // if (log.isLoggable(Level.FINE)) log.fine("(" + m_vo.ColumnName + ")"); @@ -836,7 +839,7 @@ public class GridField // need to re-set invalid values - OK BPartner in PO Line - not OK SalesRep in Invoice if (m_lookup.getDirect(m_value, false, true) == null) { - if (log.isLoggable(Level.FINEST)) log.finest(m_vo.ColumnName + " Serach not valid - set to null"); + if (log.isLoggable(Level.FINEST)) log.finest(m_vo.ColumnName + " Search not valid - set to null"); setValue(null, m_inserting); m_error = true; return false; @@ -845,14 +848,24 @@ public class GridField } // cannot be validated - if (!isLookup() - || m_lookup == null - || m_lookup.containsKeyNoDirect(m_value)) + if (!isLookup() || m_lookup == null) return true; + if (m_lookup.containsKeyNoDirect(m_value)) { + String name = m_lookup.get(m_value).getName(); + if (! ( name.startsWith(MLookup.INACTIVE_S) && name.endsWith(MLookup.INACTIVE_E) ) ) { + return true; + } + } // it's not null, a lookup and does not have the key if (isKey() || isParentValue()) // parents/ket are not validated return true; + // special case for IDEMPIERE-2781 + if ( "AD_Client_ID".equals(m_vo.ColumnName) + && "0".equals(m_value.toString()) + && Env.getAD_Client_ID(Env.getCtx()) == 0) + return true; + if (log.isLoggable(Level.FINEST)) log.finest(m_vo.ColumnName + " - set to null"); setValue(null, m_inserting); m_error = true; @@ -884,7 +897,7 @@ public class GridField // need to re-set invalid values - OK BPartner in PO Line - not OK SalesRep in Invoice if (m_lookup.getDirect(m_value, false, true) == null) { - if (log.isLoggable(Level.FINEST)) log.finest(m_vo.ColumnName + " Serach not valid - set to null"); + if (log.isLoggable(Level.FINEST)) log.finest(m_vo.ColumnName + " Search not valid - set to null"); setValue(null, m_inserting); m_error = true; return false; diff --git a/org.adempiere.base/src/org/compiere/model/GridTab.java b/org.adempiere.base/src/org/compiere/model/GridTab.java index f03d68a759..c5266477e2 100644 --- a/org.adempiere.base/src/org/compiere/model/GridTab.java +++ b/org.adempiere.base/src/org/compiere/model/GridTab.java @@ -1186,10 +1186,9 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable setCurrentRow(m_currentRow + 1, true); // check validity of defaults - for (int i = 0; i < getFieldCount(); i++) - { - getField(i).refreshLookup(); - getField(i).validateValueNoDirect(); + for (GridField field : getFields()) { + field.refreshLookup(); + field.validateValueNoDirect(); } // process all Callouts (no dependency check - assumed that settings are valid) for (int i = 0; i < getFieldCount(); i++) diff --git a/org.adempiere.base/src/org/compiere/model/MLookup.java b/org.adempiere.base/src/org/compiere/model/MLookup.java index 1203477584..7f44ec8928 100644 --- a/org.adempiere.base/src/org/compiere/model/MLookup.java +++ b/org.adempiere.base/src/org/compiere/model/MLookup.java @@ -528,11 +528,16 @@ public final class MLookup extends Lookup implements Serializable rs = pstmt.executeQuery(); if (rs.next()) { - String name = rs.getString(3); + StringBuilder name = new StringBuilder().append(rs.getString(3)); + boolean isActive = rs.getString(4).equals("Y"); + if (!isActive) + { + name.insert(0, INACTIVE_S).append(INACTIVE_E); + } if (isNumber) { int keyValue = rs.getInt(1); - KeyNamePair p = new KeyNamePair(keyValue, name); + KeyNamePair p = new KeyNamePair(keyValue, name.toString()); if (saveInCache) // save if m_lookup.put(new Integer(keyValue), p); directValue = p; @@ -540,7 +545,7 @@ public final class MLookup extends Lookup implements Serializable else { String value = rs.getString(2); - ValueNamePair p = new ValueNamePair(value, name); + ValueNamePair p = new ValueNamePair(value, name.toString()); if (saveInCache) // save if m_lookup.put(value, p); directValue = p; @@ -855,7 +860,7 @@ public final class MLookup extends Lookup implements Serializable boolean isActive = rs.getString(4).equals("Y"); if (!isActive) { - name = new StringBuilder(INACTIVE_S).append(name).append(INACTIVE_E); + name.insert(0, INACTIVE_S).append(INACTIVE_E); m_hasInactive = true; } // IDEMPIERE 90 diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WPAttributeEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WPAttributeEditor.java index f12cb408f5..7690b12176 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WPAttributeEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WPAttributeEditor.java @@ -15,6 +15,8 @@ package org.adempiere.webui.editor; +import static org.compiere.model.SystemIDs.COLUMN_M_PRODUCT_M_ATTRIBUTESETINSTANCE_ID; + import java.util.logging.Level; import org.adempiere.webui.apps.AEnv; @@ -29,9 +31,6 @@ import org.adempiere.webui.window.WPAttributeDialog; import org.compiere.model.GridField; import org.compiere.model.GridTab; import org.compiere.model.Lookup; -import org.compiere.model.MAttributeSet; -import org.compiere.model.MProduct; -import static org.compiere.model.SystemIDs.*; import org.compiere.util.CLogger; import org.compiere.util.Env; import org.zkoss.zk.ui.event.Event; From 8fbab469176baab0ba1c6f07b3a22001058d8ccb Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Mon, 24 Aug 2015 12:18:51 -0500 Subject: [PATCH 03/10] IDEMPIERE-2786 Redundant call to MRequest.setDueType (extensibility issue) --- .../src/org/adempiere/base/event/RequestEventHandler.java | 1 - 1 file changed, 1 deletion(-) diff --git a/org.adempiere.base/src/org/adempiere/base/event/RequestEventHandler.java b/org.adempiere.base/src/org/adempiere/base/event/RequestEventHandler.java index 4348922954..6aea115c88 100644 --- a/org.adempiere.base/src/org/adempiere/base/event/RequestEventHandler.java +++ b/org.adempiere.base/src/org/adempiere/base/event/RequestEventHandler.java @@ -202,7 +202,6 @@ public class RequestEventHandler extends AbstractEventHandler implements Managed // Update r.setDateLastAction(r.getUpdated()); r.setLastResult(r.getResult()); - r.setDueType(); // Reset r.setConfidentialTypeEntry (r.getConfidentialType()); // r.setStartDate(null); //red1 - bug [ 1743159 ] Requests - Start Date is not retained. From b8671ca91e7abd1aafa33eda9a2a769702bcb18c Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Mon, 24 Aug 2015 17:13:56 -0500 Subject: [PATCH 04/10] IDEMPIERE-2787 Request Action Escalated Issue --- .../adempiere/base/event/RequestEventHandler.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/org.adempiere.base/src/org/adempiere/base/event/RequestEventHandler.java b/org.adempiere.base/src/org/adempiere/base/event/RequestEventHandler.java index 6aea115c88..d961215868 100644 --- a/org.adempiere.base/src/org/adempiere/base/event/RequestEventHandler.java +++ b/org.adempiere.base/src/org/adempiere/base/event/RequestEventHandler.java @@ -238,10 +238,17 @@ public class RequestEventHandler extends AbstractEventHandler implements Managed if (r.is_ValueChanged(columnName)) { Object value = r.get_ValueOld(columnName); - if (value == null) + if (value == null) { ra.addNullColumn(columnName); - else - ra.set_ValueNoCheck(columnName, value); + } else { + if (value instanceof Boolean + && ( MRequestAction.COLUMNNAME_IsEscalated.equals(columnName) + || MRequestAction.COLUMNNAME_IsSelfService.equals(columnName))) { + ra.set_ValueNoCheck(columnName, ((Boolean)value).booleanValue() ? "Y" : "N"); + } else { + ra.set_ValueNoCheck(columnName, value); + } + } r.setIsChanged(true); return true; } From 229b1c468f4cfae49de94af80bfb0d7157820188 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Wed, 26 Aug 2015 09:40:23 -0500 Subject: [PATCH 05/10] IDEMPIERE-1328 Change tab name dynamically / fix issue not refreshing Record Info --- .../webui/adwindow/AbstractADWindowContent.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java index 57c7488536..f764f253cf 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java @@ -1337,6 +1337,11 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements if (!detailTab) { String dbInfo = e.getMessage(); + if (logger.isLoggable(Level.INFO)) logger.info(dbInfo); + if (adTabbox.getSelectedGridTab() != null && adTabbox.getSelectedGridTab().isQueryActive()) + dbInfo = "[ " + dbInfo + " ]"; + breadCrumb.setStatusDB(dbInfo, e); + String adInfo = e.getAD_Message(); if ( ! prevdbInfo.equals(dbInfo) && ( GridTab.DEFAULT_STATUS_MESSAGE.equals(adInfo) @@ -1346,10 +1351,6 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements ) ) { prevdbInfo = dbInfo; - if (logger.isLoggable(Level.INFO)) logger.info(dbInfo); - if (adTabbox.getSelectedGridTab() != null && adTabbox.getSelectedGridTab().isQueryActive()) - dbInfo = "[ " + dbInfo + " ]"; - breadCrumb.setStatusDB(dbInfo, e); String prefix = null; if (dbInfo.contains("*")) From ef2ce4d9f5e2135182551079686c50d8d79213c2 Mon Sep 17 00:00:00 2001 From: hieplq Date: Sun, 23 Aug 2015 21:48:39 +0800 Subject: [PATCH 06/10] IDEMPIERE-2783:IllegalArgumentException when export csv a tab has time field --- .../src/org/adempiere/impexp/GridTabCSVExporter.java | 4 ++-- .../src/org/adempiere/impexp/GridTabCSVImporter.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/org.adempiere.base/src/org/adempiere/impexp/GridTabCSVExporter.java b/org.adempiere.base/src/org/adempiere/impexp/GridTabCSVExporter.java index d0bf8d3c8c..0b3a059a62 100644 --- a/org.adempiere.base/src/org/adempiere/impexp/GridTabCSVExporter.java +++ b/org.adempiere.base/src/org/adempiere/impexp/GridTabCSVExporter.java @@ -114,7 +114,7 @@ public class GridTabCSVExporter implements IGridTabExporter } else if (DisplayType.DateTime == field.getDisplayType()) { procArray.add(new Optional(new FmtDate(DisplayType.DEFAULT_TIMESTAMP_FORMAT))); } else if (DisplayType.Time == field.getDisplayType()) { - procArray.add(new Optional(new FmtDate("DisplayType.DEFAULT_TIME_FORMAT"))); + procArray.add(new Optional(new FmtDate(DisplayType.DEFAULT_TIME_FORMAT))); } else if (DisplayType.Integer == field.getDisplayType() || DisplayType.isNumeric(field.getDisplayType())) { DecimalFormat nf = DisplayType.getNumberFormat(field.getDisplayType()); nf.setGroupingUsed(false); @@ -178,7 +178,7 @@ public class GridTabCSVExporter implements IGridTabExporter } else if (DisplayType.DateTime == field.getDisplayType()) { procArray.add(new Optional(new FmtDate(DisplayType.DEFAULT_TIMESTAMP_FORMAT))); } else if (DisplayType.Time == field.getDisplayType()) { - procArray.add(new Optional(new FmtDate("DisplayType.DEFAULT_TIME_FORMAT"))); + procArray.add(new Optional(new FmtDate(DisplayType.DEFAULT_TIME_FORMAT))); } else if (DisplayType.Integer == field.getDisplayType() || DisplayType.isNumeric(field.getDisplayType())) { DecimalFormat nf = DisplayType.getNumberFormat(field.getDisplayType()); nf.setGroupingUsed(false); diff --git a/org.adempiere.base/src/org/adempiere/impexp/GridTabCSVImporter.java b/org.adempiere.base/src/org/adempiere/impexp/GridTabCSVImporter.java index c7c7c23920..4218dba5f1 100644 --- a/org.adempiere.base/src/org/adempiere/impexp/GridTabCSVImporter.java +++ b/org.adempiere.base/src/org/adempiere/impexp/GridTabCSVImporter.java @@ -1134,7 +1134,7 @@ public class GridTabCSVImporter implements IGridTabImporter } else if (DisplayType.DateTime == field.getDisplayType()) { return (new Optional(new ParseDate(DisplayType.DEFAULT_TIMESTAMP_FORMAT))); } else if (DisplayType.Time == field.getDisplayType()) { - return (new Optional(new ParseDate("DisplayType.DEFAULT_TIME_FORMAT"))); + return (new Optional(new ParseDate(DisplayType.DEFAULT_TIME_FORMAT))); } else if (DisplayType.Integer == field.getDisplayType()) { return (new Optional(new ParseInt())); } else if (DisplayType.isNumeric(field.getDisplayType())) { From 5e4575f82268312a1da8875132cbbc548bffc66e Mon Sep 17 00:00:00 2001 From: hieplq Date: Tue, 25 Aug 2015 18:41:19 +0800 Subject: [PATCH 07/10] IDEMPIERE-2788:csv export:number of record export is difference record display --- .../adempiere/impexp/GridTabCSVExporter.java | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/org.adempiere.base/src/org/adempiere/impexp/GridTabCSVExporter.java b/org.adempiere.base/src/org/adempiere/impexp/GridTabCSVExporter.java index 0b3a059a62..d276fe8034 100644 --- a/org.adempiere.base/src/org/adempiere/impexp/GridTabCSVExporter.java +++ b/org.adempiere.base/src/org/adempiere/impexp/GridTabCSVExporter.java @@ -223,7 +223,7 @@ public class GridTabCSVExporter implements IGridTabExporter int rowDetail=0; int record_Id = 0; boolean isActiveRow = true; - + gridTab.setCurrentRow(idxrow); for(GridField field : getFields(gridTab)){ MColumn column = MColumn.get(Env.getCtx(), field.getAD_Column_ID()); Object value = null; @@ -284,7 +284,7 @@ public class GridTabCSVExporter implements IGridTabExporter while(true){ if(childs.size()>0){ - Map tmpRow = resolveMasterDetailRow(rowDetail,tabMapDetails,headArray,index,gridTab.getKeyID(idxrow), gridTab.getKeyColumnName()); + Map tmpRow = resolveMasterDetailRow(rowDetail,tabMapDetails,headArray,index); if(tmpRow!= null){ for(Map.Entry details : tmpRow.entrySet()) { String detailColumn = details.getKey(); @@ -334,7 +334,7 @@ public class GridTabCSVExporter implements IGridTabExporter return result; } - private Map resolveMasterDetailRow(int currentDetRow,Map tabMapDetails,ListheadArray,int idxfld,int record_Id,String keyColumnParent){ + private Map resolveMasterDetailRow(int currentDetRow,Map tabMapDetails,ListheadArray,int idxfld){ Map activeRow = new HashMap(); Object value = null; boolean hasDetails = false; @@ -346,8 +346,9 @@ public class GridTabCSVExporter implements IGridTabExporter for(Map.Entry childTabDetail : tabMapDetails.entrySet()) { GridTab childTab = childTabDetail.getKey(); - String whereCla = getWhereClause (childTab ,record_Id ,keyColumnParent); - childTab.getTableModel().dataRequery(whereCla, false, 0); + //String whereCla = getWhereClause (childTab, parentGrid, currentParentIndex); + //childTab.getTableModel().dataRequery(whereCla, false, 0); + childTab.query(false, 0, 0); Map row = new HashMap(); boolean isActiveRow = true; if (childTab.getRowCount() > 0) { @@ -412,11 +413,20 @@ public class GridTabCSVExporter implements IGridTabExporter return null; } - public String getWhereClause (GridTab childTab, int record_Id , String keyColumnParent){ + /** + * @deprecated don't use any where, relate IDEMPIERE-2788 + * @param childTab + * @param parentGrid + * @param currentParentIndex + * @return + */ + public String getWhereClause (GridTab childTab, GridTab parentGrid, int currentParentIndex){ String whereClau = null; String linkColumn = childTab.getLinkColumnName(); - if (keyColumnParent.equals(linkColumn)){ - whereClau= linkColumn+MQuery.EQUAL+record_Id; + if (parentGrid.getKeyColumnName().equals(linkColumn)){ + whereClau= linkColumn+MQuery.EQUAL + parentGrid.getKeyID(currentParentIndex); + }else{ + whereClau= parentGrid.getKeyColumnName() + MQuery.EQUAL + parentGrid.getValue(currentParentIndex, parentGrid.getKeyColumnName()); } return whereClau; } From 44a48fac034bda00065d42043fa8707864e3a8f0 Mon Sep 17 00:00:00 2001 From: hieplq Date: Tue, 25 Aug 2015 19:24:52 +0800 Subject: [PATCH 08/10] IDEMPIERE-2789:csv export:query for detail tab is run same as number of record --- .../adempiere/impexp/GridTabCSVExporter.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/org.adempiere.base/src/org/adempiere/impexp/GridTabCSVExporter.java b/org.adempiere.base/src/org/adempiere/impexp/GridTabCSVExporter.java index d276fe8034..a0d3b52fcb 100644 --- a/org.adempiere.base/src/org/adempiere/impexp/GridTabCSVExporter.java +++ b/org.adempiere.base/src/org/adempiere/impexp/GridTabCSVExporter.java @@ -282,8 +282,16 @@ public class GridTabCSVExporter implements IGridTabExporter } } - while(true){ - if(childs.size()>0){ + if(childs.size()>0){ + for (GridTab childTab:childs){ + if (!childTab.isLoadComplete()){ + childTab.initTab(false); + } + + childTab.query(false, 0, 0); + } + + while(true){ Map tmpRow = resolveMasterDetailRow(rowDetail,tabMapDetails,headArray,index); if(tmpRow!= null){ for(Map.Entry details : tmpRow.entrySet()) { @@ -296,10 +304,9 @@ public class GridTabCSVExporter implements IGridTabExporter }else{ break; } - }else{ - break; - } - } + + } + } if(rowDetail==0) mapWriter.write(row, header,processors); @@ -348,7 +355,6 @@ public class GridTabCSVExporter implements IGridTabExporter GridTab childTab = childTabDetail.getKey(); //String whereCla = getWhereClause (childTab, parentGrid, currentParentIndex); //childTab.getTableModel().dataRequery(whereCla, false, 0); - childTab.query(false, 0, 0); Map row = new HashMap(); boolean isActiveRow = true; if (childTab.getRowCount() > 0) { From 5b0d9768aacd714054e9e12253959f5235e91fc2 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Wed, 26 Aug 2015 11:50:45 -0500 Subject: [PATCH 09/10] IDEMPIERE-2788:csv export:number of record export is difference record display / minor peer review --- .../src/org/adempiere/impexp/GridTabCSVExporter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org.adempiere.base/src/org/adempiere/impexp/GridTabCSVExporter.java b/org.adempiere.base/src/org/adempiere/impexp/GridTabCSVExporter.java index a0d3b52fcb..86aed3782e 100644 --- a/org.adempiere.base/src/org/adempiere/impexp/GridTabCSVExporter.java +++ b/org.adempiere.base/src/org/adempiere/impexp/GridTabCSVExporter.java @@ -420,12 +420,12 @@ public class GridTabCSVExporter implements IGridTabExporter } /** - * @deprecated don't use any where, relate IDEMPIERE-2788 * @param childTab * @param parentGrid * @param currentParentIndex * @return */ + @Deprecated // don't use any where, relate IDEMPIERE-2788 public String getWhereClause (GridTab childTab, GridTab parentGrid, int currentParentIndex){ String whereClau = null; String linkColumn = childTab.getLinkColumnName(); From 6ccc971cfe90ccb1e4cb57d901da7ce8d6d2cdaa Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Wed, 26 Aug 2015 15:39:25 -0500 Subject: [PATCH 10/10] IDEMPIERE-2797 Import CSV not able to complete a sales order --- .../idempiere/process/ImportCSVProcess.java | 48 ++++++++++++++++++- .../src/org/compiere/model/GridTab.java | 2 +- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/org.adempiere.base.process/src/org/idempiere/process/ImportCSVProcess.java b/org.adempiere.base.process/src/org/idempiere/process/ImportCSVProcess.java index 22b4af1791..55ae8b7a98 100644 --- a/org.adempiere.base.process/src/org/idempiere/process/ImportCSVProcess.java +++ b/org.adempiere.base.process/src/org/idempiere/process/ImportCSVProcess.java @@ -35,17 +35,22 @@ import java.util.ArrayList; import java.util.List; import java.util.logging.Level; +import org.adempiere.base.Core; import org.adempiere.base.IGridTabImporter; import org.adempiere.base.equinox.EquinoxExtensionLocator; import org.adempiere.exceptions.AdempiereException; +import org.compiere.model.DataStatusEvent; +import org.compiere.model.DataStatusListener; +import org.compiere.model.GridField; import org.compiere.model.GridTab; import org.compiere.model.GridWindow; import org.compiere.model.MImportTemplate; +import org.compiere.model.MLookup; import org.compiere.process.ProcessInfoParameter; import org.compiere.process.SvrProcess; import org.compiere.util.Env; -public class ImportCSVProcess extends SvrProcess { +public class ImportCSVProcess extends SvrProcess implements DataStatusListener { private InputStream m_file_istream = null; private int p_AD_ImportTemplate_ID = 0; @@ -112,6 +117,7 @@ public class ImportCSVProcess extends SvrProcess { if (m_gridTab == null) throw new Exception("No Active Tab"); + m_gridTab.addDataStatusListener(this); } protected IGridTabImporter initImporter() throws Exception { @@ -142,4 +148,44 @@ public class ImportCSVProcess extends SvrProcess { m_file_istream.close(); } + /** + * @param e + * @see DataStatusListener#dataStatusChanged(DataStatusEvent) + */ + public void dataStatusChanged(DataStatusEvent e) + { + int col = e.getChangedColumn(); + if (log.isLoggable(Level.CONFIG)) log.config("(" + m_gridTab + ") Col=" + col + ": " + e.toString()); + + // Process Callout + GridField mField = m_gridTab.getField(col); + if (mField != null + && (mField.getCallout().length() > 0 + || (Core.findCallout(m_gridTab.getTableName(), mField.getColumnName())).size()>0 + || m_gridTab.hasDependants(mField.getColumnName()))) + { + String msg = m_gridTab.processFieldChange(mField); // Dependencies & Callout + if (msg.length() > 0) + { + log.warning(msg); + } + + // Refresh the list on dependant fields + for (GridField dependentField : m_gridTab.getDependantFields(mField.getColumnName())) + { + // if the field has a lookup + if (dependentField != null && dependentField.getLookup() instanceof MLookup) + { + MLookup mLookup = (MLookup)dependentField.getLookup(); + // if the lookup is dynamic (i.e. contains this columnName as variable) + if (mLookup.getValidation().indexOf("@"+mField.getColumnName()+"@") != -1) + { + mLookup.refresh(); + } + } + } // for all dependent fields + + } + } + } diff --git a/org.adempiere.base/src/org/compiere/model/GridTab.java b/org.adempiere.base/src/org/compiere/model/GridTab.java index c5266477e2..eab8bb971a 100644 --- a/org.adempiere.base/src/org/compiere/model/GridTab.java +++ b/org.adempiere.base/src/org/compiere/model/GridTab.java @@ -1145,7 +1145,7 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable if (log.isLoggable(Level.FINE)) log.fine("#" + m_vo.TabNo); if (!isInsertRecord()) { - log.warning ("Inset Not allowed in TabNo=" + m_vo.TabNo); + log.warning ("Insert Not allowed in TabNo=" + m_vo.TabNo); return false; } // Prevent New Where Main Record is processed