<?PHP
/*
 * DIREITOS AUTORAIS RESERVADOS (C) 2007 UFRJ
 * 
 * ESTE PROGRAMA É SOFTWARE LIVRE; VOCÊ PODE REDISTRIBUÍ-LO E/OU MODIFICÁ-LO SOB OS
 * TERMOS DA LICENÇA PÚBLICA GERAL GNU CONFORME PUBLICADA PELA FREE SOFTWARE FOUNDATION;
 * TANTO A VERSÃO 2 DA LICENÇA, COMO (A SEU CRITÉRIO) QUALQUER VERSÃO POSTERIOR.

 * ESTE PROGRAMA É DISTRIBUÍDO NA EXPECTATIVA DE QUE SEJA ÚTIL, PORÉM, SEM NENHUMA GARANTIA;
 * NEM MESMO A GARANTIA IMPLÍCITA DE COMERCIABILIDADE OU ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA.
 * CONSULTE A LICENÇA PÚBLICA GERAL DO GNU PARA MAIS DETALHES.
 * 
 * VOCÊ DEVE TER RECEBIDO UMA CÓPIA DA LICENÇA PÚBLICA GERAL DO GNU JUNTO COM ESTE PROGRAMA; 
 * SE NÃO, ACESSE <<HTTP://WWW.GNU.ORG/LICENSES/LICENSES.PT-BR.HTML>>
 */

<?


/*
   Script destinada a verificar o numero de registros de pessoas
	possivelmente duplicadas no cabecalho comum
*/

include "includes/begin.php";

// Cria primeira visao auxiliar 

$sql  = "CREATE VIEW  usuarios (id, nome, nomemae, nasc, sistema)
         AS SELECT    id, nome, nome_mae, data_nascimento, idref_sistema
         FROM         cabcomum.pessoa";

$result = pg_query($dbh, $sql);
if (!$result)
{
   echo pg_last_error();
	pg_close($dbh);
	die();
}

// Cria tabela auxiliar  com dados de rg e cpf

$sql = "CREATE TABLE tabdup
        (
		    id      bigint PRIMARY KEY,
		    nome    varchar(120),
          nomemae text,
		    rg      varchar(20),
		    cpf     varchar(20),
			 cnh     varchar(20),
			 titulo  varchar(20),
			 nasc    date,
			 sistema smallint
		  )";

$result = pg_query($sql);
if (!$result)
{
    echo pg_last_error();
	 $sql = "DROP VIEW usuarios";
	 $result=pg_query($dbh, $sql);
    pg_close($dbh);
    die();
}

// Tem que montar a tabela auxiliar

$sql1 = "SELECT *  from usuarios";
$result1=pg_query($dbh, $sql1);
if (!$result1)
{
    echo pg_last_error();
    $sql = "DROP VIEW usuarios";
    $result=pg_query($dbh, $sql);
    pg_close($dbh);
    die();
}

$entrou=0;
$caracteres = array("/","-","."," ","(",")");

