/******************************************************************************
* Copyright (C) 2008 Low Heng Sin *
* Copyright (C) 2009 Idalica Corporation *
* 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. *
*****************************************************************************/
package org.adempiere.webui;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.logging.Level;
import org.adempiere.webui.session.SessionManager;
import org.adempiere.webui.window.ADWindow;
import org.compiere.model.GridTab;
import org.compiere.model.MAsset;
import org.compiere.model.MBPartner;
import org.compiere.model.MCampaign;
import org.compiere.model.MInOut;
import org.compiere.model.MInvoice;
import org.compiere.model.MOrder;
import org.compiere.model.MOrderLine;
import org.compiere.model.MPayment;
import org.compiere.model.MProduct;
import org.compiere.model.MProject;
import org.compiere.model.MQuery;
import org.compiere.model.MRMA;
import org.compiere.model.MRequest;
import org.compiere.model.MUser;
import org.compiere.util.CLogger;
import org.compiere.util.DB;
import org.compiere.util.Env;
import org.compiere.util.Msg;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zul.Menuitem;
import org.zkoss.zul.Menupopup;
/**
* Request Button Action.
* Popup Menu
*
* @author Jorg Janke
* @version $Id: ARequest.java,v 1.2 2006/07/30 00:51:27 jjanke Exp $
*
* @author Teo Sarca, SC ARHIPAC SERVICE SRL
* <li>BF [ 1904928 ] Request: Related Request field not filled
*/
public class WRequest implements EventListener
{
/**
* Constructor
* @param invoker invoker button
* @param AD_Table_ID table
* @param Record_ID record
* @param C_BPartner_ID optional bp
*/
public WRequest (Component invoker, int AD_Table_ID, int Record_ID, int C_BPartner_ID)
{
log.config("AD_Table_ID=" + AD_Table_ID + ", Record_ID=" + Record_ID);
m_AD_Table_ID = AD_Table_ID;
m_Record_ID = Record_ID;
m_C_BPartner_ID = C_BPartner_ID;
getRequests(invoker);
} // AReport
/** The Table */
private int m_AD_Table_ID;
/** The Record */
private int m_Record_ID;
/** BPartner */
private int m_C_BPartner_ID;
/** The Popup */
private Menupopup m_popup = new Menupopup();
private Menuitem m_new = null;
private Menuitem m_active = null;
private Menuitem m_all = null;
/** Where Clause */
StringBuffer m_where = null;
/** Logger */
private static CLogger log = CLogger.getCLogger (WRequest.class);
/**
* Display Request Options - New/Existing.
* @param invoker button
*/
private void getRequests (Component invoker)
{
m_new = new Menuitem(Msg.getMsg(Env.getCtx(), "RequestNew"));
m_new.setImage("/images/New16.png");
m_new.addEventListener(Events.ON_CLICK, this);
m_popup.appendChild(m_new);
//
int activeCount = 0;
int inactiveCount = 0;
m_where = new StringBuffer();
m_where.append("(AD_Table_ID=").append(m_AD_Table_ID)
.append(" AND Record_ID=").append(m_Record_ID)
.append(")");
//
if (m_AD_Table_ID == MUser.Table_ID)
m_where.append(" OR AD_User_ID=").append(m_Record_ID)
.append(" OR SalesRep_ID=").append(m_Record_ID);
else if (m_AD_Table_ID == MBPartner.Table_ID)
m_where.append(" OR C_BPartner_ID=").append(m_Record_ID);
else if (m_AD_Table_ID == MOrder.Table_ID)
m_where.append(" OR C_Order_ID=").append(m_Record_ID);
else if (m_AD_Table_ID == MInvoice.Table_ID)
m_where.append(" OR C_Invoice_ID=").append(m_Record_ID);
else if (m_AD_Table_ID == MPayment.Table_ID)
m_where.append(" OR C_Payment_ID=").append(m_Record_ID);
else if (m_AD_Table_ID == MProduct.Table_ID)
m_where.append(" OR M_Product_ID=").append(m_Record_ID);
else if (m_AD_Table_ID == MProject.Table_ID)
m_where.append(" OR C_Project_ID=").append(m_Record_ID);
else if (m_AD_Table_ID == MCampaign.Table_ID)
m_where.append(" OR C_Campaign_ID=").append(m_Record_ID);
else if (m_AD_Table_ID == MAsset.Table_ID)
m_where.append(" OR A_Asset_ID=").append(m_Record_ID);
//
String sql = "SELECT Processed, COUNT(*) "
+ "FROM R_Request WHERE " + m_where
+ " GROUP BY Processed "
+ "ORDER BY Processed DESC";
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{
pstmt = DB.prepareStatement (sql, null);
rs = pstmt.executeQuery ();
while (rs.next ())
{
if ("Y".equals(rs.getString(1)))
inactiveCount = rs.getInt(2);
else
activeCount += rs.getInt(2);
}
}
catch (Exception e)
{
log.log(Level.SEVERE, sql, e);
}
finally
{
DB.close(rs, pstmt);
rs = null;
pstmt = null;
}
//
if (activeCount > 0)
{
m_active = new Menuitem(Msg.getMsg(Env.getCtx(), "RequestActive")
+ " (" + activeCount + ")");
m_active.addEventListener(Events.ON_CLICK, this);
m_popup.appendChild(m_active);
}
if (inactiveCount > 0)
{
m_all = new Menuitem(Msg.getMsg(Env.getCtx(), "RequestAll")
+ " (" + (activeCount + inactiveCount) + ")");
m_all.addEventListener(Events.ON_CLICK, this);
m_popup.appendChild(m_all);
}
m_popup.setPage(invoker.getPage());
m_popup.open(invoker);
} // getZoomTargets
public void onEvent(Event e) throws Exception
{
if (e.getTarget() instanceof Menuitem)
{
MQuery query = null;
if (e.getTarget() == m_active)
{
query = new MQuery("");
String where = "(" + m_where + ") AND Processed='N'";
query.addRestriction(where);
query.setRecordCount(0);
}
else if (e.getTarget() == m_all)
{
query = new MQuery("");
query.addRestriction(m_where.toString());
query.setRecordCount(0);
}
else if (e.getTarget() == m_new)
{
query = new MQuery("");
query.addRestriction("1=2");
query.setRecordCount(0);
}
int AD_Window_ID = 232; // 232=all - 201=my
ADWindow frame = SessionManager.getAppDesktop().openWindow(AD_Window_ID, query);
if(frame == null)
return;
// New - set Table/Record
if (e.getTarget() == m_new)
{
GridTab tab = frame.getADWindowPanel().getActiveGridTab();
tab.dataNew (false);
tab.setValue("AD_Table_ID", new Integer(m_AD_Table_ID));
tab.setValue("Record_ID", new Integer(m_Record_ID));
//
if (m_C_BPartner_ID != 0)
tab.setValue("C_BPartner_ID", new Integer(m_C_BPartner_ID));
//
if (m_AD_Table_ID == MBPartner.Table_ID)
tab.setValue("C_BPartner_ID", new Integer(m_Record_ID));
else if (m_AD_Table_ID == MUser.Table_ID)
tab.setValue("AD_User_ID", new Integer(m_Record_ID));
//
else if (m_AD_Table_ID == MProject.Table_ID)
tab.setValue("C_Project_ID", new Integer(m_Record_ID));
else if (m_AD_Table_ID == MAsset.Table_ID)
tab.setValue("A_Asset_ID", new Integer(m_Record_ID));
//
else if (m_AD_Table_ID == MOrder.Table_ID)
tab.setValue("C_Order_ID", new Integer(m_Record_ID));
else if (m_AD_Table_ID == MInvoice.Table_ID)
tab.setValue("C_Invoice_ID", new Integer(m_Record_ID));
//
else if (m_AD_Table_ID == MProduct.Table_ID)
tab.setValue("M_Product_ID", new Integer(m_Record_ID));
else if (m_AD_Table_ID == MPayment.Table_ID)
tab.setValue("C_Payment_ID", new Integer(m_Record_ID));
//
else if (m_AD_Table_ID == MInOut.Table_ID)
tab.setValue("M_InOut_ID", new Integer(m_Record_ID));
else if (m_AD_Table_ID == MRMA.Table_ID)
tab.setValue("M_RMA_ID", new Integer(m_Record_ID));
//
else if (m_AD_Table_ID == MCampaign.Table_ID)
tab.setValue("C_Campaign_ID", new Integer(m_Record_ID));
//
else if (m_AD_Table_ID == MRequest.Table_ID)
tab.setValue(MRequest.COLUMNNAME_R_RequestRelated_ID, new Integer(m_Record_ID));
// FR [2842165] - Order Ref link from SO line creating new request
else if (m_AD_Table_ID == MOrderLine.Table_ID) {
MOrderLine oLine = new MOrderLine(Env.getCtx(), m_Record_ID, null);
if (oLine != null) {
tab.setValue(MOrderLine.COLUMNNAME_C_Order_ID, new Integer(oLine.getC_Order_ID()));
}
}
}
frame = null;
}
}
}