diff --git a/features/assignee/assignee.feature b/features/assignee/assignee.feature new file mode 100644 index 000000000..7212486b3 --- /dev/null +++ b/features/assignee/assignee.feature @@ -0,0 +1,73 @@ +@ProcessMakerMichelangelo @RestAPI +Feature: Testing assignee + Scenario: List assignees of an activity + Given that I have a valid access_token + And I request "project/14414793652a5d718b65590036026581/activity/13508932952a5d718ef56f6044945775/assignee" + Then the response status code should be 200 + And the response charset is "UTF-8" + And the content type is "application/json" + And the type is "array" + And the "aas_uid" property in row 0 equals "00000000000000000000000000000001" + And the "aas_name" property in row 0 equals "Administrator" + And the "aas_lastname" property in row 0 equals "Admin" + And the "aas_username" property in row 0 equals "admin" + And the "aas_type" property in row 0 equals "user" + + Scenario: Get a list of available users and groups to be assigned to an activity + Given that I have a valid access_token + And I request "project/14414793652a5d718b65590036026581/activity/13508932952a5d718ef56f6044945775/available-assignee" + Then the response status code should be 200 + And the response charset is "UTF-8" + And the content type is "application/json" + And the type is "array" + And the "aas_uid" property in row 0 equals "1283376915224e7e5ccbfa0059627023" + And the "aas_name" property in row 0 equals "Juana" + And the "aas_lastname" property in row 0 equals "De Arco" + And the "aas_username" property in row 0 equals "juana" + And the "aas_type" property in row 0 equals "user" + + Scenario: Get a single user or group of an activity + Given that I have a valid access_token + And I request "project/14414793652a5d718b65590036026581/activity/13508932952a5d718ef56f6044945775/assignee/00000000000000000000000000000001" + Then the response status code should be 200 + And the response charset is "UTF-8" + And the content type is "application/json" + And the type is "object" + And the "aas_uid" property equals "00000000000000000000000000000001" + And the "aas_name" property equals "Administrator" + And the "aas_lastname" property equals "Admin" + And the "aas_username" property equals "admin" + And the "aas_type" property equals "user" + + Scenario: Assign a user or group to an activity + Given that I have a valid access_token + And POST this data: +""" +{ + "ass_uid": "42713393551f2a8aae1fde2096962777", + "ass_type": "group" +} +""" + And I request "project/14414793652a5d718b65590036026581/activity/13508932952a5d718ef56f6044945775/assignee" + Then the response status code should be 201 + # And store "aas_uid" in session array + + # Scenario: Unassign a user or group to an activity + # Given that I have a valid access_token + # And that I want to delete a resource with the key "aas_uid" stored in session array + # And I request "project/14414793652a5d718b65590036026581/activity/13508932952a5d718ef56f6044945775/assignee/42713393551f2a8aae1fde2096962777" + # Then the response status code should be 200 + # And the content type is "application/json" + + Scenario: List assignees of an activity with filter + Given that I have a valid access_token + And I request "project/14414793652a5d718b65590036026581/activity/13508932952a5d718ef56f6044945775/assignee?filter=adm" + Then the response status code should be 200 + And the response charset is "UTF-8" + And the content type is "application/json" + And the type is "array" + And the "aas_uid" property in row 0 equals "42713393551f2a8aae1fde2096962777" + And the "aas_name" property in row 0 equals "AdministratorOnly (0 Users)" + And the "aas_lastname" property in row 0 equals "" + And the "aas_username" property in row 0 equals "" + And the "aas_type" property in row 0 equals "group" diff --git a/workflow/engine/src/BusinessModel/ProcessSupervisor.php b/workflow/engine/src/BusinessModel/ProcessSupervisor.php new file mode 100644 index 000000000..80edbfd84 --- /dev/null +++ b/workflow/engine/src/BusinessModel/ProcessSupervisor.php @@ -0,0 +1,194 @@ +addSelectColumn(\ProcessUserPeer::USR_UID); + $oCriteria->addAsColumn('GRP_TITLE', \ContentPeer::CON_VALUE); + $aConditions [] = array(\ProcessUserPeer::USR_UID, \ContentPeer::CON_ID); + $aConditions [] = array(\ContentPeer::CON_CATEGORY, \DBAdapter::getStringDelimiter().'GRP_TITLE'.\DBAdapter::getStringDelimiter()); + $aConditions [] = array(\ContentPeer::CON_LANG, \DBAdapter::getStringDelimiter().SYS_LANG.\DBAdapter::getStringDelimiter()); + $oCriteria->addJoinMC($aConditions, \Criteria::LEFT_JOIN); + $oCriteria->add(\ProcessUserPeer::PU_TYPE, 'GROUP_SUPERVISOR'); + $oCriteria->add(\ProcessUserPeer::PRO_UID, $sProcessUID); + $oCriteria->addAscendingOrderByColumn(\ContentPeer::CON_VALUE); + $oDataset = \ProcessUserPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + $oCriteria = new \Criteria('workflow'); + $oCriteria->addSelectColumn('COUNT(*) AS MEMBERS_NUMBER'); + $oCriteria->add(\GroupUserPeer::GRP_UID, $results['GRP_UID']); + $oDataset2 = \GroupUserPeer::doSelectRS($oCriteria); + $oDataset2->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $oDataset2->next(); + $aRow2 = $oDataset2->getRow(); + while ($aRow = $oDataset->getRow()) { + $aResp[] = array('sup_uid' => $aRow['USR_UID'], + 'sup_name' => (!isset($aRow2['GROUP_INACTIVE']) ? $aRow['GRP_TITLE'] . + ' (' . $aRow2['MEMBERS_NUMBER'] . ' ' . + ((int) $aRow2['MEMBERS_NUMBER'] == 1 ? \G::LoadTranslation('ID_USER') : \G::LoadTranslation('ID_USERS')). + ')' . '' : $aRow['GRP_TITLE'] . ' ' . $aRow2['GROUP_INACTIVE']), + 'sup_lastname' => "", + 'sup_username' => "", + 'sup_type' => "group" ); + $oDataset->next(); + } + // Users + $oCriteria = new \Criteria('workflow'); + $oCriteria->addSelectColumn(\ProcessUserPeer::USR_UID); + $oCriteria->addSelectColumn(\UsersPeer::USR_FIRSTNAME); + $oCriteria->addSelectColumn(\UsersPeer::USR_LASTNAME); + $oCriteria->addSelectColumn(\UsersPeer::USR_USERNAME); + $oCriteria->addSelectColumn(\UsersPeer::USR_EMAIL); + if ($filter) { + $oCriteria->add( $oCriteria->getNewCriterion( \UsersPeer::USR_USERNAME, "%$filter%", \Criteria::LIKE )->addOr( $oCriteria->getNewCriterion( \UsersPeer::USR_FIRSTNAME, "%$filter%", \Criteria::LIKE ) )->addOr( $oCriteria->getNewCriterion( \UsersPeer::USR_LASTNAME, "%$filter%", \Criteria::LIKE ) ) ); + } + $oCriteria->addJoin(\ProcessUserPeer::USR_UID, \UsersPeer::USR_UID, \Criteria::LEFT_JOIN); + $oCriteria->add(\ProcessUserPeer::PU_TYPE, 'SUPERVISOR'); + $oCriteria->add(\ProcessUserPeer::PRO_UID, $sProcessUID); + if ($start) { + $oCriteria->setOffset( $start ); + } + if ($limit) { + $oCriteria->setLimit( $limit ); + } + $oCriteria->addAscendingOrderByColumn(\UsersPeer::USR_FIRSTNAME); + $oDataset = \ProcessUserPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aResp[] = array('sup_uid' => $aRow['USR_UID'], + 'sup_name' => $aRow['USR_FIRSTNAME'], + 'sup_lastname' => $aRow['USR_LASTNAME'], + 'sup_username' => $aRow['USR_USERNAME'], + 'sup_type' => "user" ); + $oDataset->next(); + } + return $aResp; + } catch (Exception $e) { + throw $e; + } + } + + /** + * Return output documents of a project + * @param string $sProcessUID + * + * @return array + * + * @access public + */ + public function getDynaformSupervisor($sProcessUID = '') + { + try { + $sDelimiter = \DBAdapter::getStringDelimiter(); + $oCriteria = new \Criteria('workflow'); + $oCriteria->addSelectColumn(\StepSupervisorPeer::STEP_UID); + $oCriteria->addSelectColumn(\StepSupervisorPeer::PRO_UID); + $oCriteria->addSelectColumn(\StepSupervisorPeer::STEP_TYPE_OBJ); + $oCriteria->addSelectColumn(\StepSupervisorPeer::STEP_UID_OBJ); + $oCriteria->addSelectColumn(\StepSupervisorPeer::STEP_POSITION); + $oCriteria->addAsColumn('DYN_TITLE', 'C.CON_VALUE'); + $oCriteria->addAlias('C', 'CONTENT'); + $aConditions = array(); + $aConditions[] = array(\StepSupervisorPeer::STEP_UID_OBJ, \DynaformPeer::DYN_UID ); + $aConditions[] = array(\StepSupervisorPeer::STEP_TYPE_OBJ, $sDelimiter . 'DYNAFORM' . $sDelimiter ); + $oCriteria->addJoinMC($aConditions, \Criteria::LEFT_JOIN); + $aConditions = array(); + $aConditions[] = array(\DynaformPeer::DYN_UID, 'C.CON_ID' ); + $aConditions[] = array('C.CON_CATEGORY', $sDelimiter . 'DYN_TITLE' . $sDelimiter ); + $aConditions[] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter ); + $oCriteria->addJoinMC($aConditions, \Criteria::LEFT_JOIN); + $oCriteria->add(\StepSupervisorPeer::PRO_UID, $sProcessUID); + $oCriteria->add(\StepSupervisorPeer::STEP_TYPE_OBJ, 'DYNAFORM'); + $oCriteria->addAscendingOrderByColumn(\StepSupervisorPeer::STEP_POSITION); + $oDataset = \StepSupervisorPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aResp[] = array('step_uid' => $aRow['STEP_UID'], + 'pro_uid' => $aRow['PRO_UID'], + 'step_type_obj' => $aRow['STEP_TYPE_OBJ'], + 'step_uid_obj' => $aRow['STEP_UID_OBJ'], + 'step_position' => $aRow['STEP_POSITION'], + 'title' => $aRow['DYN_TITLE']); + $oDataset->next(); + } + return $aResp; + } catch (Exception $e) { + throw $e; + } + } + + /** + * Return output documents of a project + * @param string $sProcessUID + * + * @return array + * + * @access public + */ + public function getInputDocumentSupervisor($sProcessUID = '') + { + try { + $sDelimiter = \DBAdapter::getStringDelimiter(); + $oCriteria = new \Criteria('workflow'); + $oCriteria->addSelectColumn(\StepSupervisorPeer::STEP_UID); + $oCriteria->addSelectColumn(\StepSupervisorPeer::PRO_UID); + $oCriteria->addSelectColumn(\StepSupervisorPeer::STEP_TYPE_OBJ); + $oCriteria->addSelectColumn(\StepSupervisorPeer::STEP_UID_OBJ); + $oCriteria->addSelectColumn(\StepSupervisorPeer::STEP_POSITION); + $oCriteria->addAsColumn('INP_DOC_TITLE', 'C.CON_VALUE'); + $oCriteria->addAlias('C', 'CONTENT'); + $aConditions = array(); + $aConditions[] = array(\StepSupervisorPeer::STEP_UID_OBJ, \InputDocumentPeer::INP_DOC_UID); + $aConditions[] = array(\StepSupervisorPeer::STEP_TYPE_OBJ, $sDelimiter . 'INPUT_DOCUMENT' . $sDelimiter); + $oCriteria->addJoinMC($aConditions, \Criteria::LEFT_JOIN); + $aConditions = array(); + $aConditions[] = array(\InputDocumentPeer::INP_DOC_UID, 'C.CON_ID'); + $aConditions[] = array('C.CON_CATEGORY', $sDelimiter . 'INP_DOC_TITLE' . $sDelimiter); + $aConditions[] = array('C.CON_LANG', $sDelimiter . SYS_LANG . $sDelimiter); + $oCriteria->addJoinMC($aConditions, \Criteria::LEFT_JOIN); + $oCriteria->add(\StepSupervisorPeer::PRO_UID, $sProcessUID); + $oCriteria->add(\StepSupervisorPeer::STEP_TYPE_OBJ, 'INPUT_DOCUMENT'); + $oCriteria->addAscendingOrderByColumn(\StepSupervisorPeer::STEP_POSITION); + $oDataset = \StepSupervisorPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aResp[] = array('step_uid' => $aRow['STEP_UID'], + 'pro_uid' => $aRow['PRO_UID'], + 'step_type_obj' => $aRow['STEP_TYPE_OBJ'], + 'step_uid_obj' => $aRow['STEP_UID_OBJ'], + 'step_position' => $aRow['STEP_POSITION'], + 'title' => $aRow['INP_DOC_TITLE']); + $oDataset->next(); + } + return $aResp; + } catch (Exception $e) { + throw $e; + } + } + + + +} + diff --git a/workflow/engine/src/BusinessModel/Task.php b/workflow/engine/src/BusinessModel/Task.php index 28619629c..32382932b 100644 --- a/workflow/engine/src/BusinessModel/Task.php +++ b/workflow/engine/src/BusinessModel/Task.php @@ -1010,7 +1010,7 @@ class Task $oDataset->next(); $c = 0; $oTasks = new \Tasks(); - $aAux = $oTasks->getGroupsOfTask($sTaskUID, 1); + $aAux = $oTasks->getGroupsOfTask($sTaskUID, 2); $aUIDS1 = array(); foreach ($aAux as $aGroup) { $aUIDS1[] = $aGroup['GRP_UID']; @@ -1108,7 +1108,7 @@ class Task $result = $groups->getAllGroup($start, $limit, $filter); $c = 0; $oTasks = new \Tasks(); - $aAux = $oTasks->getGroupsOfTask($sTaskUID, 1); + $aAux = $oTasks->getGroupsOfTask($sTaskUID, 2); $aUIDS1 = array(); foreach ($aAux as $aGroup) { $aUIDS1[] = $aGroup['GRP_UID']; @@ -1208,7 +1208,7 @@ class Task $oDataset->next(); $c = 0; $oTasks = new \Tasks(); - $aAux = $oTasks->getGroupsOfTask($sTaskUID, 1); + $aAux = $oTasks->getGroupsOfTask($sTaskUID, 2); $aUIDS1 = array(); foreach ($aAux as $aGroup) { $aUIDS1[] = $aGroup['GRP_UID']; diff --git a/workflow/engine/src/Services/Api/ProcessMaker/Project/ProcessSupervisors.php b/workflow/engine/src/Services/Api/ProcessMaker/Project/ProcessSupervisors.php new file mode 100644 index 000000000..82b261961 --- /dev/null +++ b/workflow/engine/src/Services/Api/ProcessMaker/Project/ProcessSupervisors.php @@ -0,0 +1,75 @@ +getSupervisors($prjUid, $filter, $start, $limit); + //Response + $response = $arrayData; + } catch (\Exception $e) { + //response + throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); + } + return $response; + } + + /** + * @param string $prjUid {@min 32} {@max 32} + * + * @url GET /:prjUid/inputdocument-supervisor + */ + public function doGetProjectInputDocumentSupervisor($prjUid) + { + try { + $supervisor = new \BusinessModel\ProcessSupervisor(); + $arrayData = $supervisor->getInputDocumentSupervisor($prjUid); + //Response + $response = $arrayData; + } catch (\Exception $e) { + //response + throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); + } + return $response; + } + + /** + * @param string $prjUid {@min 32} {@max 32} + * + * @url GET /:prjUid/dynaform-supervisor + */ + public function doGetProjectDynaformSupervisor($prjUid) + { + try { + $supervisor = new \BusinessModel\ProcessSupervisor(); + $arrayData = $supervisor->getDynaformSupervisor($prjUid); + //Response + $response = $arrayData; + } catch (\Exception $e) { + //response + throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); + } + return $response; + } + + +} diff --git a/workflow/engine/src/Services/api.ini b/workflow/engine/src/Services/api.ini index 5d8ee1784..0731789c3 100644 --- a/workflow/engine/src/Services/api.ini +++ b/workflow/engine/src/Services/api.ini @@ -22,6 +22,7 @@ debug = 1 event = "Services\Api\ProcessMaker\Project\Event" input-document = "Services\Api\ProcessMaker\Project\InputDocument" output-documents = "Services\Api\ProcessMaker\Project\OutputDocuments" + supervisors = "Services\Api\ProcessMaker\Project\ProcessSupervisors" [alias: projects] project = "Services\Api\ProcessMaker\Project"