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;
 }
Beispiel #2
0
 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;
 }