while ($row1=pg_fetch_array($result1))
{
   $entrou=$entrou+1;

   $id     = $row1['id'];
	$nome   = $row1['nome'];
	$nomemae= $row1['nomemae'];
	$nasc   = $row1['nasc'];
	$sistema= $row1['sistema'];


// identifica se usuario tem rg

	$sql = "SELECT numero 
	        FROM   usuarios, cabcomum.pessoa_documento
			  WHERE  idpessoa =  $id     and
			         idtipo_documento = 1";
	$result=pg_query($dbh, $sql);
	if (!$result)
   {
      echo pg_last_error();
      $sql = "DROP VIEW usuarios";
	   $result=pg_query($dbh, $sql);
		$sql = "DROP TABLE tabdup";
		$result=pg_query($dbh, $sql);
	   pg_close($dbh);
	   die();
	}

   $row=pg_fetch_array($result);
	$rg=   $row['numero'];
   if (strlen($rg) != 0)
	{
	   $pos=0;
	   $limpo="";
	   while ($pos != strlen($rg))
	   {
	      if (!in_array($rg[$pos], $caracteres))
		      $limpo=$limpo . $rg[$pos];
			$pos ++;
	   }
	   $rg=$limpo;
	}
   else
	   $rg="";

// identifica se usuario tem cpf

	$sql = "SELECT numero
	        FROM   usuarios, cabcomum.pessoa_documento
	        WHERE  idpessoa         = $id and
	               idtipo_documento = 5";
	
	$result=pg_query($dbh, $sql);
   if (!$result)
   {
       echo pg_last_error();
       $sql = "DROP VIEW usuarios";
       $result=pg_query($dbh, $sql);
	    $sql = "DROP TABLE tabdup";
	    $result=pg_query($dbh, $sql);
	    pg_close($dbh);
	    die();
	}
	
	$row=pg_fetch_array($result);
	$cpf=   $row['numero'];
   if (strlen($cpf) != 0)
   {
      $pos=0;
		$limpo="";
		while ($pos != strlen($cpf))
		{
		   if (!in_array($cpf[$pos], $caracteres))
			   $limpo=$limpo.$cpf[$pos];
			$pos++;
		}
		$cpf=$limpo;
	}
	else
	   $cpf="";


 // identifica se usuario tem cnh
 
    $sql = "SELECT numero
            FROM   usuarios, cabcomum.pessoa_documento
	         WHERE  idpessoa         = $id and
	                idtipo_documento = 8";
	 
	 $result=pg_query($dbh, $sql);
	 if (!$result)
    {
	    echo pg_last_error();
	    $sql = "DROP VIEW usuarios";
	    $result=pg_query($dbh, $sql);
	    $sql = "DROP TABLE tabdup";
	    $result=pg_query($dbh, $sql);
	    pg_close($dbh);
	    die();
	 }
	 
	 $row=pg_fetch_array($result);
	 $chn=   $row['numero'];
	 if (strlen($cnh) != 0)
	 {
	    $pos=0;
	    $limpo="";
	    while ($pos != strlen($cnh))
	    {
	       if (!in_array($cnh[$pos], $caracteres))
             $limpo=$limpo.$cnh[$pos];
          $pos++;
       }
       $cnh=$limpo;
    }
    else
       $cnh="";

// identifica se usuario tem titulo eleitor

     $sql = "SELECT numero
             FROM   usuarios, cabcomum.pessoa_documento
             WHERE  idpessoa         = $id and
                    idtipo_documento = 10";

     $result=pg_query($dbh, $sql);
	  if (!$result)
     {
	     echo pg_last_error();
	     $sql = "DROP VIEW usuarios";
	     $result=pg_query($dbh, $sql);
	     $sql = "DROP TABLE tabdup";
	     $result=pg_query($dbh, $sql);
	     pg_close($dbh);
	     die();
	  }

     $row=pg_fetch_array($result);
     $titulo=   $row['numero'];
     if (strlen($titulo) != 0)
     {
        $pos=0;
        $limpo="";
        while ($pos != strlen($titulo))
        {
           if (!in_array($titulo[$pos], $caracteres))
              $limpo=$limpo.$titulo[$pos];
           $pos++;
        }
        $titulo=$limpo;
     }
     else
        $titulo="";

// grava na tabela auxiliar

   if (strlen($nasc) == 0) 
	   $nascimento = "NULL";
	else 
	   $nascimento = "to_date('$nasc', 'YYYY-MM-DD')";

   $sql = "INSERT INTO tabdup
	        VALUES ('$id', '$nome', '$nomemae', '$rg', '$cpf','$cnh', '$titulo', $nascimento, $sistema)";
	$result=pg_query($dbh, $sql);

	if (!$result)
   {
	    echo pg_last_error();
	    $sql = "DROP VIEW usuarios";
	    $result=pg_query($dbh, $sql);
	    $sql = "DROP TABLE tabdup";
	    $result=pg_query($dbh, $sql);
	    pg_close($dbh);
	    die();
	}

}

// Cria segunda visao  auxiliar
			  
$sql = "CREATE VIEW  dup (id, nome, nomemae, rg, cpf, cnh, titulo, nasc, sistema) 
        AS SELECT    id, nome, nomemae, rg, cpf, cnh, titulo, nasc, sistema 
		  FROM         tabdup";

$result=pg_query($dbh, $sql);
if (!$result)
{
   echo pg_last_error();
   $sql = "DROP VIEW usuarios";
   $result=pg_query($dbh, $sql);
   $sql = "DROP TABLE tabdup";
   $result=pg_query($dbh, $sql);
   pg_close($dbh);
   die();
}


// Cria uma tabela para estudo das  possibilidades de duplicidade

$sql = "CREATE TABLE gerenciadup
        (
         id      bigint PRIMARY KEY,
         nome    varchar(120),
         nomemae text,
         rg      varchar(20),
         cpf     varchar(20),
         cnh     varchar(20),
	      titulo  varchar(20),
	      nasc    date,
			sistema smallint
	     )";

