Index: branches/2.4/workflow/inc/class.so_orgchart.inc.php
===================================================================
--- branches/2.4/workflow/inc/class.so_orgchart.inc.php	(revision 6507)
+++ branches/2.4/workflow/inc/class.so_orgchart.inc.php	(revision 6589)
@@ -128,5 +128,4 @@
 		$this->acl = &$GLOBALS['ajax']->acl;
 		$this->db = &Factory::getInstance('WorkflowObjects')->getDBWorkflow()->Link_ID;
-		$this->db = &Factory::getInstance('WorkflowObjects')->getDBWorkflow()->Link_ID;
 		$this->db->SetFetchMode(ADODB_FETCH_ASSOC);
 	}
@@ -706,5 +705,5 @@
 		$supervisors = '{' . implode(', ', $areaInfo) . '}';
 
-		$query = "SELECT funcionario_id, funcionario_status_id, centro_custo_id, localidade_id, organizacao_id, area_id, cargo_id, nivel, funcionario_categoria_id, titulo, funcao, to_char(data_admissao,'DD/MM/YYYY') as data_admissao, apelido FROM funcionario WHERE ((area_id = ?) AND (organizacao_id = ?)) OR (funcionario_id = ANY (?))"; 
+		$query = "SELECT funcionario_id, funcionario_status_id, centro_custo_id, localidade_id, organizacao_id, area_id, cargo_id, nivel, funcionario_categoria_id, titulo, funcao, to_char(data_admissao,'DD/MM/YYYY') as data_admissao, apelido FROM funcionario WHERE ((area_id = ?) AND (organizacao_id = ?)) OR (funcionario_id = ANY (?))";
 		$result = $this->db->query($query, array($areaID, $organizationID, $supervisors));
 		$this->_checkError($result);
@@ -784,5 +783,5 @@
 
 		/* load employee information */
-		$query = "SELECT f.funcionario_id, f.funcionario_status_id, f.centro_custo_id, f.localidade_id, f.organizacao_id, f.area_id, f.cargo_id, f.nivel, f.funcionario_categoria_id, f.titulo, f.apelido, f.funcao, f.data_admisao, a.sigla AS area_sigla FROM funcionario f, area a WHERE (f.area_id = a.area_id) AND (f.organizacao_id = $organizationID) AND (f.funcionario_id IN (" . implode(',', array_keys($unifiedResult))  ."))";
+		$query = "SELECT f.funcionario_id, f.funcionario_status_id, f.centro_custo_id, f.localidade_id, f.organizacao_id, f.area_id, f.cargo_id, f.nivel, f.funcionario_categoria_id, f.titulo, f.apelido, f.funcao, to_char(f.data_admissao, 'DD/MM/YYYY') as data_admissao, a.sigla AS area_sigla FROM funcionario f, area a WHERE (f.area_id = a.area_id) AND (f.organizacao_id = $organizationID) AND (f.funcionario_id IN (" . implode(',', array_keys($unifiedResult))  ."))";
 		$result = $this->db->query($query);
 		$this->_checkError($result);
@@ -801,60 +800,68 @@
 	}
 
