From b7e29b167527e64dac045c3c57bc0483ed3b25d0 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Wed, 1 May 2013 09:49:20 -0500 Subject: [PATCH 1/5] IDEMPIERE-865 log.saveError: problem with translation --- .../webui/adwindow/AbstractADWindowContent.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 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 a68ced4d61..8bd8f5f1b3 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 @@ -1286,9 +1286,11 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements StringBuilder sb = new StringBuilder(); String msg = e.getMessage(); StringBuilder adMessage = new StringBuilder(); + String origmsg = null; if (msg != null && msg.length() > 0) { - adMessage.append(Msg.getMsg(Env.getCtx(), e.getAD_Message())); + origmsg = Msg.getMsg(Env.getCtx(), e.getAD_Message()); + adMessage.append(origmsg); } String info = e.getInfo(); if (info != null && info.length() > 0) @@ -1320,7 +1322,14 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements } adMessage.append(tail); } - sb.append(MessageFormat.format(adMessage.toString(), arguments)); + String adMessageQuot = Util.replace(adMessage.toString(), "'", "''"); + if ( arguments.length == 1 + && origmsg != null + && origmsg.equals(arguments[0])) { // check dup message + sb.append(origmsg); + } else { + sb.append(MessageFormat.format(adMessageQuot, arguments)); + } } else { From ae957d0cb14a320b81f814e326731f980470471c Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Wed, 1 May 2013 09:51:19 -0500 Subject: [PATCH 2/5] IDEMPIERE-865 log.saveError: problem with translation / improvement --- .../org/adempiere/webui/adwindow/AbstractADWindowContent.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 8bd8f5f1b3..1b3a42be66 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 @@ -1322,12 +1322,12 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements } adMessage.append(tail); } - String adMessageQuot = Util.replace(adMessage.toString(), "'", "''"); if ( arguments.length == 1 && origmsg != null && origmsg.equals(arguments[0])) { // check dup message sb.append(origmsg); } else { + String adMessageQuot = Util.replace(adMessage.toString(), "'", "''"); sb.append(MessageFormat.format(adMessageQuot, arguments)); } } From a2fcbe2a1bbcb4fd6548c61d409a08bbd6eabfb9 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Wed, 1 May 2013 10:05:38 -0500 Subject: [PATCH 3/5] IDEMPIERE-325 AD_InfoWindow / fix NPE reported by Nicolas --- .../WEB-INF/src/org/adempiere/webui/info/InfoWindow.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoWindow.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoWindow.java index a53e18c230..148d936a68 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoWindow.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoWindow.java @@ -295,9 +295,8 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL private ColumnInfo createLookupColumnInfo(TableInfo[] tableInfos, GridField gridField, MInfoColumn infoColumn) { String columnName = gridField.getColumnName(); - int AD_Reference_Value_ID = 0; String validationCode = ""; - MLookupInfo lookupInfo = MLookupFactory.getLookupInfo(Env.getCtx(), p_WindowNo, 0, infoColumn.getAD_Reference_ID(), Env.getLanguage(Env.getCtx()), columnName, AD_Reference_Value_ID, false, validationCode); + MLookupInfo lookupInfo = MLookupFactory.getLookupInfo(Env.getCtx(), p_WindowNo, 0, infoColumn.getAD_Reference_ID(), Env.getLanguage(Env.getCtx()), columnName, infoColumn.getAD_Reference_Value_ID(), false, validationCode); String displayColumn = lookupInfo.DisplayColumn; int index = infoColumn.getSelectClause().indexOf("."); From 87de4029ebe8277010de14cbfba4e379ea7dd6b8 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Wed, 1 May 2013 10:39:29 -0500 Subject: [PATCH 4/5] IDEMPIERE-889 See Order from other organization in generate invoices --- .../src/org/compiere/apps/form/InOutGen.java | 36 ++++++------------- .../org/compiere/apps/form/InvoiceGen.java | 31 +++++----------- 2 files changed, 19 insertions(+), 48 deletions(-) diff --git a/org.adempiere.ui/src/org/compiere/apps/form/InOutGen.java b/org.adempiere.ui/src/org/compiere/apps/form/InOutGen.java index ec6da5e135..7d6334ca6b 100644 --- a/org.adempiere.ui/src/org/compiere/apps/form/InOutGen.java +++ b/org.adempiere.ui/src/org/compiere/apps/form/InOutGen.java @@ -13,6 +13,9 @@ *****************************************************************************/ package org.compiere.apps.form; +import static org.compiere.model.SystemIDs.PROCESS_M_INOUT_GENERATERMA_MANUAL; +import static org.compiere.model.SystemIDs.PROCESS_M_INOUT_GENERATE_MANUAL; + import java.math.BigDecimal; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -24,12 +27,10 @@ import java.util.logging.Level; import org.compiere.apps.IStatusBar; import org.compiere.minigrid.IDColumn; import org.compiere.minigrid.IMiniTable; -import org.compiere.model.MOrder; import org.compiere.model.MPInstance; import org.compiere.model.MPInstancePara; -import org.compiere.model.MPrivateAccess; import org.compiere.model.MRMA; -import static org.compiere.model.SystemIDs.*; +import org.compiere.model.MRole; import org.compiere.print.ReportEngine; import org.compiere.process.ProcessInfo; import org.compiere.util.CLogger; @@ -93,7 +94,8 @@ public class InOutGen extends GenForm // Create SQL StringBuilder sql = new StringBuilder( "SELECT C_Order_ID, o.Name, dt.Name, DocumentNo, bp.Name, DateOrdered, TotalLines " - + "FROM M_InOut_Candidate_v ic, AD_Org o, C_BPartner bp, C_DocType dt " + // use C_Order instead of M_InOut_Candidate_v for access purposes, will be replaced later + + "FROM C_Order ic, AD_Org o, C_BPartner bp, C_DocType dt " + "WHERE ic.AD_Org_ID=o.AD_Org_ID" + " AND ic.C_BPartner_ID=bp.C_BPartner_ID" + " AND ic.C_DocType_ID=dt.C_DocType_ID" @@ -103,21 +105,11 @@ public class InOutGen extends GenForm sql.append(" AND ic.M_Warehouse_ID=").append(m_M_Warehouse_ID); if (m_C_BPartner_ID != null) sql.append(" AND ic.C_BPartner_ID=").append(m_C_BPartner_ID); - - // bug - [ 1713317 ] Generate Shipments (manual) show locked records - /* begin - Exclude locked records; @Trifon */ - int AD_User_ID = Env.getContextAsInt(Env.getCtx(), "#AD_User_ID"); - String lockedIDs = MPrivateAccess.getLockedRecordWhere(MOrder.Table_ID, AD_User_ID); - if (lockedIDs != null) - { - if (sql.length() > 0) - sql.append(" AND "); - sql.append("C_Order_ID").append(lockedIDs); - } - /* eng - Exclude locked records; @Trifon */ - - // sql.append(" ORDER BY o.Name,bp.Name,DateOrdered"); + sql = new StringBuilder(MRole.getDefault().addAccessSQL(sql.toString(), "ic", true, false)); + // Replace C_Order by M_InOut_Candidate_v + int idxtable = sql.indexOf(" C_Order "); + sql.replace(idxtable, idxtable+" C_Order ".length(), " M_InOut_Candidate_v "); return sql.toString(); } @@ -149,14 +141,8 @@ public class InOutGen extends GenForm if (m_C_BPartner_ID != null) sql.append(" AND bp.C_BPartner_ID=").append(m_C_BPartner_ID); - int AD_User_ID = Env.getContextAsInt(Env.getCtx(), "#AD_User_ID"); - String lockedIDs = MPrivateAccess.getLockedRecordWhere(MRMA.Table_ID, AD_User_ID); - if (lockedIDs != null) - { - sql.append(" AND rma.M_RMA_ID").append(lockedIDs); - } - sql.append(" ORDER BY org.Name, bp.Name, rma.Created "); + sql = new StringBuilder(MRole.getDefault().addAccessSQL(sql.toString(), "rma", true, false)); return sql.toString(); } diff --git a/org.adempiere.ui/src/org/compiere/apps/form/InvoiceGen.java b/org.adempiere.ui/src/org/compiere/apps/form/InvoiceGen.java index d7b9d23458..9a37362b3c 100644 --- a/org.adempiere.ui/src/org/compiere/apps/form/InvoiceGen.java +++ b/org.adempiere.ui/src/org/compiere/apps/form/InvoiceGen.java @@ -30,8 +30,8 @@ import org.compiere.minigrid.IMiniTable; import org.compiere.model.MOrder; import org.compiere.model.MPInstance; import org.compiere.model.MPInstancePara; -import org.compiere.model.MPrivateAccess; import org.compiere.model.MRMA; +import org.compiere.model.MRole; import org.compiere.print.ReportEngine; import org.compiere.process.ProcessInfo; import org.compiere.util.CLogger; @@ -93,7 +93,8 @@ public class InvoiceGen extends GenForm { StringBuilder sql = new StringBuilder( "SELECT C_Order_ID, o.Name, dt.Name, DocumentNo, bp.Name, DateOrdered, TotalLines " - + "FROM C_Invoice_Candidate_v ic, AD_Org o, C_BPartner bp, C_DocType dt " + // use C_Order instead of C_Invoice_Candidate_v for access purposes, will be replaced later + + "FROM C_Order ic, AD_Org o, C_BPartner bp, C_DocType dt " + "WHERE ic.AD_Org_ID=o.AD_Org_ID" + " AND ic.C_BPartner_ID=bp.C_BPartner_ID" + " AND ic.C_DocType_ID=dt.C_DocType_ID" @@ -103,21 +104,11 @@ public class InvoiceGen extends GenForm sql.append(" AND ic.AD_Org_ID=").append(m_AD_Org_ID); if (m_C_BPartner_ID != null) sql.append(" AND ic.C_BPartner_ID=").append(m_C_BPartner_ID); - - // bug - [ 1713337 ] "Generate Invoices (manual)" show locked records. - /* begin - Exclude locked records; @Trifon */ - int AD_User_ID = Env.getContextAsInt(Env.getCtx(), "#AD_User_ID"); - String lockedIDs = MPrivateAccess.getLockedRecordWhere(MOrder.Table_ID, AD_User_ID); - if (lockedIDs != null) - { - if (sql.length() > 0) - sql.append(" AND "); - sql.append("C_Order_ID").append(lockedIDs); - } - /* eng - Exclude locked records; @Trifon */ - - // sql.append(" ORDER BY o.Name,bp.Name,DateOrdered"); + sql = new StringBuilder(MRole.getDefault().addAccessSQL(sql.toString(), "ic", true, false)); + // Replace C_Order by C_Invoice_Candidate_v + int idxtable = sql.indexOf(" C_Order "); + sql.replace(idxtable, idxtable+" C_Order ".length(), " C_Invoice_Candidate_v "); return sql.toString(); } @@ -151,14 +142,8 @@ public class InvoiceGen extends GenForm if (m_C_BPartner_ID != null) sql.append(" AND bp.C_BPartner_ID=").append(m_C_BPartner_ID); - int AD_User_ID = Env.getContextAsInt(Env.getCtx(), "#AD_User_ID"); - String lockedIDs = MPrivateAccess.getLockedRecordWhere(MRMA.Table_ID, AD_User_ID); - if (lockedIDs != null) - { - sql.append(" AND rma.M_RMA_ID").append(lockedIDs); - } - sql.append(" ORDER BY org.Name, bp.Name, rma.Created "); + sql = new StringBuilder(MRole.getDefault().addAccessSQL(sql.toString(), "rma", true, false)); return sql.toString(); } From 3507559ef165f1504c9f102ea5c85e4ed6e38a23 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Wed, 1 May 2013 10:50:18 -0500 Subject: [PATCH 5/5] IDEMPIERE-888 NPE when opening an account as report from Trial Balance --- .../src/org/compiere/print/DataEngine.java | 6 ++-- .../org/compiere/print/PrintDataColumn.java | 28 ++++++++++++--- .../org/compiere/print/PrintDataElement.java | 35 ++++++++++++++++--- .../adempiere/webui/report/HTMLExtension.java | 2 +- 4 files changed, 58 insertions(+), 13 deletions(-) diff --git a/org.adempiere.base/src/org/compiere/print/DataEngine.java b/org.adempiere.base/src/org/compiere/print/DataEngine.java index 04c9557b72..a81892f9d8 100644 --- a/org.adempiere.base/src/org/compiere/print/DataEngine.java +++ b/org.adempiere.base/src/org/compiere/print/DataEngine.java @@ -404,7 +404,9 @@ public class DataEngine groupByColumns.add(m_synonym+display); groupByColumns.add(lookupSQL); // - pdc = new PrintDataColumn(AD_Column_ID, ColumnName, AD_Reference_ID, FieldLength, orderName, isPageBreak); + TableReference tr = getTableReference(AD_Reference_Value_ID); + String foreignColumnName = tr.KeyColumn; + pdc = new PrintDataColumn(AD_Column_ID, ColumnName, AD_Reference_ID, FieldLength, orderName, isPageBreak, foreignColumnName); synonymNext(); } @@ -904,7 +906,7 @@ public class DataEngine if (display != null && !rs.wasNull()) { KeyNamePair pp = new KeyNamePair(id, display); - pde = new PrintDataElement(pdc.getColumnName(), pp, pdc.getDisplayType(), pdc.getFormatPattern()); + pde = new PrintDataElement(pdc.getColumnName(), pp, pdc.getDisplayType(), pdc.getFormatPattern(), pdc.getForeignColumnName()); } } else diff --git a/org.adempiere.base/src/org/compiere/print/PrintDataColumn.java b/org.adempiere.base/src/org/compiere/print/PrintDataColumn.java index c3eff06f9a..2323e195e0 100644 --- a/org.adempiere.base/src/org/compiere/print/PrintDataColumn.java +++ b/org.adempiere.base/src/org/compiere/print/PrintDataColumn.java @@ -36,10 +36,9 @@ public class PrintDataColumn * @param columnSize Column Size * @param alias Alias in query or the same as column name or null * @param isPageBreak if true force page break after function + * @param foreignColumnName name foreign */ - public PrintDataColumn (int AD_Column_ID, String columnName, - int displayType, int columnSize, - String alias, boolean isPageBreak) + public PrintDataColumn(int AD_Column_ID, String columnName,int displayType, int columnSize,String alias, boolean isPageBreak, String foreignColumnName) { m_AD_Column_ID = AD_Column_ID; m_columnName = columnName; @@ -51,15 +50,22 @@ public class PrintDataColumn if (m_alias == null) m_alias = columnName; m_pageBreak = isPageBreak; - } // PrintDataColumn + m_foreignColumnName = foreignColumnName; + } + public PrintDataColumn (int AD_Column_ID, String columnName,int displayType, int columnSize,String alias, boolean isPageBreak) + { + this(AD_Column_ID, columnName, displayType, columnSize, alias, isPageBreak, null); + } // PrintDataColumn + private int m_AD_Column_ID; private String m_columnName; + private String m_foreignColumnName; private int m_displayType; private int m_columnSize; private String m_alias; private boolean m_pageBreak; - private String m_FormatPattern; + private String m_FormatPattern; /*************************************************************************/ @@ -81,6 +87,18 @@ public class PrintDataColumn return m_columnName; } // getColumnName + /** + * Get ForeignColumn Name + * @return column foreign name + */ + public String getForeignColumnName() + { + if (m_foreignColumnName == null) + return m_columnName; + else + return m_foreignColumnName; + } // getForeignColumnName + /** * Get Display Type * @return display type diff --git a/org.adempiere.base/src/org/compiere/print/PrintDataElement.java b/org.adempiere.base/src/org/compiere/print/PrintDataElement.java index 62b0a081af..f58d77b4b8 100644 --- a/org.adempiere.base/src/org/compiere/print/PrintDataElement.java +++ b/org.adempiere.base/src/org/compiere/print/PrintDataElement.java @@ -36,10 +36,9 @@ import org.compiere.util.NamePair; public class PrintDataElement implements Serializable { /** - * generated serialize id + * */ - private static final long serialVersionUID = -4823568539698752659L; - + private static final long serialVersionUID = 2177482817458457236L; /** * Print Data Element Constructor @@ -48,8 +47,9 @@ public class PrintDataElement implements Serializable * @param displayType optional displayType * @param isPKey is primary key * @param isPageBreak if true force page break + * @param foreignColumnName name foreign */ - public PrintDataElement (String columnName, Serializable value, int displayType, boolean isPKey, boolean isPageBreak, String format) + public PrintDataElement (String columnName, Serializable value, int displayType, boolean isPKey, boolean isPageBreak, String format, String foreignColumnName) { if (columnName == null) throw new IllegalArgumentException("PrintDataElement - Name cannot be null"); @@ -59,8 +59,14 @@ public class PrintDataElement implements Serializable m_isPKey = isPKey; m_isPageBreak = isPageBreak; m_formatPattern = format; + m_foreignColumnName = foreignColumnName; } // PrintDataElement + public PrintDataElement(String columnName, Serializable value, int displayType, String pattern, String foreignColumnName) + { + this (columnName, value, displayType, false, false, pattern, foreignColumnName); + } // PrintDataElement + /** * Print Data Element Constructor * @param columnName name @@ -70,9 +76,14 @@ public class PrintDataElement implements Serializable */ public PrintDataElement(String columnName, Serializable value, int displayType, String pattern) { - this (columnName, value, displayType, false, false, pattern); + this (columnName, value, displayType, false, false, pattern, null); } // PrintDataElement + public PrintDataElement (String columnName, Serializable value, int displayType, boolean isPKey, boolean isPageBreak, String format) + { + this(columnName, value, displayType, isPKey, isPageBreak, format, null); + } + /** Data Name */ private String m_columnName; /** Data Value */ @@ -85,6 +96,8 @@ public class PrintDataElement implements Serializable private boolean m_isPageBreak; /** Value format pattern */ private String m_formatPattern; + /** Value foreign name */ + private String m_foreignColumnName; /** XML Element Name */ @@ -103,6 +116,18 @@ public class PrintDataElement implements Serializable { return m_columnName; } // getName + + /** + * Get ForeignName + * @return name + */ + public String getForeignColumnName() { + if (m_foreignColumnName == null) + return m_columnName; + else + return m_foreignColumnName; + } + /** * Get Node Value diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/report/HTMLExtension.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/report/HTMLExtension.java index 9dadd664f2..6a49334c0f 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/report/HTMLExtension.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/report/HTMLExtension.java @@ -79,7 +79,7 @@ public class HTMLExtension implements IHTMLExtension { href.setStyle("text-decoration: none; font-size: 11px; vertical-align: middle;"); href.addAttribute("onclick", "parent.drillDown('" + componentId + "', '" - + dataElement.getColumnName() + "', '" + + dataElement.getForeignColumnName() + "', '" + dataElement.getValueAsString() + "')"); report.addElement(href); menu.addElement(report);