hg merge release-5.1 (merge release5.1 into default)

This commit is contained in:
Carlos Ruiz 2018-02-24 12:25:39 +01:00
commit e4118787d8
13 changed files with 119 additions and 124 deletions

View File

@ -92,8 +92,11 @@ public class OrderRePrice extends SvrProcess
for (int i = 0; i < lines.length; i++) for (int i = 0; i < lines.length; i++)
{ {
lines[i].setPrice(invoice.getM_PriceList_ID(), invoice.getC_BPartner_ID()); lines[i].setPrice(invoice.getM_PriceList_ID(), invoice.getC_BPartner_ID());
if (lines[i].is_Changed()) {
lines[i].setTaxAmt();
lines[i].saveEx(); lines[i].saveEx();
} }
}
invoice = new MInvoice (getCtx(), p_C_Invoice_ID, null); invoice = new MInvoice (getCtx(), p_C_Invoice_ID, null);
BigDecimal newPrice = invoice.getGrandTotal(); BigDecimal newPrice = invoice.getGrandTotal();
if (retValue.length() > 0) if (retValue.length() > 0)

View File

@ -181,6 +181,8 @@ public class DBException extends AdempiereException
* @param e exception * @param e exception
*/ */
public static boolean isInvalidIdentifierError(Exception e) { public static boolean isInvalidIdentifierError(Exception e) {
if (DB.isPostgreSQL())
return isSQLState(e, "42P01");
return isErrorCode(e, 904); return isErrorCode(e, 904);
} }

View File

@ -1312,9 +1312,8 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable
public void setLinkColumnName (String linkColumnName) public void setLinkColumnName (String linkColumnName)
{ {
// set parent column name // set parent column name
String sql = "SELECT ColumnName FROM AD_Column WHERE AD_Column_ID=?";
if (m_vo.Parent_Column_ID > 0) 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 ) if ( m_parentColumnName == null )
m_parentColumnName = ""; m_parentColumnName = "";
@ -1329,27 +1328,7 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable
// we have a link column identified (primary parent column) // we have a link column identified (primary parent column)
else else
{ {
String SQL = "SELECT ColumnName FROM AD_Column WHERE AD_Column_ID=?"; m_linkColumnName = MColumn.getColumnName(m_vo.ctx, m_vo.AD_Column_ID); // Parent Link Column
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;
}
if (log.isLoggable(Level.FINE)) log.fine("AD_Column_ID=" + m_vo.AD_Column_ID + " - " + m_linkColumnName); if (log.isLoggable(Level.FINE)) log.fine("AD_Column_ID=" + m_vo.AD_Column_ID + " - " + m_linkColumnName);
} }
} }

View File

@ -49,6 +49,7 @@ import java.util.logging.Level;
import javax.swing.event.TableModelListener; import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel; import javax.swing.table.AbstractTableModel;
import org.adempiere.exceptions.AdempiereException;
import org.adempiere.exceptions.DBException; import org.adempiere.exceptions.DBException;
import org.adempiere.util.ServerContext; import org.adempiere.util.ServerContext;
import org.compiere.Adempiere; import org.compiere.Adempiere;
@ -3542,7 +3543,7 @@ public class GridTable extends AbstractTableModel
if (DBException.isInvalidIdentifierError(e0)) if (DBException.isInvalidIdentifierError(e0))
log.warning("Count - " + e0.getLocalizedMessage() + "\nSQL=" + m_SQL_Count); log.warning("Count - " + e0.getLocalizedMessage() + "\nSQL=" + m_SQL_Count);
else else
log.log(Level.SEVERE, "Count SQL=" + m_SQL_Count, e0); throw new AdempiereException(e0);
return 0; return 0;
} }
finally finally

View File

@ -457,7 +457,7 @@ public class MInvoiceLine extends X_C_InvoiceLine
BigDecimal TaxAmt = Env.ZERO; BigDecimal TaxAmt = Env.ZERO;
if (getC_Tax_ID() == 0) if (getC_Tax_ID() == 0)
return; return;
// setLineNetAmt(); setLineNetAmt();
MTax tax = MTax.get (getCtx(), getC_Tax_ID()); MTax tax = MTax.get (getCtx(), getC_Tax_ID());
if (tax.isDocumentLevel() && m_IsSOTrx) // AR Inv Tax if (tax.isDocumentLevel() && m_IsSOTrx) // AR Inv Tax
return; return;

View File

