1,483c1,483
< <?php 
< 	
< /* Classe de Gest�o de Atendimentos */
< 
< class LogAtendimento extends AcessoBD{
< 	var $bd;
< 	
< 	/*
< 		Construtor da classe
< 		
< 		0 = Erro da BD
< 	*/
< 	function LogAtendimento() 
< 	{
< 		global $NOME_BD, $NOME_SERVIDOR, $USERNAME, $PASSWORD;
< 		$this->bd = new AcessoBD();
< 		return $this->bd->ligarBD($NOME_SERVIDOR, $USERNAME, $PASSWORD, $NOME_BD); // Se falhar retorna 0
< 	}
< 
< 	
< 	/*
< 		Fun��o de inser��o de uma entrada no log
< 		
< 		0 = Erro da BD
< 		true = Sucesso	
< 	*/
< 	function InserirChamada($num_senha, $servico, $tipo, $data_hora, $servico_emissao, $nome_cliente=null)
< 	{		
< 		$sql = "INSERT INTO log_atendimentos "
< 		."(id_empregado, id_balcao, id_servico, data_hora, numero_senha, id_loja, tipo,servico_emissao, nome_cliente) VALUES("
< 									. $_SESSION["sessao_empregado"] . ", "
< 									. $_SESSION["sessao_balcao"] . ", "
< 									. $servico . ", '" 
< 									. $data_hora . "', "
< 									. $num_senha . ","
< 									. $_SESSION["sessao_loja"] .","
< 									."'".$tipo."',"
< 									.$servico_emissao;
< 		
< 		if(is_null($nome_cliente) || $nome_cliente == "")
< 			$sql .= ",null);";
< 		else
< 			$sql .= ",'".$nome_cliente."');";
< 		
< 		if(!$rs = $this->bd->executarSQL($sql)){
< 			return 0;
< 		}
< 		
< 		$sql = "SELECT MAX(id_log_atendimentos) FROM log_atendimentos;";
< 		
< 		if(!$rs = $this->bd->executarSQL($sql)){
< 			return 0;
< 		} else {
< 			return $this->bd->obterValor($rs, 0);
< 		}
< 		
< 	}
< 	
< 	
< 	/*
< 		Devolve o numero da ultima senha
< 		chamada num dado servi�o
< 		
< 		0 = Erro da BD ou n�o existem senhas emitidas para aquele servi�o
< 	*/
< 	function UltimaSenhaChamada($servico)
< 	{
< 		$sql = "SELECT id_log_atendimentos FROM log_atendimentos
< 				WHERE id_empregado IS NULL
< 				AND id_balcao IS NULL
< 				AND id_dispensador IS NULL
< 				AND nome_cliente='Reset Contagem'
< 				AND id_servico = ".$servico."
< 				AND tipo='Emissao'
< 				ORDER BY id_log_atendimentos DESC LIMIT 1;";
< 		
< 		if(!$rs = $this->bd->executarSQL($sql))
< 			return 0;
< 		
< 		if($this->bd->obterNumRegistos($rs) == 0)
< 			$id_reset = 0;
< 		else 
< 			$id_reset = $this->bd->obterValor($rs, "id_log_atendimentos");
< 		
< 		$sql = "SELECT c.maxid, numero_senha, nome_cliente, servico_emissao
< 				FROM	(SELECT MAX(id_log_atendimentos) maxid, numero_senha, nome_cliente, servico_emissao
< 						FROM log_atendimentos
< 						WHERE tipo='Chamada' AND id_servico = ".$servico."
< 						AND id_log_atendimentos > ".$id_reset."
< 						GROUP BY numero_senha) c 
< 					LEFT JOIN
< 						(SELECT MAX(id_log_atendimentos) maxid, numero_senha
< 						FROM log_atendimentos
< 						WHERE tipo='Chamada Anterior'
< 						AND id_servico = ".$servico."
< 						AND id_log_atendimentos > ".$id_reset."
< 						GROUP BY numero_senha) a
< 					USING (numero_senha)
< 				WHERE c.maxid > a.maxid OR a.maxid IS NULL
< 				ORDER BY c.maxid DESC LIMIT 1;";
< 		
< 		if(!$rs = $this->bd->executarSQL($sql))
< 			return 0;
< 				
< 		if( $this->bd->obterNumRegistos($rs) != 0){
< 			$tuplo = $this->bd->obterRegisto($rs);
< 			$ultima_senha = array();
< 			$ultima_senha["id"] = $tuplo["maxid"];
< 			$ultima_senha["numero"] = $tuplo["numero_senha"];
< 			$ultima_senha["cliente"] = $tuplo["nome_cliente"];
< 			$ultima_senha["servico_emissao"] = $tuplo["servico_emissao"];
< 			return $ultima_senha;
< 		}
< 		else {
< 			$ultima_senha = array();
< 			$ultima_senha["id"] = 0;
< 			$ultima_senha["numero"] = 0;
< 			return $ultima_senha;
< 		}
< 	}
< 	
< 	
< 	/*
< 		Devolve o numero da ultima senha
< 		emitida num dado servi�o
< 		
< 		0 = Erro da BD ou n�o existem senhas emitidas para aquele servi�o
< 	*/
< 	function UltimaSenhaEmitida($servico)
< 	{
< 		$sql = "SELECT id_log_atendimentos FROM log_atendimentos
< 				WHERE id_empregado IS NULL
< 				AND id_balcao IS NULL
< 				AND id_dispensador IS NULL
< 				AND nome_cliente='Reset Contagem'
< 				AND id_servico = ".$servico."
< 				AND tipo='Emissao'
< 				ORDER BY id_log_atendimentos DESC LIMIT 1;";
< 		
< 		if(!$rs = $this->bd->executarSQL($sql))
< 			return 0;
< 		
< 		if($this->bd->obterNumRegistos($rs) == 0)
< 			$id_reset = 0;
< 		else 
< 			$id_reset = $this->bd->obterValor($rs, "id_log_atendimentos");
< 		
< 		$sql = "SELECT id_log_atendimentos, numero_senha, nome_cliente, servico_emissao ".
< 				"FROM log_atendimentos at ".
< 				"WHERE tipo='Emissao' ".
< 				"AND at.servico_emissao = ". $servico ." ".
< 				"AND id_log_atendimentos > ".$id_reset." ".
< 				"ORDER BY id_log_atendimentos DESC LIMIT 1;";
< 		
< 		if(!$rs = $this->bd->executarSQL($sql))
< 			return 0;
< 				
< 		if( $this->bd->obterNumRegistos($rs) != 0){
< 			$tuplo = $this->bd->obterRegisto($rs);
< 			$ultima_senha = array();
< 			$ultima_senha["id"] = $tuplo["id_log_atendimentos"];
< 			$ultima_senha["numero"] = $tuplo["numero_senha"];
< 			$ultima_senha["cliente"] = $tuplo["nome_cliente"];
< 			$ultima_senha["servico_emissao"] = $tuplo["servico_emissao"];
< 			return $ultima_senha;
< 		}
< 		else {
< 			$ultima_senha = array();
< 			$ultima_senha["id"] = 0;
< 			$ultima_senha["numero"] = 0;
< 			return $ultima_senha;
< 		}
< 	}
< 	
< 	function atendeTerminada($numero_senha, $servico_emissao){
< 		
< 		$sql = "SELECT id_log_atendimentos, nome_cliente, id_servico FROM log_atendimentos
< 				WHERE servico_emissao = ".$servico_emissao."
< 				AND numero_senha = ".$numero_senha."
< 				AND (tipo='Terminado' OR tipo='Desistencia')
< 				ORDER BY id_log_atendimentos DESC LIMIT 1;";
< 		
< 		if(!$rs = $this->bd->executarSQL($sql))
< 			return 0;
< 			
< 		if($this->bd->obterNumRegistos($rs) == 0)
< 			return 0;
< 			
< 		$tuplo = $this->bd->obterRegisto($rs);
< 		$senha = array();
< 		$senha["id"] = $tuplo["id_log_atendimentos"];
< 		$senha["numero"] = $numero_senha;
< 		$senha["cliente"] = $tuplo["nome_cliente"];
< 		$senha["servico_emissao"] = $servico_emissao;
< 		$senha["servico"] = $tuplo["id_servico"];
< 		
< 		$sql = "SELECT id_log_atendimentos FROM log_atendimentos
< 				WHERE id_empregado IS NULL
< 				AND id_balcao IS NULL
< 				AND id_dispensador IS NULL
< 				AND nome_cliente='Reset Contagem'
< 				AND id_servico = ".$tuplo["id_servico"]."
< 				AND tipo='Emissao'
< 				ORDER BY id_log_atendimentos DESC LIMIT 1;";
< 		
< 		if(!$rs = $this->bd->executarSQL($sql))
< 			return 0;
< 		
< 		if($this->bd->obterNumRegistos($rs) == 0)
< 			$id_reset = 0;
< 		else 
< 			$id_reset = $this->bd->obterValor($rs, "id_log_atendimentos");
< 			
< 		if($id_reset > $senha["id"])
< 			return 0;
< 		
< 		$sql = "UPDATE log_atendimentos SET tipo='Suspensa'
< 				WHERE id_log_atendimentos = ".$senha["id"].";";
< 		
< 		if(!$rs = $this->bd->executarSQL($sql))
< 			return 0;
< 		else 
< 			return $senha;
< 		
< 	}
< 	
< 	function ListaDeEspera($servico){
< 		
< 		$sql = "SELECT id_log_atendimentos FROM log_atendimentos
< 				WHERE id_empregado IS NULL
< 				AND id_balcao IS NULL
< 				AND id_dispensador IS NULL
< 				AND nome_cliente='Reset Contagem'
< 				AND id_servico = ".$servico."
< 				AND tipo='Emissao'
< 				ORDER BY id_log_atendimentos DESC LIMIT 1;";
< 		
< 		if(!$rs = $this->bd->executarSQL($sql))
< 			return 0;
< 		
< 		if($this->bd->obterNumRegistos($rs) == 0)
< 			$id_reset = 0;
< 		else 
< 			$id_reset = $this->bd->obterValor($rs, "id_log_atendimentos");
< 		
< 			$sql = "SELECT max(id_log_atendimentos) id, numero_senha, servico_emissao,
< 						SUBSTRING_INDEX(group_concat(tipo order by id_log_atendimentos DESC),',',1) ultimo_tipo, 
< 						SUBSTRING_INDEX(group_concat(nome_cliente order by id_log_atendimentos DESC),',',1) cliente
< 					FROM log_atendimentos
< 					WHERE id_servico = ".$servico."
< 					AND id_log_atendimentos > ".$id_reset."
< 					GROUP BY numero_senha, servico_emissao
< 					HAVING ultimo_tipo = 'Emissao' OR ultimo_tipo = 'Redireccao' OR ultimo_tipo = 'Suspensa'
< 					ORDER BY id ASC;";
< 		
< 		if(!$rs = $this->bd->executarSQL($sql))
< 			return 0;
< 			
< 		$lista = array();
< 		$lista_suspensas = array();
< 		
< 		$tamanho_lista = $this->bd->obterNumRegistos($rs);
< 		
< 		for($i=0 ; $i < $tamanho_lista ; $i++){
< 			$this->bd->moverRegisto($rs, $i);
< 			
< 			$tuplo = $this->bd->obterRegisto($rs);
< 			$senha = array();
< 			$senha["id"] = $tuplo["id"];
< 			$senha["numero"] = $tuplo["numero_senha"];
< 			$senha["cliente"] = $tuplo["cliente"];
< 			$senha["servico_emissao"] = $tuplo["servico_emissao"];
< 			$senha["tipo"] = $tuplo["ultimo_tipo"];
< 			
< 			if($senha["tipo"] == "Suspensa")
< 				array_push($lista_suspensas, $senha);
< 			else
< 				array_push($lista, $senha);
< 		}
< 		
< 		$lista = array_merge($lista, $lista_suspensas);
< 		
< 		return $lista;
< 		
< 	}
< 	
< 	/* 
< 		Verifica se existe alguma chamada feita
< 		pelo "loggado" no sistema no per�odo
< 		de lat�ncia. Devolve true se o per�odo de
< 		lat�ncia foi cumprido.
< 	*/
< 
< 	function verificaLatencia()
< 	{
< 		global $LATENCIA_ATENDIMENTO;
< 		
< 		$sql = "SELECT numero_senha FROM log_atendimentos
< 				WHERE UNIX_TIMESTAMP(data_hora) 
< 				BETWEEN UNIX_TIMESTAMP() - ". $LATENCIA_ATENDIMENTO ." AND UNIX_TIMESTAMP();";
< 
< 		if(!$rs = $this->bd->executarSQL($sql))
< 			return 0;
< 			
< 		if($this->bd->obterNumRegistos($rs) == 0)
< 			return true;
< 		else 
< 			return false;
< 			
< 	}
< 	
< 	function actualizaEcra($id_servico, $id_loja){
< 		
< 		$sucesso_actualizacao="ok";
< 		
< 		$sql = "SELECT valor FROM variaveis WHERE nome='uri_actualizacao_ecras';";
< 		
< 		if(!$rs = $this->bd->executarSQL($sql))
< 			return 0;
< 			
< 		if($this->bd->obterNumRegistos($rs) == 0)
< 			return 0;
< 			
< 		$uri_actualizacao = $this->bd->obterValor($rs,"valor");
< 		
< 		$documento = $this->constroiXML($id_servico, $id_loja);
< 		if($documento == 0)
< 			return 0;
< 		$xml_string = $documento->saveXML();
< 			
< 		$pedido = new HTTP_Request();
< 		$pedido->setMethod(HTTP_REQUEST_METHOD_POST);
< 		$pedido->addHeader("Content-Type", "text/xml; charset=UTF-8");
< 		$pedido->addRawPostData($xml_string);
< 			
< 		$sql = "SELECT e.identificador
< 				FROM ecra e
< 				WHERE e.id_loja = ".$id_loja.";";
< 		
< 		if(!$rs = $this->bd->executarSQL($sql))
< 			return 0;
< 			
< 		for($i = 0 ; $i < $this->bd->obterNumRegistos($rs) ; $i++){
< 			$this->bd->moverRegisto($rs, $i);
< 			
< 			$nome_servico = obterNomeGeral($info_chamada["id_servico"],"id_servico","nome","servicos");
< 			
< 			$url_ecra = "http://". $this->bd->obterValor($rs, "identificador").$uri_actualizacao;
< 			
< 			$pedido->setURL($url_ecra);
< 			$pedido->sendRequest();
< 			
< 			if($pedido->getResponseCode() != 200)
< 				$sucesso_actualizacao = 0;
< 		}
< 		
< 		return $sucesso_actualizacao;
< 	}
< 	
< 	function constroiXML($id_servico, $id_loja){
< 		
< 		$config_teclado = new ConfiguracaoTeclado();
< 		$servicos_prestados = $config_teclado->DevolveTeclas($id_loja);
< 		$num_servicos = count($servicos_prestados);
< 		
< 		$documento = new DOMDocument("1.0", "UTF-8" );
< 		$documento->formatOutput = true;
< 		
< 		$root = $documento->createElement("listaChamadas");
< 		$documento->appendChild($root);
< 		
< 		for($i = 0 ; $i < $num_servicos ; $i++)
< 		{
< 			$ultima_senha = $this->UltimaSenhaChamada($servicos_prestados[$i]["id"]);
< 			
< 			$sql = "SELECT la.data_hora, la.tipo,
< 							s.nome servico, s.limite_clientes, s.id_servico,
< 							e.nome empregado, e.id_empregado,
< 							b.nome balcao, b.id_balcao,
< 							l.nome loja, l.endereco, l.id_loja
< 					FROM log_atendimentos la LEFT JOIN servicos s USING(id_servico)
< 							LEFT JOIN empregados e USING(id_empregado)
< 							LEFT JOIN balcoes b USING(id_balcao, id_loja)
< 							LEFT JOIN lojas l USING(id_loja)
< 					WHERE id_log_atendimentos=".$ultima_senha["id"].";";
< 			
< 			if(!$rs = $this->bd->executarSQL($sql))
< 				return 0;
< 				
< 			$tuplo = $this->bd->obterRegisto($rs);
< 		
< 			$no_chamada = $documento->createElement("chamadaSenha");
< 			$no_chamada->setAttribute("id", $ultima_senha["id"]);
< 			
< 			if($servicos_prestados[$i]["id"] == $id_servico)
< 				$no_chamada->setAttribute("focus", "true");
< 			else 
< 				$no_chamada->setAttribute("focus", "false");
< 
< 			$root->appendChild($no_chamada);
< 			
< 			$no_data_hora = $documento->createElement("dataHora", $tuplo["data_hora"]);
< 			$no_chamada->appendChild($no_data_hora);
< 			
< 			$no_cliente = $documento->createElement("cliente", $ultima_senha["cliente"]);
< 			$no_chamada->appendChild($no_cliente);
< 			
< 			$no_numero = $documento->createElement("numeroSenha", sprintf("%02d",$ultima_senha["numero"]));
< 			$no_chamada->appendChild($no_numero);
< 			
< 			$no_servico_emissao = $documento->createElement("servicoEmissao", $ultima_senha["servico_emissao"]);
< 			$no_chamada->appendChild($no_servico_emissao);
< 			
< 			$no_tipo = $documento->createElement("tipoChamada", $tuplo["tipo"]);
< 			$no_chamada->appendChild($no_tipo);
< 			
< 			$no_servico = $documento->createElement("servico");
< 			$no_servico->setAttribute("id", $tuplo["id_servico"]);
< 			$no_chamada->appendChild($no_servico);
< 			
< 				$no_nome_servico = $documento->createElement("nome", $tuplo["servico"]);
< 				$no_servico->appendChild($no_nome_servico);
< 				
< 				$no_limite_clientes = $documento->createElement("limiteClientes", $tuplo["limite_clientes"]);
< 				$no_servico->appendChild($no_limite_clientes);
< 			
< 			$no_balcao = $documento->createElement("balcao");
< 			$no_balcao->setAttribute("id", $tuplo["id_balcao"]);
< 			$no_chamada->appendChild($no_balcao);
< 			
< 				$no_nome_balcao = $documento->createElement("nome", $tuplo["balcao"]);
< 				$no_balcao->appendChild($no_nome_balcao);
< 			
< 			$no_empregado = $documento->createElement("empregado");
< 			$no_empregado->setAttribute("id", $tuplo["id_empregado"]);
< 			$no_chamada->appendChild($no_empregado);
< 			
< 				$no_nome_empregado = $documento->createElement("nome", $tuplo["empregado"]);
< 				$no_empregado->appendChild($no_nome_empregado);
< 			
< 			$no_loja = $documento->createElement("loja");
< 			$no_loja->setAttribute("id", $tuplo["id_loja"]);
< 			$no_chamada->appendChild($no_loja);
< 			
< 				$no_nome_loja = $documento->createElement("nome", $tuplo["loja"]);
< 				$no_loja->appendChild($no_nome_loja);
< 				
< 				$no_endereco = $documento->createElement("endereco", $tuplo["endereco"]);
< 				$no_loja->appendChild($no_endereco);
< 			
< 			$lista_espera = $this->ListaDeEspera($servicos_prestados[$i]["id"]);	
< 			$no_lista = $documento->createElement("listaEspera");
< 			$no_chamada->appendChild($no_loja);
< 			
< 				$tamanho_lista = count($lista_espera);
< 				for($j=0 ; $j < $tamanho_lista ; $j++){
< 					$no_senha = $documento->createElement("senha");
< 					$no_senha->setAttribute("id", $lista_espera[$j]["id"]);
< 					$no_lista->appendChild($no_senha);
< 					
< 						$no_num_senha = $documento->createElement("numeroSenha", $lista_espera[$i]["numero"]);
< 						$no_senha->appendChild($no_num_senha);
< 						
< 						$no_nome_cliente = $documento->createElement("nome", $lista_espera[$i]["cliente"]);
< 						$no_senha->appendChild($no_nome_cliente);
< 				}
< 		}
< 
< 			
< 		return $documento;
< 	}
< 	
< 	/*
< 		Destrutor da classe
< 		
< 		0 = Erro da BD
< 	*/		
< 	function Fechar()
< 	{
< 		$this->bd->fecharBD();
< 	}
< }
< ?>
---
> <?php 
> 	
> /* Classe de Gest�o de Atendimentos */
> 
> class LogAtendimento extends AcessoBD{
> 	var $bd;
> 	
> 	/*
> 		Construtor da classe
> 		
> 		0 = Erro da BD
> 	*/
> 	function LogAtendimento() 
> 	{
> 		global $NOME_BD, $NOME_SERVIDOR, $USERNAME, $PASSWORD;
> 		$this->bd = new AcessoBD();
> 		return $this->bd->ligarBD($NOME_SERVIDOR, $USERNAME, $PASSWORD, $NOME_BD); // Se falhar retorna 0
> 	}
> 
> 	
> 	/*
> 		Fun��o de inser��o de uma entrada no log
> 		
> 		0 = Erro da BD
> 		true = Sucesso	
> 	*/
> 	function InserirChamada($num_senha, $servico, $tipo, $data_hora, $servico_emissao, $nome_cliente=null)
> 	{		
> 		$sql = "INSERT INTO log_atendimentos "
> 		."(id_empregado, id_balcao, id_servico, data_hora, numero_senha, id_loja, tipo,servico_emissao, nome_cliente) VALUES("
> 									. $_SESSION["sessao_empregado"] . ", "
> 									. $_SESSION["sessao_balcao"] . ", "
> 									. $servico . ", '" 
> 									. $data_hora . "', "
> 									. $num_senha . ","
> 									. $_SESSION["sessao_loja"] .","
> 									."'".$tipo."',"
> 									.$servico_emissao;
> 		
> 		if(is_null($nome_cliente) || $nome_cliente == "")
> 			$sql .= ",null);";
> 		else
> 			$sql .= ",'".$nome_cliente."');";
> 		
> 		if(!$rs = $this->bd->executarSQL($sql)){
> 			return 0;
> 		}
> 		
> 		$sql = "SELECT MAX(id_log_atendimentos) FROM log_atendimentos;";
> 		
> 		if(!$rs = $this->bd->executarSQL($sql)){
> 			return 0;
> 		} else {
> 			return $this->bd->obterValor($rs, 0);
> 		}
> 		
> 	}
> 	
> 	
> 	/*
> 		Devolve o numero da ultima senha
> 		chamada num dado servi�o
> 		
> 		0 = Erro da BD ou n�o existem senhas emitidas para aquele servi�o
> 	*/
> 	function UltimaSenhaChamada($servico)
> 	{
> 		$sql = "SELECT id_log_atendimentos FROM log_atendimentos
> 				WHERE id_empregado IS NULL
> 				AND id_balcao IS NULL
> 				AND id_dispensador IS NULL
> 				AND nome_cliente='Reset Contagem'
> 				AND id_servico = ".$servico."
> 				AND tipo='Emissao'
> 				ORDER BY id_log_atendimentos DESC LIMIT 1;";
> 		
> 		if(!$rs = $this->bd->executarSQL($sql))
> 			return 0;
> 		
> 		if($this->bd->obterNumRegistos($rs) == 0)
> 			$id_reset = 0;
> 		else 
> 			$id_reset = $this->bd->obterValor($rs, "id_log_atendimentos");
> 		
> 		$sql = "SELECT c.maxid, numero_senha, nome_cliente, servico_emissao
> 				FROM	(SELECT MAX(id_log_atendimentos) maxid, numero_senha, nome_cliente, servico_emissao
> 						FROM log_atendimentos
> 						WHERE tipo='Chamada' AND id_servico = ".$servico."
> 						AND id_log_atendimentos > ".$id_reset."
> 						GROUP BY numero_senha) c 
> 					LEFT JOIN
> 						(SELECT MAX(id_log_atendimentos) maxid, numero_senha
> 						FROM log_atendimentos
> 						WHERE tipo='Chamada Anterior'
> 						AND id_servico = ".$servico."
> 						AND id_log_atendimentos > ".$id_reset."
> 						GROUP BY numero_senha) a
> 					USING (numero_senha)
> 				WHERE c.maxid > a.maxid OR a.maxid IS NULL
> 				ORDER BY c.maxid DESC LIMIT 1;";
> 		
> 		if(!$rs = $this->bd->executarSQL($sql))
> 			return 0;
> 				
> 		if( $this->bd->obterNumRegistos($rs) != 0){
> 			$tuplo = $this->bd->obterRegisto($rs);
> 			$ultima_senha = array();
> 			$ultima_senha["id"] = $tuplo["maxid"];
> 			$ultima_senha["numero"] = $tuplo["numero_senha"];
> 			$ultima_senha["cliente"] = $tuplo["nome_cliente"];
> 			$ultima_senha["servico_emissao"] = $tuplo["servico_emissao"];
> 			return $ultima_senha;
> 		}
> 		else {
> 			$ultima_senha = array();
> 			$ultima_senha["id"] = 0;
> 			$ultima_senha["numero"] = 0;
> 			return $ultima_senha;
> 		}
> 	}
> 	
> 	
> 	/*
> 		Devolve o numero da ultima senha
> 		emitida num dado servi�o
> 		
> 		0 = Erro da BD ou n�o existem senhas emitidas para aquele servi�o
> 	*/
> 	function UltimaSenhaEmitida($servico)
> 	{
> 		$sql = "SELECT id_log_atendimentos FROM log_atendimentos
> 				WHERE id_empregado IS NULL
> 				AND id_balcao IS NULL
> 				AND id_dispensador IS NULL
> 				AND nome_cliente='Reset Contagem'
> 				AND id_servico = ".$servico."
> 				AND tipo='Emissao'
> 				ORDER BY id_log_atendimentos DESC LIMIT 1;";
> 		
> 		if(!$rs = $this->bd->executarSQL($sql))
> 			return 0;
> 		
> 		if($this->bd->obterNumRegistos($rs) == 0)
> 			$id_reset = 0;
> 		else 
> 			$id_reset = $this->bd->obterValor($rs, "id_log_atendimentos");
> 		
> 		$sql = "SELECT id_log_atendimentos, numero_senha, nome_cliente, servico_emissao ".
> 				"FROM log_atendimentos at ".
> 				"WHERE tipo='Emissao' ".
> 				"AND at.servico_emissao = ". $servico ." ".
> 				"AND id_log_atendimentos > ".$id_reset." ".
> 				"ORDER BY id_log_atendimentos DESC LIMIT 1;";
> 		
> 		if(!$rs = $this->bd->executarSQL($sql))
> 			return 0;
> 				
> 		if( $this->bd->obterNumRegistos($rs) != 0){
> 			$tuplo = $this->bd->obterRegisto($rs);
> 			$ultima_senha = array();
> 			$ultima_senha["id"] = $tuplo["id_log_atendimentos"];
> 			$ultima_senha["numero"] = $tuplo["numero_senha"];
> 			$ultima_senha["cliente"] = $tuplo["nome_cliente"];
> 			$ultima_senha["servico_emissao"] = $tuplo["servico_emissao"];
> 			return $ultima_senha;
> 		}
> 		else {
> 			$ultima_senha = array();
> 			$ultima_senha["id"] = 0;
> 			$ultima_senha["numero"] = 0;
> 			return $ultima_senha;
> 		}
> 	}
> 	
> 	function atendeTerminada($numero_senha, $servico_emissao){
> 		
> 		$sql = "SELECT id_log_atendimentos, nome_cliente, id_servico FROM log_atendimentos
> 				WHERE servico_emissao = ".$servico_emissao."
> 				AND numero_senha = ".$numero_senha."
> 				AND (tipo='Terminado' OR tipo='Desistencia')
> 				ORDER BY id_log_atendimentos DESC LIMIT 1;";
> 		
> 		if(!$rs = $this->bd->executarSQL($sql))
> 			return 0;
> 			
> 		if($this->bd->obterNumRegistos($rs) == 0)
> 			return 0;
> 			
> 		$tuplo = $this->bd->obterRegisto($rs);
> 		$senha = array();
> 		$senha["id"] = $tuplo["id_log_atendimentos"];
> 		$senha["numero"] = $numero_senha;
> 		$senha["cliente"] = $tuplo["nome_cliente"];
> 		$senha["servico_emissao"] = $servico_emissao;
> 		$senha["servico"] = $tuplo["id_servico"];
> 		
> 		$sql = "SELECT id_log_atendimentos FROM log_atendimentos
> 				WHERE id_empregado IS NULL
> 				AND id_balcao IS NULL
> 				AND id_dispensador IS NULL
> 				AND nome_cliente='Reset Contagem'
> 				AND id_servico = ".$tuplo["id_servico"]."
> 				AND tipo='Emissao'
> 				ORDER BY id_log_atendimentos DESC LIMIT 1;";
> 		
> 		if(!$rs = $this->bd->executarSQL($sql))
> 			return 0;
> 		
> 		if($this->bd->obterNumRegistos($rs) == 0)
> 			$id_reset = 0;
> 		else 
> 			$id_reset = $this->bd->obterValor($rs, "id_log_atendimentos");
> 			
> 		if($id_reset > $senha["id"])
> 			return 0;
> 		
> 		$sql = "UPDATE log_atendimentos SET tipo='Suspensa'
> 				WHERE id_log_atendimentos = ".$senha["id"].";";
> 		
> 		if(!$rs = $this->bd->executarSQL($sql))
> 			return 0;
> 		else 
> 			return $senha;
> 		
> 	}
> 	
> 	function ListaDeEspera($servico){
> 		
> 		$sql = "SELECT id_log_atendimentos FROM log_atendimentos
> 				WHERE id_empregado IS NULL
> 				AND id_balcao IS NULL
> 				AND id_dispensador IS NULL
> 				AND nome_cliente='Reset Contagem'
> 				AND id_servico = ".$servico."
> 				AND tipo='Emissao'
> 				ORDER BY id_log_atendimentos DESC LIMIT 1;";
> 		
> 		if(!$rs = $this->bd->executarSQL($sql))
> 			return 0;
> 		
> 		if($this->bd->obterNumRegistos($rs) == 0)
> 			$id_reset = 0;
> 		else 
> 			$id_reset = $this->bd->obterValor($rs, "id_log_atendimentos");
> 		
> 			$sql = "SELECT max(id_log_atendimentos) id, numero_senha, servico_emissao,
> 						SUBSTRING_INDEX(group_concat(tipo order by id_log_atendimentos DESC),',',1) ultimo_tipo, 
> 						SUBSTRING_INDEX(group_concat(nome_cliente order by id_log_atendimentos DESC),',',1) cliente
> 					FROM log_atendimentos
> 					WHERE id_servico = ".$servico."
> 					AND id_log_atendimentos > ".$id_reset."
> 					GROUP BY numero_senha, servico_emissao
> 					HAVING ultimo_tipo = 'Emissao' OR ultimo_tipo = 'Redireccao' OR ultimo_tipo = 'Suspensa'
> 					ORDER BY id ASC;";
> 		
> 		if(!$rs = $this->bd->executarSQL($sql))
> 			return 0;
> 			
> 		$lista = array();
> 		$lista_suspensas = array();
> 		
> 		$tamanho_lista = $this->bd->obterNumRegistos($rs);
> 		
> 		for($i=0 ; $i < $tamanho_lista ; $i++){
> 			$this->bd->moverRegisto($rs, $i);
> 			
> 			$tuplo = $this->bd->obterRegisto($rs);
> 			$senha = array();
> 			$senha["id"] = $tuplo["id"];
> 			$senha["numero"] = $tuplo["numero_senha"];
> 			$senha["cliente"] = $tuplo["cliente"];
> 			$senha["servico_emissao"] = $tuplo["servico_emissao"];
> 			$senha["tipo"] = $tuplo["ultimo_tipo"];
> 			
> 			if($senha["tipo"] == "Suspensa")
> 				array_push($lista_suspensas, $senha);
> 			else
> 				array_push($lista, $senha);
> 		}
> 		
> 		$lista = array_merge($lista, $lista_suspensas);
> 		
> 		return $lista;
> 		
> 	}
> 	
> 	/* 
> 		Verifica se existe alguma chamada feita
> 		pelo "loggado" no sistema no per�odo
> 		de lat�ncia. Devolve true se o per�odo de
> 		lat�ncia foi cumprido.
> 	*/
> 
> 	function verificaLatencia()
> 	{
> 		global $LATENCIA_ATENDIMENTO;
> 		
> 		$sql = "SELECT numero_senha FROM log_atendimentos
> 				WHERE UNIX_TIMESTAMP(data_hora) 
> 				BETWEEN UNIX_TIMESTAMP() - ". $LATENCIA_ATENDIMENTO ." AND UNIX_TIMESTAMP();";
> 
> 		if(!$rs = $this->bd->executarSQL($sql))
> 			return 0;
> 			
> 		if($this->bd->obterNumRegistos($rs) == 0)
> 			return true;
> 		else 
> 			return false;
> 			
> 	}
> 	
> 	function actualizaEcra($id_servico, $id_loja){
> 		
> 		$sucesso_actualizacao="ok";
> 		
> 		$sql = "SELECT valor FROM variaveis WHERE nome='uri_actualizacao_ecras';";
> 		
> 		if(!$rs = $this->bd->executarSQL($sql))
> 			return 0;
> 			
> 		if($this->bd->obterNumRegistos($rs) == 0)
> 			return 0;
> 			
> 		$uri_actualizacao = $this->bd->obterValor($rs,"valor");
> 		
> 		$documento = $this->constroiXML($id_servico, $id_loja);
> 		if($documento == 0)
> 			return 0;
> 		$xml_string = $documento->saveXML();
> 			
> 		$pedido = new HTTP_Request();
> 		$pedido->setMethod(HTTP_REQUEST_METHOD_POST);
> 		$pedido->addHeader("Content-Type", "text/xml; charset=UTF-8");
> 		$pedido->setBody($xml_string);
> 			
> 		$sql = "SELECT e.identificador
> 				FROM ecra e
> 				WHERE e.id_loja = ".$id_loja.";";
> 		
> 		if(!$rs = $this->bd->executarSQL($sql))
> 			return 0;
> 			
> 		for($i = 0 ; $i < $this->bd->obterNumRegistos($rs) ; $i++){
> 			$this->bd->moverRegisto($rs, $i);
> 			
> 			$nome_servico = obterNomeGeral($info_chamada["id_servico"],"id_servico","nome","servicos");
> 			
> 			$url_ecra = "http://". $this->bd->obterValor($rs, "identificador").$uri_actualizacao;
> 			
> 			$pedido->setURL($url_ecra);
> 			$pedido->sendRequest();
> 			
> 			if($pedido->getResponseCode() != 200)
> 				$sucesso_actualizacao = 0;
> 		}
> 		
> 		return $sucesso_actualizacao;
> 	}
> 	
> 	function constroiXML($id_servico, $id_loja){
> 		
> 		$config_teclado = new ConfiguracaoTeclado();
> 		$servicos_prestados = $config_teclado->DevolveTeclas($id_loja);
> 		$num_servicos = count($servicos_prestados);
> 		
> 		$documento = new DOMDocument("1.0", "UTF-8" );
> 		$documento->formatOutput = true;
> 		
> 		$root = $documento->createElement("listaChamadas");
> 		$documento->appendChild($root);
> 		
> 		for($i = 0 ; $i < $num_servicos ; $i++)
> 		{
> 			$ultima_senha = $this->UltimaSenhaChamada($servicos_prestados[$i]["id"]);
> 			
> 			$sql = "SELECT la.data_hora, la.tipo,
> 							s.nome servico, s.limite_clientes, s.id_servico,
> 							e.nome empregado, e.id_empregado,
> 							b.nome balcao, b.id_balcao,
> 							l.nome loja, l.endereco, l.id_loja
> 					FROM log_atendimentos la LEFT JOIN servicos s USING(id_servico)
> 							LEFT JOIN empregados e USING(id_empregado)
> 							LEFT JOIN balcoes b USING(id_balcao, id_loja)
> 							LEFT JOIN lojas l USING(id_loja)
> 					WHERE id_log_atendimentos=".$ultima_senha["id"].";";
> 			
> 			if(!$rs = $this->bd->executarSQL($sql))
> 				return 0;
> 				
> 			$tuplo = $this->bd->obterRegisto($rs);
> 		
> 			$no_chamada = $documento->createElement("chamadaSenha");
> 			$no_chamada->setAttribute("id", $ultima_senha["id"]);
> 			
> 			if($servicos_prestados[$i]["id"] == $id_servico)
> 				$no_chamada->setAttribute("focus", "true");
> 			else 
> 				$no_chamada->setAttribute("focus", "false");
> 
> 			$root->appendChild($no_chamada);
> 			
> 			$no_data_hora = $documento->createElement("dataHora", $tuplo["data_hora"]);
> 			$no_chamada->appendChild($no_data_hora);
> 			
> 			$no_cliente = $documento->createElement("cliente", $ultima_senha["cliente"]);
> 			$no_chamada->appendChild($no_cliente);
> 			
> 			$no_numero = $documento->createElement("numeroSenha", sprintf("%02d",$ultima_senha["numero"]));
> 			$no_chamada->appendChild($no_numero);
> 			
> 			$no_servico_emissao = $documento->createElement("servicoEmissao", $ultima_senha["servico_emissao"]);
> 			$no_chamada->appendChild($no_servico_emissao);
> 			
> 			$no_tipo = $documento->createElement("tipoChamada", $tuplo["tipo"]);
> 			$no_chamada->appendChild($no_tipo);
> 			
> 			$no_servico = $documento->createElement("servico");
> 			$no_servico->setAttribute("id", $tuplo["id_servico"]);
> 			$no_chamada->appendChild($no_servico);
> 			
> 				$no_nome_servico = $documento->createElement("nome", $tuplo["servico"]);
> 				$no_servico->appendChild($no_nome_servico);
> 				
> 				$no_limite_clientes = $documento->createElement("limiteClientes", $tuplo["limite_clientes"]);
> 				$no_servico->appendChild($no_limite_clientes);
> 			
> 			$no_balcao = $documento->createElement("balcao");
> 			$no_balcao->setAttribute("id", $tuplo["id_balcao"]);
> 			$no_chamada->appendChild($no_balcao);
> 			
> 				$no_nome_balcao = $documento->createElement("nome", $tuplo["balcao"]);
> 				$no_balcao->appendChild($no_nome_balcao);
> 			
> 			$no_empregado = $documento->createElement("empregado");
> 			$no_empregado->setAttribute("id", $tuplo["id_empregado"]);
> 			$no_chamada->appendChild($no_empregado);
> 			
> 				$no_nome_empregado = $documento->createElement("nome", $tuplo["empregado"]);
> 				$no_empregado->appendChild($no_nome_empregado);
> 			
> 			$no_loja = $documento->createElement("loja");
> 			$no_loja->setAttribute("id", $tuplo["id_loja"]);
> 			$no_chamada->appendChild($no_loja);
> 			
> 				$no_nome_loja = $documento->createElement("nome", $tuplo["loja"]);
> 				$no_loja->appendChild($no_nome_loja);
> 				
> 				$no_endereco = $documento->createElement("endereco", $tuplo["endereco"]);
> 				$no_loja->appendChild($no_endereco);
> 			
> 			$lista_espera = $this->ListaDeEspera($servicos_prestados[$i]["id"]);	
> 			$no_lista = $documento->createElement("listaEspera");
> 			$no_chamada->appendChild($no_loja);
> 			
> 				$tamanho_lista = count($lista_espera);
> 				for($j=0 ; $j < $tamanho_lista ; $j++){
> 					$no_senha = $documento->createElement("senha");
> 					$no_senha->setAttribute("id", $lista_espera[$j]["id"]);
> 					$no_lista->appendChild($no_senha);
> 					
> 						$no_num_senha = $documento->createElement("numeroSenha", $lista_espera[$i]["numero"]);
> 						$no_senha->appendChild($no_num_senha);
> 						
> 						$no_nome_cliente = $documento->createElement("nome", $lista_espera[$i]["cliente"]);
> 						$no_senha->appendChild($no_nome_cliente);
> 				}
> 		}
> 
> 			
> 		return $documento;
> 	}
> 	
> 	/*
> 		Destrutor da classe
> 		
> 		0 = Erro da BD
> 	*/		
> 	function Fechar()
> 	{
> 		$this->bd->fecharBD();
> 	}
> }
> ?>
\ No newline at end of file
