diff --git a/org.adempiere.base.process/src/org/compiere/process/OrderRePrice.java b/org.adempiere.base.process/src/org/compiere/process/OrderRePrice.java index 81bbf52711..410ceb7874 100644 --- a/org.adempiere.base.process/src/org/compiere/process/OrderRePrice.java +++ b/org.adempiere.base.process/src/org/compiere/process/OrderRePrice.java @@ -92,7 +92,10 @@ public class OrderRePrice extends SvrProcess for (int i = 0; i < lines.length; i++) { lines[i].setPrice(invoice.getM_PriceList_ID(), invoice.getC_BPartner_ID()); - lines[i].saveEx(); + if (lines[i].is_Changed()) { + lines[i].setTaxAmt(); + lines[i].saveEx(); + } } invoice = new MInvoice (getCtx(), p_C_Invoice_ID, null); BigDecimal newPrice = invoice.getGrandTotal(); diff --git a/org.adempiere.base/src/org/adempiere/exceptions/DBException.java b/org.adempiere.base/src/org/adempiere/exceptions/DBException.java index 5f35f5c34b..e378d9f1e2 100644 --- a/org.adempiere.base/src/org/adempiere/exceptions/DBException.java +++ b/org.adempiere.base/src/org/adempiere/exceptions/DBException.java @@ -181,6 +181,8 @@ public class DBException extends AdempiereException * @param e exception */ public static boolean isInvalidIdentifierError(Exception e) { + if (DB.isPostgreSQL()) + return isSQLState(e, "42P01"); return isErrorCode(e, 904); } diff --git a/org.adempiere.base/src/org/compiere/model/GridTab.java b/org.adempiere.base/src/org/compiere/model/GridTab.java index 52fe5abc7d..2c46d271fe 100644 --- a/org.adempiere.base/src/org/compiere/model/GridTab.java +++ b/org.adempiere.base/src/org/compiere/model/GridTab.java @@ -1312,9 +1312,8 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable public void setLinkColumnName (String linkColumnName) { // set parent column name - String sql = "SELECT ColumnName FROM AD_Column WHERE AD_Column_ID=?"; if (m_vo.Parent_Column_ID > 0) - m_parentColumnName = DB.getSQLValueString(null, sql, m_vo.Parent_Column_ID ); + m_parentColumnName = MColumn.getColumnName(m_vo.ctx, m_vo.Parent_Column_ID); if ( m_parentColumnName == null ) m_parentColumnName = ""; @@ -1329,27 +1328,7 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable // we have a link column identified (primary parent column) else { - String SQL = "SELECT ColumnName FROM AD_Column WHERE AD_Column_ID=?"; - PreparedStatement pstmt = null; - ResultSet rs = null; - try - { - pstmt = DB.prepareStatement(SQL, null); - pstmt.setInt(1, m_vo.AD_Column_ID); // Parent Link Column - rs = pstmt.executeQuery(); - if (rs.next()) - m_linkColumnName = rs.getString(1); - } - catch (SQLException e) - { - log.log(Level.SEVERE, "", e); - } - finally - { - DB.close(rs, pstmt); - rs = null; - pstmt = null; - } + m_linkColumnName = MColumn.getColumnName(m_vo.ctx, m_vo.AD_Column_ID); // Parent Link Column if (log.isLoggable(Level.FINE)) log.fine("AD_Column_ID=" + m_vo.AD_Column_ID + " - " + m_linkColumnName); } } diff --git a/org.adempiere.base/src/org/compiere/model/GridTable.java b/org.adempiere.base/src/org/compiere/model/GridTable.java index 240bcdeea9..92ab86787d 100644 --- a/org.adempiere.base/src/org/compiere/model/GridTable.java +++ b/org.adempiere.base/src/org/compiere/model/GridTable.java @@ -49,6 +49,7 @@ import java.util.logging.Level; import javax.swing.event.TableModelListener; import javax.swing.table.AbstractTableModel; +import org.adempiere.exceptions.AdempiereException; import org.adempiere.exceptions.DBException; import org.adempiere.util.ServerContext; import org.compiere.Adempiere; @@ -3542,7 +3543,7 @@ public class GridTable extends AbstractTableModel if (DBException.isInvalidIdentifierError(e0)) log.warning("Count - " + e0.getLocalizedMessage() + "\nSQL=" + m_SQL_Count); else - log.log(Level.SEVERE, "Count SQL=" + m_SQL_Count, e0); + throw new AdempiereException(e0); return 0; } finally diff --git a/org.adempiere.base/src/org/compiere/model/MInvoiceLine.java b/org.adempiere.base/src/org/compiere/model/MInvoiceLine.java index 3582e9d1e5..62b5ccff73 100644 --- a/org.adempiere.base/src/org/compiere/model/MInvoiceLine.java +++ b/org.adempiere.base/src/org/compiere/model/MInvoiceLine.java @@ -457,7 +457,7 @@ public class MInvoiceLine extends X_C_InvoiceLine BigDecimal TaxAmt = Env.ZERO; if (getC_Tax_ID() == 0) return; - // setLineNetAmt(); + setLineNetAmt(); MTax tax = MTax.get (getCtx(), getC_Tax_ID()); if (tax.isDocumentLevel() && m_IsSOTrx) // AR Inv Tax return; diff --git a/org.adempiere.base/src/org/compiere/model/MLookupFactory.java b/org.adempiere.base/src/org/compiere/model/MLookupFactory.java index 9550277d12..d1ed854738 100644 --- a/org.adempiere.base/src/org/compiere/model/MLookupFactory.java +++ b/org.adempiere.base/src/org/compiere/model/MLookupFactory.java @@ -91,42 +91,18 @@ public class MLookupFactory public static MLookupInfo getLookupInfo(Properties ctx, int WindowNo, int TabNo, int Column_ID, int AD_Reference_ID) { - String ColumnName = ""; - int AD_Reference_Value_ID = 0; - boolean IsParent = false; + MColumn column = MColumn.get(ctx, Column_ID); + if (column.get_ID() == 0) + s_log.log(Level.SEVERE, "Column Not Found - AD_Column_ID=" + Column_ID); + + String ColumnName = column.getColumnName(); + int AD_Reference_Value_ID = column.getAD_Reference_Value_ID(); + boolean IsParent = column.isParent(); String ValidationCode = ""; - // - String sql = "SELECT c.ColumnName, c.AD_Reference_Value_ID, c.IsParent, vr.Code " - + "FROM AD_Column c" - + " LEFT OUTER JOIN AD_Val_Rule vr ON (c.AD_Val_Rule_ID=vr.AD_Val_Rule_ID) " - + "WHERE c.AD_Column_ID=?"; - PreparedStatement pstmt = null; - ResultSet rs = null; - try - { - pstmt = DB.prepareStatement(sql, null); - pstmt.setInt(1, Column_ID); - // - rs = pstmt.executeQuery(); - if (rs.next()) - { - ColumnName = rs.getString(1); - AD_Reference_Value_ID = rs.getInt(2); - IsParent = "Y".equals(rs.getString(3)); - ValidationCode = rs.getString(4); - } - else - s_log.log(Level.SEVERE, "Column Not Found - AD_Column_ID=" + Column_ID); - } - catch (SQLException ex) - { - s_log.log(Level.SEVERE, "create", ex); - } - finally - { - DB.close(rs, pstmt); - rs = null; - pstmt = null; + + if (column.getAD_Val_Rule_ID() > 0) { + MValRule valRule = MValRule.get(ctx, column.getAD_Val_Rule_ID()); + ValidationCode = valRule.getCode(); } // MLookupInfo info = getLookupInfo (ctx, WindowNo, TabNo, Column_ID, AD_Reference_ID, @@ -993,41 +969,12 @@ public class MLookupFactory } // getLookup_TableDirEmbed private static ArrayList getListIdentifiers(String TableName) { - // get display column name (first identifier column) - String sql = "SELECT c.ColumnName,c.IsTranslated,c.AD_Reference_ID,c.AD_Reference_Value_ID " - + ", c.ColumnSQL " // 5 - + "FROM AD_Table t INNER JOIN AD_Column c ON (t.AD_Table_ID=c.AD_Table_ID) " - + "WHERE TableName=?" - + " AND c.IsIdentifier='Y' " - + "ORDER BY c.SeqNo"; - // ArrayList list = new ArrayList(); - // - PreparedStatement pstmt = null; - ResultSet rs = null; - try - { - pstmt = DB.prepareStatement(sql, null); - pstmt.setString(1, TableName); - rs = pstmt.executeQuery(); - while (rs.next()) - { - LookupDisplayColumn ldc = new LookupDisplayColumn (rs.getString(1), - rs.getString(5), - "Y".equals(rs.getString(2)), rs.getInt(3), rs.getInt(4)); - list.add (ldc); - } - } - catch (SQLException e) - { - s_log.log(Level.SEVERE, sql, e); - return null; - } - finally - { - DB.close(rs, pstmt); - rs = null; - pstmt = null; + MTable table = MTable.get(Env.getCtx(), TableName); + for (String idColumnName : table.getIdentifierColumns()) { + MColumn column = table.getColumn(idColumnName); + LookupDisplayColumn ldc = new LookupDisplayColumn(column.getColumnName(), column.getColumnSQL(), column.isTranslated(), column.getAD_Reference_ID(), column.getAD_Reference_Value_ID()); + list.add (ldc); } return list; } diff --git a/org.adempiere.base/src/org/compiere/model/MStyle.java b/org.adempiere.base/src/org/compiere/model/MStyle.java index c6350c1300..762269ba8b 100644 --- a/org.adempiere.base/src/org/compiere/model/MStyle.java +++ b/org.adempiere.base/src/org/compiere/model/MStyle.java @@ -15,16 +15,18 @@ import org.compiere.util.Env; * */ public class MStyle extends X_AD_Style { - /** * */ - private static final long serialVersionUID = -5183438249097292583L; + private static final long serialVersionUID = 4988653330824933725L; /** Cache */ private static CCache s_cache = new CCache(Table_Name, 30, 60); private X_AD_StyleLine[] m_lines = null; + public static final String SCLASS_PREFIX = "@sclass="; + public static final String ZCLASS_PREFIX = "@zclass="; + public MStyle(Properties ctx, int AD_Style_ID, String trxName) { super(ctx, AD_Style_ID, trxName); } diff --git a/org.adempiere.base/src/org/compiere/model/MTable.java b/org.adempiere.base/src/org/compiere/model/MTable.java index c00c8b031c..74a01516cd 100644 --- a/org.adempiere.base/src/org/compiere/model/MTable.java +++ b/org.adempiere.base/src/org/compiere/model/MTable.java @@ -20,6 +20,8 @@ package org.compiere.model; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -33,6 +35,7 @@ import org.adempiere.model.GenericPO; import org.compiere.util.CCache; import org.compiere.util.CLogger; import org.compiere.util.DB; +import org.compiere.util.KeyNamePair; /** * Persistent Table Model @@ -356,19 +359,26 @@ public class MTable extends X_AD_Table * Get Identifier Columns of Table * @return Identifier columns */ - public String[] getIdentifierColumns() - { - getColumns(false); - ArrayList list = new ArrayList(); - // - for (int i = 0; i < m_columns.length; i++) - { - MColumn column = m_columns[i]; + public String[] getIdentifierColumns() { + ArrayList listkn = new ArrayList(); + for (MColumn column : getColumns(false)) { if (column.isIdentifier()) - list.add(column.getColumnName()); + listkn.add(new KeyNamePair(column.getSeqNo(), column.getColumnName())); + } + // Order by SeqNo + Collections.sort(listkn, new Comparator(){ + public int compare(KeyNamePair s1,KeyNamePair s2){ + if (s1.getKey() < s2.getKey()) + return -1; + else if (s1.getKey() > s2.getKey()) + return 1; + else + return 0; + }}); + String[] retValue = new String[listkn.size()]; + for (int i = 0; i < listkn.size(); i++) { + retValue[i] = listkn.get(i).getName(); } - String[] retValue = new String[list.size()]; - retValue = list.toArray(retValue); return retValue; } // getIdentifierColumns diff --git a/org.adempiere.server/src/main/servlet/org/compiere/web/AdempiereMonitor.java b/org.adempiere.server/src/main/servlet/org/compiere/web/AdempiereMonitor.java index a56f0af651..9ca3a77637 100644 --- a/org.adempiere.server/src/main/servlet/org/compiere/web/AdempiereMonitor.java +++ b/org.adempiere.server/src/main/servlet/org/compiere/web/AdempiereMonitor.java @@ -1047,6 +1047,8 @@ public class AdempiereMonitor extends HttpServlet for (int i = 0; i < clients.length; i++) { MClient client = clients[i]; + if (!client.isActive()) + continue; if (i > 0) p.addElement(" - "); p.addElement(new a("idempiereMonitor?EMail=" + client.getAD_Client_ID(), client.getName())); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/GridTabRowRenderer.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/GridTabRowRenderer.java index 990409e9b1..19978b73a6 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/GridTabRowRenderer.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/GridTabRowRenderer.java @@ -299,7 +299,28 @@ public class GridTabRowRenderer implements RowRenderer, RowRendererExt styleBuilder.append("; "); styleBuilder.append(inlineStyle); } - component.setStyle(styleBuilder.toString()); + setComponentStyle(component, styleBuilder.toString()); + } + + protected void setComponentStyle(HtmlBasedComponent component, String style) { + if (style != null && style.startsWith(MStyle.SCLASS_PREFIX)) { + String sclass = style.substring(MStyle.SCLASS_PREFIX.length()); + if (component instanceof EditorBox) + ((EditorBox)component).getTextbox().setSclass(sclass); + else + component.setSclass(sclass); + } else if (style != null && style.startsWith(MStyle.ZCLASS_PREFIX)) { + String zclass = style.substring(MStyle.ZCLASS_PREFIX.length()); + if (component instanceof EditorBox) + ((EditorBox)component).getTextbox().setZclass(zclass); + else + component.setZclass(zclass); + } else { + if (component instanceof EditorBox) + ((EditorBox)component).getTextbox().setStyle(style); + else + component.setStyle(style); + } } /** diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditor.java index dd049b10ea..194bd41698 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditor.java @@ -593,9 +593,18 @@ public abstract class WEditor implements EventListener, PropertyChangeLis } } - protected void setLabelStyle(String style) { - if (label != null) - label.setStyle(style); + protected void setLabelStyle(String style) { + if (label != null) { + if (style != null && style.toLowerCase().startsWith(MStyle.SCLASS_PREFIX)) { + String sclass = style.substring(MStyle.SCLASS_PREFIX.length()); + label.setSclass(sclass); + } else if (style != null && style.toLowerCase().startsWith(MStyle.ZCLASS_PREFIX)) { + String zclass = style.substring(MStyle.ZCLASS_PREFIX.length()); + label.setZclass(zclass); + } else { + label.setStyle(style); + } + } } protected void applyFieldStyles(boolean applyDictionaryStyle) { @@ -607,12 +616,26 @@ public abstract class WEditor implements EventListener, PropertyChangeLis setFieldStyle(style); } - protected void setFieldStyle(String style) { + protected void setFieldStyle(String style) { HtmlBasedComponent component = (HtmlBasedComponent) getComponent(); - if (component instanceof EditorBox) - ((EditorBox)component).getTextbox().setStyle(style); - else - component.setStyle(style); + if (style != null && style.startsWith(MStyle.SCLASS_PREFIX)) { + String sclass = style.substring(MStyle.SCLASS_PREFIX.length()); + if (component instanceof EditorBox) + ((EditorBox)component).getTextbox().setSclass(sclass); + else + component.setSclass(sclass); + } else if (style != null && style.startsWith(MStyle.ZCLASS_PREFIX)) { + String zclass = style.substring(MStyle.ZCLASS_PREFIX.length()); + if (component instanceof EditorBox) + ((EditorBox)component).getTextbox().setZclass(zclass); + else + component.setZclass(zclass); + } else { + if (component instanceof EditorBox) + ((EditorBox)component).getTextbox().setStyle(style); + else + component.setStyle(style); + } } protected String buildStyle(int AD_Style_ID) { diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditorPopupMenu.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditorPopupMenu.java index beced98320..dc20d4356b 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditorPopupMenu.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditorPopupMenu.java @@ -27,6 +27,8 @@ import org.adempiere.webui.window.WFieldSuggestion; import org.compiere.model.GridField; import org.compiere.model.Lookup; import org.compiere.model.MRole; +import org.compiere.model.MTable; +import org.compiere.model.MZoomCondition; import org.compiere.util.DB; import org.compiere.util.Env; import org.compiere.util.Msg; @@ -134,16 +136,14 @@ public class WEditorPopupMenu extends Menupopup implements EventListener this.updateEnabled = false; // check possible zoom conditions to enable back zoom - for (int zoomCondWinID : - DB.getIDsEx(null, - "SELECT AD_Window_ID FROM AD_ZoomCondition WHERE IsActive='Y' AND AD_Table_ID IN (SELECT AD_Table_ID FROM AD_Table WHERE TableName=?)", - tableName)) { - Boolean canAccessZoom = MRole.getDefault().getWindowAccess(zoomCondWinID); + MTable table = MTable.get(Env.getCtx(), tableName); + for (MZoomCondition zoomCondition : MZoomCondition.getConditions(table.getAD_Table_ID())) { + Boolean canAccessZoom = MRole.getDefault().getWindowAccess(zoomCondition.getAD_Window_ID()); if (canAccessZoom != null && canAccessZoom) { this.zoomEnabled = true; break; } - } + } } else { int cnt = DB.getSQLValueEx(null, "SELECT COUNT(*) " diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java index bf84725557..726183ed27 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java @@ -667,7 +667,12 @@ public class FindWindow extends Window implements EventListener, ValueCha GridField mField = m_findFields[i]; boolean isDisplayed = mField.isDisplayed(); - if (mField.getVO().displayType == DisplayType.YesNo) { + if (DisplayType.isText(mField.getVO().displayType)) { + // for string fields allow searching long strings - useful for like and similar to searches + mField.getVO().FieldLength = 32767; // a conservative max literal string - like oracle extended + mField.getVO().DisplayLength = mField.getVO().FieldLength; + } + if (mField.getVO().displayType == DisplayType.YesNo) { // Make Yes-No searchable as list GridFieldVO vo = mField.getVO(); GridFieldVO ynvo = vo.clone(m_simpleCtx, vo.WindowNo, vo.TabNo, vo.AD_Window_ID, vo.AD_Tab_ID, vo.tabReadOnly);