IDEMPIERE-3446 Define the workflow approver dynamically - java
This commit is contained in:
parent
1b8d9b038e
commit
99839476c3
|
@ -0,0 +1,157 @@
|
|||
/******************************************************************************
|
||||
* Product: iDempiere ERP & CRM Smart Business Solution *
|
||||
* Copyright (C) 1999-2012 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.model;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.sql.Timestamp;
|
||||
import org.compiere.util.KeyNamePair;
|
||||
|
||||
/** Generated Interface for AD_WF_ActivityApprover
|
||||
* @author iDempiere (generated)
|
||||
* @version Release 4.1
|
||||
*/
|
||||
public interface I_AD_WF_ActivityApprover
|
||||
{
|
||||
|
||||
/** TableName=AD_WF_ActivityApprover */
|
||||
public static final String Table_Name = "AD_WF_ActivityApprover";
|
||||
|
||||
/** AD_Table_ID=200226 */
|
||||
public static final int Table_ID = 200226;
|
||||
|
||||
KeyNamePair Model = new KeyNamePair(Table_ID, Table_Name);
|
||||
|
||||
/** AccessLevel = 7 - System - Client - Org
|
||||
*/
|
||||
BigDecimal accessLevel = BigDecimal.valueOf(7);
|
||||
|
||||
/** Load Meta Data */
|
||||
|
||||
/** Column name AD_Client_ID */
|
||||
public static final String COLUMNNAME_AD_Client_ID = "AD_Client_ID";
|
||||
|
||||
/** Get Client.
|
||||
* Client/Tenant for this installation.
|
||||
*/
|
||||
public int getAD_Client_ID();
|
||||
|
||||
/** Column name AD_Org_ID */
|
||||
public static final String COLUMNNAME_AD_Org_ID = "AD_Org_ID";
|
||||
|
||||
/** Set Organization.
|
||||
* Organizational entity within client
|
||||
*/
|
||||
public void setAD_Org_ID (int AD_Org_ID);
|
||||
|
||||
/** Get Organization.
|
||||
* Organizational entity within client
|
||||
*/
|
||||
public int getAD_Org_ID();
|
||||
|
||||
/** Column name AD_User_ID */
|
||||
public static final String COLUMNNAME_AD_User_ID = "AD_User_ID";
|
||||
|
||||
/** Set User/Contact.
|
||||
* User within the system - Internal or Business Partner Contact
|
||||
*/
|
||||
public void setAD_User_ID (int AD_User_ID);
|
||||
|
||||
/** Get User/Contact.
|
||||
* User within the system - Internal or Business Partner Contact
|
||||
*/
|
||||
public int getAD_User_ID();
|
||||
|
||||
public org.compiere.model.I_AD_User getAD_User() throws RuntimeException;
|
||||
|
||||
/** Column name AD_WF_ActivityApprover_ID */
|
||||
public static final String COLUMNNAME_AD_WF_ActivityApprover_ID = "AD_WF_ActivityApprover_ID";
|
||||
|
||||
/** Set Workflow Activity Approver */
|
||||
public void setAD_WF_ActivityApprover_ID (int AD_WF_ActivityApprover_ID);
|
||||
|
||||
/** Get Workflow Activity Approver */
|
||||
public int getAD_WF_ActivityApprover_ID();
|
||||
|
||||
/** Column name AD_WF_ActivityApprover_UU */
|
||||
public static final String COLUMNNAME_AD_WF_ActivityApprover_UU = "AD_WF_ActivityApprover_UU";
|
||||
|
||||
/** Set AD_WF_ActivityApprover_UU */
|
||||
public void setAD_WF_ActivityApprover_UU (String AD_WF_ActivityApprover_UU);
|
||||
|
||||
/** Get AD_WF_ActivityApprover_UU */
|
||||
public String getAD_WF_ActivityApprover_UU();
|
||||
|
||||
/** Column name AD_WF_Activity_ID */
|
||||
public static final String COLUMNNAME_AD_WF_Activity_ID = "AD_WF_Activity_ID";
|
||||
|
||||
/** Set Workflow Activity.
|
||||
* Workflow Activity
|
||||
*/
|
||||
public void setAD_WF_Activity_ID (int AD_WF_Activity_ID);
|
||||
|
||||
/** Get Workflow Activity.
|
||||
* Workflow Activity
|
||||
*/
|
||||
public int getAD_WF_Activity_ID();
|
||||
|
||||
public org.compiere.model.I_AD_WF_Activity getAD_WF_Activity() throws RuntimeException;
|
||||
|
||||
/** Column name Created */
|
||||
public static final String COLUMNNAME_Created = "Created";
|
||||
|
||||
/** Get Created.
|
||||
* Date this record was created
|
||||
*/
|
||||
public Timestamp getCreated();
|
||||
|
||||
/** Column name CreatedBy */
|
||||
public static final String COLUMNNAME_CreatedBy = "CreatedBy";
|
||||
|
||||
/** Get Created By.
|
||||
* User who created this records
|
||||
*/
|
||||
public int getCreatedBy();
|
||||
|
||||
/** Column name IsActive */
|
||||
public static final String COLUMNNAME_IsActive = "IsActive";
|
||||
|
||||
/** Set Active.
|
||||
* The record is active in the system
|
||||
*/
|
||||
public void setIsActive (boolean IsActive);
|
||||
|
||||
/** Get Active.
|
||||
* The record is active in the system
|
||||
*/
|
||||
public boolean isActive();
|
||||
|
||||
/** Column name Updated */
|
||||
public static final String COLUMNNAME_Updated = "Updated";
|
||||
|
||||
/** Get Updated.
|
||||
* Date this record was updated
|
||||
*/
|
||||
public Timestamp getUpdated();
|
||||
|
||||
/** Column name UpdatedBy */
|
||||
public static final String COLUMNNAME_UpdatedBy = "UpdatedBy";
|
||||
|
||||
/** Get Updated By.
|
||||
* User who updated this records
|
||||
*/
|
||||
public int getUpdatedBy();
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
package org.compiere.model;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
|
||||
public class MWFActivityApprover extends X_AD_WF_ActivityApprover {
|
||||
|
||||
private static final long serialVersionUID = -7135169624317070006L;
|
||||
|
||||
public MWFActivityApprover(Properties ctx, int AD_WF_ActivityApprover_ID, String trxName) {
|
||||
super(ctx, AD_WF_ActivityApprover_ID, trxName);
|
||||
}
|
||||
|
||||
public MWFActivityApprover(Properties ctx, ResultSet rs, String trxName) {
|
||||
super(ctx, rs, trxName);
|
||||
}
|
||||
|
||||
public static MWFActivityApprover[] getOfActivity(Properties ctx, int ad_WF_Activity_ID, String trxName) {
|
||||
final String whereClause = I_AD_WF_ActivityApprover.COLUMNNAME_AD_WF_Activity_ID+"=?";
|
||||
List<MWFActivityApprover> list = new Query(ctx,I_AD_WF_ActivityApprover.Table_Name,whereClause,trxName)
|
||||
.setParameters(ad_WF_Activity_ID)
|
||||
.list();
|
||||
MWFActivityApprover[] retValue = new MWFActivityApprover[list.size ()];
|
||||
list.toArray (retValue);
|
||||
return retValue;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,163 @@
|
|||
/******************************************************************************
|
||||
* Product: iDempiere ERP & CRM Smart Business Solution *
|
||||
* Copyright (C) 1999-2012 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 *
|
||||
*****************************************************************************/
|
||||
/** Generated Model - DO NOT CHANGE */
|
||||
package org.compiere.model;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.util.Properties;
|
||||
|
||||
/** Generated Model for AD_WF_ActivityApprover
|
||||
* @author iDempiere (generated)
|
||||
* @version Release 4.1 - $Id$ */
|
||||
public class X_AD_WF_ActivityApprover extends PO implements I_AD_WF_ActivityApprover, I_Persistent
|
||||
{
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 20170809L;
|
||||
|
||||
/** Standard Constructor */
|
||||
public X_AD_WF_ActivityApprover (Properties ctx, int AD_WF_ActivityApprover_ID, String trxName)
|
||||
{
|
||||
super (ctx, AD_WF_ActivityApprover_ID, trxName);
|
||||
/** if (AD_WF_ActivityApprover_ID == 0)
|
||||
{
|
||||
setAD_User_ID (0);
|
||||
setAD_WF_ActivityApprover_ID (0);
|
||||
setAD_WF_Activity_ID (0);
|
||||
} */
|
||||
}
|
||||
|
||||
/** Load Constructor */
|
||||
public X_AD_WF_ActivityApprover (Properties ctx, ResultSet rs, String trxName)
|
||||
{
|
||||
super (ctx, rs, trxName);
|
||||
}
|
||||
|
||||
/** AccessLevel
|
||||
* @return 7 - System - Client - Org
|
||||
*/
|
||||
protected int get_AccessLevel()
|
||||
{
|
||||
return accessLevel.intValue();
|
||||
}
|
||||
|
||||
/** Load Meta Data */
|
||||
protected POInfo initPO (Properties ctx)
|
||||
{
|
||||
POInfo poi = POInfo.getPOInfo (ctx, Table_ID, get_TrxName());
|
||||
return poi;
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer sb = new StringBuffer ("X_AD_WF_ActivityApprover[")
|
||||
.append(get_ID()).append("]");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public org.compiere.model.I_AD_User getAD_User() throws RuntimeException
|
||||
{
|
||||
return (org.compiere.model.I_AD_User)MTable.get(getCtx(), org.compiere.model.I_AD_User.Table_Name)
|
||||
.getPO(getAD_User_ID(), get_TrxName()); }
|
||||
|
||||
/** Set User/Contact.
|
||||
@param AD_User_ID
|
||||
User within the system - Internal or Business Partner Contact
|
||||
*/
|
||||
public void setAD_User_ID (int AD_User_ID)
|
||||
{
|
||||
if (AD_User_ID < 1)
|
||||
set_Value (COLUMNNAME_AD_User_ID, null);
|
||||
else
|
||||
set_Value (COLUMNNAME_AD_User_ID, Integer.valueOf(AD_User_ID));
|
||||
}
|
||||
|
||||
/** Get User/Contact.
|
||||
@return User within the system - Internal or Business Partner Contact
|
||||
*/
|
||||
public int getAD_User_ID ()
|
||||
{
|
||||
Integer ii = (Integer)get_Value(COLUMNNAME_AD_User_ID);
|
||||
if (ii == null)
|
||||
return 0;
|
||||
return ii.intValue();
|
||||
}
|
||||
|
||||
/** Set Workflow Activity Approver.
|
||||
@param AD_WF_ActivityApprover_ID Workflow Activity Approver */
|
||||
public void setAD_WF_ActivityApprover_ID (int AD_WF_ActivityApprover_ID)
|
||||
{
|
||||
if (AD_WF_ActivityApprover_ID < 1)
|
||||
set_ValueNoCheck (COLUMNNAME_AD_WF_ActivityApprover_ID, null);
|
||||
else
|
||||
set_ValueNoCheck (COLUMNNAME_AD_WF_ActivityApprover_ID, Integer.valueOf(AD_WF_ActivityApprover_ID));
|
||||
}
|
||||
|
||||
/** Get Workflow Activity Approver.
|
||||
@return Workflow Activity Approver */
|
||||
public int getAD_WF_ActivityApprover_ID ()
|
||||
{
|
||||
Integer ii = (Integer)get_Value(COLUMNNAME_AD_WF_ActivityApprover_ID);
|
||||
if (ii == null)
|
||||
return 0;
|
||||
return ii.intValue();
|
||||
}
|
||||
|
||||
/** Set AD_WF_ActivityApprover_UU.
|
||||
@param AD_WF_ActivityApprover_UU AD_WF_ActivityApprover_UU */
|
||||
public void setAD_WF_ActivityApprover_UU (String AD_WF_ActivityApprover_UU)
|
||||
{
|
||||
set_Value (COLUMNNAME_AD_WF_ActivityApprover_UU, AD_WF_ActivityApprover_UU);
|
||||
}
|
||||
|
||||
/** Get AD_WF_ActivityApprover_UU.
|
||||
@return AD_WF_ActivityApprover_UU */
|
||||
public String getAD_WF_ActivityApprover_UU ()
|
||||
{
|
||||
return (String)get_Value(COLUMNNAME_AD_WF_ActivityApprover_UU);
|
||||
}
|
||||
|
||||
public org.compiere.model.I_AD_WF_Activity getAD_WF_Activity() throws RuntimeException
|
||||
{
|
||||
return (org.compiere.model.I_AD_WF_Activity)MTable.get(getCtx(), org.compiere.model.I_AD_WF_Activity.Table_Name)
|
||||
.getPO(getAD_WF_Activity_ID(), get_TrxName()); }
|
||||
|
||||
/** Set Workflow Activity.
|
||||
@param AD_WF_Activity_ID
|
||||
Workflow Activity
|
||||
*/
|
||||
public void setAD_WF_Activity_ID (int AD_WF_Activity_ID)
|
||||
{
|
||||
if (AD_WF_Activity_ID < 1)
|
||||
set_ValueNoCheck (COLUMNNAME_AD_WF_Activity_ID, null);
|
||||
else
|
||||
set_ValueNoCheck (COLUMNNAME_AD_WF_Activity_ID, Integer.valueOf(AD_WF_Activity_ID));
|
||||
}
|
||||
|
||||
/** Get Workflow Activity.
|
||||
@return Workflow Activity
|
||||
*/
|
||||
public int getAD_WF_Activity_ID ()
|
||||
{
|
||||
Integer ii = (Integer)get_Value(COLUMNNAME_AD_WF_Activity_ID);
|
||||
if (ii == null)
|
||||
return 0;
|
||||
return ii.intValue();
|
||||
}
|
||||
}
|
|
@ -30,7 +30,7 @@ public class X_AD_WF_Responsible extends PO implements I_AD_WF_Responsible, I_Pe
|
|||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 20161030L;
|
||||
private static final long serialVersionUID = 20170809L;
|
||||
|
||||
/** Standard Constructor */
|
||||
public X_AD_WF_Responsible (Properties ctx, int AD_WF_Responsible_ID, String trxName)
|
||||
|
@ -41,7 +41,7 @@ public class X_AD_WF_Responsible extends PO implements I_AD_WF_Responsible, I_Pe
|
|||
setAD_Role_ID (0);
|
||||
setAD_WF_Responsible_ID (0);
|
||||
setEntityType (null);
|
||||
// U
|
||||
// @SQL=select get_sysconfig('DEFAULT_ENTITYTYPE','U',0,0) from dual
|
||||
setName (null);
|
||||
setResponsibleType (null);
|
||||
} */
|
||||
|
@ -240,6 +240,8 @@ public class X_AD_WF_Responsible extends PO implements I_AD_WF_Responsible, I_Pe
|
|||
public static final String RESPONSIBLETYPE_Role = "R";
|
||||
/** System Resource = S */
|
||||
public static final String RESPONSIBLETYPE_SystemResource = "S";
|
||||
/** Manual = M */
|
||||
public static final String RESPONSIBLETYPE_Manual = "M";
|
||||
/** Set Responsible Type.
|
||||
@param ResponsibleType
|
||||
Type of the Responsibility for a workflow
|
||||
|
|
|
@ -49,6 +49,7 @@ import org.compiere.model.MRole;
|
|||
import org.compiere.model.MTable;
|
||||
import org.compiere.model.MUser;
|
||||
import org.compiere.model.MUserRoles;
|
||||
import org.compiere.model.MWFActivityApprover;
|
||||
import org.compiere.model.PO;
|
||||
import org.compiere.model.Query;
|
||||
import static org.compiere.model.SystemIDs.*;
|
||||
|
@ -1218,6 +1219,17 @@ public class MWFActivity extends X_AD_WF_Activity implements Runnable
|
|||
}
|
||||
}
|
||||
}
|
||||
else if(resp.isManual()) {
|
||||
MWFActivityApprover[] approvers = MWFActivityApprover.getOfActivity(getCtx(), getAD_WF_Activity_ID(), get_TrxName());
|
||||
for (int i = 0; i < approvers.length; i++)
|
||||
{
|
||||
if(approvers[i].getAD_User_ID() == Env.getAD_User_ID(getCtx()))
|
||||
{
|
||||
autoApproval = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(resp.isOrganization())
|
||||
{
|
||||
throw new AdempiereException("Support not implemented for "+resp);
|
||||
|
|
|
@ -34,12 +34,11 @@ import org.compiere.util.Msg;
|
|||
public class MWFResponsible extends X_AD_WF_Responsible
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 8662580480797818563L;
|
||||
* long - serialVersionUID.
|
||||
*/
|
||||
private static final long serialVersionUID = 4167967243996935999L;
|
||||
|
||||
|
||||
/**
|
||||
/**
|
||||
* Get WF Responsible from Cache
|
||||
* @param ctx context
|
||||
* @param AD_WF_Responsible_ID id
|
||||
|
@ -89,7 +88,7 @@ public class MWFResponsible extends X_AD_WF_Responsible
|
|||
*/
|
||||
public boolean isInvoker()
|
||||
{
|
||||
return getAD_User_ID() == 0 && getAD_Role_ID() == 0;
|
||||
return getAD_User_ID() == 0 && getAD_Role_ID() == 0 && !isManual();
|
||||
} // isInvoker
|
||||
|
||||
/**
|
||||
|
@ -157,6 +156,10 @@ public class MWFResponsible extends X_AD_WF_Responsible
|
|||
if (!RESPONSIBLETYPE_Role.equals(getResponsibleType()) && getAD_Role_ID() > 0)
|
||||
setAD_Role_ID(0);
|
||||
|
||||
if (RESPONSIBLETYPE_Manual.equals(getResponsibleType())) {
|
||||
setAD_User_ID(0);
|
||||
setAD_Role_ID(0);
|
||||
}
|
||||
return true;
|
||||
} // beforeSave
|
||||
|
||||
|
@ -178,4 +181,8 @@ public class MWFResponsible extends X_AD_WF_Responsible
|
|||
return sb.toString ();
|
||||
} // toString
|
||||
|
||||
public boolean isManual() {
|
||||
return RESPONSIBLETYPE_Manual.equals(getResponsibleType());
|
||||
}
|
||||
|
||||
} // MWFResponsible
|
||||
|
|
|
@ -329,7 +329,8 @@ public class WWFActivity extends ADForm implements EventListener<Event>
|
|||
pstmt.setInt (2, AD_User_ID);
|
||||
pstmt.setInt (3, AD_User_ID);
|
||||
pstmt.setInt (4, AD_User_ID);
|
||||
pstmt.setInt (5, AD_Client_ID);
|
||||
pstmt.setInt (5, AD_User_ID);
|
||||
pstmt.setInt (6, AD_Client_ID);
|
||||
rs = pstmt.executeQuery ();
|
||||
if (rs.next ()) {
|
||||
count = rs.getInt(1);
|
||||
|
@ -378,8 +379,10 @@ public class WWFActivity extends ADForm implements EventListener<Event>
|
|||
pstmt.setInt (2, AD_User_ID);
|
||||
pstmt.setInt (3, AD_User_ID);
|
||||
pstmt.setInt (4, AD_User_ID);
|
||||
pstmt.setInt (5, AD_Client_ID);
|
||||
rs = pstmt.executeQuery ();
|
||||
pstmt.setInt (5, AD_User_ID);
|
||||
pstmt.setInt (6, AD_Client_ID);
|
||||
|
||||
rs = pstmt.executeQuery();
|
||||
while (rs.next ())
|
||||
{
|
||||
MWFActivity activity = new MWFActivity(Env.getCtx(), rs, null);
|
||||
|
@ -449,8 +452,10 @@ public class WWFActivity extends ADForm implements EventListener<Event>
|
|||
+ " AND r.ResponsibleType='H' 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 r.ResponsibleType='R' AND ur.AD_User_ID=?)" // #4
|
||||
//
|
||||
+ " WHERE a.AD_WF_Responsible_ID=r.AD_WF_Responsible_ID AND r.ResponsibleType='R' AND ur.AD_User_ID=? AND ur.isActive = 'Y')" // #4
|
||||
///* Manual Responsible */
|
||||
+ " OR EXISTS (SELECT * FROM AD_WF_ActivityApprover r "
|
||||
+ " WHERE a.AD_WF_Activity_ID=r.AD_WF_Activity_ID AND r.AD_User_ID=? AND r.isActive = 'Y')"
|
||||
+ ") AND a.AD_Client_ID=?"; // #5
|
||||
return where;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue