예제 #1
0
 /**
  * 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;
 }
예제 #2
0
 /**
  * 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;
 }
예제 #3
0
 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;
 }
예제 #4
0
 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;
 }
예제 #5
-15
 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;
 }