/** * Apply visibility filters * @param $access * @param SugarQuery_Builder_Where $where */ public static function addVisibilityFilter($access, SugarQuery_Builder_Where $where) { if (!self::$isVisibilityApplied) { if ($access == 'regular_user') { global $current_user; $where->queryAnd()->equals('cas_user_id', $current_user->id); } else { $supportedModules = PMSEEngineUtils::getSupportedModules(); if (!empty($supportedModules)) { $where->queryAnd()->in('cas_sugar_module', $supportedModules); } } } self::$isVisibilityApplied = true; }
/** * Method to upload a file and read content for import in database * @param $file * @return bool * @throws SugarApiExceptionNotAuthorized * @throws SugarApiExceptionRequestMethodFailure * @codeCoverageIgnore */ public function importProject($file) { $_data = $this->getDataFile($file); if (unserialize($_data)) { $project = unserialize($_data); if ($project['project']) { if (in_array($project['project'][$this->module], PMSEEngineUtils::getSupportedModules())) { $result = $this->saveProjectData($project['project']); } else { throw new SugarApiExceptionNotAuthorized('EXCEPTION_NOT_AUTHORIZED'); } } else { throw new SugarApiExceptionRequestMethodFailure('ERROR_UPLOAD_FAILED'); } } else { throw new SugarApiExceptionRequestMethodFailure('ERROR_UPLOAD_FAILED'); } return $result; }
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; }
public function getRelatedBeans($filter, $relationship = 'all') { global $beanList; if (isset($beanList[$filter])) { $newModuleFilter = $filter; } else { $newModuleFilter = array_search($filter, $beanList); } $output_11 = array(); // Logic container for one-to-one and many-to-one $output_1m = array(); // Logic container for one-to-many and many-to-many(not implemented yet) $output = array(); $moduleBean = $this->getBean($newModuleFilter); foreach ($moduleBean->get_linked_fields() as $link => $def) { if (!empty($def['type']) && $def['type'] == 'link' && $moduleBean->load_relationship($link)) { $relatedModule = $moduleBean->{$link}->getRelatedModuleName(); if (!in_array($relatedModule, PMSEEngineUtils::getSupportedModules('related'))) { continue; } if (in_array($link, PMSEEngineUtils::$relatedBlacklistedLinks)) { continue; } $relType = $moduleBean->{$link}->getType(); //returns 'one' or 'many' for the cardinality of the link $label = empty($def['vname']) ? $link : translate($def['vname'], $filter); $moduleLabel = translate("LBL_MODULE_NAME", $relatedModule); if ($moduleLabel == "LBL_MODULE_NAME") { $moduleLabel = translate($relatedModule); } // Parentheses value $pval = "{$moduleLabel} (" . trim($label, ':') . ": {$link})"; $ret = array('value' => $link, 'text' => $pval, 'module' => $moduleLabel, 'relationship' => $def['relationship']); if ($relType == 'one') { $output_11[] = $ret; } else { $output_1m[] = $ret; } } } switch ($relationship) { case 'one-to-one': case 'one': $output = $output_11; break; case 'one-to-many': case 'many': $output = $output_1m; break; case 'all': default: $output = array_merge($output_11, $output_1m); break; } // Needed to multisort on the label foreach ($output as $k => $o) { $labels[$k] = $o['text']; } // Sort on the label array_multisort($labels, SORT_ASC, $output); $filterArray = array('value' => $filter, 'text' => '<' . $filter . '>', 'module' => $filter, 'relationship' => $filter); array_unshift($output, $filterArray); $res['search'] = $filter; $res['success'] = true; $res['result'] = $output; return $res; }
private function getUnattendedCasesByFlow() { $queryOptions = array('add_deleted' => true); //GET CASES ID WITH INACTIVE USERS $beanFlow = BeanFactory::getBean('pmse_BpmFlow'); $q = new SugarQuery(); $q->from($beanFlow, $queryOptions); $q->distinct(true); $fields = array('cas_id', 'cas_sugar_module', 'cas_sugar_object_id', 'cas_user_id'); //INNER JOIN USERS TABLE $q->joinTable('users', array('alias' => 'users', 'joinType' => 'INNER', 'linkingTable' => true))->on()->equalsField('users.id', 'cas_user_id')->equals('users.deleted', 0); $q->where()->equals('cas_flow_status', 'FORM')->in('cas_sugar_module', PMSEEngineUtils::getSupportedModules()); $q->where()->queryOr()->notequals('users.status', 'Active')->notequals('users.employee_status', 'Active'); $q->select($fields); $rows = $q->execute(); return $rows; }