@ -91,42 +91,18 @@ public class MLookupFactory
public static MLookupInfo getLookupInfo(Properties ctx, int WindowNo, int TabNo, int Column_ID, int AD_Reference_ID) public static MLookupInfo getLookupInfo(Properties ctx, int WindowNo, int TabNo, int Column_ID, int AD_Reference_ID)
{ {
String ColumnName = ""; MColumn column = MColumn.get(ctx, Column_ID);
int AD_Reference_Value_ID = 0; if (column.get_ID() == 0)
boolean IsParent = false;
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); s_log.log(Level.SEVERE, "Column Not Found - AD_Column_ID=" + Column_ID);
}
catch (SQLException ex) String ColumnName = column.getColumnName();
{ int AD_Reference_Value_ID = column.getAD_Reference_Value_ID();
s_log.log(Level.SEVERE, "create", ex); boolean IsParent = column.isParent();
} String ValidationCode = "";
finally
{ if (column.getAD_Val_Rule_ID() > 0) {
DB.close(rs, pstmt); MValRule valRule = MValRule.get(ctx, column.getAD_Val_Rule_ID());
rs = null; ValidationCode = valRule.getCode();
pstmt = null;
} }
// //
MLookupInfo info = getLookupInfo (ctx, WindowNo, TabNo, Column_ID, AD_Reference_ID, MLookupInfo info = getLookupInfo (ctx, WindowNo, TabNo, Column_ID, AD_Reference_ID,
@ -993,42 +969,13 @@ public class MLookupFactory
} // getLookup_TableDirEmbed } // getLookup_TableDirEmbed
private static ArrayList<LookupDisplayColumn> getListIdentifiers(String TableName) { private static ArrayList<LookupDisplayColumn> 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<LookupDisplayColumn> list = new ArrayList<LookupDisplayColumn>(); ArrayList<LookupDisplayColumn> list = new ArrayList<LookupDisplayColumn>();
// MTable table = MTable.get(Env.getCtx(), TableName);
PreparedStatement pstmt = null; for (String idColumnName : table.getIdentifierColumns()) {
ResultSet rs = null; MColumn column = table.getColumn(idColumnName);
try LookupDisplayColumn ldc = new LookupDisplayColumn(column.getColumnName(), column.getColumnSQL(), column.isTranslated(), column.getAD_Reference_ID(), column.getAD_Reference_Value_ID());
{
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); list.add (ldc);
} }
}
catch (SQLException e)
{
s_log.log(Level.SEVERE, sql, e);
return null;
}
finally
{
DB.close(rs, pstmt);
rs = null;
pstmt = null;
}
return list; return list;
} }

View File

