Menu

#2691 Set UserElement as new AcctDimension not apply to AcctViewer

open-fixed
KittiU
5
2011-11-06
2011-11-06
KittiU
No

As I have setup new accounting dimension using Warehouse. I do so by,
1. Accounting Schema window --> Accounting Schema Element tab
2. Add new Accounting Schema Element
- Name = Warehouse
- Type = User Element 1
- Column = M_Warehouse_ID

Now, when I post any transaction that has warehouse, Warehosue will be part of accounting fact. This works perfectly.

However, when I open View --> Accounting Info, although I see "Warehouse" as new search criteria, clicking on Warehouse Search icon result Nothing.

Discussion

  • KittiU

    KittiU - 2011-11-06

    From the code in AcctViewer.java, I found that the logic that deal with UserElement is ignored. Following is the patch that do Fix the problem.
    (Although I think it should have fixed long ago).

     
  • KittiU

    KittiU - 2011-11-06

    diff -r 71ebef5898d9 client/src/org/compiere/acct/AcctViewer.java
    --- a/client/src/org/compiere/acct/AcctViewer.java Thu Sep 01 14:12:17 2011 -0500
    +++ b/client/src/org/compiere/acct/AcctViewer.java Sun Nov 06 15:22:09 2011 +0700
    @@ -42,6 +42,7 @@
    import org.compiere.grid.ed.VDate;
    import org.compiere.model.MAcctSchema;
    import org.compiere.model.MAcctSchemaElement;
    +import org.compiere.model.MColumn;
    import org.compiere.model.X_C_AcctSchema_Element;
    import org.compiere.report.core.RModel;
    import org.compiere.report.core.RModelExcelExporter;
    @@ -716,6 +717,20 @@
    if (ase != null)
    whereClause += " AND C_Element_ID=" + ase.getC_Element_ID();
    }
    + else if (keyColumn.equals("UserElement1_ID")) // KTU
    + {
    + MAcctSchemaElement ase = m_data.ASchema
    + .getAcctSchemaElement(X_C_AcctSchema_Element.ELEMENTTYPE_UserElement1);
    + lookupColumn = MColumn.getColumnName(Env.getCtx(), ase.getAD_Column_ID());
    + whereClause = "";
    + }
    + else if (keyColumn.equals("UserElement2_ID")) // KTU
    + {
    + MAcctSchemaElement ase = m_data.ASchema
    + .getAcctSchemaElement(X_C_AcctSchema_Element.ELEMENTTYPE_UserElement2);
    + lookupColumn = MColumn.getColumnName(Env.getCtx(), ase.getAD_Column_ID());
    + whereClause = "";
    + }
    else if (keyColumn.equals("M_Product_ID"))
    {
    whereClause = "";

     
  • KittiU

    KittiU - 2011-11-06
    • status: open --> open-fixed
     
  • KittiU

    KittiU - 2011-11-14

    Additional bug found related to Accounting Info.
    Case when, M_Warehouse_ID is used as User Element 1, sorting by Warehouse in Accounting Info will result in exception error.

    When I dig into the code, I found that User Element 1 is not handle properly. Following will be the patch.

     
  • KittiU

    KittiU - 2011-11-14

    diff -r 71ebef5898d9 client/src/org/compiere/acct/AcctViewerData.java
    --- a/client/src/org/compiere/acct/AcctViewerData.java Thu Sep 01 14:12:17 2011 -0500
    +++ b/client/src/org/compiere/acct/AcctViewerData.java Mon Nov 14 14:04:58 2011 +0700
    @@ -3,19 +3,19 @@
    * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. *
    * This program is free software; you can redistribute it and/or modify it *
    * under the terms version 2 of the GNU General Public License as published *
    - * by the Free Software Foundation. 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., *
    - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
    - * For the text or an alternative of this public license, you may reach us *
    - * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA *
    - * or via info@compiere.org or http://www.compiere.org/license.html *
    - *****************************************************************************/
    -package org.compiere.acct;
    -
    + * by the Free Software Foundation. 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., *
    + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
    + * For the text or an alternative of this public license, you may reach us *
    + * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA *
    + * or via info@compiere.org or http://www.compiere.org/license.html *
    + *****************************************************************************/
    +package org.compiere.acct;
    +
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    @@ -44,439 +44,446 @@
    import org.compiere.util.Language;
    import org.compiere.util.Msg;
    import org.compiere.util.ValueNamePair;
    -
    -
    -/**
    - * Account Viewer State - maintains State information for the Account Viewer
    - *
    - * @author Jorg Janke
    +
    +
    +/**
    + * Account Viewer State - maintains State information for the Account Viewer
    + *
    + * @author Jorg Janke
    * @version $Id: AcctViewerData.java,v 1.3 2006/08/10 01:00:27 jjanke Exp $
    *
    - * @author Teo Sarca, SC ARHIPAC SERVICE SRL
    + * @author Teo Sarca, SC ARHIPAC SERVICE SRL
    * <li>BF [ 1748449 ] Info Account - Posting Type is not translated
    * <li>BF [ 1778373 ] AcctViewer: data is not sorted proper
    - */
    -class AcctViewerData
    -{
    - /**
    - * Constructor
    - * @param ctx context
    - * @param windowNo window no
    - * @param ad_Client_ID client
    - * @param ad_Table_ID table
    - */
    - public AcctViewerData (Properties ctx, int windowNo, int ad_Client_ID, int ad_Table_ID)
    - {
    - WindowNo = windowNo;
    - AD_Client_ID = ad_Client_ID;
    - if (AD_Client_ID == 0)
    - AD_Client_ID = Env.getContextAsInt(Env.getCtx(), WindowNo, "AD_Client_ID");
    - if (AD_Client_ID == 0)
    - AD_Client_ID = Env.getContextAsInt(Env.getCtx(), "AD_Client_ID");
    - AD_Table_ID = ad_Table_ID;
    - //
    - ASchemas = MAcctSchema.getClientAcctSchema(ctx, AD_Client_ID);
    - ASchema = ASchemas[0];
    - } // AcctViewerData
    -
    - /** Window */
    - public int WindowNo;
    - /** Client */
    - public int AD_Client_ID;
    - /** All Acct Schema */
    - public MAcctSchema[] ASchemas = null;
    - /** This Acct Schema */
    - public MAcctSchema ASchema = null;
    -
    - // Selection Info
    - /** Document Query */
    - public boolean documentQuery = false;
    - /** Acct Schema */
    - public int C_AcctSchema_ID = 0;
    - /** Posting Type */
    - public String PostingType = "";
    - /** Organization */
    - public int AD_Org_ID = 0;
    - /** Date From */
    - public Timestamp DateFrom = null;
    - /** Date To */
    - public Timestamp DateTo = null;
    -
    - // Document Table Selection Info
    - /** Table ID */
    - public int AD_Table_ID;
    - /** Record */
    - public int Record_ID;
    -
    - /** Containing Column and Query */
    - public HashMap<String,String> whereInfo = new HashMap<String,String>();
    - /** Containing TableName and AD_Table_ID */
    - public HashMap<String,Integer> tableInfo = new HashMap<String,Integer>();
    -
    - // Display Info
    - /** Display Qty */
    - boolean displayQty = false;
    - /** Display Source Currency */
    - boolean displaySourceAmt = false;
    - /** Display Document info */
    - boolean displayDocumentInfo = false;
    - //
    - String sortBy1 = "";
    - String sortBy2 = "";
    - String sortBy3 = "";
    - String sortBy4 = "";
    - //
    - boolean group1 = false;
    - boolean group2 = false;
    - boolean group3 = false;
    - boolean group4 = false;
    -
    - /** Leasing Columns */
    - private int m_leadingColumns = 0;
    - /** UserElement1 Reference */
    - private String m_ref1 = null;
    - /** UserElement2 Reference */
    - private String m_ref2 = null;
    - /** Logger */
    - private static CLogger log = CLogger.getCLogger(AcctViewerData.class);
    -
    - /**
    - * Dispose
    - */
    - public void dispose()
    - {
    - ASchemas = null;
    - ASchema = null;
    - //
    - whereInfo.clear();
    - whereInfo = null;
    - //
    - Env.clearWinContext(WindowNo);
    - } // dispose
    -
    -
    - /**************************************************************************
    - * Fill Accounting Schema
    - * @param cb JComboBox to be filled
    - */
    - protected void fillAcctSchema (JComboBox cb)
    - {
    - for (int i = 0; i < ASchemas.length; i++)
    - cb.addItem(new KeyNamePair(ASchemas[i].getC_AcctSchema_ID(),
    - ASchemas[i].getName()));
    - } // fillAcctSchema
    -
    - /**
    - * Fill Posting Type
    - * @param cb JComboBox to be filled
    - */
    - protected void fillPostingType (JComboBox cb)
    - {
    - int AD_Reference_ID = 125;
    - ValueNamePair[] pt = MRefList.getList(Env.getCtx(), AD_Reference_ID, true);
    - for (int i = 0; i < pt.length; i++)
    - cb.addItem(pt[i]);
    - } // fillPostingType
    -
    - /**
    - * Fill Table with
    - * ValueNamePair (TableName, translatedKeyColumnName)
    - * and tableInfo with (TableName, AD_Table_ID)
    - * and select the entry for AD_Table_ID
    - *
    - * @param cb JComboBox to be filled
    - */
    - protected void fillTable (JComboBox cb)
    - {
    - ValueNamePair select = null;
    - //
    - String sql = "SELECT AD_Table_ID, TableName FROM AD_Table t "
    - + "WHERE EXISTS (SELECT * FROM AD_Column c"
    - + " WHERE t.AD_Table_ID=c.AD_Table_ID AND c.ColumnName='Posted')"
    - + " AND IsView='N'";
    - try
    - {
    - PreparedStatement pstmt = DB.prepareStatement(sql, null);
    - ResultSet rs = pstmt.executeQuery();
    - while (rs.next())
    - {
    - int id = rs.getInt(1);
    - String tableName = rs.getString(2);
    - String name = Msg.translate(Env.getCtx(), tableName+"_ID");
    - //
    - ValueNamePair pp = new ValueNamePair(tableName, name);
    - cb.addItem(pp);
    - tableInfo.put (tableName, new Integer(id));
    - if (id == AD_Table_ID)
    - select = pp;
    - }
    - rs.close();
    - pstmt.close();
    - }
    - catch (SQLException e)
    - {
    - log.log(Level.SEVERE, sql, e);
    - }
    - if (select != null)
    - cb.setSelectedItem(select);
    - } // fillTable
    -
    - /**
    - * Fill Org
    - *
    - * @param cb JComboBox to be filled
    - */
    - protected void fillOrg (JComboBox cb)
    - {
    - KeyNamePair pp = new KeyNamePair(0, "");
    - cb.addItem(pp);
    - String sql = "SELECT AD_Org_ID, Name FROM AD_Org WHERE AD_Client_ID=? ORDER BY Value";
    - try
    - {
    - PreparedStatement pstmt = DB.prepareStatement(sql, null);
    - pstmt.setInt(1, AD_Client_ID);
    - ResultSet rs = pstmt.executeQuery();
    - while (rs.next())
    - cb.addItem(new KeyNamePair(rs.getInt(1), rs.getString(2)));
    - rs.close();
    - pstmt.close();
    - }
    - catch (SQLException e)
    - {
    - log.log(Level.SEVERE, sql, e);
    - }
    - } // fillOrg
    -
    - /**
    - * Get Button Text
    - *
    - * @param tableName table
    - * @param columnName column
    - * @param selectSQL sql
    - * @return Text on button
    - */
    - protected String getButtonText (String tableName, String columnName, String selectSQL)
    - {
    - // SELECT (<embedded>) FROM tableName avd WHERE avd.<selectSQL>
    - StringBuffer sql = new StringBuffer ("SELECT (");
    - Language language = Env.getLanguage(Env.getCtx());
    - sql.append(MLookupFactory.getLookup_TableDirEmbed(language, columnName, "avd"))
    - .append(") FROM ").append(tableName).append(" avd WHERE avd.").append(selectSQL);
    - String retValue = "<" + selectSQL + ">";
    - try
    - {
    - Statement stmt = DB.createStatement();
    - ResultSet rs = stmt.executeQuery(sql.toString());
    - if (rs.next())
    - retValue = rs.getString(1);
    - rs.close();
    - stmt.close();
    - }
    - catch (SQLException e)
    - {
    - log.log(Level.SEVERE, sql.toString(), e);
    - }
    - return retValue;
    - } // getButtonText
    -
    - /**************************************************************************
    -
    - /**
    - * Create Query and submit
    - * @return Report Model
    - */
    - protected RModel query()
    - {
    - // Set Where Clause
    - StringBuffer whereClause = new StringBuffer();
    - // Add Organization
    - if (C_AcctSchema_ID != 0)
    - whereClause.append(RModel.TABLE_ALIAS)
    - .append(".C_AcctSchema_ID=").append(C_AcctSchema_ID);
    -
    - // Posting Type Selected
    - if (PostingType != null && PostingType.length() > 0)
    - {
    - if (whereClause.length() > 0)
    - whereClause.append(" AND ");
    - whereClause.append(RModel.TABLE_ALIAS)
    - .append(".PostingType='").append(PostingType).append("'");
    - }
    -
    - //
    - if (documentQuery)
    - {
    - if (whereClause.length() > 0)
    - whereClause.append(" AND ");
    - whereClause.append(RModel.TABLE_ALIAS).append(".AD_Table_ID=").append(AD_Table_ID)
    - .append(" AND ").append(RModel.TABLE_ALIAS).append(".Record_ID=").append(Record_ID);
    - }
    - else
    - {
    - // get values (Queries)
    - Iterator<String> it = whereInfo.values().iterator();
    - while (it.hasNext())
    - {
    - String where = (String)it.next();
    - if (where != null && where.length() > 0) // add only if not empty
    - {
    - if (whereClause.length() > 0)
    - whereClause.append(" AND ");
    - whereClause.append(RModel.TABLE_ALIAS).append(".").append(where);
    - }
    - }
    - if (DateFrom != null || DateTo != null)
    - {
    - if (whereClause.length() > 0)
    - whereClause.append(" AND ");
    - if (DateFrom != null && DateTo != null)
    - whereClause.append("TRUNC(").append(RModel.TABLE_ALIAS).append(".DateAcct, 'DD') BETWEEN ")
    - .append(DB.TO_DATE(DateFrom)).append(" AND ").append(DB.TO_DATE(DateTo));
    - else if (DateFrom != null)
    - whereClause.append("TRUNC(").append(RModel.TABLE_ALIAS).append(".DateAcct, 'DD') >= ")
    - .append(DB.TO_DATE(DateFrom));
    - else // DateTo != null
    - whereClause.append("TRUNC(").append(RModel.TABLE_ALIAS).append(".DateAcct, 'DD') <= ")
    - .append(DB.TO_DATE(DateTo));
    - }
    - // Add Organization
    - if (AD_Org_ID != 0)
    - {
    - if (whereClause.length() > 0)
    - whereClause.append(" AND ");
    - whereClause.append(RModel.TABLE_ALIAS).append(".AD_Org_ID=").append(AD_Org_ID);
    - }
    - }
    -
    + */
    +class AcctViewerData
    +{
    + /**
    + * Constructor
    + * @param ctx context
    + * @param windowNo window no
    + * @param ad_Client_ID client
    + * @param ad_Table_ID table
    + */
    + public AcctViewerData (Properties ctx, int windowNo, int ad_Client_ID, int ad_Table_ID)
    + {
    + WindowNo = windowNo;
    + AD_Client_ID = ad_Client_ID;
    + if (AD_Client_ID == 0)
    + AD_Client_ID = Env.getContextAsInt(Env.getCtx(), WindowNo, "AD_Client_ID");
    + if (AD_Client_ID == 0)
    + AD_Client_ID = Env.getContextAsInt(Env.getCtx(), "AD_Client_ID");
    + AD_Table_ID = ad_Table_ID;
    + //
    + ASchemas = MAcctSchema.getClientAcctSchema(ctx, AD_Client_ID);
    + ASchema = ASchemas[0];
    + } // AcctViewerData
    +
    + /** Window */
    + public int WindowNo;
    + /** Client */
    + public int AD_Client_ID;
    + /** All Acct Schema */
    + public MAcctSchema[] ASchemas = null;
    + /** This Acct Schema */
    + public MAcctSchema ASchema = null;
    +
    + // Selection Info
    + /** Document Query */
    + public boolean documentQuery = false;
    + /** Acct Schema */
    + public int C_AcctSchema_ID = 0;
    + /** Posting Type */
    + public String PostingType = "";
    + /** Organization */
    + public int AD_Org_ID = 0;
    + /** Date From */
    + public Timestamp DateFrom = null;
    + /** Date To */
    + public Timestamp DateTo = null;
    +
    + // Document Table Selection Info
    + /** Table ID */
    + public int AD_Table_ID;
    + /** Record */
    + public int Record_ID;
    +
    + /** Containing Column and Query */
    + public HashMap<String,String> whereInfo = new HashMap<String,String>();
    + /** Containing TableName and AD_Table_ID */
    + public HashMap<String,Integer> tableInfo = new HashMap<String,Integer>();
    +
    + // Display Info
    + /** Display Qty */
    + boolean displayQty = false;
    + /** Display Source Currency */
    + boolean displaySourceAmt = false;
    + /** Display Document info */
    + boolean displayDocumentInfo = false;
    + //
    + String sortBy1 = "";
    + String sortBy2 = "";
    + String sortBy3 = "";
    + String sortBy4 = "";
    + //
    + boolean group1 = false;
    + boolean group2 = false;
    + boolean group3 = false;
    + boolean group4 = false;
    +
    + /** Leasing Columns */
    + private int m_leadingColumns = 0;
    + /** UserElement1 Reference */
    + private String m_ref1 = null;
    + /** UserElement2 Reference */
    + private String m_ref2 = null;
    + /** Logger */
    + private static CLogger log = CLogger.getCLogger(AcctViewerData.class);
    +
    + /**
    + * Dispose
    + */
    + public void dispose()
    + {
    + ASchemas = null;
    + ASchema = null;
    + //
    + whereInfo.clear();
    + whereInfo = null;
    + //
    + Env.clearWinContext(WindowNo);
    + } // dispose
    +
    +
    + /**************************************************************************
    + * Fill Accounting Schema
    + * @param cb JComboBox to be filled
    + */
    + protected void fillAcctSchema (JComboBox cb)
    + {
    + for (int i = 0; i < ASchemas.length; i++)
    + cb.addItem(new KeyNamePair(ASchemas[i].getC_AcctSchema_ID(),
    + ASchemas[i].getName()));
    + } // fillAcctSchema
    +
    + /**
    + * Fill Posting Type
    + * @param cb JComboBox to be filled
    + */
    + protected void fillPostingType (JComboBox cb)
    + {
    + int AD_Reference_ID = 125;
    + ValueNamePair[] pt = MRefList.getList(Env.getCtx(), AD_Reference_ID, true);
    + for (int i = 0; i < pt.length; i++)
    + cb.addItem(pt[i]);
    + } // fillPostingType
    +
    + /**
    + * Fill Table with
    + * ValueNamePair (TableName, translatedKeyColumnName)
    + * and tableInfo with (TableName, AD_Table_ID)
    + * and select the entry for AD_Table_ID
    + *
    + * @param cb JComboBox to be filled
    + */
    + protected void fillTable (JComboBox cb)
    + {
    + ValueNamePair select = null;
    + //
    + String sql = "SELECT AD_Table_ID, TableName FROM AD_Table t "
    + + "WHERE EXISTS (SELECT * FROM AD_Column c"
    + + " WHERE t.AD_Table_ID=c.AD_Table_ID AND c.ColumnName='Posted')"
    + + " AND IsView='N'";
    + try
    + {
    + PreparedStatement pstmt = DB.prepareStatement(sql, null);
    + ResultSet rs = pstmt.executeQuery();
    + while (rs.next())
    + {
    + int id = rs.getInt(1);
    + String tableName = rs.getString(2);
    + String name = Msg.translate(Env.getCtx(), tableName+"_ID");
    + //
    + ValueNamePair pp = new ValueNamePair(tableName, name);
    + cb.addItem(pp);
    + tableInfo.put (tableName, new Integer(id));
    + if (id == AD_Table_ID)
    + select = pp;
    + }
    + rs.close();
    + pstmt.close();
    + }
    + catch (SQLException e)
    + {
    + log.log(Level.SEVERE, sql, e);
    + }
    + if (select != null)
    + cb.setSelectedItem(select);
    + } // fillTable
    +
    + /**
    + * Fill Org
    + *
    + * @param cb JComboBox to be filled
    + */
    + protected void fillOrg (JComboBox cb)
    + {
    + KeyNamePair pp = new KeyNamePair(0, "");
    + cb.addItem(pp);
    + String sql = "SELECT AD_Org_ID, Name FROM AD_Org WHERE AD_Client_ID=? ORDER BY Value";
    + try
    + {
    + PreparedStatement pstmt = DB.prepareStatement(sql, null);
    + pstmt.setInt(1, AD_Client_ID);
    + ResultSet rs = pstmt.executeQuery();
    + while (rs.next())
    + cb.addItem(new KeyNamePair(rs.getInt(1), rs.getString(2)));
    + rs.close();
    + pstmt.close();
    + }
    + catch (SQLException e)
    + {
    + log.log(Level.SEVERE, sql, e);
    + }
    + } // fillOrg
    +
    + /**
    + * Get Button Text
    + *
    + * @param tableName table
    + * @param columnName column
    + * @param selectSQL sql
    + * @return Text on button
    + */
    + protected String getButtonText (String tableName, String columnName, String selectSQL)
    + {
    + // SELECT (<embedded>) FROM tableName avd WHERE avd.<selectSQL>
    + StringBuffer sql = new StringBuffer ("SELECT (");
    + Language language = Env.getLanguage(Env.getCtx());
    + sql.append(MLookupFactory.getLookup_TableDirEmbed(language, columnName, "avd"))
    + .append(") FROM ").append(tableName).append(" avd WHERE avd.").append(selectSQL);
    + String retValue = "<" + selectSQL + ">";
    + try
    + {
    + Statement stmt = DB.createStatement();
    + ResultSet rs = stmt.executeQuery(sql.toString());
    + if (rs.next())
    + retValue = rs.getString(1);
    + rs.close();
    + stmt.close();
    + }
    + catch (SQLException e)
    + {
    + log.log(Level.SEVERE, sql.toString(), e);
    + }
    + return retValue;
    + } // getButtonText
    +
    + /**************************************************************************
    +
    + /**
    + * Create Query and submit
    + * @return Report Model
    + */
    + protected RModel query()
    + {
    + // Set Where Clause
    + StringBuffer whereClause = new StringBuffer();
    + // Add Organization
    + if (C_AcctSchema_ID != 0)
    + whereClause.append(RModel.TABLE_ALIAS)
    + .append(".C_AcctSchema_ID=").append(C_AcctSchema_ID);
    +
    + // Posting Type Selected
    + if (PostingType != null && PostingType.length() > 0)
    + {
    + if (whereClause.length() > 0)
    + whereClause.append(" AND ");
    + whereClause.append(RModel.TABLE_ALIAS)
    + .append(".PostingType='").append(PostingType).append("'");
    + }
    +
    + //
    + if (documentQuery)
    + {
    + if (whereClause.length() > 0)
    + whereClause.append(" AND ");
    + whereClause.append(RModel.TABLE_ALIAS).append(".AD_Table_ID=").append(AD_Table_ID)
    + .append(" AND ").append(RModel.TABLE_ALIAS).append(".Record_ID=").append(Record_ID);
    + }
    + else
    + {
    + // get values (Queries)
    + Iterator<String> it = whereInfo.values().iterator();
    + while (it.hasNext())
    + {
    + String where = (String)it.next();
    + if (where != null && where.length() > 0) // add only if not empty
    + {
    + if (whereClause.length() > 0)
    + whereClause.append(" AND ");
    + whereClause.append(RModel.TABLE_ALIAS).append(".").append(where);
    + }
    + }
    + if (DateFrom != null || DateTo != null)
    + {
    + if (whereClause.length() > 0)
    + whereClause.append(" AND ");
    + if (DateFrom != null && DateTo != null)
    + whereClause.append("TRUNC(").append(RModel.TABLE_ALIAS).append(".DateAcct, 'DD') BETWEEN ")
    + .append(DB.TO_DATE(DateFrom)).append(" AND ").append(DB.TO_DATE(DateTo));
    + else if (DateFrom != null)
    + whereClause.append("TRUNC(").append(RModel.TABLE_ALIAS).append(".DateAcct, 'DD') >= ")
    + .append(DB.TO_DATE(DateFrom));
    + else // DateTo != null
    + whereClause.append("TRUNC(").append(RModel.TABLE_ALIAS).append(".DateAcct, 'DD') <= ")
    + .append(DB.TO_DATE(DateTo));
    + }
    + // Add Organization
    + if (AD_Org_ID != 0)
    + {
    + if (whereClause.length() > 0)
    + whereClause.append(" AND ");
    + whereClause.append(RModel.TABLE_ALIAS).append(".AD_Org_ID=").append(AD_Org_ID);
    + }
    + }
    +
    RModel rm = getRModel();

    - // Set Order By Clause
    - StringBuffer orderClause = new StringBuffer();
    - if (sortBy1.length() > 0)
    + // Set Order By Clause
    + StringBuffer orderClause = new StringBuffer();
    + if (sortBy1.length() > 0)
    {
    RColumn col = rm.getRColumn(sortBy1);
    if (col != null)
    orderClause.append(col.getDisplaySQL());
    else
    - orderClause.append(RModel.TABLE_ALIAS).append(".").append(sortBy1);
    + orderClause.append(RModel.TABLE_ALIAS).append(".").append(sortBy1);
    }
    - if (sortBy2.length() > 0)
    - {
    - if (orderClause.length() > 0)
    - orderClause.append(",");
    + if (sortBy2.length() > 0)
    + {
    + if (orderClause.length() > 0)
    + orderClause.append(",");
    RColumn col = rm.getRColumn(sortBy2);
    if (col != null)
    orderClause.append(col.getDisplaySQL());
    else
    - orderClause.append(RModel.TABLE_ALIAS).append(".").append(sortBy2);
    - }
    - if (sortBy3.length() > 0)
    - {
    - if (orderClause.length() > 0)
    - orderClause.append(",");
    + orderClause.append(RModel.TABLE_ALIAS).append(".").append(sortBy2);
    + }
    + if (sortBy3.length() > 0)
    + {
    + if (orderClause.length() > 0)
    + orderClause.append(",");
    RColumn col = rm.getRColumn(sortBy3);
    if (col != null)
    orderClause.append(col.getDisplaySQL());
    else
    - orderClause.append(RModel.TABLE_ALIAS).append(".").append(sortBy3);
    - }
    - if (sortBy4.length() > 0)
    - {
    - if (orderClause.length() > 0)
    - orderClause.append(",");
    + orderClause.append(RModel.TABLE_ALIAS).append(".").append(sortBy3);
    + }
    + if (sortBy4.length() > 0)
    + {
    + if (orderClause.length() > 0)
    + orderClause.append(",");
    RColumn col = rm.getRColumn(sortBy4);
    if (col != null)
    orderClause.append(col.getDisplaySQL());
    else
    - orderClause.append(RModel.TABLE_ALIAS).append(".").append(sortBy4);
    - }
    - if (orderClause.length() == 0)
    - orderClause.append(RModel.TABLE_ALIAS).append(".Fact_Acct_ID");
    -
    - // Groups
    - if (group1 && sortBy1.length() > 0)
    - rm.setGroup(sortBy1);
    - if (group2 && sortBy2.length() > 0)
    - rm.setGroup(sortBy2);
    - if (group3 && sortBy3.length() > 0)
    - rm.setGroup(sortBy3);
    - if (group4 && sortBy4.length() > 0)
    - rm.setGroup(sortBy4);
    -
    - // Totals
    - rm.setFunction("AmtAcctDr", RModel.FUNCTION_SUM);
    - rm.setFunction("AmtAcctCr", RModel.FUNCTION_SUM);
    -
    - rm.query (Env.getCtx(), whereClause.toString(), orderClause.toString());
    -
    - return rm;
    - } // query
    -
    - /**
    - * Create Report Model (Columns)
    - * @return Report Model
    - */
    - private RModel getRModel()
    - {
    - Properties ctx = Env.getCtx();
    - RModel rm = new RModel("Fact_Acct");
    - // Add Key (Lookups)
    - ArrayList<String> keys = createKeyColumns();
    - int max = m_leadingColumns;
    - if (max == 0)
    - max = keys.size();
    - for (int i = 0; i < max; i++)
    - {
    - String column = (String)keys.get(i);
    - if (column != null && column.startsWith("Date"))
    - rm.addColumn(new RColumn(ctx, column, DisplayType.Date));
    - else if (column != null && column.endsWith("_ID"))
    - rm.addColumn(new RColumn(ctx, column, DisplayType.TableDir));
    - }
    - // Main Info
    - rm.addColumn(new RColumn(ctx, "AmtAcctDr", DisplayType.Amount));
    - rm.addColumn(new RColumn(ctx, "AmtAcctCr", DisplayType.Amount));
    - if (displaySourceAmt)
    - {
    - if (!keys.contains("DateTrx"))
    - rm.addColumn(new RColumn(ctx, "DateTrx", DisplayType.Date));
    - rm.addColumn(new RColumn(ctx, "C_Currency_ID", DisplayType.TableDir));
    - rm.addColumn(new RColumn(ctx, "AmtSourceDr", DisplayType.Amount));
    - rm.addColumn(new RColumn(ctx, "AmtSourceCr", DisplayType.Amount));
    - rm.addColumn(new RColumn(ctx, "Rate", DisplayType.Amount,
    - "CASE WHEN (AmtSourceDr + AmtSourceCr) = 0 THEN 0"
    - + " ELSE (AmtAcctDr + AmtAcctCr) / (AmtSourceDr + AmtSourceCr) END"));
    - }
    - // Remaining Keys
    - for (int i = max; i < keys.size(); i++)
    - {
    - String column = (String)keys.get(i);
    - if (column != null && column.startsWith("Date"))
    - rm.addColumn(new RColumn(ctx, column, DisplayType.Date));
    - else if (column.startsWith("UserElement"))
    - {
    - if (column.indexOf('1') != -1)
    - rm.addColumn(new RColumn(ctx, column, DisplayType.TableDir, null, 0, m_ref1));
    - else
    - rm.addColumn(new RColumn(ctx, column, DisplayType.TableDir, null, 0, m_ref2));
    - }
    - else if (column != null && column.endsWith("_ID"))
    - rm.addColumn(new RColumn(ctx, column, DisplayType.TableDir));
    - }
    - // Info
    - if (!keys.contains("DateAcct"))
    - rm.addColumn(new RColumn(ctx, "DateAcct", DisplayType.Date));
    - if (!keys.contains("C_Period_ID"))
    - rm.addColumn(new RColumn(ctx, "C_Period_ID", DisplayType.TableDir));
    - if (displayQty)
    - {
    - rm.addColumn(new RColumn(ctx, "C_UOM_ID", DisplayType.TableDir));
    - rm.addColumn(new RColumn(ctx, "Qty", DisplayType.Quantity));
    - }
    - if (displayDocumentInfo)
    - {
    - rm.addColumn(new RColumn(ctx, "AD_Table_ID", DisplayType.TableDir));
    - rm.addColumn(new RColumn(ctx, "Record_ID", DisplayType.ID));
    + orderClause.append(RModel.TABLE_ALIAS).append(".").append(sortBy4);
    + }
    + if (orderClause.length() == 0)
    + orderClause.append(RModel.TABLE_ALIAS).append(".Fact_Acct_ID");
    +
    + // Groups
    + if (group1 && sortBy1.length() > 0)
    + rm.setGroup(sortBy1);
    + if (group2 && sortBy2.length() > 0)
    + rm.setGroup(sortBy2);
    + if (group3 && sortBy3.length() > 0)
    + rm.setGroup(sortBy3);
    + if (group4 && sortBy4.length() > 0)
    + rm.setGroup(sortBy4);
    +
    + // Totals
    + rm.setFunction("AmtAcctDr", RModel.FUNCTION_SUM);
    + rm.setFunction("AmtAcctCr", RModel.FUNCTION_SUM);
    +
    + rm.query (Env.getCtx(), whereClause.toString(), orderClause.toString());
    +
    + return rm;
    + } // query
    +
    + /**
    + * Create Report Model (Columns)
    + * @return Report Model
    + */
    + private RModel getRModel()
    + {
    + Properties ctx = Env.getCtx();
    + RModel rm = new RModel("Fact_Acct");
    + // Add Key (Lookups)
    + ArrayList<String> keys = createKeyColumns();
    + int max = m_leadingColumns;
    + if (max == 0)
    + max = keys.size();
    + for (int i = 0; i < max; i++)
    + {
    + String column = (String)keys.get(i);
    + if (column != null && column.startsWith("Date"))
    + rm.addColumn(new RColumn(ctx, column, DisplayType.Date));
    + else if (column.startsWith("UserElement")) // KTU [SF Tracker: 3434033]
    + {
    + if (column.indexOf('1') != -1)
    + rm.addColumn(new RColumn(ctx, column, DisplayType.TableDir, null, 0, m_ref1));
    + else
    + rm.addColumn(new RColumn(ctx, column, DisplayType.TableDir, null, 0, m_ref2));
    + }
    + else if (column != null && column.endsWith("_ID"))
    + rm.addColumn(new RColumn(ctx, column, DisplayType.TableDir));
    + }
    + // Main Info
    + rm.addColumn(new RColumn(ctx, "AmtAcctDr", DisplayType.Amount));
    + rm.addColumn(new RColumn(ctx, "AmtAcctCr", DisplayType.Amount));
    + if (displaySourceAmt)
    + {
    + if (!keys.contains("DateTrx"))
    + rm.addColumn(new RColumn(ctx, "DateTrx", DisplayType.Date));
    + rm.addColumn(new RColumn(ctx, "C_Currency_ID", DisplayType.TableDir));
    + rm.addColumn(new RColumn(ctx, "AmtSourceDr", DisplayType.Amount));
    + rm.addColumn(new RColumn(ctx, "AmtSourceCr", DisplayType.Amount));
    + rm.addColumn(new RColumn(ctx, "Rate", DisplayType.Amount,
    + "CASE WHEN (AmtSourceDr + AmtSourceCr) = 0 THEN 0"
    + + " ELSE (AmtAcctDr + AmtAcctCr) / (AmtSourceDr + AmtSourceCr) END"));
    + }
    + // Remaining Keys
    + for (int i = max; i < keys.size(); i++)
    + {
    + String column = (String)keys.get(i);
    + if (column != null && column.startsWith("Date"))
    + rm.addColumn(new RColumn(ctx, column, DisplayType.Date));
    + else if (column.startsWith("UserElement"))
    + {
    + if (column.indexOf('1') != -1)
    + rm.addColumn(new RColumn(ctx, column, DisplayType.TableDir, null, 0, m_ref1));
    + else
    + rm.addColumn(new RColumn(ctx, column, DisplayType.TableDir, null, 0, m_ref2));
    + }
    + else if (column != null && column.endsWith("_ID"))
    + rm.addColumn(new RColumn(ctx, column, DisplayType.TableDir));
    + }
    + // Info
    + if (!keys.contains("DateAcct"))
    + rm.addColumn(new RColumn(ctx, "DateAcct", DisplayType.Date));
    + if (!keys.contains("C_Period_ID"))
    + rm.addColumn(new RColumn(ctx, "C_Period_ID", DisplayType.TableDir));
    + if (displayQty)
    + {
    + rm.addColumn(new RColumn(ctx, "C_UOM_ID", DisplayType.TableDir));
    + rm.addColumn(new RColumn(ctx, "Qty", DisplayType.Quantity));
    + }
    + if (displayDocumentInfo)
    + {
    + rm.addColumn(new RColumn(ctx, "AD_Table_ID", DisplayType.TableDir));
    + rm.addColumn(new RColumn(ctx, "Record_ID", DisplayType.ID));
    rm.addColumn(new RColumn(ctx, "Description", DisplayType.String));
    }
    if (PostingType == null || PostingType.length() == 0)
    @@ -486,46 +493,46 @@
    null));
    return rm;
    } // createRModel
    -
    - /**
    - * Create the key columns in sequence
    - * @return List of Key Columns
    - */
    - private ArrayList<String> createKeyColumns()
    - {
    - ArrayList<String> columns = new ArrayList<String>();
    - m_leadingColumns = 0;
    - // Sorting Fields
    - columns.add(sortBy1); // may add ""
    - if (!columns.contains(sortBy2))
    - columns.add(sortBy2);
    - if (!columns.contains(sortBy3))
    - columns.add(sortBy3);
    - if (!columns.contains(sortBy4))
    - columns.add(sortBy4);
    -
    - // Add Account Segments
    - MAcctSchemaElement[] elements = ASchema.getAcctSchemaElements();
    - for (int i = 0; i < elements.length; i++)
    - {
    - if (m_leadingColumns == 0 && columns.contains("AD_Org_ID") && columns.contains("Account_ID"))
    - m_leadingColumns = columns.size();
    - //
    - MAcctSchemaElement ase = elements[i];
    - String columnName = ase.getColumnName();
    - if (columnName.startsWith("UserElement"))
    - {
    - if (columnName.indexOf('1') != -1)
    - m_ref1 = ase.getDisplayColumnName();
    - else
    - m_ref2 = ase.getDisplayColumnName();
    - }
    - if (!columns.contains(columnName))
    - columns.add(columnName);
    - }
    - if (m_leadingColumns == 0 && columns.contains("AD_Org_ID") && columns.contains("Account_ID"))
    - m_leadingColumns = columns.size();
    - return columns;
    - } // createKeyColumns
    -
    -} // AcctViewerData
    +
    + /**
    + * Create the key columns in sequence
    + * @return List of Key Columns
    + */
    + private ArrayList<String> createKeyColumns()
    + {
    + ArrayList<String> columns = new ArrayList<String>();
    + m_leadingColumns = 0;
    + // Sorting Fields
    + columns.add(sortBy1); // may add ""
    + if (!columns.contains(sortBy2))
    + columns.add(sortBy2);
    + if (!columns.contains(sortBy3))
    + columns.add(sortBy3);
    + if (!columns.contains(sortBy4))
    + columns.add(sortBy4);
    +
    + // Add Account Segments
    + MAcctSchemaElement[] elements = ASchema.getAcctSchemaElements();
    + for (int i = 0; i < elements.length; i++)
    + {
    + if (m_leadingColumns == 0 && columns.contains("AD_Org_ID") && columns.contains("Account_ID"))
    + m_leadingColumns = columns.size();
    + //
    + MAcctSchemaElement ase = elements[i];
    + String columnName = ase.getColumnName();
    + if (columnName.startsWith("UserElement"))
    + {
    + if (columnName.indexOf('1') != -1)
    + m_ref1 = ase.getDisplayColumnName();
    + else
    + m_ref2 = ase.getDisplayColumnName();
    + }
    + if (!columns.contains(columnName))
    + columns.add(columnName);
    + }
    + if (m_leadingColumns == 0 && columns.contains("AD_Org_ID") && columns.contains("Account_ID"))
    + m_leadingColumns = columns.size();
    + return columns;
    + } // createKeyColumns
    +
    +} // AcctViewerData

     
  • KittiU

    KittiU - 2011-11-14

    SORRY, MISTAKE OF CREATING PATCH for AcctViewerData.java. Here again

    diff -r 71ebef5898d9 client/src/org/compiere/acct/AcctViewerData.java
    --- a/client/src/org/compiere/acct/AcctViewerData.java Thu Sep 01 14:12:17 2011 -0500
    +++ b/client/src/org/compiere/acct/AcctViewerData.java Mon Nov 14 14:11:38 2011 +0700
    @@ -429,7 +429,14 @@
    {
    String column = (String)keys.get(i);
    if (column != null && column.startsWith("Date"))
    - rm.addColumn(new RColumn(ctx, column, DisplayType.Date));
    + rm.addColumn(new RColumn(ctx, column, DisplayType.Date));
    + else if (column.startsWith("UserElement")) // KTU [SF Tracker: 3434033]
    + {
    + if (column.indexOf('1') != -1)
    + rm.addColumn(new RColumn(ctx, column, DisplayType.TableDir, null, 0, m_ref1));
    + else
    + rm.addColumn(new RColumn(ctx, column, DisplayType.TableDir, null, 0, m_ref2));
    + }
    else if (column != null && column.endsWith("_ID"))
    rm.addColumn(new RColumn(ctx, column, DisplayType.TableDir));
    }

     

Log in to post a comment.