Index: trunk/workflow/inc/local/classes/class.wf_orgchart.php
===================================================================
--- trunk/workflow/inc/local/classes/class.wf_orgchart.php	(revision 1320)
+++ trunk/workflow/inc/local/classes/class.wf_orgchart.php	(revision 2042)
@@ -133,10 +133,18 @@
 	function getOrganizationAreas($organizationID)
 	{
-		$query = "SELECT organizacao_id, area_id, area_status_id, " .
-				 "       superior_area_id, centro_custo_id, titular_funcionario_id," .
-				 "       substituto_funcionario_id, sigla, descricao, ativa, auxiliar_funcionario_id" .
-				 "  FROM area" .
-				 " WHERE (organizacao_id = ?)" .
-				 " ORDER BY sigla, descricao";
+		$query = "SELECT a.organizacao_id, a.area_id, a.area_status_id, " .
+				 "       a.superior_area_id, a.centro_custo_id, a.titular_funcionario_id, " .
+				 "       a.sigla, a.descricao, a.ativa, a.auxiliar_funcionario_id, " .
+				 "		 s.funcionario_id as substituto_funcionario_id " .
+				 " FROM area a " .
+				 "  LEFT OUTER JOIN substituicao s " .
+				 "  USING(area_id) " .
+				 " WHERE " . 
+				 "	(a.organizacao_id = ?) " .
+				 " AND " . 
+				 "	((CURRENT_DATE BETWEEN s.data_inicio AND s.data_fim) " .
+				 " 	OR " . 
+				 "	(s.substituicao_id is null)) " .
+				 " ORDER BY a.sigla, a.descricao";
 
 		$result = $this->db->query($query, array($organizationID));
@@ -320,9 +328,19 @@
 	function getArea($areaID)
 	{
-		$query = "SELECT organizacao_id, area_id, area_status_id, " .
-				 "       superior_area_id, centro_custo_id, titular_funcionario_id," .
-				 "       substituto_funcionario_id, sigla, descricao, ativa, auxiliar_funcionario_id" .
-				 "  FROM area" .
-				 " WHERE (area_id = ?)";
+		$query = "SELECT a.organizacao_id, a.area_id, a.area_status_id, " .
+				 "       a.superior_area_id, a.centro_custo_id, a.titular_funcionario_id, " .
+				 "       a.sigla, a.descricao, a.ativa, a.auxiliar_funcionario_id, " .
+				 "		 s.funcionario_id as substituto_funcionario_id " .
+				 " FROM area a " .
+				 "  LEFT OUTER JOIN substituicao s " .
+				 "  USING(area_id) " .
+				 " WHERE " . 
+				 "	(a.area_id = ?) " .
+				 " AND " . 
+				 "	((CURRENT_DATE BETWEEN s.data_inicio AND s.data_fim) " .
+				 " 	OR " . 
+				 "	(s.substituicao_id is null)) " .
+				 " ORDER BY a.sigla, a.descricao";
+
 
 		$result = $this->db->query($query, array($areaID));
@@ -357,9 +375,21 @@
 	function getAreaByName($acronym, $organizationID = 1)
 	{
-		$query = "SELECT organizacao_id, area_id, area_status_id, " .
-				 "       superior_area_id, centro_custo_id, titular_funcionario_id," .
-				 "       substituto_funcionario_id, sigla, descricao, ativa, auxiliar_funcionario_id" .
-				 "  FROM area" .
-				 " WHERE (UPPER(sigla) = UPPER(?) and (organizacao_id = ?))";
+		$query = "SELECT a.organizacao_id, a.area_id, a.area_status_id, " .
+				 "       a.superior_area_id, a.centro_custo_id, a.titular_funcionario_id, " .
+				 "       a.sigla, a.descricao, a.ativa, a.auxiliar_funcionario_id, " .
+				 "		 s.funcionario_id as substituto_funcionario_id " .
+				 " FROM area a " .
+				 "  LEFT OUTER JOIN substituicao s " .
+				 "  USING(area_id) " .
+				 " WHERE " . 
+				 "	(UPPER(a.sigla) = UPPER(?)) " .
+				 " AND " . 
+				 "	(a.organizacao_id = ?) " .
+				 " AND " . 
+				 "	((CURRENT_DATE BETWEEN s.data_inicio AND s.data_fim) " .
+				 " 	OR " . 
+				 "	(s.substituicao_id is null)) " .
+				 " ORDER BY a.sigla, a.descricao";
+
 
 		$result = $this->db->query($query, array($acronym, (int) $organizationID));
@@ -395,9 +425,20 @@
 		$result = array();
 
-		$query = "SELECT organizacao_id, area_id, area_status_id, " .
-				 "       superior_area_id, centro_custo_id, titular_funcionario_id," .
-				 "       substituto_funcionario_id, sigla, descricao, ativa, auxiliar_funcionario_id" .
-				 "  FROM area" .
-				 " WHERE (area_status_id = ?)";
+		$query = "SELECT a.organizacao_id, a.area_id, a.area_status_id, " .
+				 "       a.superior_area_id, a.centro_custo_id, a.titular_funcionario_id, " .
+				 "       a.sigla, a.descricao, a.ativa, a.auxiliar_funcionario_id, " .
+				 "		 s.funcionario_id as substituto_funcionario_id " .
+				 " FROM area a " .
+				 "  LEFT OUTER JOIN substituicao s " .
+				 "  USING(area_id) " .
+				 " WHERE " . 
+				 "	(a.area_status_id = ?) " .
+				 " AND " . 
+				 "	((CURRENT_DATE BETWEEN s.data_inicio AND s.data_fim) " .
+				 " 	OR " . 
+				 "	(s.substituicao_id is null)) " .
+				 " ORDER BY a.sigla, a.descricao";
+
+
 
 		$result = $this->db->query($query, array($areaStatusID));
@@ -436,10 +477,18 @@
 		$areas = implode(', ', $areaIDs);
 
-		$query = "SELECT organizacao_id, area_id, area_status_id, " .
-				 "       superior_area_id, centro_custo_id, titular_funcionario_id," .
-				 "       substituto_funcionario_id, sigla, descricao, ativa, auxiliar_funcionario_id" .
-				 "  FROM area" .
-				 " WHERE area_id IN ($areas)" .
-				 " ORDER BY sigla, descricao";
+		$query = "SELECT a.organizacao_id, a.area_id, a.area_status_id, " .
+				 "       a.superior_area_id, a.centro_custo_id, a.titular_funcionario_id, " .
+				 "       a.sigla, a.descricao, a.ativa, a.auxiliar_funcionario_id, " .
+				 "		 s.funcionario_id as substituto_funcionario_id " .
+				 " FROM area a " .
+				 "  LEFT OUTER JOIN substituicao s " .
+				 "  USING(area_id) " .
+				 " WHERE " . 
+				 "	(a.area_id IN ($areas)) " .
+				 " AND " . 
+				 "	((CURRENT_DATE BETWEEN s.data_inicio AND s.data_fim) " .
+				 " 	OR " . 
+				 "	(s.substituicao_id is null)) " .
+				 " ORDER BY a.sigla, a.descricao";
 
 		// A execução é realizada sem o segundo parâmetro pois este não pode estar entre aspas
@@ -506,14 +555,23 @@
 	function getSubAreasByParentAreaID($parentAreaID, $onlyActiveAreas = false)
 	{
-		$query = "SELECT organizacao_id, area_id, area_status_id, " .
-				 "       superior_area_id, centro_custo_id, titular_funcionario_id," .
-				 "       substituto_funcionario_id, sigla, descricao, ativa, auxiliar_funcionario_id" .
-				 "  FROM area" .
-				 " WHERE superior_area_id = ?";
+		$query = "SELECT a.organizacao_id, a.area_id, a.area_status_id, " .
+				 "       a.superior_area_id, a.centro_custo_id, a.titular_funcionario_id, " .
+				 "       a.sigla, a.descricao, a.ativa, a.auxiliar_funcionario_id, " .
+				 "		 s.funcionario_id as substituto_funcionario_id " .
+				 " FROM area a " .
+				 "  LEFT OUTER JOIN substituicao s " .
+				 "  USING(area_id) " .
+				 " WHERE " . 
+				 "	(a.superior_area_id = ?) " .
+				 " AND " . 
+				 "	((CURRENT_DATE BETWEEN s.data_inicio AND s.data_fim) " .
+				 " 	OR " . 
+				 "	(s.substituicao_id is null)) ";
+
 
 		if ($onlyActiveAreas){
 			$query .= " AND ativa = 'S'";
 		}
-		$query .= " ORDER BY sigla, descricao";
+		$query .= " ORDER BY a.sigla, a.descricao";
 
 		$result = $this->db->query($query, array($parentAreaID));
