/** * returns employees currently belonging to the given cost center (id) * * @param string|Sales_Model_CostCenter $costCenterId * @return Tinebase_Record_RecordSet|NULL */ public function getEmployeesBySalesCostCenter($costCenterId) { $costCenterId = is_string($costCenterId) ? $costCenterId : $costCenterId->getId(); $ccController = HumanResources_Controller_CostCenter::getInstance(); $now = Tinebase_DateTime::now(); $filter = new HumanResources_Model_CostCenterFilter(); $filter->addFilter(new Tinebase_Model_Filter_Text(array('field' => 'cost_center_id', 'operator' => 'equals', 'value' => $costCenterId))); $filter->addFilter(new Tinebase_Model_Filter_Date(array('field' => 'start_date', 'operator' => 'before', 'value' => $now))); $hrccs = $ccController->search($filter); if ($hrccs->count()) { $filter = new HumanResources_Model_EmployeeFilter(array(array('field' => 'id', 'operator' => 'in', 'value' => $hrccs->employee_id)), 'AND'); $filteredEmployees = new Tinebase_Record_RecordSet('HumanResources_Model_Employee'); $employees = $this->search($filter); foreach ($employees as $employee) { $subCC = $hrccs->filter('employee_id', $employee->getId()); if ($subCC->sort('start_date', 'DESC')->getFirstRecord()->start_date <= $now) { $filteredEmployees->addRecord($employee); } } return $filteredEmployees; } else { return NULL; } }
/** * returns the current or by date valid costcenter for an employee * * @param HumanResources_Model_Employee|string $employeeId * @param Tinebase_DateTime $date * @param boolean $getSalesCostCenter if true, this returns the sales costcenter, not the mm-table like hr costcenter * * @return HumanResources_Model_CostCenter|Sales_Model_CostCenter */ public function getValidCostCenter($employeeId, $date = NULL, $getSalesCostCenter = FALSE) { if (!$employeeId) { throw new Tinebase_Exception_InvalidArgument('You have to set an employee at least'); } if (!is_string($employeeId)) { $employeeId = $employeeId->getId(); } $date = $date ? new Tinebase_DateTime($date) : new Tinebase_DateTime(); $filter = new HumanResources_Model_CostCenterFilter(array(), 'AND'); $filter->addFilter(new Tinebase_Model_Filter_Text(array('field' => 'employee_id', 'operator' => 'equals', 'value' => $employeeId))); $filter->addFilter(new Tinebase_Model_Filter_Date(array('field' => 'start_date', 'operator' => 'before', 'value' => $date))); $result = $this->search($filter); if ($result->count()) { $result->sort('start_date', 'ASC'); $cc = $result->getFirstRecord(); if ($getSalesCostCenter) { return Sales_Controller_CostCenter::getInstance()->get($cc->cost_center_id); } else { return $cc; } } else { return NULL; } }