/**
  * 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;
     }
 }