$result=pg_query($dbh, $sql);
if (!$result)
{
   echo pg_last_error();
   $sql = "DROP VIEW usuarios";
   $result=pg_query($dbh, $sql);
   $sql = "DROP TABLE tabdup";
   $result=pg_query($dbh, $sql);
   $sql = "DROP VIEW dup";
	$result=pg_query($dbh, $sql);
	$sql = "DROP TABLE gerenciadup";
	$result=pg_query($dbh, $sql);
   pg_close($dbh);
   die();
}


// Insere os dados de tuplas co possiiveis duplicidades

$sql = "INSERT INTO gerenciadup 
        ( 
         SELECT DISTINCT tabdup.id,tabdup.nome,tabdup.nomemae,tabdup.rg,tabdup.cpf,tabdup.cnh,tabdup.titulo,tabdup.nasc,
			                tabdup.sistema
         FROM   tabdup, dup
         WHERE  (tabdup.rg=dup.rg and tabdup.rg <> '' and tabdup.id <> dup.id)
		   UNION
		   SELECT DISTINCT tabdup.id,tabdup.nome,tabdup.nomemae,tabdup.rg,tabdup.cpf,tabdup.cnh,tabdup.titulo,tabdup.nasc,
			                tabdup.sistema
		          FROM   tabdup, dup
		          WHERE  (tabdup.cpf=dup.cpf and tabdup.cpf <> '' and tabdup.id <> dup.id)
         UNION
	      SELECT DISTINCT tabdup.id,tabdup.nome,tabdup.nomemae,tabdup.rg,tabdup.cpf,tabdup.cnh,tabdup.titulo,tabdup.nasc,
			                tabdup.sistema
	             FROM   tabdup, dup
	             WHERE  (tabdup.cnh=dup.cnh and tabdup.cnh <> '' and tabdup.id <> dup.id)
		   UNION
		   SELECT DISTINCT tabdup.id,tabdup.nome,tabdup.nomemae,tabdup.rg,tabdup.cpf,tabdup.cnh,tabdup.titulo,tabdup.nasc,
			                tabdup.sistema
		          FROM   tabdup, dup
		          WHERE  (tabdup.titulo=dup.titulo and tabdup.titulo <> '' and tabdup.id <> dup.id)
		   UNION
		   SELECT DISTINCT tabdup.id,tabdup.nome,tabdup.nomemae,tabdup.rg,tabdup.cpf,tabdup.cnh,tabdup.titulo,tabdup.nasc,
			                tabdup.sistema
		   	    FROM   tabdup, dup
			       WHERE  (tabdup.nome=dup.nome and tabdup.nasc = dup.nasc and tabdup.id <> dup.id)
		   UNION
		   SELECT DISTINCT tabdup.id,tabdup.nome,tabdup.nomemae,tabdup.rg,tabdup.cpf,tabdup.cnh,tabdup.titulo,tabdup.nasc,
			                tabdup.sistema
		          FROM   tabdup, dup
		          WHERE  (tabdup.nome=dup.nome and tabdup.nomemae = dup.nomemae and tabdup.id <> dup.id)
		   UNION 
		   SELECT DISTINCT tabdup.id,tabdup.nome,tabdup.nomemae,tabdup.rg,tabdup.cpf,tabdup.cnh,tabdup.titulo,tabdup.nasc,
			                tabdup.sistema
		          FROM   tabdup, dup
		          WHERE  (tabdup.nome=dup.nome and tabdup.id <> dup.id)
		  )";

$result=pg_query($dbh, $sql);
if (!$result)
{
   echo pg_last_error();
   $sql = "DROP VIEW usuarios";
   $result=pg_query($dbh, $sql);
   $sql = "DROP TABLE tabdup";
   $result=pg_query($dbh, $sql);
   $sql = "DROP VIEW dup";
   $result=pg_query($dbh, $sql);
   $sql = "DROP TABLE gerenciadup";
   $result=pg_query($dbh, $sql);
   pg_close($dbh);
   die();
}

// Deleta arquivos e visoes auxiliares utilizadas

$sql = "DROP VIEW dup";
$result=pg_query($dbh, $sql);
if (!$result)
   die("Erro deletando dup: ".$pg_last_error());
$sql = "DROP VIEW usuarios";
$result=pg_query($dbh, $sql);
if (!$result)
   die("Erro deletando usuarios: ".$pg_last_error());
$sql = "DROP TABLE tabdup";
$result=pg_query($dbh, $sql);
if (!$result)
   die("Erro deletando dup: ".$pg_last_error());

// Fecha o banco

pg_close($dbh);

// O arquivo para estudos eh gerenciadup .... continuar daqui ...

?>