- 	
-	/** 
- 	 * Valida se o formato da data está correto.. 
- 	 * @param $date data a ser validada. 
- 	 **/ 
- 		 
- 	function validateDate($date) 
- 	{ 
- 	        $date_pattern = '/^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[0-2])\/[12][0-9]{3}$/'; 
- 	 
- 	        if (!preg_match($date_pattern, $date)) 
- 	                $this->endExecution("Formato inválido para data (dd/mm/aaaa)."); 
- 	} 
- 		 
+
+	/**
+	 * Valida se o formato da data está correto..
+	 * @param $date data a ser validada.
+	 **/
+
+	function validateDate($date)
+	{
+		$date_pattern = '/^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[0-2])\/[12][0-9]{3}$/';
+
+		if (!preg_match($date_pattern, $date))
+			$this->endExecution("Formato inválido para data (dd/mm/aaaa).");
+	}
+
 	/**
 	 * Adiciona um funcionário.
-         * @param int $employeeID O ID do funcionário. 
- 	 * @param int $organizationID O ID da organização. 
- 	 * @param int $areaID O ID da área. 
- 	 * @param int $costCenterID O ID do centro de custo. 
- 	 * @param int $localID O ID da localidade. 
- 	 * @param int $employeeStatusID O ID do status do funcionário. 
- 	 * @param int $jobTitleID O ID do cargo do funcionário. 
- 	 * @param int $level O nível do cargo do funcionário. 
- 	 * @param int $title O título do funcionário. 
- 	 * @param int $nickname O apelido do funcionário. 
- 	 * @param int $jobDesc A descrição do cargo (função). 
- 	 * @param int $admDate Data de admissão do funcionário. 
- 	 * @return bool TRUE se a ação foi concluída com êxito e FALSE caso contrário. 
- 	 * @access public 
- 	 */ 
- 	function addEmployee($employeeID, $organizationID, $areaID, $costCenterID, $localID, $employeeStatusID, $jobTitleID, $level, $employeeCategoryID, $title, $nickname, $jobDesc, $admDate) 
- 	{ 
- 	        $this->_checkAccess($organizationID); 
- 	        $this->validateDate($admDate); 
- 		 
- 	        $query = 'SELECT area.sigla FROM funcionario, area WHERE (funcionario.area_id = area.area_id) AND (funcionario.funcionario_id = ?)'; 
- 	        if (($row = $this->db->query($query, $employeeID)->fetchRow())) 
- 	        { 
- 	                $errors = array( 
- 	                        "O funcionário \"" . Factory::getInstance('WorkflowLDAP')->getName($employeeID) . "\" já pertença à área \"{$row['sigla']}\".", 
- 	                        '-----------------', 
- 	                        'Caso você queira colocá-lo na área selecionada, siga o procedimento: faça uma busca por seu nome, clique para editá-lo e, troque pela área desejada.' 
- 	                ); 
- 	                $this->endExecution($errors); 
- 	        } 
- 	
- 	        $query = "INSERT INTO funcionario(funcionario_id, organizacao_id, area_id, centro_custo_id, localidade_id, funcionario_status_id, cargo_id, nivel, funcionario_categoria_id, titulo, apelido, funcao, data_admissao) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; 
- 	        $result = $this->db->query($query, array($employeeID, $organizationID, $areaID, $costCenterID, $localID, $employeeStatusID, $jobTitleID, $level, $employeeCategoryID, $title, $nickname, $jobDesc, $admDate)); 
- 	        $this->_checkError($result); 
- 	 
- 	        return (($result === false) ? false : true); 
- 	} 
- 		 
- 	/** 
- 	 * Atualiza o funcionário. 
+	 * @param int $employeeID O ID do funcionário.
+	 * @param int $organizationID O ID da organização.
+	 * @param int $areaID O ID da área.
+	 * @param int $costCenterID O ID do centro de custo.
+	 * @param int $localID O ID da localidade.
+	 * @param int $employeeStatusID O ID do status do funcionário.
+	 * @param int $jobTitleID O ID do cargo do funcionário.
+	 * @param int $level O nível do cargo do funcionário.
+	 * @param int $title O título do funcionário.
+ 	 * @param int $nickname O apelido do funcionário.
+ 	 * @param int $jobDesc A descrição do cargo (função).
+ 	 * @param int $admDate Data de admissão do funcionário.
+	 * @return bool TRUE se a ação foi concluída com êxito e FALSE caso contrário.
+	 * @access public
+	 */
+	function addEmployee($employeeID, $organizationID, $areaID, $costCenterID, $localID, $employeeStatusID, $jobTitleID, $level, $employeeCategoryID, $title, $nickname, $jobDesc, $admDate)
+	{
+		$this->_checkAccess($organizationID);
+		if ($admDate!='')
+		{
+			$this->validateDate($admDate);
+			$admission_date = implode('-', array_reverse(explode('/', $admDate)));
+		}
+		else
+		{
+			$admission_date=NULL;
+		}
+
+		$query = 'SELECT area.sigla FROM funcionario, area WHERE (funcionario.area_id = area.area_id) AND (funcionario.funcionario_id = ?)';
+		if (($row = $this->db->query($query, $employeeID)->fetchRow()))
+		{
+			$errors = array(
+				"O funcionário \"" . Factory::getInstance('WorkflowLDAP')->getName($employeeID) . "\" já pertença à área \"{$row['sigla']}\".",
+				'-----------------',
+				'Caso você queira colocá-lo na área selecionada, siga o procedimento: faça uma busca por seu nome, clique para editá-lo e, troque pela área desejada.'
+			);
+			$this->endExecution($errors);
+		}
+
+		$query = "INSERT INTO funcionario(funcionario_id, organizacao_id, area_id, centro_custo_id, localidade_id, funcionario_status_id, cargo_id, nivel, funcionario_categoria_id, titulo, apelido, funcao, data_admissao) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+		$result = $this->db->query($query, array($employeeID, $organizationID, $areaID, $costCenterID, $localID, $employeeStatusID, $jobTitleID, $level, $employeeCategoryID, $title, $nickname, $jobDesc, $admission_date));
+		$this->_checkError($result);
+
+		return (($result === false) ? false : true);
+	}
+
+	/**
+	 * Atualiza o funcionário.
 	 * @param int $employeeID O ID do funcionário.
 	 * @param int $organizationID O ID da organização.
@@ -866,20 +873,30 @@
 	 * @param int $level O nível do cargo do funcionário.
 	 * @param int $employeeCategoryID O ID da categoria do funcionário.
-	 * @param int $title O título do funcionário. 
- 	 * @param int $nickname O apelido do funcionário. 
- 	 * @param int $jobDesc A descrição do cargo (função). 
- 	 * @param int $admDate Data de admissão do funcionário. 
- 	 * @return bool TRUE se a ação foi concluída com êxito e FALSE caso contrário. 
- 	 * @access public 
- 	 */ 
- 	function updateEmployee($employeeID, $organizationID, $areaID, $costCenterID, $localID, $employeeStatusID, $jobTitleID, $level, $employeeCategoryID, $title, $nickname, $jobDesc, $admDate) 
- 	{ 
- 	        $this->_checkAccess($organizationID); 
- 	        $this->validateDate($admDate); 
- 		                 
- 	        $query = "UPDATE funcionario SET area_id = ?, centro_custo_id = ?, localidade_id = ?, funcionario_status_id = ?, cargo_id = ?, nivel = ?, funcionario_categoria_id = ?, titulo = ?, apelido = ?, funcao = ?, data_admissao = ? WHERE (funcionario_id = ?) AND (organizacao_id = ?)"; 
- 	        $result = $this->db->query($query, array($areaID, $costCenterID, $localID, $employeeStatusID, $jobTitleID, $level, $employeeCategoryID, $title,$nickname, $jobDesc, $admDate, $employeeID, $organizationID)); 
-		$this->_checkError($result);
-
+	 * @param int $title O título do funcionário.
+ 	 * @param int $nickname O apelido do funcionário.
+ 	 * @param int $jobDesc A descrição do cargo (função).
+ 	 * @param int $admDate Data de admissão do funcionário.
+	 * @return bool TRUE se a ação foi concluída com êxito e FALSE caso contrário.
+	 * @access public
+	 */
+	function updateEmployee($employeeID, $organizationID, $areaID, $costCenterID, $localID, $employeeStatusID, $jobTitleID, $level, $employeeCategoryID, $title, $nickname, $jobDesc, $admDate)
+	{
+		$this->_checkAccess($organizationID);
+		if ($admDate!='')
+		{
+			$this->validateDate($admDate);
+			$admission_date = implode('-', array_reverse(explode('/', $admDate)));
+		}
+		else
+		{
+			$admission_date=NULL;
+		}
+
+		$query = "UPDATE funcionario SET area_id = ?, centro_custo_id = ?, localidade_id = ?, funcionario_status_id = ?, cargo_id = ?, nivel = ?, funcionario_categoria_id = ?, titulo = ?, apelido = ?, funcao = ?, data_admissao =? WHERE (funcionario_id = ?) AND (organizacao_id = ?)";
+			
+		$result = $this->db->query($query, array($areaID, $costCenterID, $localID, $employeeStatusID, $jobTitleID, $level, $employeeCategoryID, $title,$nickname, $jobDesc, $admission_date, $employeeID, $organizationID));
+		
+		$this->_checkError($result);
+		
 		return (($result === false) ? false : true);
 	}
