protected function formatBeans(ServiceBase $api, $args, $beans) { if (!empty($args['fields']) && !is_array($args['fields'])) { $args['fields'] = explode(',', $args['fields']); } $ret = array(); foreach ($beans as $bean) { if (!is_subclass_of($bean, 'SugarBean')) { continue; } $arr_aux = array(); $arr_aux['cas_id'] = isset($bean->fetched_row['cas_id']) ? $bean->fetched_row['cas_id'] : $bean->fetched_row['pmse_bpm_flow__cas_id']; $arr_aux['act_assignment_method'] = $bean->fetched_row['act_assignment_method']; $arr_aux['cas_title'] = $bean->fetched_row['cas_title']; $arr_aux['pro_title'] = $bean->fetched_row['pro_title']; $arr_aux['date_entered'] = PMSEEngineUtils::getDateToFE($bean->fetched_row['date_entered'], 'datetime'); $arr_aux['name'] = $bean->fetched_row['cas_title']; $arr_aux['cas_create_date'] = PMSEEngineUtils::getDateToFE($bean->fetched_row['date_entered'], 'datetime'); $arr_aux['flow_id'] = $bean->fetched_row['id']; $arr_aux['id2'] = $bean->fetched_row['inbox_id']; $arr_aux['task_name'] = $bean->fetched_row['act_name']; $arr_aux['cas_status'] = $bean->fetched_row['act_assignment_method']; $arr_aux['assigned_user_name'] = $bean->fetched_row['assigned_user_name']; $arr_aux['cas_sugar_module'] = $bean->fetched_row['cas_sugar_module']; $arr_aux['cas_sugar_object_id'] = $bean->fetched_row['cas_sugar_object_id']; $arr_aux['prj_id'] = $bean->fetched_row['prj_id']; $arr_aux['in_time'] = true; $arr_aux['id'] = $bean->fetched_row['inbox_id']; $arr_aux['cas_user_id'] = $bean->fetched_row['cas_user_id']; $arr_aux['prj_created_by'] = $bean->fetched_row['prj_created_by']; $casUsersBean = BeanFactory::getBean('Users', $bean->fetched_row['cas_user_id']); $arr_aux['cas_user_id_full_name'] = $casUsersBean->full_name; if (empty($casUsersBean->full_name)) { $arr_aux['cas_user_id_full_name'] = $arr_aux['cas_user_id']; } $prjUsersBean = BeanFactory::getBean('Users', $bean->fetched_row['prj_created_by']); $arr_aux['prj_user_id_full_name'] = $prjUsersBean->full_name; $assignedBean = BeanFactory::getBean($arr_aux['cas_sugar_module'], $arr_aux['cas_sugar_object_id']); $assignedUsersBean = BeanFactory::getBean('Users', $assignedBean->assigned_user_id); $arr_aux['assigned_user_name'] = $assignedUsersBean->full_name; $ret[] = array_merge($this->formatBean($api, $args, $bean), $arr_aux); } return $ret; }
public function getUnattendedCases($api, $args) { global $db; $this->checkACL($api, $args); $queryOptions = array('add_deleted' => true); $arrayUnattendedCases = $this->getUnattendedCasesByFlow(); //Get Cases IN TODO $beanInbox = BeanFactory::getBean('pmse_Inbox'); $fields = array('id', 'assigned_user_id', 'date_modified', 'date_entered', 'name', 'cas_id', 'cas_title', 'cas_status', 'pro_title', 'pro_id', 'cas_init_user'); $q = new SugarQuery(); $q->from($beanInbox, $queryOptions); $q->distinct(false); $q->where()->equals('cas_status', 'IN PROGRESS'); $enabledQuery = true; $q->select($fields); if ($args['module_list'] == 'all' && !empty($args['q'])) { $q->where()->queryAnd()->addRaw("pmse_inbox.cas_title LIKE '%" . $args['q'] . "%' OR pmse_inbox.pro_title LIKE '%" . $args['q'] . "%' "); } else { if (!empty($args['q'])) { switch ($args['module_list']) { case translate('LBL_CAS_ID', 'pmse_Inbox'): $q->where()->queryAnd()->addRaw("pmse_inbox.cas_id = " . $db->quoted($args['q'])); break; case translate('LBL_PROCESS_DEFINITION_NAME', 'pmse_Inbox'): $q->where()->queryAnd()->addRaw("pmse_inbox.pro_title LIKE '%" . $args['q'] . "%'"); break; case translate('LBL_RECORD_NAME', 'pmse_Inbox'): $q->where()->queryAnd()->addRaw("pmse_inbox.cas_title LIKE '%" . $args['q'] . "%'"); break; case translate('LBL_OWNER', 'pmse_Inbox'): $q->where()->queryAnd()->addRaw("pmse_inbox.cas_init_user LIKE '%" . $args['q'] . "%'"); break; } } } if (isset($args['order_by'])) { $columnToSort = explode(":", $args["order_by"]); $q->orderBy($columnToSort[0], empty($columnToSort[1]) ? "asc" : $columnToSort[1]); } $rows = $q->execute(); $rows_aux = array(); $result = array(); foreach ($arrayUnattendedCases as $key => $row) { $result[] = $row['cas_id']; } foreach ($rows as $key => $row) { $arrayId = array_search($row['cas_id'], $result); if ($arrayId !== false) { $usersBean = BeanFactory::getBean('Users', $arrayUnattendedCases[$arrayId]['cas_user_id']); $row['cas_user_full_name'] = $usersBean->full_name; $processBean = BeanFactory::getBean('pmse_BpmnProcess', $row['pro_id']); $row['prj_id'] = $processBean->prj_id; $prjUsersBean = BeanFactory::getBean('Users', $processBean->created_by); $row['prj_user_id_full_name'] = $prjUsersBean->full_name; $row['cas_sugar_object_id'] = $arrayUnattendedCases[$arrayId]['cas_sugar_object_id']; $row['cas_sugar_module'] = $arrayUnattendedCases[$arrayId]['cas_sugar_module']; $assignedBean = BeanFactory::getBean($row['cas_sugar_module'], $row['cas_sugar_object_id']); $assignedUsersBean = BeanFactory::getBean('Users', $assignedBean->assigned_user_id); $row['assigned_user_name'] = $assignedUsersBean->full_name; $row['date_entered'] = PMSEEngineUtils::getDateToFE($row['date_entered'], 'datetime'); $rows_aux[] = $row; } } return array('next_offset' => '-1', 'records' => $rows_aux); }
/** * * Moved function from BpmInboxViewShowHistoryEntries class [view.showhistoryentries.php] * Using variable members and some fields added. */ public function assemblyEntries() { $entries = array(); $queryOptions = array('add_deleted' => true); $beanFlow = BeanFactory::getBean('pmse_BpmFlow'); $fields = array('id', 'date_entered', 'date_modified', 'cas_id', 'cas_index', 'pro_id', 'cas_previous', 'cas_reassign_level', 'bpmn_id', 'bpmn_type', 'cas_user_id', 'cas_thread', 'cas_flow_status', 'cas_sugar_module', 'cas_sugar_object_id', 'cas_sugar_action', 'cas_adhoc_type', 'cas_adhoc_parent_id', 'cas_task_start_date', 'cas_delegate_date', 'cas_start_date', 'cas_finish_date', 'cas_due_date', 'cas_queue_duration', 'cas_duration', 'cas_delay_duration', 'cas_started', 'cas_finished', 'cas_delayed'); $q = new SugarQuery(); $q->from($beanFlow, $queryOptions); $q->distinct(false); $q->where()->equals('cas_id', $this->case_id); $q->orderBy('cas_index', 'ASC'); $q->select($fields); $caseDerivations = $q->execute(); foreach ($caseDerivations as $key => $caseData) { $entry = $this->fetchUserType($caseData); $currentDate = new DateTime(); $entry['due_date'] = !empty($caseData['cas_due_date']) ? PMSEEngineUtils::getDateToFE($caseData['cas_due_date'], 'datetime') : ''; $entry['end_date'] = !empty($caseData['cas_finish_date']) ? PMSEEngineUtils::getDateToFE($caseData['cas_finish_date'], 'datetime') : ''; $entry['current_date'] = PMSEEngineUtils::getDateToFE(TimeDate::getInstance()->nowDb(), 'datetime'); $entry['delegate_date'] = !empty($caseData['cas_delegate_date']) ? PMSEEngineUtils::getDateToFE($caseData['cas_delegate_date'], 'datetime') : ''; $entry['start_date'] = !empty($caseData['cas_start_date']) ? PMSEEngineUtils::getDateToFE($caseData['cas_start_date'], 'datetime') : ''; $entry['var_values'] = ''; $entry['completed'] = true; $entry['cas_user_id'] = $caseData['cas_user_id']; if ($caseData['cas_previous'] == 0) { //cas_flow_status field should set something instead be empty. $dataString = sprintf(translate('LBL_PMSE_HISTORY_LOG_CREATED_CASE', 'pmse_Inbox'), $caseData['cas_id']); } else { if ($caseData['cas_flow_status'] == 'CLOSED') { $dataString = sprintf(translate('LBL_PMSE_HISTORY_LOG_DERIVATED_CASE', 'pmse_Inbox'), $caseData['bpmn_id']); } else { $dataString = sprintf(translate('LBL_PMSE_HISTORY_LOG_CURRENTLY_HAS_CASE', 'pmse_Inbox'), $caseData['bpmn_id']); } } $action = ''; if ($caseData['bpmn_type'] == 'bpmnActivity') { $currentCaseState = $this->getActionStatusAndAction($caseData['cas_flow_status'], $caseData['cas_sugar_action']); $dataString .= sprintf(translate('LBL_PMSE_HISTORY_LOG_ACTIVITY_NAME', 'pmse_Inbox'), $this->getActivityName($caseData['bpmn_id'])); if ($caseData['cas_flow_status'] != 'FORM') { $dataString .= sprintf(translate('LBL_PMSE_HISTORY_LOG_MODULE_ACTION', 'pmse_Inbox'), $this->getActivityModule($caseData), $currentCaseState); $res = $this->formAction->retrieve_by_string_fields(array('cas_id' => $caseData['cas_id'], 'act_id' => $caseData['bpmn_id'], 'user_id' => $caseData['cas_user_id'])); if (isset($this->formAction->frm_action) && !empty($this->formAction->frm_action)) { $action = strtoupper($this->formAction->frm_action); } else { $action = translate('LBL_PMSE_HISTORY_LOG_NOT_REGISTED_ACTION', 'pmse_Inbox'); } $dataString .= sprintf(translate('LBL_PMSE_HISTORY_LOG_ACTION_PERFORMED', 'pmse_Inbox'), $action); if (isset($this->formAction->cas_pre_data)) { $logdata = unserialize($this->formAction->cas_pre_data); $entry['var_values'] = $logdata; } } else { $dataString .= sprintf(translate('LBL_PMSE_HISTORY_LOG_ACTION_STILL_ASSIGNED', 'pmse_Inbox')); $entry['completed'] = false; } } else { if ($caseData['bpmn_type'] == 'bpmnEvent') { $name = sprintf(translate('LBL_PMSE_HISTORY_LOG_ACTIVITY_NAME', 'pmse_Inbox'), $this->getEventName($caseData['bpmn_id'])); $currentCaseState = sprintf(translate('LBL_PMSE_HISTORY_LOG_WITH_EVENT', 'pmse_Inbox'), $name); $dataString .= sprintf(translate('LBL_PMSE_HISTORY_LOG_MODULE_ACTION', 'pmse_Inbox'), $this->getActivityModule($caseData), $currentCaseState); } else { if ($caseData['bpmn_type'] == 'bpmnGateway') { $name = sprintf(translate('LBL_PMSE_HISTORY_LOG_ACTIVITY_NAME', 'pmse_Inbox'), $this->getEventName($caseData['bpmn_id'])); $currentCaseState = sprintf(translate('LBL_PMSE_HISTORY_LOG_WITH_GATEWAY', 'pmse_Inbox'), $name); $dataString .= sprintf(translate('LBL_PMSE_HISTORY_LOG_MODULE_ACTION', 'pmse_Inbox'), $this->getActivityModule($caseData), $currentCaseState); } } } $entry['data_info'] = $dataString; $entries[] = $entry; } return $entries; }
public function selectCasesList($api, $args) { $this->checkACL($api, $args); $q = new SugarQuery(); $inboxBean = BeanFactory::getBean('pmse_Inbox'); if ($args['order_by'] == 'cas_due_date:asc') { $args['order_by'] = 'cas_create_date:asc'; } $options = self::parseArguments($api, $args, $inboxBean); $fields = array('a.*'); $q->from($inboxBean, array('alias' => 'a')); //INNER USER TABLE $q->joinTable('users', array('alias' => 'u', 'joinType' => 'INNER', 'linkingTable' => true))->on()->equalsField('u.id', 'a.created_by')->equals('u.deleted', 0); $fields[] = array("u.last_name", 'assigned_user_name'); //INNER PROCESS TABLE $q->joinTable('pmse_bpmn_process', array('alias' => 'pr', 'joinType' => 'INNER', 'linkingTable' => true))->on()->equalsField('pr.id', 'a.pro_id')->equals('pr.deleted', 0); $fields[] = array("pr.prj_id", 'prj_id'); //INNER PROJECT TABLE $q->joinTable('pmse_project', array('alias' => 'prj', 'joinType' => 'INNER', 'linkingTable' => true))->on()->equalsField('prj.id', 'pr.prj_id')->equals('prj.deleted', 0); $fields[] = array("prj.assigned_user_id", 'prj_created_by'); $fields[] = array("prj.prj_module", 'prj_module'); $q->select($fields); $q->where()->in('prj.prj_module', PMSEEngineUtils::getSupportedModules()); if (!empty($args['q'])) { $q->where()->queryAnd()->addRaw("a.cas_title LIKE '%" . $args['q'] . "%' OR a.pro_title LIKE '%" . $args['q'] . "%' OR a.cas_status LIKE '%" . $args['q'] . "%' OR prj.assigned_user_id LIKE '%" . $args['q'] . "%' OR pr.prj_id LIKE '%" . $args['q'] . "%' OR last_name LIKE '%" . $args['q'] . "%'"); } if (!empty($args['module_list'])) { switch ($args['module_list']) { case translate('LBL_STATUS_COMPLETED', 'pmse_Inbox'): $q->where()->queryAnd()->addRaw("cas_status = 'COMPLETED'"); break; case translate('LBL_STATUS_TERMINATED', 'pmse_Inbox'): $q->where()->queryAnd()->addRaw("cas_status = 'TERMINATED'"); break; case translate('LBL_STATUS_IN_PROGRESS', 'pmse_Inbox'): $q->where()->queryAnd()->addRaw("cas_status = 'IN PROGRESS'"); break; case translate('LBL_STATUS_CANCELLED', 'pmse_Inbox'): $q->where()->queryAnd()->addRaw("cas_status = 'CANCELLED'"); break; case translate('LBL_STATUS_ERROR', 'pmse_Inbox'): $q->where()->queryAnd()->addRaw("cas_status = 'ERROR'"); break; } } foreach ($options['order_by'] as $orderBy) { $q->orderBy($orderBy[0], $orderBy[1]); } // Add an extra record to the limit so we can detect if there are more records to be found $q->limit($options['limit']); $q->offset($options['offset']); $offset = $options['offset'] + $options['limit']; $count = 0; $list = $q->execute(); foreach ($list as $key => $value) { if ($value["cas_status"] === 'IN PROGRESS') { $list[$key]["cas_status"] = '<data class="label label-Leads">' . $value["cas_status"] . '</data>'; } elseif ($value["cas_status"] === 'COMPLETED' || $value["cas_status"] === 'TERMINATED') { $list[$key]["cas_status"] = '<data class="label label-success">' . $value["cas_status"] . '</data>'; } elseif ($value["cas_status"] === 'CANCELLED') { $list[$key]["cas_status"] = '<data class="label label-warning">' . $value["cas_status"] . '</data>'; } else { $list[$key]["cas_status"] = '<data class="label label-important">' . $value["cas_status"] . '</data>'; } $list[$key]['cas_create_date'] = PMSEEngineUtils::getDateToFE($value['cas_create_date'], 'datetime'); $list[$key]['date_entered'] = PMSEEngineUtils::getDateToFE($value['date_entered'], 'datetime'); $list[$key]['date_modified'] = PMSEEngineUtils::getDateToFE($value['date_modified'], 'datetime'); $prjUsersBean = BeanFactory::getBean('Users', $list[$key]['prj_created_by']); $list[$key]['prj_user_id_full_name'] = $prjUsersBean->full_name; $qA = new SugarQuery(); $flowBean = BeanFactory::getBean('pmse_BpmFlow'); $qA->select->fieldRaw('*'); $qA->from($flowBean); $qA->where()->equals('cas_id', $list[$key]['cas_id']); $processUsers = $qA->execute(); $processUsersNames = array(); foreach ($processUsers as $k => $v) { if ($processUsers[$k]['cas_flow_status'] != 'CLOSED') { $casUsersBean = BeanFactory::getBean('Users', $processUsers[$k]['cas_user_id']); $processUsersNames[] = !empty($casUsersBean->full_name) ? $casUsersBean->full_name : ''; } $cas_sugar_module = $processUsers[$k]['cas_sugar_module']; $cas_sugar_object_id = $processUsers[$k]['cas_sugar_object_id']; } if (empty($processUsersNames)) { $userNames = ''; } else { $processUsersNames = array_unique($processUsersNames); $userNames = implode(', ', $processUsersNames); } $list[$key]['cas_user_id_full_name'] = $userNames; $assignedBean = BeanFactory::getBean($cas_sugar_module, $cas_sugar_object_id); $assignedUsersBean = BeanFactory::getBean('Users', $assignedBean->assigned_user_id); $list[$key]['assigned_user_name'] = $assignedUsersBean->full_name; $count++; } if ($count == $options['limit']) { $offset = $options['offset'] + $options['limit']; } else { $offset = -1; } $data = array(); $data['next_offset'] = $offset; $data['records'] = $list; return $data; }