getCostObjectByID() public static method

Return a cost object hash.
public static getCostObjectByID ( string $id, string | boolean $employee = false ) : array
$id string The cost object id.
$employee string | boolean Employee hint - if known. False otherwise.
return array The cost object hash. Keys differ depending on the API queried, but should always contain: - id: - name:
Esempio n. 1
0
 /**
  * Fetch time slices with optional filter.
  *
  * @param array $filters  An array of properties to filter on. Each entry
  *                        is a field => value format. Possible field values:
  *                        client, jobtype, submitted, exported, billable,
  *                        start, end, employee, id, costobject.
  * @param array $fields
  *
  * @return array  Array of timeslice objects
  */
 public function getHours(array $filters = array(), array $fields = array())
 {
     global $conf;
     $fieldlist = array('id' => 'b.timeslice_id as id', 'client' => ' b.clientjob_id as client', 'employee' => ' b.employee_id as employee', 'type' => ' b.jobtype_id as type', '_type_name' => ' j.jobtype_name as "_type_name"', 'hours' => ' b.timeslice_hours as hours', 'rate' => ' b.timeslice_rate as rate', 'billable' => empty($conf['time']['choose_ifbillable']) ? ' j.jobtype_billable as billable' : ' b.timeslice_isbillable as billable', 'date' => ' b.timeslice_date as "date"', 'description' => ' b.timeslice_description as description', 'note' => ' b.timeslice_note as note', 'submitted' => ' b.timeslice_submitted as submitted', 'costobject' => ' b.costobject_id as costobject');
     if (!empty($fields)) {
         $fieldlist = array_keys(array_intersect(array_flip($fieldlist), $fields));
     }
     $fieldlist = implode(', ', $fieldlist);
     $sql = 'SELECT ' . $fieldlist . ' FROM hermes_timeslices b INNER JOIN hermes_jobtypes j ON b.jobtype_id = j.jobtype_id';
     if (count($filters) > 0) {
         $where = '';
         $glue = '';
         foreach ($filters as $field => $filter) {
             switch ($field) {
                 case 'client':
                     $where .= $glue . $this->_equalClause('b.clientjob_id', $filter);
                     $glue = ' AND';
                     break;
                 case 'jobtype':
                     $where .= $glue . $this->_equalClause('b.jobtype_id', $filter);
                     $glue = ' AND';
                     break;
                 case 'submitted':
                     $where .= $glue . ' timeslice_submitted = ' . (int) $filter;
                     $glue = ' AND';
                     break;
                 case 'exported':
                     $where .= $glue . ' timeslice_exported = ' . (int) $filter;
                     $glue = ' AND';
                     break;
                 case 'billable':
                     $where .= $glue . (empty($conf['time']['choose_ifbillable']) ? ' jobtype_billable = ' : ' timeslice_isbillable = ') . (int) $filter;
                     $glue = ' AND';
                     break;
                 case 'start':
                     $where .= $glue . ' timeslice_date >= ' . (int) $filter;
                     $glue = ' AND';
                     break;
                 case 'end':
                     $where .= $glue . ' timeslice_date <= ' . (int) $filter;
                     $glue = ' AND';
                     break;
                 case 'employee':
                     $where .= $glue . $this->_equalClause('employee_id', $filter);
                     $glue = ' AND';
                     break;
                 case 'id':
                     if (is_array($filter)) {
                         foreach ($filter as &$id) {
                             $id = (int) $id;
                         }
                     }
                     $where .= $glue . $this->_equalClause('timeslice_id', $filter, false);
                     $glue = ' AND';
                     break;
                 case 'costobject':
                     $where .= $glue . $this->_equalClause('costobject_id', $filter);
                     $glue = ' AND';
                     break;
             }
         }
     }
     if (!empty($where)) {
         $sql .= ' WHERE ' . $where;
     }
     $sql .= ' ORDER BY timeslice_date DESC, clientjob_id';
     try {
         $hours = $this->_db->selectAll($sql);
     } catch (Horde_Db_Exception $e) {
         throw new Hermes_Exception($e);
     }
     $slices = array();
     // Do per-record processing
     $addcostobject = empty($fields) || in_array('costobject', $fields);
     foreach ($hours as $key => $hour) {
         if (isset($hour['date'])) {
             // Convert timestamps to Horde_Date objects
             $hour['date'] = new Horde_Date($hour['date']);
         }
         if (isset($hour['description'])) {
             $hour['description'] = $this->_convertFromDriver($hour['description']);
         }
         if (isset($hour['note'])) {
             $hour['note'] = $this->_convertFromDriver($hour['note']);
         }
         if ($addcostobject) {
             if (empty($hour['costobject'])) {
                 $hour['_costobject_name'] = '';
             } else {
                 try {
                     $costobject = Hermes::getCostObjectByID($hour['costobject']);
                     $hour['_costobject_name'] = $costobject['name'];
                 } catch (Horde_Exception $e) {
                     $hour['_costobject_name'] = sprintf(_("Error: %s"), $e->getMessage());
                 }
             }
         }
         $slices[$key] = new Hermes_Slice($hour);
     }
     return $slices;
 }
Esempio n. 2
0
 /**
  * Return a specific timer.
  *
  * @param integer  The timer id.
  *
  * @return array  The timer hash.
  * @throws Horde_Exception_NotFound
  */
 public static function getTimer($id)
 {
     $timers = $GLOBALS['prefs']->getValue('running_timers');
     if (!empty($timers)) {
         $timers = @unserialize($timers);
     }
     if (empty($timers[$id])) {
         throw new Horde_Exception_NotFound(_("The requested timer was not found."));
     }
     $timers[$id]['id'] = $id;
     try {
         $text = Hermes::getCostObjectByID($timers[$id]['deliverable_id']);
         $timers[$id]['deliverable_text'] = $text['name'];
     } catch (Horde_Exception_NotFound $e) {
     }
     return $timers[$id];
 }