- Added ZK dashboard
- Added Workflow Activities custom form - Implemented Check Requests and Product Info
This commit is contained in:
parent
5364036b18
commit
e332df4218
|
@ -175,7 +175,7 @@ public class Desktop extends AbstractUIPart implements MenuListener, Serializabl
|
||||||
btnNotice.setLabel("Notice : 0");
|
btnNotice.setLabel("Notice : 0");
|
||||||
btnNotice.setTooltiptext("Notice");
|
btnNotice.setTooltiptext("Notice");
|
||||||
btnNotice.setImage("/images/GetMail16.gif");
|
btnNotice.setImage("/images/GetMail16.gif");
|
||||||
int AD_Menu_ID = DB.getSQLValue(null, "SELECT MAX(AD_Menu_ID) FROM AD_Menu WHERE Name = 'Notice'");
|
int AD_Menu_ID = DB.getSQLValue(null, "SELECT AD_Menu_ID FROM AD_Menu WHERE Name = 'Notice' AND IsSummary = 'N'");
|
||||||
btnNotice.setName(String.valueOf(AD_Menu_ID));
|
btnNotice.setName(String.valueOf(AD_Menu_ID));
|
||||||
btnNotice.addEventListener(Events.ON_CLICK, this);
|
btnNotice.addEventListener(Events.ON_CLICK, this);
|
||||||
|
|
||||||
|
@ -184,7 +184,7 @@ public class Desktop extends AbstractUIPart implements MenuListener, Serializabl
|
||||||
btnRequest.setLabel("Request : 0");
|
btnRequest.setLabel("Request : 0");
|
||||||
btnRequest.setTooltiptext("Request");
|
btnRequest.setTooltiptext("Request");
|
||||||
btnRequest.setImage("/images/Request16.gif");
|
btnRequest.setImage("/images/Request16.gif");
|
||||||
AD_Menu_ID = DB.getSQLValue(null, "SELECT MAX(AD_Menu_ID) FROM AD_Menu WHERE Name = 'Request'");
|
AD_Menu_ID = DB.getSQLValue(null, "SELECT AD_Menu_ID FROM AD_Menu WHERE Name = 'Request' AND IsSummary = 'N'");
|
||||||
btnRequest.setName(String.valueOf(AD_Menu_ID));
|
btnRequest.setName(String.valueOf(AD_Menu_ID));
|
||||||
btnRequest.addEventListener(Events.ON_CLICK, this);
|
btnRequest.addEventListener(Events.ON_CLICK, this);
|
||||||
|
|
||||||
|
@ -193,7 +193,7 @@ public class Desktop extends AbstractUIPart implements MenuListener, Serializabl
|
||||||
btnWorkflow.setLabel("Workflow Activities : 0");
|
btnWorkflow.setLabel("Workflow Activities : 0");
|
||||||
btnWorkflow.setTooltiptext("Workflow Activities");
|
btnWorkflow.setTooltiptext("Workflow Activities");
|
||||||
btnWorkflow.setImage("/images/Assignment16.gif");
|
btnWorkflow.setImage("/images/Assignment16.gif");
|
||||||
AD_Menu_ID = DB.getSQLValue(null, "SELECT MAX(AD_Menu_ID) FROM AD_Menu WHERE Name = 'Workflow Activities'");
|
AD_Menu_ID = DB.getSQLValue(null, "SELECT AD_Menu_ID FROM AD_Menu WHERE Name = 'Workflow Activities' AND IsSummary = 'N'");
|
||||||
btnWorkflow.setName(String.valueOf(AD_Menu_ID));
|
btnWorkflow.setName(String.valueOf(AD_Menu_ID));
|
||||||
btnWorkflow.addEventListener(Events.ON_CLICK, this);
|
btnWorkflow.addEventListener(Events.ON_CLICK, this);
|
||||||
|
|
||||||
|
@ -531,9 +531,6 @@ public class Desktop extends AbstractUIPart implements MenuListener, Serializabl
|
||||||
{
|
{
|
||||||
Button btn = (Button) comp;
|
Button btn = (Button) comp;
|
||||||
|
|
||||||
// int AD_Window_ID = Integer.valueOf(btn.getName());
|
|
||||||
// if (AD_Window_ID > 0) AEnv.zoom(AD_Window_ID, new MQuery());
|
|
||||||
|
|
||||||
int menuId = 0;
|
int menuId = 0;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,226 @@
|
||||||
|
package org.adempiere.webui;
|
||||||
|
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
import org.adempiere.webui.apps.AEnv;
|
||||||
|
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.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.gif");
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
else if (e.getTarget() == m_all)
|
||||||
|
{
|
||||||
|
query = new MQuery("");
|
||||||
|
query.addRestriction(m_where.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
int AD_Window_ID = 232; // 232=all - 201=my
|
||||||
|
if (e.getTarget() == m_new)
|
||||||
|
{
|
||||||
|
Env.setContext(Env.getCtx(), "AD_Table_ID", new Integer(m_AD_Table_ID));
|
||||||
|
Env.setContext(Env.getCtx(), "Record_ID", new Integer(m_Record_ID));
|
||||||
|
//
|
||||||
|
if (m_C_BPartner_ID != 0)
|
||||||
|
Env.setContext(Env.getCtx(), "C_BPartner_ID", new Integer(m_C_BPartner_ID));
|
||||||
|
//
|
||||||
|
if (m_AD_Table_ID == MBPartner.Table_ID)
|
||||||
|
Env.setContext(Env.getCtx(), "C_BPartner_ID", new Integer(m_Record_ID));
|
||||||
|
else if (m_AD_Table_ID == MUser.Table_ID)
|
||||||
|
Env.setContext(Env.getCtx(), "AD_User_ID", new Integer(m_Record_ID));
|
||||||
|
//
|
||||||
|
else if (m_AD_Table_ID == MProject.Table_ID)
|
||||||
|
Env.setContext(Env.getCtx(), "C_Project_ID", new Integer(m_Record_ID));
|
||||||
|
else if (m_AD_Table_ID == MAsset.Table_ID)
|
||||||
|
Env.setContext(Env.getCtx(), "A_Asset_ID", new Integer(m_Record_ID));
|
||||||
|
//
|
||||||
|
else if (m_AD_Table_ID == MOrder.Table_ID)
|
||||||
|
Env.setContext(Env.getCtx(), "C_Order_ID", new Integer(m_Record_ID));
|
||||||
|
else if (m_AD_Table_ID == MInvoice.Table_ID)
|
||||||
|
Env.setContext(Env.getCtx(), "C_Invoice_ID", new Integer(m_Record_ID));
|
||||||
|
//
|
||||||
|
else if (m_AD_Table_ID == MProduct.Table_ID)
|
||||||
|
Env.setContext(Env.getCtx(), "M_Product_ID", new Integer(m_Record_ID));
|
||||||
|
else if (m_AD_Table_ID == MPayment.Table_ID)
|
||||||
|
Env.setContext(Env.getCtx(), "C_Payment_ID", new Integer(m_Record_ID));
|
||||||
|
//
|
||||||
|
else if (m_AD_Table_ID == MInOut.Table_ID)
|
||||||
|
Env.setContext(Env.getCtx(), "M_InOut_ID", new Integer(m_Record_ID));
|
||||||
|
else if (m_AD_Table_ID == MRMA.Table_ID)
|
||||||
|
Env.setContext(Env.getCtx(), "M_RMA_ID", new Integer(m_Record_ID));
|
||||||
|
//
|
||||||
|
else if (m_AD_Table_ID == MCampaign.Table_ID)
|
||||||
|
Env.setContext(Env.getCtx(), "C_Campaign_ID", new Integer(m_Record_ID));
|
||||||
|
//
|
||||||
|
else if (m_AD_Table_ID == MRequest.Table_ID)
|
||||||
|
Env.setContext(Env.getCtx(), MRequest.COLUMNNAME_R_RequestRelated_ID, new Integer(m_Record_ID));
|
||||||
|
}
|
||||||
|
|
||||||
|
AEnv.zoom(AD_Window_ID, query);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -17,23 +17,35 @@
|
||||||
|
|
||||||
package org.adempiere.webui.apps;
|
package org.adempiere.webui.apps;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.InvalidClassException;
|
||||||
|
import java.io.NotSerializableException;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.rmi.*;
|
import java.rmi.RemoteException;
|
||||||
import java.sql.*;
|
import java.sql.PreparedStatement;
|
||||||
import java.util.*;
|
import java.sql.ResultSet;
|
||||||
import java.util.logging.*;
|
import java.sql.SQLException;
|
||||||
|
import java.util.Enumeration;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
import org.adempiere.webui.component.Window;
|
||||||
import org.adempiere.webui.session.SessionManager;
|
import org.adempiere.webui.session.SessionManager;
|
||||||
import org.adempiere.webui.window.FDialog;
|
import org.adempiere.webui.window.FDialog;
|
||||||
import org.compiere.Adempiere;
|
import org.compiere.Adempiere;
|
||||||
import org.compiere.db.*;
|
import org.compiere.apps.ALogin;
|
||||||
import org.compiere.interfaces.*;
|
import org.compiere.db.CConnection;
|
||||||
import org.compiere.model.*;
|
import org.compiere.interfaces.Server;
|
||||||
import org.compiere.util.*;
|
import org.compiere.model.GridWindowVO;
|
||||||
import org.adempiere.webui.component.Window;
|
import org.compiere.model.Lookup;
|
||||||
|
import org.compiere.model.MQuery;
|
||||||
|
import org.compiere.model.MRole;
|
||||||
|
import org.compiere.util.CCache;
|
||||||
|
import org.compiere.util.CLogMgt;
|
||||||
|
import org.compiere.util.CLogger;
|
||||||
|
import org.compiere.util.DB;
|
||||||
|
import org.compiere.util.Env;
|
||||||
|
import org.compiere.util.Ini;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Windows Application Environment and utilities
|
* Windows Application Environment and utilities
|
||||||
|
@ -257,8 +269,6 @@ public final class AEnv
|
||||||
*/
|
*/
|
||||||
public static void zoom (int AD_Table_ID, int Record_ID)
|
public static void zoom (int AD_Table_ID, int Record_ID)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
|
|
||||||
String TableName = null;
|
String TableName = null;
|
||||||
int AD_Window_ID = 0;
|
int AD_Window_ID = 0;
|
||||||
int PO_Window_ID = 0;
|
int PO_Window_ID = 0;
|
||||||
|
@ -296,20 +306,7 @@ public final class AEnv
|
||||||
}
|
}
|
||||||
|
|
||||||
log.config(TableName + " - Record_ID=" + Record_ID + " (IsSOTrx=" + isSOTrx + ")");
|
log.config(TableName + " - Record_ID=" + Record_ID + " (IsSOTrx=" + isSOTrx + ")");
|
||||||
AWindow frame = new AWindow();
|
zoom(AD_Window_ID, MQuery.getEqualQuery(TableName + "_ID", Record_ID));
|
||||||
if (!frame.initWindow(AD_Window_ID, MQuery.getEqualQuery(TableName + "_ID", Record_ID)))
|
|
||||||
return;
|
|
||||||
addToWindowManager(frame);
|
|
||||||
if (Ini.isPropertyBool(Ini.P_OPEN_WINDOW_MAXIMIZED))
|
|
||||||
{
|
|
||||||
AEnv.showMaximized(frame);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
AEnv.showCenterScreen(frame);
|
|
||||||
}
|
|
||||||
frame = null;
|
|
||||||
*/
|
|
||||||
} // zoom
|
} // zoom
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -393,31 +390,19 @@ public final class AEnv
|
||||||
*/
|
*/
|
||||||
public static void startWorkflowProcess (int AD_Table_ID, int Record_ID)
|
public static void startWorkflowProcess (int AD_Table_ID, int Record_ID)
|
||||||
{
|
{
|
||||||
/*
|
if (s_workflow_Window_ID == 0)
|
||||||
|
{
|
||||||
|
int AD_Window_ID = DB.getSQLValue(null, "SELECT AD_Window_ID FROM AD_Window WHERE Name = 'Workflow Process'");
|
||||||
|
s_workflow_Window_ID = AD_Window_ID;
|
||||||
|
}
|
||||||
|
|
||||||
if (s_workflow_Window_ID == 0)
|
if (s_workflow_Window_ID == 0)
|
||||||
return;
|
return;
|
||||||
//
|
|
||||||
MQuery query = null;
|
MQuery query = new MQuery();
|
||||||
if (AD_Table_ID != 0 && Record_ID != 0)
|
|
||||||
{
|
|
||||||
query = new MQuery("AD_WF_Process");
|
|
||||||
query.addRestriction("AD_Table_ID", MQuery.EQUAL, AD_Table_ID);
|
query.addRestriction("AD_Table_ID", MQuery.EQUAL, AD_Table_ID);
|
||||||
query.addRestriction("Record_ID", MQuery.EQUAL, Record_ID);
|
query.addRestriction("Record_ID", MQuery.EQUAL, Record_ID);
|
||||||
}
|
AEnv.zoom(s_workflow_Window_ID, query);
|
||||||
//
|
|
||||||
AWindow frame = new AWindow();
|
|
||||||
if (!frame.initWindow(s_workflow_Window_ID, query))
|
|
||||||
return;
|
|
||||||
addToWindowManager(frame);
|
|
||||||
if (Ini.isPropertyBool(Ini.P_OPEN_WINDOW_MAXIMIZED) ) {
|
|
||||||
frame.pack();
|
|
||||||
frame.setExtendedState(Frame.MAXIMIZED_BOTH);
|
|
||||||
frame.setVisible(true);
|
|
||||||
frame.toFront();
|
|
||||||
} else
|
|
||||||
AEnv.showCenterScreen(frame);
|
|
||||||
frame = null;
|
|
||||||
*/
|
|
||||||
} // startWorkflowProcess
|
} // startWorkflowProcess
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -266,6 +266,8 @@ public class CWindowToolbar extends FToolbar implements EventListener
|
||||||
btnZoomAcross.setDisabled(false);
|
btnZoomAcross.setDisabled(false);
|
||||||
|
|
||||||
btnActiveWorkflows.setDisabled(false); // Elaine 2008/07/17
|
btnActiveWorkflows.setDisabled(false); // Elaine 2008/07/17
|
||||||
|
btnRequests.setDisabled(false); // Elaine 2008/07/22
|
||||||
|
btnProductInfo.setDisabled(false); // Elaine 2008/07/22
|
||||||
|
|
||||||
configureKeyMap();
|
configureKeyMap();
|
||||||
|
|
||||||
|
|
|
@ -40,4 +40,13 @@ public class Combobox extends org.zkoss.zul.Combobox
|
||||||
item.setParent(this);
|
item.setParent(this);
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Elaine 2008/07/22
|
||||||
|
public ComboItem getSelectedItem()
|
||||||
|
{
|
||||||
|
Comboitem item = super.getSelectedItem();
|
||||||
|
if(item == null) return null;
|
||||||
|
return new ComboItem(item.getLabel(), (String) item.getValue());
|
||||||
|
}
|
||||||
|
//
|
||||||
}
|
}
|
|
@ -20,6 +20,7 @@ package org.adempiere.webui.panel;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
import org.adempiere.webui.WRequest;
|
||||||
import org.adempiere.webui.WZoomAcross;
|
import org.adempiere.webui.WZoomAcross;
|
||||||
import org.adempiere.webui.apps.AEnv;
|
import org.adempiere.webui.apps.AEnv;
|
||||||
import org.adempiere.webui.apps.ProcessModalDialog;
|
import org.adempiere.webui.apps.ProcessModalDialog;
|
||||||
|
@ -27,16 +28,13 @@ import org.adempiere.webui.apps.WReport;
|
||||||
import org.adempiere.webui.apps.form.WCreateFrom;
|
import org.adempiere.webui.apps.form.WCreateFrom;
|
||||||
import org.adempiere.webui.apps.form.WPayment;
|
import org.adempiere.webui.apps.form.WPayment;
|
||||||
import org.adempiere.webui.component.CWindowToolbar;
|
import org.adempiere.webui.component.CWindowToolbar;
|
||||||
import org.adempiere.webui.component.IADTabList;
|
|
||||||
import org.adempiere.webui.component.IADTab;
|
import org.adempiere.webui.component.IADTab;
|
||||||
|
import org.adempiere.webui.component.IADTabList;
|
||||||
import org.adempiere.webui.editor.WButtonEditor;
|
import org.adempiere.webui.editor.WButtonEditor;
|
||||||
import org.adempiere.webui.event.ActionEvent;
|
import org.adempiere.webui.event.ActionEvent;
|
||||||
import org.adempiere.webui.event.ActionListener;
|
import org.adempiere.webui.event.ActionListener;
|
||||||
import org.adempiere.webui.event.ToolbarListener;
|
import org.adempiere.webui.event.ToolbarListener;
|
||||||
import org.adempiere.webui.exception.ApplicationException;
|
import org.adempiere.webui.exception.ApplicationException;
|
||||||
import org.adempiere.webui.panel.StatusBarPanel;
|
|
||||||
import org.adempiere.webui.panel.WDocActionPanel;
|
|
||||||
import org.adempiere.webui.panel.WOnlyCurrentDays;
|
|
||||||
import org.adempiere.webui.part.AbstractUIPart;
|
import org.adempiere.webui.part.AbstractUIPart;
|
||||||
import org.adempiere.webui.session.SessionManager;
|
import org.adempiere.webui.session.SessionManager;
|
||||||
import org.adempiere.webui.window.FDialog;
|
import org.adempiere.webui.window.FDialog;
|
||||||
|
@ -1004,37 +1002,36 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To
|
||||||
public void onActiveWorkflows() {
|
public void onActiveWorkflows() {
|
||||||
if (toolbar.getEvent() != null)
|
if (toolbar.getEvent() != null)
|
||||||
{
|
{
|
||||||
int record_ID = curTab.getRecord_ID();
|
if (curTab.getRecord_ID() <= 0)
|
||||||
if (record_ID <= 0)
|
return;
|
||||||
|
else
|
||||||
|
AEnv.startWorkflowProcess(curTab.getAD_Table_ID(), curTab.getRecord_ID());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//
|
||||||
|
|
||||||
|
// Elaine 2008/07/22
|
||||||
|
public void onRequests()
|
||||||
|
{
|
||||||
|
if (toolbar.getEvent() != null)
|
||||||
|
{
|
||||||
|
if (curTab.getRecord_ID() <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Query
|
int C_BPartner_ID = 0;
|
||||||
MQuery query = new MQuery();
|
Object bpartner = curTab.getValue("C_BPartner_ID");
|
||||||
// Current row
|
if(bpartner != null)
|
||||||
String link = curTab.getKeyColumnName();
|
C_BPartner_ID = Integer.valueOf(bpartner.toString());
|
||||||
|
|
||||||
// Link for detail records
|
new WRequest(toolbar.getEvent().getTarget(), curTab.getAD_Table_ID(), curTab.getRecord_ID(), C_BPartner_ID);
|
||||||
if (link.length() == 0)
|
}
|
||||||
link = curTab.getLinkColumnName();
|
}
|
||||||
if (link.length() != 0)
|
//
|
||||||
{
|
|
||||||
if (link.endsWith("_ID"))
|
|
||||||
{
|
|
||||||
int AD_Table_ID = DB.getSQLValue(null, "SELECT AD_Table_ID FROM AD_Table WHERE TableName = ?", link.substring(0, link.length() - 3));
|
|
||||||
int Record_ID = new Integer(Env.getContextAsInt(ctx, curWindowNo, link));
|
|
||||||
|
|
||||||
query.addRestriction("AD_Table_ID", MQuery.EQUAL, AD_Table_ID);
|
// Elaine 2008/07/22
|
||||||
query.addRestriction("Record_ID", MQuery.EQUAL, Record_ID);
|
public void onProductInfo()
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
query.addRestriction(link, MQuery.EQUAL, Env.getContext(ctx, curWindowNo, link));
|
InfoPanel.showProduct(0);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int AD_Window_ID = DB.getSQLValue(null, "SELECT AD_Window_ID FROM AD_Window WHERE Name = 'Workflow Process'");
|
|
||||||
if (AD_Window_ID > 0) AEnv.zoom(AD_Window_ID, query);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
|
|
||||||
|
@ -1051,11 +1048,11 @@ public abstract class AbstractADWindowPanel extends AbstractUIPart implements To
|
||||||
String col = wButton.getColumnName();
|
String col = wButton.getColumnName();
|
||||||
|
|
||||||
// Zoom
|
// Zoom
|
||||||
|
|
||||||
if (col.equals("Record_ID"))
|
if (col.equals("Record_ID"))
|
||||||
{
|
{
|
||||||
int AD_Table_ID = Env.getContextAsInt (ctx, curWindowNo, "AD_Table_ID");
|
int AD_Table_ID = Env.getContextAsInt (ctx, curWindowNo, "AD_Table_ID");
|
||||||
int Record_ID = Env.getContextAsInt (ctx, curWindowNo, "Record_ID");
|
int Record_ID = Env.getContextAsInt (ctx, curWindowNo, "Record_ID");
|
||||||
|
|
||||||
AEnv.zoom(AD_Table_ID, Record_ID);
|
AEnv.zoom(AD_Table_ID, Record_ID);
|
||||||
return;
|
return;
|
||||||
} // Zoom
|
} // Zoom
|
||||||
|
|
|
@ -0,0 +1,705 @@
|
||||||
|
package org.compiere.apps.wf;
|
||||||
|
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
import org.adempiere.webui.apps.AEnv;
|
||||||
|
import org.adempiere.webui.component.Button;
|
||||||
|
import org.adempiere.webui.component.ComboItem;
|
||||||
|
import org.adempiere.webui.component.Combobox;
|
||||||
|
import org.adempiere.webui.component.Grid;
|
||||||
|
import org.adempiere.webui.component.Label;
|
||||||
|
import org.adempiere.webui.component.Row;
|
||||||
|
import org.adempiere.webui.component.Rows;
|
||||||
|
import org.adempiere.webui.component.Textbox;
|
||||||
|
import org.adempiere.webui.component.WStatusBar;
|
||||||
|
import org.adempiere.webui.component.Window;
|
||||||
|
import org.adempiere.webui.editor.WSearchEditor;
|
||||||
|
import org.adempiere.webui.panel.ADForm;
|
||||||
|
import org.adempiere.webui.window.FDialog;
|
||||||
|
import org.compiere.model.MColumn;
|
||||||
|
import org.compiere.model.MLookup;
|
||||||
|
import org.compiere.model.MLookupFactory;
|
||||||
|
import org.compiere.model.MQuery;
|
||||||
|
import org.compiere.model.MRefList;
|
||||||
|
import org.compiere.util.CLogger;
|
||||||
|
import org.compiere.util.DB;
|
||||||
|
import org.compiere.util.DisplayType;
|
||||||
|
import org.compiere.util.Env;
|
||||||
|
import org.compiere.util.Msg;
|
||||||
|
import org.compiere.util.Trx;
|
||||||
|
import org.compiere.util.ValueNamePair;
|
||||||
|
import org.compiere.wf.MWFActivity;
|
||||||
|
import org.compiere.wf.MWFNode;
|
||||||
|
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.zkex.zul.Borderlayout;
|
||||||
|
import org.zkoss.zkex.zul.Center;
|
||||||
|
import org.zkoss.zkex.zul.South;
|
||||||
|
import org.zkoss.zul.Div;
|
||||||
|
import org.zkoss.zul.Hbox;
|
||||||
|
|
||||||
|
public class WFActivity extends ADForm implements EventListener
|
||||||
|
{
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** Window No */
|
||||||
|
private int m_WindowNo = 0;
|
||||||
|
/** FormFrame */
|
||||||
|
// private FormFrame m_frame = null;
|
||||||
|
/** Menu */
|
||||||
|
// private AMenu m_menu = null;
|
||||||
|
/** Open Activities */
|
||||||
|
private MWFActivity[] m_activities = null;
|
||||||
|
/** Current Activity */
|
||||||
|
private MWFActivity m_activity = null;
|
||||||
|
/** Current Activity */
|
||||||
|
private int m_index = 0;
|
||||||
|
/** Set Column */
|
||||||
|
private MColumn m_column = null;
|
||||||
|
/** Logger */
|
||||||
|
private static CLogger log = CLogger.getCLogger(WFActivity.class);
|
||||||
|
|
||||||
|
//
|
||||||
|
// private Panel centerPanel = new Panel();
|
||||||
|
// private GridBagLayout centerLayout = new GridBagLayout();
|
||||||
|
private Label lNode = new Label(Msg.translate(Env.getCtx(), "AD_WF_Node_ID"));
|
||||||
|
private Textbox fNode = new Textbox();
|
||||||
|
private Label lDesctiption = new Label(Msg.translate(Env.getCtx(), "Description"));
|
||||||
|
private Textbox fDescription = new Textbox();
|
||||||
|
private Label lHelp = new Label(Msg.translate(Env.getCtx(), "Help"));
|
||||||
|
private Textbox fHelp = new Textbox();
|
||||||
|
private Label lHistory = new Label(Msg.translate(Env.getCtx(), "History"));
|
||||||
|
private Textbox fHistory = new Textbox();
|
||||||
|
private Label lAnswer = new Label(Msg.getMsg(Env.getCtx(), "Answer"));
|
||||||
|
// private Panel answers = new Panel(new FlowLayout(FlowLayout.LEADING));
|
||||||
|
private Textbox fAnswerText = new Textbox();
|
||||||
|
private Combobox fAnswerList = new Combobox();
|
||||||
|
private Button fAnswerButton = new Button();
|
||||||
|
private Button bPrevious = new Button();//AEnv.getButton("Previous");
|
||||||
|
private Button bNext = new Button();//AEnv.getButton("Next");
|
||||||
|
private Button bZoom = new Button();//AEnv.getButton("Zoom");
|
||||||
|
private Label lTextMsg = new Label(Msg.getMsg(Env.getCtx(), "Messages"));
|
||||||
|
private Textbox fTextMsg = new Textbox();
|
||||||
|
private Button bOK = new Button();//ConfirmPanel.createOKButton(true);
|
||||||
|
private WSearchEditor fForward = null; // dynInit
|
||||||
|
private Label lForward = new Label(Msg.getMsg(Env.getCtx(), "Forward"));
|
||||||
|
private Label lOptional = new Label("(" + Msg.translate(Env.getCtx(), "Optional") + ")");
|
||||||
|
private WStatusBar statusBar = new WStatusBar();
|
||||||
|
|
||||||
|
public WFActivity()
|
||||||
|
{
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init(int adFormId, String name)
|
||||||
|
{
|
||||||
|
super.init(adFormId, name);
|
||||||
|
|
||||||
|
loadActivities();
|
||||||
|
|
||||||
|
bPrevious.setImage("/images/Previous16.gif");
|
||||||
|
bNext.setImage("/images/Next16.gif");
|
||||||
|
bZoom.setImage("/images/Zoom16.gif");
|
||||||
|
bOK.setImage("/images/Ok24.gif");
|
||||||
|
|
||||||
|
MLookup lookup = MLookupFactory.get(Env.getCtx(), super.m_windowNo,
|
||||||
|
0, 10443, DisplayType.Search);
|
||||||
|
fForward = new WSearchEditor(lookup, Msg.translate(
|
||||||
|
Env.getCtx(), "AD_User_ID"), "", true, false, true);
|
||||||
|
|
||||||
|
init();
|
||||||
|
display();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void init()
|
||||||
|
{
|
||||||
|
Grid grid = new Grid();
|
||||||
|
grid.setWidth("99%");
|
||||||
|
grid.setHeight("100%");
|
||||||
|
grid.setStyle("margin:0; padding:0; position: absolute");
|
||||||
|
grid.setSclass("grid-no-striped");
|
||||||
|
grid.setOddRowSclass("even");
|
||||||
|
|
||||||
|
Rows rows = new Rows();
|
||||||
|
grid.appendChild(rows);
|
||||||
|
|
||||||
|
Row row = new Row();
|
||||||
|
rows.appendChild(row);
|
||||||
|
Div div = new Div();
|
||||||
|
div.setAlign("right");
|
||||||
|
div.appendChild(lNode);
|
||||||
|
row.appendChild(div);
|
||||||
|
row.appendChild(fNode);
|
||||||
|
fNode.setWidth("100%");
|
||||||
|
row.appendChild(bPrevious);
|
||||||
|
bPrevious.addEventListener(Events.ON_CLICK, this);
|
||||||
|
|
||||||
|
row = new Row();
|
||||||
|
rows.appendChild(row);
|
||||||
|
row.setValign("top");
|
||||||
|
div = new Div();
|
||||||
|
div.setAlign("right");
|
||||||
|
div.appendChild(lDesctiption);
|
||||||
|
row.appendChild(div);
|
||||||
|
row.appendChild(fDescription);
|
||||||
|
fDescription.setMultiline(true);
|
||||||
|
fDescription.setWidth("100%");
|
||||||
|
row.appendChild(bNext);
|
||||||
|
bNext.addEventListener(Events.ON_CLICK, this);
|
||||||
|
|
||||||
|
row = new Row();
|
||||||
|
rows.appendChild(row);
|
||||||
|
div = new Div();
|
||||||
|
div.setAlign("right");
|
||||||
|
div.appendChild(lHelp);
|
||||||
|
row.appendChild(div);
|
||||||
|
row.appendChild(fHelp);
|
||||||
|
fHelp.setMultiline(true);
|
||||||
|
fHelp.setWidth("100%");
|
||||||
|
row.appendChild(new Label());
|
||||||
|
|
||||||
|
row = new Row();
|
||||||
|
rows.appendChild(row);
|
||||||
|
div = new Div();
|
||||||
|
div.setAlign("right");
|
||||||
|
div.appendChild(lHistory);
|
||||||
|
row.appendChild(div);
|
||||||
|
row.appendChild(fHistory);
|
||||||
|
fHistory.setRows(10);
|
||||||
|
fHistory.setMultiline(true);
|
||||||
|
fHistory.setWidth("100%");
|
||||||
|
row.appendChild(new Label());
|
||||||
|
|
||||||
|
row = new Row();
|
||||||
|
rows.appendChild(row);
|
||||||
|
div = new Div();
|
||||||
|
div.setAlign("right");
|
||||||
|
div.appendChild(lAnswer);
|
||||||
|
row.appendChild(div);
|
||||||
|
Hbox hbox = new Hbox();
|
||||||
|
hbox.appendChild(fAnswerText);
|
||||||
|
hbox.appendChild(fAnswerList);
|
||||||
|
hbox.appendChild(fAnswerButton);
|
||||||
|
fAnswerButton.addEventListener(Events.ON_CLICK, this);
|
||||||
|
row.appendChild(hbox);
|
||||||
|
row.appendChild(bZoom);
|
||||||
|
bZoom.addEventListener(Events.ON_CLICK, this);
|
||||||
|
|
||||||
|
row = new Row();
|
||||||
|
rows.appendChild(row);
|
||||||
|
div = new Div();
|
||||||
|
div.setAlign("right");
|
||||||
|
div.appendChild(lTextMsg);
|
||||||
|
row.appendChild(div);
|
||||||
|
row.appendChild(fTextMsg);
|
||||||
|
fTextMsg.setMultiline(true);
|
||||||
|
fTextMsg.setWidth("100%");
|
||||||
|
row.appendChild(new Label());
|
||||||
|
|
||||||
|
row = new Row();
|
||||||
|
rows.appendChild(row);
|
||||||
|
div = new Div();
|
||||||
|
div.setAlign("right");
|
||||||
|
div.appendChild(lForward);
|
||||||
|
row.appendChild(div);
|
||||||
|
hbox = new Hbox();
|
||||||
|
hbox.appendChild(fForward.getComponent());
|
||||||
|
hbox.appendChild(lOptional);
|
||||||
|
row.appendChild(hbox);
|
||||||
|
row.appendChild(bOK);
|
||||||
|
bOK.addEventListener(Events.ON_CLICK, this);
|
||||||
|
|
||||||
|
Borderlayout layout = new Borderlayout();
|
||||||
|
layout.setWidth("100%");
|
||||||
|
layout.setHeight("100%");
|
||||||
|
layout.setStyle("background-color: transparent; position: absolute;");
|
||||||
|
|
||||||
|
Center center = new Center();
|
||||||
|
center.appendChild(grid);
|
||||||
|
layout.appendChild(center);
|
||||||
|
center.setStyle("background-color: transparent");
|
||||||
|
|
||||||
|
South south = new South();
|
||||||
|
south.appendChild(statusBar);
|
||||||
|
statusBar.setWidth("100%");
|
||||||
|
layout.appendChild(south);
|
||||||
|
south.setStyle("background-color: transparent");
|
||||||
|
|
||||||
|
this.appendChild(layout);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onEvent(Event event) throws Exception
|
||||||
|
{
|
||||||
|
// this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
|
||||||
|
|
||||||
|
Component comp = event.getTarget();
|
||||||
|
String eventName = event.getName();
|
||||||
|
|
||||||
|
if(eventName.equals(Events.ON_CLICK))
|
||||||
|
{
|
||||||
|
if(comp == bNext || comp == bPrevious)
|
||||||
|
{
|
||||||
|
if (comp == bNext)
|
||||||
|
m_index++;
|
||||||
|
else
|
||||||
|
m_index--;
|
||||||
|
display();
|
||||||
|
}
|
||||||
|
else if (comp == bZoom)
|
||||||
|
cmd_zoom();
|
||||||
|
else if (comp == bOK)
|
||||||
|
cmd_OK();
|
||||||
|
else if (comp == fAnswerButton)
|
||||||
|
cmd_button();
|
||||||
|
}
|
||||||
|
|
||||||
|
// this.setCursor(Cursor.getDefaultCursor());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get active activities count
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public int getActivitiesCount()
|
||||||
|
{
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
String sql = "SELECT count(*) FROM AD_WF_Activity a "
|
||||||
|
+ "WHERE a.Processed='N' AND a.WFState='OS' AND ("
|
||||||
|
// Owner of Activity
|
||||||
|
+ " a.AD_User_ID=?" // #1
|
||||||
|
// Invoker (if no invoker = all)
|
||||||
|
+ " OR EXISTS (SELECT * FROM AD_WF_Responsible r WHERE a.AD_WF_Responsible_ID=r.AD_WF_Responsible_ID"
|
||||||
|
+ " AND COALESCE(r.AD_User_ID,0)=0 AND COALESCE(r.AD_Role_ID,0)=0 AND (a.AD_User_ID=? OR a.AD_User_ID IS NULL))" // #2
|
||||||
|
// Responsible User
|
||||||
|
+ " OR EXISTS (SELECT * FROM AD_WF_Responsible r WHERE a.AD_WF_Responsible_ID=r.AD_WF_Responsible_ID"
|
||||||
|
+ " AND r.AD_User_ID=?)" // #3
|
||||||
|
// Responsible Role
|
||||||
|
+ " OR EXISTS (SELECT * FROM AD_WF_Responsible r INNER JOIN AD_User_Roles ur ON (r.AD_Role_ID=ur.AD_Role_ID)"
|
||||||
|
+ " WHERE a.AD_WF_Responsible_ID=r.AD_WF_Responsible_ID AND ur.AD_User_ID=?))"; // #4
|
||||||
|
//
|
||||||
|
//+ ") ORDER BY a.Priority DESC, Created";
|
||||||
|
int AD_User_ID = Env.getAD_User_ID(Env.getCtx());
|
||||||
|
PreparedStatement pstmt = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
pstmt = DB.prepareStatement (sql, null);
|
||||||
|
pstmt.setInt (1, AD_User_ID);
|
||||||
|
pstmt.setInt (2, AD_User_ID);
|
||||||
|
pstmt.setInt (3, AD_User_ID);
|
||||||
|
pstmt.setInt (4, AD_User_ID);
|
||||||
|
rs = pstmt.executeQuery ();
|
||||||
|
if (rs.next ()) {
|
||||||
|
count = rs.getInt(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
log.log(Level.SEVERE, sql, e);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
DB.close(rs, pstmt);
|
||||||
|
rs = null; pstmt = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return count;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load Activities
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public int loadActivities()
|
||||||
|
{
|
||||||
|
long start = System.currentTimeMillis();
|
||||||
|
ArrayList<MWFActivity> list = new ArrayList<MWFActivity>();
|
||||||
|
String sql = "SELECT * FROM AD_WF_Activity a "
|
||||||
|
+ "WHERE a.Processed='N' AND a.WFState='OS' AND ("
|
||||||
|
// Owner of Activity
|
||||||
|
+ " a.AD_User_ID=?" // #1
|
||||||
|
// Invoker (if no invoker = all)
|
||||||
|
+ " OR EXISTS (SELECT * FROM AD_WF_Responsible r WHERE a.AD_WF_Responsible_ID=r.AD_WF_Responsible_ID"
|
||||||
|
+ " AND COALESCE(r.AD_User_ID,0)=0 AND COALESCE(r.AD_Role_ID,0)=0 AND (a.AD_User_ID=? OR a.AD_User_ID IS NULL))" // #2
|
||||||
|
// Responsible User
|
||||||
|
+ " OR EXISTS (SELECT * FROM AD_WF_Responsible r WHERE a.AD_WF_Responsible_ID=r.AD_WF_Responsible_ID"
|
||||||
|
+ " AND r.AD_User_ID=?)" // #3
|
||||||
|
// Responsible Role
|
||||||
|
+ " OR EXISTS (SELECT * FROM AD_WF_Responsible r INNER JOIN AD_User_Roles ur ON (r.AD_Role_ID=ur.AD_Role_ID)"
|
||||||
|
+ " WHERE a.AD_WF_Responsible_ID=r.AD_WF_Responsible_ID AND ur.AD_User_ID=?)" // #4
|
||||||
|
//
|
||||||
|
+ ") ORDER BY a.Priority DESC, Created";
|
||||||
|
int AD_User_ID = Env.getAD_User_ID(Env.getCtx());
|
||||||
|
PreparedStatement pstmt = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
pstmt = DB.prepareStatement (sql, null);
|
||||||
|
pstmt.setInt (1, AD_User_ID);
|
||||||
|
pstmt.setInt (2, AD_User_ID);
|
||||||
|
pstmt.setInt (3, AD_User_ID);
|
||||||
|
pstmt.setInt (4, AD_User_ID);
|
||||||
|
rs = pstmt.executeQuery ();
|
||||||
|
while (rs.next ())
|
||||||
|
{
|
||||||
|
list.add (new MWFActivity(Env.getCtx(), rs, null));
|
||||||
|
if (list.size() > 200) // HARDCODED
|
||||||
|
{
|
||||||
|
log.warning("More then 200 Activities - ignored");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
log.log(Level.SEVERE, sql, e);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
DB.close(rs, pstmt);
|
||||||
|
rs = null; pstmt = null;
|
||||||
|
}
|
||||||
|
m_activities = new MWFActivity[list.size ()];
|
||||||
|
list.toArray (m_activities);
|
||||||
|
//
|
||||||
|
log.fine("#" + m_activities.length
|
||||||
|
+ "(" + (System.currentTimeMillis()-start) + "ms)");
|
||||||
|
m_index = 0;
|
||||||
|
return m_activities.length;
|
||||||
|
} // loadActivities
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display.
|
||||||
|
* Fill Editors
|
||||||
|
*/
|
||||||
|
public void display ()
|
||||||
|
{
|
||||||
|
log.fine("Index=" + m_index);
|
||||||
|
//
|
||||||
|
fTextMsg.setValue ("");
|
||||||
|
fAnswerText.setVisible(false);
|
||||||
|
fAnswerList.setVisible(false);
|
||||||
|
fAnswerButton.setImage("/images/mWindow.gif");
|
||||||
|
fAnswerButton.setVisible(false);
|
||||||
|
fTextMsg.setReadonly(m_activities.length == 0);
|
||||||
|
// fTextMsg.setReadWrite(m_activities.length != 0);
|
||||||
|
bZoom.setEnabled(m_activities.length != 0);
|
||||||
|
bOK.setEnabled(m_activities.length != 0);
|
||||||
|
fForward.setValue(null);
|
||||||
|
fForward.setReadWrite(m_activities.length != 0);
|
||||||
|
// fForward.setEnabled(m_activities.length != 0);
|
||||||
|
statusBar.setStatusDB(String.valueOf(m_index) + "/" + m_activities.length);
|
||||||
|
m_activity = null;
|
||||||
|
if (m_activities.length > 0)
|
||||||
|
{
|
||||||
|
if (m_index+1 > m_activities.length)
|
||||||
|
{
|
||||||
|
log.log(Level.SEVERE, "Index (" + m_index
|
||||||
|
+ ") greater then activity length=" + m_activities.length);
|
||||||
|
m_index = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
m_activity = m_activities[m_index];
|
||||||
|
}
|
||||||
|
// Nothing to show
|
||||||
|
if (m_activity == null)
|
||||||
|
{
|
||||||
|
fNode.setText ("");
|
||||||
|
fDescription.setValue ("");
|
||||||
|
fHelp.setValue ("");
|
||||||
|
fHistory.setValue ("");
|
||||||
|
statusBar.setStatusDB("0/0");
|
||||||
|
statusBar.setStatusLine(Msg.getMsg(Env.getCtx(), "WFNoActivities"));
|
||||||
|
bNext.setEnabled(false);
|
||||||
|
bPrevious.setEnabled(false);
|
||||||
|
// if (m_menu != null)
|
||||||
|
// m_menu.updateActivities(0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Display Activity
|
||||||
|
fNode.setText (m_activity.getNodeName());
|
||||||
|
fDescription.setValue (m_activity.getNodeDescription());
|
||||||
|
fHelp.setValue (m_activity.getNodeHelp());
|
||||||
|
//
|
||||||
|
fHistory.setValue (m_activity.getHistoryHTML());
|
||||||
|
|
||||||
|
// User Actions
|
||||||
|
MWFNode node = m_activity.getNode();
|
||||||
|
if (MWFNode.ACTION_UserChoice.equals(node.getAction()))
|
||||||
|
{
|
||||||
|
if (m_column == null)
|
||||||
|
m_column = node.getColumn();
|
||||||
|
if (m_column != null && m_column.get_ID() != 0)
|
||||||
|
{
|
||||||
|
int dt = m_column.getAD_Reference_ID();
|
||||||
|
if (dt == DisplayType.YesNo)
|
||||||
|
{
|
||||||
|
ValueNamePair[] values = MRefList.getList(Env.getCtx(), 319, false); // _YesNo
|
||||||
|
for(int i = 0; i < values.length; i++)
|
||||||
|
{
|
||||||
|
ComboItem item = new ComboItem(values[i].getName(), values[i].getValue());
|
||||||
|
fAnswerList.appendChild(item);
|
||||||
|
}
|
||||||
|
// fAnswerList.setModel(new DefaultComboBoxModel(values));
|
||||||
|
fAnswerList.setVisible(true);
|
||||||
|
}
|
||||||
|
else if (dt == DisplayType.List)
|
||||||
|
{
|
||||||
|
ValueNamePair[] values = MRefList.getList(Env.getCtx(), m_column.getAD_Reference_Value_ID(), false);
|
||||||
|
for(int i = 0; i < values.length; i++)
|
||||||
|
{
|
||||||
|
ComboItem item = new ComboItem(values[i].getName(), values[i].getValue());
|
||||||
|
fAnswerList.appendChild(item);
|
||||||
|
}
|
||||||
|
// fAnswerList.setModel(new DefaultComboBoxModel(values));
|
||||||
|
fAnswerList.setVisible(true);
|
||||||
|
}
|
||||||
|
else // other display types come here
|
||||||
|
{
|
||||||
|
fAnswerText.setText ("");
|
||||||
|
fAnswerText.setVisible(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// --
|
||||||
|
else if (MWFNode.ACTION_UserWindow.equals(node.getAction())
|
||||||
|
|| MWFNode.ACTION_UserForm.equals(node.getAction()))
|
||||||
|
{
|
||||||
|
fAnswerButton.setLabel(node.getName());
|
||||||
|
fAnswerButton.setTooltiptext(node.getDescription());
|
||||||
|
fAnswerButton.setVisible(true);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
else if (MWFNode.ACTION_UserWorkbench.equals(node.getAction()))
|
||||||
|
log.log(Level.SEVERE, "Workflow Action not implemented yet");*/
|
||||||
|
else
|
||||||
|
log.log(Level.SEVERE, "Unknown Node Action: " + node.getAction());
|
||||||
|
//
|
||||||
|
// globalqss - comment following lines to solve the
|
||||||
|
// Bug [ 1711626 ] Workflow tab just allow to navigate first two activities
|
||||||
|
// if (m_menu != null)
|
||||||
|
// {
|
||||||
|
// m_menu.updateActivities(m_activities.length);
|
||||||
|
// }
|
||||||
|
// End
|
||||||
|
if (m_index+1 >= m_activities.length)
|
||||||
|
{
|
||||||
|
m_index = m_activities.length - 1;
|
||||||
|
bNext.setEnabled(false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
bNext.setEnabled(true);
|
||||||
|
// Start
|
||||||
|
if (m_index <= 0)
|
||||||
|
{
|
||||||
|
m_index = 0;
|
||||||
|
bPrevious.setEnabled(false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
bPrevious.setEnabled(true);
|
||||||
|
statusBar.setStatusDB((m_index+1) + "/" + m_activities.length);
|
||||||
|
statusBar.setStatusLine(Msg.getMsg(Env.getCtx(), "WFActivities"));
|
||||||
|
} // display
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Action Listener
|
||||||
|
* @param e event
|
||||||
|
* @see java.awt.event.ActionListener#actionPerformed(ActionEvent)
|
||||||
|
*/
|
||||||
|
/* public void actionPerformed (ActionEvent e)
|
||||||
|
{
|
||||||
|
this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
|
||||||
|
//
|
||||||
|
if (e.getSource() == bNext || e.getSource() == bPrevious)
|
||||||
|
{
|
||||||
|
if (e.getSource() == bNext)
|
||||||
|
m_index++;
|
||||||
|
else
|
||||||
|
m_index--;
|
||||||
|
display();
|
||||||
|
}
|
||||||
|
else if (e.getSource() == bZoom)
|
||||||
|
cmd_zoom();
|
||||||
|
else if (e.getSource() == bOK)
|
||||||
|
cmd_OK();
|
||||||
|
else if (e.getSource() == fAnswerButton)
|
||||||
|
cmd_button();
|
||||||
|
//
|
||||||
|
this.setCursor(Cursor.getDefaultCursor());
|
||||||
|
} // actionPerformed
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Zoom
|
||||||
|
*/
|
||||||
|
private void cmd_zoom()
|
||||||
|
{
|
||||||
|
log.config("Activity=" + m_activity);
|
||||||
|
if (m_activity == null)
|
||||||
|
return;
|
||||||
|
AEnv.zoom(m_activity.getAD_Table_ID(), m_activity.getRecord_ID());
|
||||||
|
} // cmd_zoom
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Answer Button
|
||||||
|
*/
|
||||||
|
private void cmd_button()
|
||||||
|
{
|
||||||
|
log.config("Activity=" + m_activity);
|
||||||
|
if (m_activity == null)
|
||||||
|
return;
|
||||||
|
//
|
||||||
|
MWFNode node = m_activity.getNode();
|
||||||
|
if (MWFNode.ACTION_UserWindow.equals(node.getAction()))
|
||||||
|
{
|
||||||
|
int AD_Window_ID = node.getAD_Window_ID(); // Explicit Window
|
||||||
|
String ColumnName = m_activity.getPO().get_TableName() + "_ID";
|
||||||
|
int Record_ID = m_activity.getRecord_ID();
|
||||||
|
MQuery query = MQuery.getEqualQuery(ColumnName, Record_ID);
|
||||||
|
boolean IsSOTrx = m_activity.isSOTrx();
|
||||||
|
//
|
||||||
|
log.info("Zoom to AD_Window_ID=" + AD_Window_ID
|
||||||
|
+ " - " + query + " (IsSOTrx=" + IsSOTrx + ")");
|
||||||
|
|
||||||
|
AEnv.zoom(AD_Window_ID, query);
|
||||||
|
// AWindow frame = new AWindow();
|
||||||
|
// if (!frame.initWindow(AD_Window_ID, query))
|
||||||
|
// return;
|
||||||
|
// AEnv.addToWindowManager(frame);
|
||||||
|
// AEnv.showCenterScreen(frame);
|
||||||
|
// frame = null;
|
||||||
|
}
|
||||||
|
else if (MWFNode.ACTION_UserForm.equals(node.getAction()))
|
||||||
|
{
|
||||||
|
int AD_Form_ID = node.getAD_Form_ID();
|
||||||
|
|
||||||
|
Window form = ADForm.openForm(AD_Form_ID);
|
||||||
|
AEnv.showWindow(form);
|
||||||
|
// FormFrame ff = new FormFrame();
|
||||||
|
// ff.openForm(AD_Form_ID);
|
||||||
|
// ff.pack();
|
||||||
|
// AEnv.addToWindowManager(ff);
|
||||||
|
// AEnv.showCenterScreen(ff);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
else if (MWFNode.ACTION_UserWorkbench.equals(node.getAction()))
|
||||||
|
{
|
||||||
|
|
||||||
|
}*/
|
||||||
|
else
|
||||||
|
log.log(Level.SEVERE, "No User Action:" + node.getAction());
|
||||||
|
} // cmd_button
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save
|
||||||
|
*/
|
||||||
|
private void cmd_OK()
|
||||||
|
{
|
||||||
|
log.config("Activity=" + m_activity);
|
||||||
|
if (m_activity == null)
|
||||||
|
return;
|
||||||
|
int AD_User_ID = Env.getAD_User_ID(Env.getCtx());
|
||||||
|
String textMsg = fTextMsg.getValue();
|
||||||
|
//
|
||||||
|
MWFNode node = m_activity.getNode();
|
||||||
|
|
||||||
|
Object forward = null;//fForward.getValue();
|
||||||
|
|
||||||
|
// ensure activity is ran within a transaction - [ 1953628 ]
|
||||||
|
Trx trx = Trx.get(Trx.createTrxName("FWFA"), true);
|
||||||
|
m_activity.set_TrxName(trx.getTrxName());
|
||||||
|
|
||||||
|
if (forward != null)
|
||||||
|
{
|
||||||
|
log.config("Forward to " + forward);
|
||||||
|
int fw = ((Integer)forward).intValue();
|
||||||
|
if (fw == AD_User_ID || fw == 0)
|
||||||
|
{
|
||||||
|
log.log(Level.SEVERE, "Forward User=" + fw);
|
||||||
|
trx.rollback();
|
||||||
|
trx.close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!m_activity.forwardTo(fw, textMsg))
|
||||||
|
{
|
||||||
|
FDialog.error(m_WindowNo, this, "CannotForward");
|
||||||
|
trx.rollback();
|
||||||
|
trx.close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// User Choice - Answer
|
||||||
|
else if (MWFNode.ACTION_UserChoice.equals(node.getAction()))
|
||||||
|
{
|
||||||
|
if (m_column == null)
|
||||||
|
m_column = node.getColumn();
|
||||||
|
// Do we have an answer?
|
||||||
|
int dt = m_column.getAD_Reference_ID();
|
||||||
|
String value = fAnswerText.getText();
|
||||||
|
if (dt == DisplayType.YesNo || dt == DisplayType.List)
|
||||||
|
{
|
||||||
|
// ValueNamePair pp = (ValueNamePair)fAnswerList.getSelectedItem();
|
||||||
|
// value = pp.getValue();
|
||||||
|
ComboItem item = fAnswerList.getSelectedItem();
|
||||||
|
value = (String) item.getValue();
|
||||||
|
}
|
||||||
|
if (value == null || value.length() == 0)
|
||||||
|
{
|
||||||
|
FDialog.error(m_WindowNo, this, "FillMandatory", Msg.getMsg(Env.getCtx(), "Answer"));
|
||||||
|
trx.rollback();
|
||||||
|
trx.close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
log.config("Answer=" + value + " - " + textMsg);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
m_activity.setUserChoice(AD_User_ID, value, dt, textMsg);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
log.log(Level.SEVERE, node.getName(), e);
|
||||||
|
FDialog.error(m_WindowNo, this, "Error", e.toString());
|
||||||
|
trx.rollback();
|
||||||
|
trx.close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// User Action
|
||||||
|
else
|
||||||
|
{
|
||||||
|
log.config("Action=" + node.getAction() + " - " + textMsg);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// ensure activity is ran within a transaction
|
||||||
|
m_activity.set_TrxName(Trx.createTrxName("FWFA"));
|
||||||
|
m_activity.setUserConfirmation(AD_User_ID, textMsg);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
log.log(Level.SEVERE, node.getName(), e);
|
||||||
|
FDialog.error(m_WindowNo, this, "Error", e.toString());
|
||||||
|
trx.rollback();
|
||||||
|
trx.close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
trx.commit();
|
||||||
|
trx.close();
|
||||||
|
|
||||||
|
// Next
|
||||||
|
loadActivities();
|
||||||
|
display();
|
||||||
|
} // cmd_OK
|
||||||
|
}
|
Loading…
Reference in New Issue