/******************************************************************************
* Product: Posterita Ajax UI *
* Copyright (C) 2007 Posterita Ltd. 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 *
* Posterita Ltd., 3, Draper Avenue, Quatre Bornes, Mauritius *
* or via info@posterita.org or http://www.posterita.org/ *
*****************************************************************************/
package org.adempiere.webui.acct;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import org.adempiere.webui.apps.AEnv;
import org.adempiere.webui.component.Button;
import org.adempiere.webui.component.Checkbox;
import org.adempiere.webui.component.Datebox;
import org.adempiere.webui.component.Label;
import org.adempiere.webui.component.ListModelTable;
import org.adempiere.webui.component.Listbox;
import org.adempiere.webui.component.Tab;
import org.adempiere.webui.component.Tabbox;
import org.adempiere.webui.component.Tabpanel;
import org.adempiere.webui.component.Tabpanels;
import org.adempiere.webui.component.Tabs;
import org.adempiere.webui.component.VerticalBox;
import org.adempiere.webui.component.WListItemRenderer;
import org.adempiere.webui.component.Window;
import org.adempiere.webui.panel.InfoPanel;
import org.adempiere.webui.session.SessionManager;
import org.adempiere.webui.window.FDialog;
import org.compiere.model.MAcctSchema;
import org.compiere.model.MAcctSchemaElement;
import org.compiere.model.X_C_AcctSchema_Element;
import org.compiere.report.core.RModel;
import org.compiere.util.CLogger;
import org.compiere.util.Env;
import org.compiere.util.Ini;
import org.compiere.util.KeyNamePair;
import org.compiere.util.Msg;
import org.compiere.util.ValueNamePair;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zkex.zul.Borderlayout;
import org.zkoss.zkex.zul.Center;
import org.zkoss.zkex.zul.South;
import org.zkoss.zul.Caption;
import org.zkoss.zul.Groupbox;
import org.zkoss.zul.Hbox;
import org.zkoss.zul.Listhead;
import org.zkoss.zul.Listheader;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Paging;
import org.zkoss.zul.Separator;
/**
* Account Viewer : Based on class AcctViewer
*
* @author Niraj Sohun
* July 27, 2007
*
* @author Elaine Tan
* @author Low Heng Sin
*/
public class WAcctViewer extends Window implements EventListener
{
/**
*
*/
private static final long serialVersionUID = -223185724918504685L;
private static final int PAGE_SIZE = 1000;
/** State Info */
private WAcctViewerData m_data = null;
private Listbox selAcctSchema = new Listbox();
private Listbox selTable = new Listbox();
private Listbox selPostingType = new Listbox();
private Listbox selOrg = new Listbox();
private Listbox sortBy1 = new Listbox();
private Listbox sortBy2 = new Listbox();
private Listbox sortBy3 = new Listbox();
private Listbox sortBy4 = new Listbox();
private Button selRecord = new Button();
private Button selAcct = new Button();
private Button bQuery = new Button();
private Button bRePost = new Button();
private Button bPrint = new Button();
private Button sel1 = new Button();
private Button sel2 = new Button();
private Button sel3 = new Button();
private Button sel4 = new Button();
private Button sel5 = new Button();
private Button sel6 = new Button();
private Button sel7 = new Button();
private Button sel8 = new Button();
private Label statusLine = new Label();
private Label lsel1 = new Label();
private Label lsel2 = new Label();
private Label lsel3 = new Label();
private Label lsel4 = new Label();
private Label lsel5 = new Label();
private Label lsel6 = new Label();
private Label lsel7 = new Label();
private Label lsel8 = new Label();
private Label lacctSchema = new Label();
private Label lpostingType = new Label();
private Label lOrg = new Label();
private Label lAcct = new Label();
private Label lDate = new Label();
private Label lSort = new Label();
private Label lGroup = new Label();
private Datebox selDateFrom = new Datebox();
private Datebox selDateTo = new Datebox();
private Checkbox selDocument = new Checkbox();
private Checkbox displayQty = new Checkbox();
private Checkbox displaySourceAmt = new Checkbox();
private Checkbox displayDocumentInfo = new Checkbox();
private Checkbox group1 = new Checkbox();
private Checkbox group2 = new Checkbox();
private Checkbox group3 = new Checkbox();
private Checkbox group4 = new Checkbox();
private Checkbox forcePost = new Checkbox();
private Tabbox tabbedPane = new Tabbox();
private Listbox table = new Listbox();
private Paging paging = new Paging();
private VerticalBox displayPanel = new VerticalBox();
private VerticalBox selectionPanel = new VerticalBox();
private Tab tabQuery = new Tab();
private Tab tabResult = new Tab();
private Tabs tabs = new Tabs();
private Tabpanel result = new Tabpanel();
private Tabpanel query = new Tabpanel();
private Tabpanels tabpanels = new Tabpanels();
private Hbox southPanel = new Hbox();
private int m_windowNo;
private ArrayList<ArrayList<Object>> m_queryData;
private South pagingPanel;
private Borderlayout resultPanel;
/** Logger */
private static CLogger log = CLogger.getCLogger(WAcctViewer.class);
/**
* Default constructor
*/
public WAcctViewer()
{
this (0, 0, 0);
} // AcctViewer
/**
* Detail Constructor
*
* @param AD_Client_ID Client
* @param AD_Table_ID Table
* @param Record_ID Record
*/
public WAcctViewer(int AD_Client_ID, int AD_Table_ID, int Record_ID)
{
super ();
log.info("AD_Table_ID=" + AD_Table_ID + ", Record_ID=" + Record_ID);
//setDefaultCloseOperation(DISPOSE_ON_CLOSE);
m_windowNo = SessionManager.getAppDesktop().registerWindow(this);
m_data = new WAcctViewerData (Env.getCtx(), m_windowNo, AD_Client_ID, AD_Table_ID);
try
{
init();
dynInit (AD_Table_ID, Record_ID);
AEnv.showWindow(this);
}
catch(Exception e)
{
log.log(Level.SEVERE, "", e);
//dispose();
}
} // AcctViewer
/**
* Static Init.
* <pre>
* - mainPanel
* - tabbedPane
* - query
* - result
* - graphPanel
* </pre>
* @throws Exception
*/
private void init() throws Exception
{
// Selection Panel
// Accounting Schema
Hbox boxAcctSchema = new Hbox();
boxAcctSchema.setWidth("100%");
boxAcctSchema.setWidths("30%, 70%");
lacctSchema.setValue(Msg.translate(Env.getCtx(), "C_AcctSchema_ID"));
selAcctSchema.setMold("select");
selAcctSchema.setRows(1);
boxAcctSchema.appendChild(lacctSchema);
boxAcctSchema.appendChild(selAcctSchema);
Hbox boxSelDoc = new Hbox();
boxSelDoc.setWidth("100%");
boxSelDoc.setWidths("30%, 50%, 20%");
selDocument.setLabel(Msg.getMsg(Env.getCtx(), "SelectDocument"));
selDocument.addEventListener(Events.ON_CHECK, this);
selTable.setMold("select");
selTable.setRows(1);
boxSelDoc.appendChild(selDocument);
boxSelDoc.appendChild(selTable);
boxSelDoc.appendChild(selRecord);
// Posting Type
Hbox boxPostingType = new Hbox();
boxPostingType.setWidth("100%");
boxPostingType.setWidths("30%, 70%");
lpostingType.setValue(Msg.translate(Env.getCtx(), "PostingType"));
selPostingType.setMold("select");
selPostingType.setRows(1);
selPostingType.addEventListener(Events.ON_CLICK, this);
boxPostingType.appendChild(lpostingType);
boxPostingType.appendChild(selPostingType);
// Date
Hbox boxDate = new Hbox();
boxDate.setWidth("100%");
boxDate.setWidths("30%, 35%, 35%");
lDate.setValue(Msg.translate(Env.getCtx(), "DateAcct"));
boxDate.appendChild(lDate);
boxDate.appendChild(selDateFrom);
boxDate.appendChild(selDateTo);
// Organization
Hbox boxOrg = new Hbox();
boxOrg.setWidth("100%");
boxOrg.setWidths("30%, 70%");
lOrg.setValue(Msg.translate(Env.getCtx(), "AD_Org_ID"));
selOrg.setMold("select");
selOrg.setRows(1);
selOrg.addEventListener(Events.ON_SELECT, this);
boxOrg.appendChild(lOrg);
boxOrg.appendChild(selOrg);
// Account
Hbox boxAcct = new Hbox();
boxAcct.setWidth("100%");
boxAcct.setWidths("30%, 70%");
lAcct.setValue(Msg.translate(Env.getCtx(), "Account_ID"));
boxAcct.appendChild(lAcct);
boxAcct.appendChild(selAcct);
Hbox boxSel1 = new Hbox();
boxSel1.setWidth("100%");
boxSel1.setWidths("30%, 70%");
boxSel1.appendChild(lsel1);
boxSel1.appendChild(sel1);
Hbox boxSel2 = new Hbox();
boxSel2.setWidth("100%");
boxSel2.setWidths("30%, 70%");
boxSel2.appendChild(lsel2);
boxSel2.appendChild(sel2);
Hbox boxSel3 = new Hbox();
boxSel3.setWidth("100%");
boxSel3.setWidths("30%, 70%");
boxSel3.appendChild(lsel3);
boxSel3.appendChild(sel3);
Hbox boxSel4 = new Hbox();
boxSel4.setWidth("100%");
boxSel4.setWidths("30%, 70%");
boxSel4.appendChild(lsel4);
boxSel4.appendChild(sel4);
Hbox boxSel5 = new Hbox();
boxSel5.setWidth("100%");
boxSel5.setWidths("30%, 70%");
boxSel5.appendChild(lsel5);
boxSel5.appendChild(sel5);
Hbox boxSel6 = new Hbox();
boxSel6.setWidth("100%");
boxSel6.setWidths("30%, 70%");
boxSel6.appendChild(lsel6);
boxSel6.appendChild(sel6);
Hbox boxSel7 = new Hbox();
boxSel7.setWidth("100%");
boxSel7.setWidths("30%, 70%");
boxSel7.appendChild(lsel7);
boxSel7.appendChild(sel7);
Hbox boxSel8 = new Hbox();
boxSel8.setWidth("100%");
boxSel8.setWidths("30%, 70%");
boxSel8.appendChild(lsel8);
boxSel8.appendChild(sel8);
selectionPanel.setWidth("100%");
selectionPanel.appendChild(boxAcctSchema);
selectionPanel.appendChild(boxSelDoc);
selectionPanel.appendChild(boxPostingType);
selectionPanel.appendChild(boxDate);
selectionPanel.appendChild(boxOrg);
selectionPanel.appendChild(boxAcct);
selectionPanel.appendChild(boxSel1);
selectionPanel.appendChild(boxSel2);
selectionPanel.appendChild(boxSel3);
selectionPanel.appendChild(boxSel4);
selectionPanel.appendChild(boxSel5);
selectionPanel.appendChild(boxSel6);
selectionPanel.appendChild(boxSel7);
selectionPanel.appendChild(boxSel8);
//Display Panel
// Display Document Info
displayDocumentInfo.setLabel(Msg.getMsg(Env.getCtx(), "DisplayDocumentInfo"));
displayDocumentInfo.addEventListener(Events.ON_CLICK, this);
// Display Source Info
displaySourceAmt.setLabel(Msg.getMsg(Env.getCtx(), "DisplaySourceInfo"));
displaySourceAmt.addEventListener(Events.ON_CHECK, this);
// Display Quantity
displayQty.setLabel(Msg.getMsg(Env.getCtx(), "DisplayQty"));
displayQty.addEventListener(Events.ON_CHECK, this);
Hbox boxSortDisplay = new Hbox();
boxSortDisplay.setWidth("100%");
boxSortDisplay.setWidths("70%, 30%");
lSort.setValue(Msg.getMsg(Env.getCtx(), "SortBy"));
lGroup.setValue(Msg.getMsg(Env.getCtx(), "GroupBy"));
boxSortDisplay.appendChild(lSort);
boxSortDisplay.appendChild(lGroup);
Hbox boxSort1 = new Hbox();
boxSort1.setWidth("100%");
boxSort1.setWidths("70%, 30%");
sortBy1.setMold("select");
sortBy1.setRows(1);
boxSort1.appendChild(sortBy1);
boxSort1.appendChild(group1);
Hbox boxSort2 = new Hbox();
boxSort2.setWidth("100%");
boxSort2.setWidths("70%, 30%");
sortBy2.setMold("select");
sortBy2.setRows(1);
boxSort2.appendChild(sortBy2);
boxSort2.appendChild(group2);
Hbox boxSort3 = new Hbox();
boxSort3.setWidth("100%");
boxSort3.setWidths("70%, 30%");
sortBy3.setMold("select");
sortBy3.setRows(1);
boxSort3.appendChild(sortBy3);
boxSort3.appendChild(group3);
Hbox boxSort4 = new Hbox();
boxSort4.setWidth("100%");
boxSort4.setWidths("70%, 30%");
sortBy4.setMold("select");
sortBy4.setRows(1);
boxSort4.appendChild(sortBy4);
boxSort4.appendChild(group4);
displayPanel.setWidth("100%");
displayPanel.appendChild(displayDocumentInfo);
displayPanel.appendChild(displaySourceAmt);
displayPanel.appendChild(displayQty);
displayPanel.appendChild(boxSortDisplay);
displayPanel.appendChild(boxSort1);
displayPanel.appendChild(boxSort2);
displayPanel.appendChild(boxSort3);
displayPanel.appendChild(boxSort4);
//"images/InfoAccount16.png"
Groupbox groupDisplay = new Groupbox();
Caption capDisplay = new Caption("Display");
groupDisplay.appendChild(capDisplay);
groupDisplay.appendChild(displayPanel);
Groupbox groupSelection = new Groupbox();
Caption capSelection = new Caption("Selection");
groupSelection.appendChild(capSelection);
groupSelection.appendChild(selectionPanel);
Hbox boxQueryPanel = new Hbox();
boxQueryPanel.setWidth("98%");
boxQueryPanel.setWidths("63%,1%,36%");
boxQueryPanel.appendChild(groupSelection);
Separator separator = new Separator();
separator.setOrient("vertical");
boxQueryPanel.appendChild(separator);
boxQueryPanel.appendChild(groupDisplay);
// South Panel
bRePost.setLabel(Msg.getMsg(Env.getCtx(), "RePost"));
bRePost.setTooltiptext(Msg.getMsg(Env.getCtx(), "RePostInfo"));
bRePost.addEventListener(Events.ON_CLICK, this);
bRePost.setVisible(false);
forcePost.setLabel(Msg.getMsg(Env.getCtx(), "Force"));
forcePost.setTooltiptext(Msg.getMsg(Env.getCtx(), "ForceInfo"));
forcePost.setVisible(false);
bQuery.setImage("/images/Refresh16.png");
bQuery.setTooltiptext(Msg.getMsg(Env.getCtx(), "Refresh"));
bQuery.addEventListener(Events.ON_CLICK, this);
bPrint.setImage("/images/Print16.png");
bPrint.setTooltiptext(Msg.getMsg(Env.getCtx(), "Print"));
bPrint.addEventListener(Events.ON_CLICK, this);
southPanel.setWidth("100%");
southPanel.setWidths("2%, 12%, 82%, 2%, 2%");
southPanel.appendChild(bRePost);
southPanel.appendChild(forcePost);
southPanel.appendChild(statusLine);
southPanel.appendChild(bPrint);
southPanel.appendChild(bQuery);
// Result Tab
resultPanel = new Borderlayout();
resultPanel.setStyle("position: absolute");
resultPanel.setWidth("97%");
resultPanel.setHeight("96%");
result.appendChild(resultPanel);
Center resultCenter = new Center();
resultCenter.setFlex(true);
resultPanel.appendChild(resultCenter);
table.setWidth("99%;");
table.setVflex(true);
table.setHeight("99%");
table.setStyle("position: absolute;");
resultCenter.appendChild(table);
pagingPanel = new South();
resultPanel.appendChild(pagingPanel);
pagingPanel.appendChild(paging);
result.setWidth("100%");
result.setHeight("100%");
result.setStyle("position: relative");
paging.addEventListener("onPaging", this);
paging.setAutohide(true);
paging.setDetailed(true);
// Query Tab
query.setWidth("100%");
query.appendChild(boxQueryPanel);
// Tabbox
tabQuery.addEventListener(Events.ON_SELECT, this);
tabQuery.setLabel(Msg.getMsg(Env.getCtx(), "ViewerQuery").replaceAll("[&]", ""));
tabResult.addEventListener(Events.ON_SELECT, this);
tabResult.setLabel(Msg.getMsg(Env.getCtx(), "ViewerResult").replaceAll("[&]", ""));
tabs.appendChild(tabQuery);
tabs.appendChild(tabResult);
tabpanels.setWidth("100%");
tabpanels.appendChild(query);
tabpanels.appendChild(result);
tabbedPane.setWidth("100%");
tabbedPane.setHeight("100%");
tabbedPane.appendChild(tabs);
tabbedPane.appendChild(tabpanels);
Borderlayout layout = new Borderlayout();
layout.setParent(this);
layout.setHeight("100%");
layout.setWidth("100%");
layout.setStyle("background-color: transparent");
Center center = new Center();
center.setParent(layout);
center.setFlex(true);
center.setStyle("background-color: transparent");
tabbedPane.setParent(center);
South south = new South();
south.setParent(layout);
south.setFlex(true);
south.setStyle("background-color: transparent");
southPanel.setParent(south);
this.setAttribute("mode", "modal");
this.setTitle("Posting");
this.setBorder("normal");
this.setClosable(true);
this.setWidth("800px");
this.setHeight("500px");
this.setSizable(true);
this.setMaximizable(true);
//tabbedPane.addEventListener(Events.ON_SELECT, this);
}
/**
* Dynamic Init
*
* @param AD_Table_ID table
* @param Record_ID record
*/
private void dynInit (int AD_Table_ID, int Record_ID)
{
m_data.fillAcctSchema(selAcctSchema );
selAcctSchema.addEventListener(Events.ON_SELECT, this);
selAcctSchema.setSelectedIndex(0);
actionAcctSchema();
m_data.fillTable(selTable);
selTable.addEventListener(Events.ON_SELECT, this);
selRecord.setImage("/images/Find16.png");
selRecord.addEventListener(Events.ON_CLICK, this);
selRecord.setLabel("");
m_data.fillPostingType(selPostingType);
selPostingType.setSelectedIndex(0);
// Mandatory Elements
m_data.fillOrg(selOrg);
selAcct.setName("Account_ID");
selAcct.addEventListener(Events.ON_CLICK, this);
selAcct.setLabel("");
selAcct.setImage("/images/Find16.png");
statusLine.setValue(" " + Msg.getMsg(Env.getCtx(), "ViewerOptions"));
// Initial Query
selOrg.setSelectedIndex(0);
sortBy1.setSelectedIndex(0);
sortBy2.setSelectedIndex(0);
sortBy3.setSelectedIndex(0);
sortBy4.setSelectedIndex(0);
// Document Select
boolean haveDoc = (AD_Table_ID != 0 && Record_ID != 0);
selDocument.setChecked(haveDoc);
actionDocument();
if (!haveDoc)
{
selTable.setSelectedIndex(0);
actionTable();
}
else
{
if (setSelectedTable(AD_Table_ID, Record_ID))
{
actionQuery();
}
else
{
//reset
haveDoc = false;
selDocument.setChecked(haveDoc);
actionDocument();
selTable.setSelectedIndex(0);
actionTable();
}
}
if (tabResult.isSelected())
stateChanged();
} // dynInit
private boolean setSelectedTable(int AD_Table_ID, int Record_ID)
{
int cnt = selTable.getItemCount();
ValueNamePair vp = null;
for (int i = 0; i < cnt; i++)
{
Listitem listitem = selTable.getItemAtIndex(i);
vp = (ValueNamePair)listitem.getValue();
int tableId = (Integer)m_data.tableInfo.get(vp.getValue());
if (tableId == AD_Table_ID)
{
selTable.setSelectedIndex(i);
m_data.AD_Table_ID = AD_Table_ID;
// Reset Record
m_data.Record_ID = Record_ID;
selRecord.setLabel("");
selRecord.setName(vp.getValue() + "_ID");
return true;
}
}
return false;
}
/**
* Dispose
*/
public void dispose()
{
m_data.dispose();
m_data = null;
this.detach();
} // dispose;
/**************************************************************************
* Tab Changed
* @param e ChangeEvent
*/
public void stateChanged()
{
// log.info( "AcctViewer.stateChanged");
boolean visible = m_data.documentQuery && tabResult.isSelected();
bRePost.setVisible(visible);
if (Ini.isPropertyBool(Ini.P_SHOW_ADVANCED))
forcePost.setVisible(visible);
} // stateChanged
/**
* Event Performed (Event Listener)
* @param e Event
*/
public void onEvent(Event e) throws Exception
{
// log.info(e.getActionCommand());
Object source = e.getTarget();
if (source == tabResult)
stateChanged();
else if (source == tabQuery)
stateChanged();
else if (source == selAcctSchema)
actionAcctSchema();
else if (source == bQuery)
actionQuery();
else if (source == selDocument)
actionDocument();
else if (source == selTable)
actionTable();
else if (source == bRePost)
actionRePost();
else if (source == bPrint)
;//PrintScreenPainter.printScreen(this);
// InfoButtons
else if (source instanceof Button)
actionButton((Button)source);
else if (source == paging)
{
int pgno = paging.getActivePage();
int start = pgno * PAGE_SIZE;
int end = start + PAGE_SIZE;
if ( end > paging.getTotalSize())
end = paging.getTotalSize();
List<ArrayList<Object>> list = m_queryData.subList(start, end);
ListModelTable model = new ListModelTable(list);
table.setModel(model);
}
} // onEvent
/**
* New Acct Schema
*/
private void actionAcctSchema()
{
Listitem listitem = selAcctSchema.getSelectedItem();
KeyNamePair kp = null;
if (listitem != null)
kp = (KeyNamePair)listitem.getValue();
if (kp == null)
return;
m_data.C_AcctSchema_ID = kp.getKey();
m_data.ASchema = MAcctSchema.get(Env.getCtx(), m_data.C_AcctSchema_ID);
log.info(m_data.ASchema.toString());
// Sort Options
sortBy1.getChildren().clear();
sortBy2.getChildren().clear();
sortBy3.getChildren().clear();
sortBy4.getChildren().clear();
sortAddItem(new ValueNamePair("",""));
sortAddItem(new ValueNamePair("DateAcct", Msg.translate(Env.getCtx(), "DateAcct")));
sortAddItem(new ValueNamePair("DateTrx", Msg.translate(Env.getCtx(), "DateTrx")));
sortAddItem(new ValueNamePair("C_Period_ID", Msg.translate(Env.getCtx(), "C_Period_ID")));
Label[] labels = new Label[] {lsel1, lsel2, lsel3, lsel4, lsel5, lsel6, lsel7, lsel8};
Button[] buttons = new Button[] {sel1 , sel2, sel3, sel4, sel5, sel6, sel7, sel8};
int selectionIndex = 0;
MAcctSchemaElement[] elements = m_data.ASchema.getAcctSchemaElements();
for (int i = 0; i < elements.length && selectionIndex < labels.length; i++)
{
MAcctSchemaElement ase = elements[i];
String columnName = ase.getColumnName();
String displayColumnName = ase.getDisplayColumnName();
// Add Sort Option
sortAddItem(new ValueNamePair(columnName, Msg.translate(Env.getCtx(), displayColumnName)));
// Additional Elements
if (!ase.isElementType(X_C_AcctSchema_Element.ELEMENTTYPE_Organization)
&& !ase.isElementType(X_C_AcctSchema_Element.ELEMENTTYPE_Account))
{
labels[selectionIndex].setValue(Msg.translate(Env.getCtx(), displayColumnName));
labels[selectionIndex].setVisible(true);
buttons[selectionIndex].setName(columnName); // actionCommand
buttons[selectionIndex].addEventListener(Events.ON_CLICK, this);
buttons[selectionIndex].setImage("/images/Find16.png");
buttons[selectionIndex].setLabel("");
buttons[selectionIndex].setVisible(true);
selectionIndex++;
}
}
// don't show remaining
while (selectionIndex < labels.length)
{
labels[selectionIndex].setVisible(false);
buttons[selectionIndex++].setVisible(false);
}
} // actionAcctSchema
/**
* Add to Sort
* @param vn name pair
*/
private void sortAddItem(ValueNamePair vn)
{
sortBy1.appendItem(vn.getName(), vn);
sortBy2.appendItem(vn.getName(), vn);
sortBy3.appendItem(vn.getName(), vn);
sortBy4.appendItem(vn.getName(), vn);
} // sortAddItem
/**
* Query
*/
private void actionQuery()
{
// Parameter Info
StringBuffer para = new StringBuffer();
// Reset Selection Data
m_data.C_AcctSchema_ID = 0;
m_data.AD_Org_ID = 0;
// Save Selection Choices
Listitem listitem = selAcctSchema.getSelectedItem();
KeyNamePair kp = null;
if (listitem != null)
kp = (KeyNamePair)listitem.getValue();
if (kp != null)
m_data.C_AcctSchema_ID = kp.getKey();
para.append("C_AcctSchema_ID=").append(m_data.C_AcctSchema_ID);
listitem = selPostingType.getSelectedItem();
ValueNamePair vp = null;
if (listitem != null)
vp = (ValueNamePair)listitem.getValue();
else
return;
m_data.PostingType = vp.getValue();
para.append(", PostingType=").append(m_data.PostingType);
// Document
m_data.documentQuery = selDocument.isChecked();
para.append(", DocumentQuery=").append(m_data.documentQuery);
if (selDocument.isChecked())
{
if (m_data.AD_Table_ID == 0 || m_data.Record_ID == 0)
return;
para.append(", AD_Table_ID=").append(m_data.AD_Table_ID)
.append(", Record_ID=").append(m_data.Record_ID);
}
else
{
m_data.DateFrom = selDateFrom.getValue() != null
? new Timestamp(selDateFrom.getValue().getTime()) : null;
para.append(", DateFrom=").append(m_data.DateFrom);
m_data.DateTo = selDateTo.getValue() != null
? new Timestamp(selDateTo.getValue().getTime()) : null;
para.append(", DateTo=").append(m_data.DateTo);
listitem = selOrg.getSelectedItem();
if (listitem != null)
kp = (KeyNamePair)listitem.getValue();
else
kp = null;
if (kp != null)
m_data.AD_Org_ID = kp.getKey();
para.append(", AD_Org_ID=").append(m_data.AD_Org_ID);
//
Iterator<String> it = m_data.whereInfo.values().iterator();
while (it.hasNext())
para.append(", ").append(it.next());
}
// Save Display Choices
m_data.displayQty = displayQty.isChecked();
para.append(" - Display Qty=").append(m_data.displayQty);
m_data.displaySourceAmt = displaySourceAmt.isChecked();
para.append(", Source=").append(m_data.displaySourceAmt);
m_data.displayDocumentInfo = displayDocumentInfo.isChecked();
para.append(", Doc=").append(m_data.displayDocumentInfo);
listitem = sortBy1.getSelectedItem();
vp = null;
if (listitem != null)
{
vp = (ValueNamePair)listitem.getValue();
if (vp.getName() != null && vp.getName().trim().length() > 0)
{
m_data.sortBy1 = vp.getValue();//vp.getName();
m_data.group1 = group1.isChecked();
para.append(" - Sorting: ").append(m_data.sortBy1).append("/").append(m_data.group1);
}
}
listitem = sortBy2.getSelectedItem();
vp = null;
if (listitem != null)
{
vp = (ValueNamePair)listitem.getValue();
if (vp.getName() != null && vp.getName().trim().length() > 0)
{
m_data.sortBy2 = vp.getValue();//vp.getName();
m_data.group2 = group2.isChecked();
para.append(", ").append(m_data.sortBy2).append("/").append(m_data.group2);
}
}
listitem = sortBy3.getSelectedItem();
vp = null;
if (listitem != null)
{
vp = (ValueNamePair)listitem.getValue();
if (vp.getName() != null && vp.getName().trim().length() > 0)
{
m_data.sortBy3 = vp.getValue();//vp.getName();
m_data.group3 = group3.isChecked();
para.append(", ").append(m_data.sortBy3).append("/").append(m_data.group3);
}
}
listitem = sortBy4.getSelectedItem();
vp = null;
if (listitem != null)
{
vp = (ValueNamePair)listitem.getValue();
if (vp.getName() != null && vp.getName().trim().length() > 0)
{
m_data.sortBy4 = vp.getValue();//vp.getName();
m_data.group4 = group4.isChecked();
para.append(", ").append(m_data.sortBy4).append("/").append(m_data.group4);
}
}
bQuery.setEnabled(false);
statusLine.setValue(" " + Msg.getMsg(Env.getCtx(), "Processing"));
log.config(para.toString());
// Switch to Result pane
tabbedPane.setSelectedIndex(1);
// Set TableModel with Query
RModel rmodel = m_data.query();
m_queryData = rmodel.getRows();
List<ArrayList<Object>> list = null;
paging.setPageSize(PAGE_SIZE);
if (m_queryData.size() > PAGE_SIZE)
{
list = m_queryData.subList(0, PAGE_SIZE);
paging.setTotalSize(m_queryData.size());
pagingPanel.setVisible(true);
}
else
{
list = m_queryData;
paging.setTotalSize(m_queryData.size());
pagingPanel.setVisible(false);
}
paging.setActivePage(0);
ListModelTable listmodeltable = new ListModelTable(list);
if (table.getListhead() == null)
{
Listhead listhead = new Listhead();
listhead.setSizable(true);
for (int i = 0; i < rmodel.getColumnCount(); i++)
{
Listheader listheader = new Listheader(rmodel.getColumnName(i));
listheader.setTooltiptext(rmodel.getColumnName(i));
listhead.appendChild(listheader);
}
table.appendChild(listhead);
}
// Elaine 2008/07/28
else
{
Listhead listhead = table.getListhead();
// remove existing column header
listhead.getChildren().clear();
// add in new column header
for (int i = 0; i < rmodel.getColumnCount(); i++)
{
Listheader listheader = new Listheader(rmodel.getColumnName(i));
listhead.appendChild(listheader);
}
}
//
table.getItems().clear();
table.setItemRenderer(new WListItemRenderer());
table.setModel(listmodeltable);
resultPanel.invalidate();
bQuery.setEnabled(true);
statusLine.setValue(" " + Msg.getMsg(Env.getCtx(), "ViewerOptions"));
} // actionQuery
/**
* Document selection
*/
private void actionDocument()
{
boolean doc = selDocument.isChecked();
selTable.setEnabled(doc);
selRecord.setEnabled(doc);
//
selDateFrom.setEnabled(!doc);
selDateTo.setEnabled(!doc);
selOrg.setEnabled(!doc);
selAcct.setEnabled(!doc);
sel1.setEnabled(!doc);
sel2.setEnabled(!doc);
sel3.setEnabled(!doc);
sel4.setEnabled(!doc);
sel5.setEnabled(!doc);
sel6.setEnabled(!doc);
sel7.setEnabled(!doc);
sel8.setEnabled(!doc);
} // actionDocument
/**
* Save Table selection (reset Record selection)
*/
private void actionTable()
{
Listitem listitem = selTable.getSelectedItem();
ValueNamePair vp = null;
if (listitem != null)
vp = (ValueNamePair)listitem.getValue();
else
return;
m_data.AD_Table_ID = ((Integer)m_data.tableInfo.get(vp.getValue())).intValue();
log.config(vp.getValue() + " = " + m_data.AD_Table_ID);
// Reset Record
m_data.Record_ID = 0;
selRecord.setLabel("");
selRecord.setName(vp.getValue() + "_ID");
} // actionTable
/**
* Action Button
*
* @param button pressed button
* @return ID
* @throws Exception
*/
private int actionButton(Button button) throws Exception
{
String keyColumn = button.getName();
log.info(keyColumn);
String whereClause = ""; // Elaine 2008/07/28
String lookupColumn = keyColumn;
if ("Account_ID".equals(keyColumn))
{
lookupColumn = "C_ElementValue_ID";
MAcctSchemaElement ase = m_data.ASchema
.getAcctSchemaElement(X_C_AcctSchema_Element.ELEMENTTYPE_Account);
if (ase != null)
whereClause += " AND C_Element_ID=" + ase.getC_Element_ID();
}
else if ("User1_ID".equals(keyColumn))
{
lookupColumn = "C_ElementValue_ID";
MAcctSchemaElement ase = m_data.ASchema
.getAcctSchemaElement(X_C_AcctSchema_Element.ELEMENTTYPE_UserList1);
if (ase != null)
whereClause += " AND C_Element_ID=" + ase.getC_Element_ID();
}
else if ("User2_ID".equals(keyColumn))
{
lookupColumn = "C_ElementValue_ID";
MAcctSchemaElement ase = m_data.ASchema
.getAcctSchemaElement(X_C_AcctSchema_Element.ELEMENTTYPE_UserList2);
if (ase != null)
whereClause += " AND C_Element_ID=" + ase.getC_Element_ID();
}
else if (selDocument.isChecked())
whereClause = "";
String tableName = lookupColumn.substring(0, lookupColumn.length()-3);
whereClause = tableName + ".IsSummary='N'" + whereClause; // Elaine 2008/07/28
InfoPanel info = InfoPanel.create(m_data.WindowNo, tableName, lookupColumn, "", false, whereClause);
if (!info.loadedOK())
{
//info.dispose();
info = null;
button.setLabel("");
m_data.whereInfo.put(keyColumn, "");
return 0;
}
info.setVisible(true);
AEnv.showWindow(info);
String selectSQL = info.getSelectedSQL(); // C_Project_ID=100 or ""
Integer key = (Integer)info.getSelectedKey();
info = null;
if (selectSQL == null || selectSQL.length() == 0 || key == null)
{
button.setLabel("");
m_data.whereInfo.put(keyColumn, ""); // no query
return 0;
}
// Save for query
log.config(keyColumn + " - " + key);
if (button == selRecord) // Record_ID
m_data.Record_ID = key.intValue();
else
m_data.whereInfo.put(keyColumn, keyColumn + "=" + key.intValue());
// Display Selection and resize
button.setLabel(m_data.getButtonText(tableName, lookupColumn, selectSQL));
//pack();
return key.intValue();
} // actionButton
/**
* RePost Record
*/
private void actionRePost()
{
if (m_data.documentQuery
&& m_data.AD_Table_ID != 0 && m_data.Record_ID != 0
&& FDialog.ask(m_data.WindowNo, this, "PostImmediate?"))
{
//setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
boolean force = forcePost.isChecked();
String error = AEnv.postImmediate (m_data.WindowNo, m_data.AD_Client_ID,
m_data.AD_Table_ID, m_data.Record_ID, force);
//setCursor(Cursor.getDefaultCursor());
if (error != null)
FDialog.error(0, this, "PostingError-N", error);
actionQuery();
}
} // actionRePost
}