@ -15,16 +15,18 @@ import org.compiere.util.Env;
* *
*/ */
public class MStyle extends X_AD_Style { public class MStyle extends X_AD_Style {
/** /**
* *
*/ */
private static final long serialVersionUID = -5183438249097292583L; private static final long serialVersionUID = 4988653330824933725L;
/** Cache */ /** Cache */
private static CCache<Integer,MStyle> s_cache = new CCache<Integer,MStyle>(Table_Name, 30, 60); private static CCache<Integer,MStyle> s_cache = new CCache<Integer,MStyle>(Table_Name, 30, 60);
private X_AD_StyleLine[] m_lines = null; 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) { public MStyle(Properties ctx, int AD_Style_ID, String trxName) {
super(ctx, AD_Style_ID, trxName); super(ctx, AD_Style_ID, trxName);
} }

View File

@ -20,6 +20,8 @@ package org.compiere.model;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
@ -33,6 +35,7 @@ import org.adempiere.model.GenericPO;
import org.compiere.util.CCache; import org.compiere.util.CCache;
import org.compiere.util.CLogger; import org.compiere.util.CLogger;
import org.compiere.util.DB; import org.compiere.util.DB;
import org.compiere.util.KeyNamePair;
/** /**
* Persistent Table Model * Persistent Table Model
@ -356,19 +359,26 @@ public class MTable extends X_AD_Table
* Get Identifier Columns of Table * Get Identifier Columns of Table
* @return Identifier columns * @return Identifier columns
*/ */
public String[] getIdentifierColumns() public String[] getIdentifierColumns() {
{ ArrayList<KeyNamePair> listkn = new ArrayList<KeyNamePair>();
getColumns(false); for (MColumn column : getColumns(false)) {
ArrayList<String> list = new ArrayList<String>();
//
for (int i = 0; i < m_columns.length; i++)
{
MColumn column = m_columns[i];
if (column.isIdentifier()) if (column.isIdentifier())
list.add(column.getColumnName()); listkn.add(new KeyNamePair(column.getSeqNo(), column.getColumnName()));
}
// Order by SeqNo
Collections.sort(listkn, new Comparator<KeyNamePair>(){
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; return retValue;
} // getIdentifierColumns } // getIdentifierColumns

View File

@ -1047,6 +1047,8 @@ public class AdempiereMonitor extends HttpServlet
for (int i = 0; i < clients.length; i++) for (int i = 0; i < clients.length; i++)
{ {
MClient client = clients[i]; MClient client = clients[i];
if (!client.isActive())
continue;
if (i > 0) if (i > 0)
p.addElement(" - "); p.addElement(" - ");
p.addElement(new a("idempiereMonitor?EMail=" + client.getAD_Client_ID(), client.getName())); p.addElement(new a("idempiereMonitor?EMail=" + client.getAD_Client_ID(), client.getName()));

View File

@ -299,7 +299,28 @@ public class GridTabRowRenderer implements RowRenderer<Object[]>, RowRendererExt
styleBuilder.append("; "); styleBuilder.append("; ");
styleBuilder.append(inlineStyle); 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);
}
} }
/** /**

View File

@ -594,9 +594,18 @@ public abstract class WEditor implements EventListener<Event>, PropertyChangeLis
} }
protected void setLabelStyle(String style) { protected void setLabelStyle(String style) {
if (label != null) 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); label.setStyle(style);
} }
}
}
protected void applyFieldStyles(boolean applyDictionaryStyle) { protected void applyFieldStyles(boolean applyDictionaryStyle) {
String style = null; String style = null;
@ -609,11 +618,25 @@ public abstract class WEditor implements EventListener<Event>, PropertyChangeLis
protected void setFieldStyle(String style) { protected void setFieldStyle(String style) {
HtmlBasedComponent component = (HtmlBasedComponent) getComponent(); HtmlBasedComponent component = (HtmlBasedComponent) getComponent();
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) if (component instanceof EditorBox)
((EditorBox)component).getTextbox().setStyle(style); ((EditorBox)component).getTextbox().setStyle(style);
else else
component.setStyle(style); component.setStyle(style);
} }
}
protected String buildStyle(int AD_Style_ID) { protected String buildStyle(int AD_Style_ID) {
MStyle style = MStyle.get(Env.getCtx(), AD_Style_ID); MStyle style = MStyle.get(Env.getCtx(), AD_Style_ID);

View File

@ -27,6 +27,8 @@ import org.adempiere.webui.window.WFieldSuggestion;
import org.compiere.model.GridField; import org.compiere.model.GridField;
import org.compiere.model.Lookup; import org.compiere.model.Lookup;
import org.compiere.model.MRole; import org.compiere.model.MRole;
import org.compiere.model.MTable;
import org.compiere.model.MZoomCondition;
import org.compiere.util.DB; import org.compiere.util.DB;
import org.compiere.util.Env; import org.compiere.util.Env;
import org.compiere.util.Msg; import org.compiere.util.Msg;
@ -134,11 +136,9 @@ public class WEditorPopupMenu extends Menupopup implements EventListener<Event>
this.updateEnabled = false; this.updateEnabled = false;
// check possible zoom conditions to enable back zoom // check possible zoom conditions to enable back zoom
for (int zoomCondWinID : MTable table = MTable.get(Env.getCtx(), tableName);
DB.getIDsEx(null, for (MZoomCondition zoomCondition : MZoomCondition.getConditions(table.getAD_Table_ID())) {
"SELECT AD_Window_ID FROM AD_ZoomCondition WHERE IsActive='Y' AND AD_Table_ID IN (SELECT AD_Table_ID FROM AD_Table WHERE TableName=?)", Boolean canAccessZoom = MRole.getDefault().getWindowAccess(zoomCondition.getAD_Window_ID());
tableName)) {
Boolean canAccessZoom = MRole.getDefault().getWindowAccess(zoomCondWinID);
if (canAccessZoom != null && canAccessZoom) { if (canAccessZoom != null && canAccessZoom) {
this.zoomEnabled = true; this.zoomEnabled = true;
break; break;

View File

@ -667,6 +667,11 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
GridField mField = m_findFields[i]; GridField mField = m_findFields[i];
boolean isDisplayed = mField.isDisplayed(); boolean isDisplayed = mField.isDisplayed();
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) { if (mField.getVO().displayType == DisplayType.YesNo) {
// Make Yes-No searchable as list // Make Yes-No searchable as list
GridFieldVO vo = mField.getVO(); GridFieldVO vo = mField.getVO();