diff --git a/org.adempiere.base/src/org/compiere/model/I_AD_WF_ActivityApprover.java b/org.adempiere.base/src/org/compiere/model/I_AD_WF_ActivityApprover.java new file mode 100644 index 0000000000..b33617abf4 --- /dev/null +++ b/org.adempiere.base/src/org/compiere/model/I_AD_WF_ActivityApprover.java @@ -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(); +} diff --git a/org.adempiere.base/src/org/compiere/model/MWFActivityApprover.java b/org.adempiere.base/src/org/compiere/model/MWFActivityApprover.java new file mode 100644 index 0000000000..233ce8e764 --- /dev/null +++ b/org.adempiere.base/src/org/compiere/model/MWFActivityApprover.java @@ -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 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; + } +} diff --git a/org.adempiere.base/src/org/compiere/model/X_AD_WF_ActivityApprover.java b/org.adempiere.base/src/org/compiere/model/X_AD_WF_ActivityApprover.java new file mode 100644 index 0000000000..664eb1b083 --- /dev/null +++ b/org.adempiere.base/src/org/compiere/model/X_AD_WF_ActivityApprover.java @@ -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(); + } +} \ No newline at end of file diff --git a/org.adempiere.base/src/org/compiere/model/X_AD_WF_Responsible.java b/org.adempiere.base/src/org/compiere/model/X_AD_WF_Responsible.java index d9a0f669a6..cdc3be4007 100644 --- a/org.adempiere.base/src/org/compiere/model/X_AD_WF_Responsible.java +++ b/org.adempiere.base/src/org/compiere/model/X_AD_WF_Responsible.java @@ -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 diff --git a/org.adempiere.base/src/org/compiere/wf/MWFActivity.java b/org.adempiere.base/src/org/compiere/wf/MWFActivity.java index 206566f2e4..f743b0e8a3 100644 --- a/org.adempiere.base/src/org/compiere/wf/MWFActivity.java +++ b/org.adempiere.base/src/org/compiere/wf/MWFActivity.java @@ -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); diff --git a/org.adempiere.base/src/org/compiere/wf/MWFResponsible.java b/org.adempiere.base/src/org/compiere/wf/MWFResponsible.java index ae042c6099..aeae1dccd2 100644 --- a/org.adempiere.base/src/org/compiere/wf/MWFResponsible.java +++ b/org.adempiere.base/src/org/compiere/wf/MWFResponsible.java @@ -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 diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/wf/WWFActivity.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/wf/WWFActivity.java index 0c53f7f96b..c34a1568de 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/wf/WWFActivity.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/wf/WWFActivity.java @@ -329,7 +329,8 @@ public class WWFActivity extends ADForm implements EventListener 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 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 + " 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; }