<?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>>
 */

<?

require_once '../common/begin.php';

// Pega parametros da URL
$idpessoa_cabcomum = isset($_GET['idpessoa'])
						?$_GET['idpessoa']
						:$_GET['id'];

function le_banco_comum($idpessoa)/*{{{*/
{ 
	$pessoa = Doctrine_Query::create()
		->from('CabcomumPessoa p')
		->leftJoin('p.enderecos end INDEXBY end.idtipo_endereco')
		->leftJoin('p.documentos cpf with cpf.idtipo_documento='.strval(ID_DOC_CPF).' INDEXBY cpf.idtipo_documento')
		->leftJoin('p.documentos cns with cns.idtipo_documento='.strval(ID_DOC_CNS).' INDEXBY cns.idtipo_documento')
		->leftJoin('p.documentos cnh with cnh.idtipo_documento='.strval(ID_DOC_CNH).' INDEXBY cnh.idtipo_documento')
		->leftJoin('p.documentos certidao with certidao.idtipo_documento='.strval(ID_DOC_CERTIDAO).' INDEXBY certidao.idtipo_documento')
		->leftJoin('p.documentos pis with pis.idtipo_documento='.strval(ID_DOC_PIS).' INDEXBY pis.idtipo_documento')
		->leftJoin('p.documentos nis with nis.idtipo_documento='.strval(ID_DOC_NIS).' INDEXBY nis.idtipo_documento')
		->leftJoin('p.documentos titeleitor with titeleitor.idtipo_documento='.strval(ID_DOC_TITELEITOR).' INDEXBY titeleitor.idtipo_documento')
		->leftJoin('p.documentos ctps with ctps.idtipo_documento='.strval(ID_DOC_CTPS).' INDEXBY ctps.idtipo_documento')
		->leftJoin('p.documentos rg with rg.idtipo_documento='.strval(ID_DOC_RG).' INDEXBY rg.idtipo_documento')
		->where("p.id = ?",$idpessoa)
		->fetchOne();

	$campos = array();

	if(!$pessoa)
		return $campos;

	if($pessoa->idref_sistema == ID_SISTEMA_SAUDE)
		$campos['idpessoa_saude'] = $pessoa->idpessoa_sistema;

	$campos['id'] = $pessoa->id;
	$campos['idpessoa_cabcomum'] = $pessoa->id;
	$campos['nome'] = $pessoa->nome;
	$campos['nome_mae'] = $pessoa->nome_mae;
	$campos['sem_nome_mae'] = empty($pessoa->nome_mae);

	$campos['idsexo'] = $pessoa->idsexo;

	$campos['idraca'] = $pessoa->idraca;
	$campos['idescolaridade'] = $pessoa->idescolaridade;

	$campos['data_nascimento_ignorada'] = empty($pessoa->data_nascimento);
	if($pessoa->data_nascimento)
		$campos['data_nascimento'] = output_date($pessoa->data_nascimento);

	$campos['idmunicipio_nascimento'] = substr($pessoa->idmunicipio_nascimento,0,6);
	$campos['idestado_nascimento'] = $pessoa->idestado_nascimento;
	$campos['idpais_nascimento'] = $pessoa->idpais_nascimento;
	switch($pessoa->idnacionalidade)
	{
	case ID_NACIONALIDADE_BRASILEIRA: 
		$campos['nacionalidade'] = 1;
		break;
	case ID_NACIONALIDADE_NATURALIZADO:
		$campos['nacionalidade'] = 2;
		break;
	case ID_NACIONALIDADE_ESTRANGEIRA:
		$campos['nacionalidade'] = 0;
		break;
	default:
	}

	// DOCUMENTOS (generico)
	$numdoc = 0;
	foreach(array(ID_DOC_NIS=>'nis',
				  ID_DOC_CPF=>'cpf',
				  ID_DOC_CTPS=>'ctps',
				  ID_DOC_TITELEITOR=>'titulo_eleitor',
				  ID_DOC_PIS=>'pis',
				  ID_DOC_CNH=>'cnh',
				  ID_DOC_CNS=>'cns') as $k => $doc)
	{
		$campos["tem_$doc"] = !empty($pessoa->documentos[$k]);

		if($doc != 'cns')
			$numdoc += empty($pessoa->documentos[$k]) ? 0 : 1;

		if(!empty($pessoa->documentos[$k]))
		{
			$campos[$doc] = $pessoa->documentos[$k]->numero;
			$campos["{$doc}_digitalizado_frente"] = !empty($pessoa->documentos[$k]->img_documento_frente);
			$campos["{$doc}_digitalizado_verso"] = !empty($pessoa->documentos[$k]->img_documento_verso);
		}
		else
		{
			$campos["{$doc}_digitalizado_frente"] = false;
			$campos["{$doc}_digitalizado_verso"] = false;
		}
	}

	// RG
	if(!empty($pessoa->documentos[ID_DOC_RG]))
	{
		$campos['tem_rg'] = true;
		$numdoc++;

		$rg = $pessoa->documentos[ID_DOC_RG];
		$campos['rg'] = $rg->numero;
		$campos['rg_data_emissao_ignorada'] = !$rg->data_emissao;
		$campos['rg_data_emissao'] = output_date($rg->data_emissao);
		$campos['rg_idestado_emissor'] = $rg->idestado;
		$campos['rg_idorgao_emissor'] = $rg->idorgao;

		$campos["rg_digitalizado_frente"] = !empty($rg->img_documento_frente);
		$campos["rg_digitalizado_verso"] = !empty($rg->img_documento_verso);
	}
	else
	{
		$campos['tem_rg'] = false;
		$campos["rg_digitalizado_frente"] = false;
		$campos["rg_digitalizado_verso"] = false;
	}
	
	// Certidão Civil
	if(!empty($pessoa->documentos[ID_DOC_CERTIDAO]))
	{
		$campos['tem_certidao'] = true;
		$numdoc++;

		$cert = $pessoa->documentos[ID_DOC_CERTIDAO];
		$campos['idtipo_certidao'] = $cert->idtipo_certidao;
		$campos['certidao_data_emissao_ignorada'] = !$cert->data_emissao;
		$campos['certidao_data_emissao'] = output_date($cert->data_emissao);
		$campos['certidao_folha'] = $cert->folha;
		$campos['certidao_termo'] = $cert->termo;
		$campos['certidao_livro'] = $cert->livro;
		$campos['certidao_cartorio'] = $cert->cartorio;
		$campos['certidao_matricula'] = $cert->matricula_certidao;

		$campos["certidao_digitalizado_frente"] = !empty($cert->img_documento_frente);
		$campos["certidao_digitalizado_verso"] = !empty($cert->img_documento_verso);
	}
	else
	{
		$campos['tem_certidao'] = false;
		$campos['certidao_digitalizado_frente'] = false;
		$campos['certidao_digitalizado_verso'] = false;
	}

	// Carteira de trabalho
	if(!empty($pessoa->documentos[ID_DOC_CTPS]))
	{
		$ctps = $pessoa->documentos[ID_DOC_CTPS];
		$campos['ctps_data_emissao_ignorada'] = !$ctps->data_emissao;
		$campos['ctps_data_emissao'] = output_date($ctps->data_emissao);

		$campos['ctps_serie'] = $ctps->serie;
		$campos['ctps_idestado'] = $ctps->idestado;
	}

	// Título de eleitor
	if(!empty($pessoa->documentos[ID_DOC_TITELEITOR]))
	{
		$tit = $pessoa->documentos[ID_DOC_TITELEITOR];
		$campos['titulo_eleitor_zona'] = $tit->zona;
		$campos['titulo_eleitor_secao'] = $tit->secao;
	}

	$campos['sem_documentos'] = $numdoc == 0 ? 1 : 0;

	// Endereço residencial
	if(!empty($pessoa->enderecos[TipoEndereco::RESIDENCIAL]))
	{
		$endres = $pessoa->enderecos[TipoEndereco::RESIDENCIAL];

		$campos['logradouro_geoiguacu'] = $endres->geoiguacu;
		$campos['idtipo_logradouro'] = $endres->idtipo_logradouro;
		$campos['logradouro_nome'] = $endres->logradouro;
		$campos['logradouro_numero'] = $endres->numero;
		$campos['logradouro_complemento'] = $endres->complemento;
		$campos['logradouro_bairro'] = $endres->bairro;
		$campos['logradouro_idcidade'] = substr($endres->idmunicipio,0,6);
		$campos['logradouro_idestado'] = $endres->idestado;
		$campos['logradouro_cep'] = output_cep($endres->cep);

		$campos['logradouro_nao_cadastrado']
			= Doctrine::getTable('Geoiguacu')->find($endres->geoiguacu)
					? false : true;

		if($campos['logradouro_nao_cadastrado'])
		{
			if($endres->justificativa_sem_geoiguacu)
			{
				$campos['logradouro_nao_cad_justificativa'] = 1;
				$campos['logradouro_nao_cad_outra_justificativa'] 
					= $endres->justificativa_sem_geoiguacu;
			}
			else
				$campos['logradouro_nao_cad_justificativa'] = 0;
		}

		$campos['logradouro_referencia'] = $endres->referencia;
	}
	// não tem endereço residencial
	else 
	{
		$endres = NULL;
		if(isset($pessoa->enderecos[4]) || isset($pessoa->enderecos[99]))
			$campos['idtipo_endereco_variavel'] = 99;
		else if(!empty($pessoa->enderecos[5]))
			$campos['idtipo_endereco_variavel'] = 2;
		else if(!empty($pessoa->enderecos[6]))
			$campos['idtipo_endereco_variavel'] = 3;
		else if(!empty($pessoa->enderecos[7]))
			$campos['idtipo_endereco_variavel'] = 4;
		else
		{
			$campos['logradouro_nao_cad_justificativa'] = 2;
			$campos['logradouro_nao_cadastrado'] = 1;
		}
	}


	// Telefones
	$campos["nao_possui_telefone_fixo"] = $pessoa->fone_residencial?0:1;
	$campos["telefone_fixo"] = output_telefone($pessoa->fone_residencial);

	$campos["nao_possui_telefone_celular"] = $pessoa->fone_celular?0:1;
	$campos["telefone_celular"] = output_telefone($pessoa->fone_celular);

	$campos["nao_possui_telefone_recado"] = $pessoa->fone_recado?0:1;
	$campos["telefone_recado"] = output_telefone($pessoa->fone_recado);

	// Email
	$campos['email'] = $pessoa->email;
	$campos['nao_possui_email'] = !$pessoa->email;

	// Endereço de correspondência
	if(!empty($pessoa->enderecos[TipoEndereco::CORRESPONDENCIA]))
	{
		$endcor = $pessoa->enderecos[TipoEndereco::CORRESPONDENCIA];

		$campos['idtipo_logradouro_corresp'] = $endcor->idtipo_logradouro;
		$campos['logradouro_corresp_nome'] = $endcor->logradouro;
		$campos['logradouro_corresp_numero'] = $endcor->numero;
		$campos['logradouro_corresp_complemento'] = $endcor->complemento;
		$campos['logradouro_corresp_bairro'] = $endcor->bairro;
		$campos['logradouro_corresp_idcidade'] = substr($endcor->idmunicipio,0,6);
		$campos['logradouro_corresp_idestado'] = $endcor->idestado;
		$campos['logradouro_corresp_cep'] = output_cep($endcor->cep);
	}

	$campos['mesmo_logradouro_corresp'] = 
		(!$endcor || ($endres && $endres->logradouro == $endcor->logradouro
							  && $endres->numero == $endcor->numero
							  && $endres->complemento == $endcor->complemento
							  && $endres->bairro == $endcor->bairro
							  && $endres->idmunicipio == $endcor->idmunicipio
							  && $endres->idestado == $endcor->idestado
							  && $endres->cep == $endcor->cep));

	$campos["beneficiario_bolsa_familia"] = $pessoa->beneficiario_bolsa_familia===null ? "" : ($pessoa->beneficiario_bolsa_familia?1:0);

	return $campos;
}/*}}}*/

function le_banco_saude($key, $idpessoa)/*{{{*/
{
	$pessoa = Doctrine_Query::create()
		->from('Pessoa p')
		->leftJoin('p.telefones tel INDEXBY tel.idtipo')
		->leftJoin('p.enderecos end INDEXBY end.idtipo_endereco')
		->leftJoin('p.cpf cpf')
		->leftJoin('p.cns cns')
		->leftJoin('p.cnh cnh')
		->leftJoin('p.certidoes certidoes')
		->leftJoin('p.pis pis')
		->leftJoin('p.nis nis')
		->leftJoin('p.titulo_eleitor titeleit')
		->leftJoin('p.ctps ctps')
		->leftJoin('p.rg rg')
		->leftJoin('p.situacao sit')
		->where("p.$key = ?",$idpessoa)
		->fetchOne();

	$campos = array();

	if(!$pessoa)
		return $campos;

	$idpessoa = $pessoa->id;

	$campos['id'] = $pessoa->id;
	$campos['idpessoa_cabcomum'] = $pessoa->idpessoa_cabcomum;
	$campos['nome'] = $pessoa->nome;
	$campos['nome_mae'] = $pessoa->nome_mae;
	$campos['sem_nome_mae'] = empty($pessoa->nome_mae);

	$campos['idsexo'] = $pessoa->idsexo;

	$campos['idraca'] = $pessoa->idraca;
	$campos['idescolaridade'] = $pessoa->idescolaridade;

	$campos['data_nascimento'] = output_date($pessoa->data_nascimento);
	$campos['data_nascimento_ignorada'] = empty($pessoa->data_nascimento);

	if($pessoa->idmunicipio_nascimento)
	{
		$campos['idmunicipio_nascimento'] = $pessoa->idmunicipio_nascimento;
		$campos['idestado_nascimento'] 
			= $pessoa->municipio_nascimento->idestado;

		$campos['idpais_nascimento'] = ID_BRASIL;
		$campos['nacionalidade'] = 1; // brasileiro nato
	}
	else
	{
		$campos['idpais_nascimento'] = $pessoa->idpais_nascimento;

		// Nacionalidade
		if($pessoa->brasileiro === true)
		{
			if($pessoa->idpais_nascimento != ID_BRASIL)
			{
				$campos['nacionalidade'] = 2; // brasileiro naturalizado
				$campos['data_naturalizacao'] 
					= output_date($pessoa->data_naturalizacao);
				$campos['data_naturalizacao_ignorada'] 
					= !$pessoa->data_naturalizacao;
			}
			else
				$campos['nacionalidade'] = 1; // brasileiro nato
		}
		else if($pessoa->brasileiro === false)
			$campos['nacionalidade'] = 0; // estrangeiro
	}

	// DOCUMENTOS (generico)
	$numdoc = 0;
	foreach(array('nis','cpf','ctps','titulo_eleitor','pis','cnh','cns') as $doc)
	{
		$campos["tem_$doc"] = !empty($pessoa[$doc]);
		if($doc != 'cns')
			$numdoc += empty($pessoa[$doc]) ? 0 : 1;

		if(!empty($pessoa[$doc]))
		{
			$campos[$doc] = $pessoa[$doc]->numero;
			if($pessoa[$doc]->apresentado !== NULL)
			{
				$campos[$doc."_apresentado"] 
					= $pessoa[$doc]->apresentado;
			}
			/*
			if($pessoa[$doc]->digitalizado !== NULL)
			{
				$campos[$doc."_digitalizado"] 
					= $pessoa[$doc]->digitalizado;
			}
			 */
		}
	}

	// RG
	$numdoc += ($campos['tem_rg'] = count($pessoa->rg)>=1) ? 1 : 0;
	if(count($pessoa->rg) >= 1)
	{
		$rg = reset($pessoa->rg);
		$campos['rg'] = $rg->numero;
		$campos['rg_data_emissao_ignorada'] = !$rg->data_emissao;
		$campos['rg_data_emissao'] = output_date($rg->data_emissao);
		$campos['rg_idestado_emissor'] = $rg->idestado;
		$campos['rg_idorgao_emissor'] = $rg->idorgao;

		if($rg->apresentado !== NULL)
			$campos['rg_apresentado'] = $rg->apresentado;
//		if($rg->digitalizado !== NULL)
//			$campos['rg_digitalizado'] = $rg->digitalizado;
	}

	// Carteira de trabalho
	if($pessoa->ctps)
	{
		$ctps = $pessoa->ctps;
		$campos['ctps_data_emissao_ignorada'] = !$ctps->data_emissao;
		$campos['ctps_data_emissao'] = output_date($ctps->data_emissao);

		$campos['ctps_serie'] = $ctps->serie;
		$campos['ctps_idestado'] = $ctps->idestado;
	}

	// Título de eleitor
	if($pessoa->titulo_eleitor)
	{
		$tit = $pessoa->titulo_eleitor;
		$campos['titulo_eleitor_zona'] = $tit->zona;
		$campos['titulo_eleitor_secao'] = $tit->secao;
	}

	// Certidão Civil
	$numdoc += ($campos['tem_certidao'] = count($pessoa->certidoes)>=1)?1:0;
	if(count($pessoa->certidoes) >= 1)
	{
		$cert = reset($pessoa->certidoes);
		$campos['idtipo_certidao'] = $cert->idtipo;
		$campos['certidao_data_emissao_ignorada'] = !$cert->data_emissao;
		$campos['certidao_data_emissao'] = output_date($cert->data_emissao);
		$campos['certidao_folha'] = $cert->folha;
		$campos['certidao_termo'] = $cert->termo;
		$campos['certidao_livro'] = $cert->livro;
		$campos['certidao_cartorio'] = $cert->cartorio;

		if($certidao->apresentado !== NULL)
			$campos['certidao_apresentado'] = $cert->apresentado;
//		if($certidao->digitalizado !== NULL)
//			$campos['certidao_digitalizado'] = $cert->digitalizado;
	}

	$campos['sem_documentos'] = $numdoc == 0 ? 1 : 0;

	// Endereço residencial
	if(!empty($pessoa->enderecos[TipoEndereco::RESIDENCIAL]))
	{
		$endres = $pessoa->enderecos[TipoEndereco::RESIDENCIAL]->endereco;

		$campos['logradouro_geoiguacu'] = $endres->geoiguacu;
		$campos['idtipo_logradouro'] = $endres->idtipo_logradouro;
		$campos['logradouro_nome'] = $endres->logradouro;
		$campos['logradouro_numero'] = $endres->numero;
		$campos['logradouro_complemento'] = $endres->complemento;
		$campos['logradouro_bairro'] = $endres->bairro;
		$campos['logradouro_idcidade'] = $endres->idmunicipio;
		$campos['logradouro_idestado'] = $endres->municipio->idestado;
		$campos['logradouro_cep'] = output_cep($endres->cep);

		$campos['logradouro_nao_cadastrado']
			= Doctrine::getTable('Geoiguacu')->find($endres->geoiguacu)
					? false : true;

		if($campos['logradouro_nao_cadastrado'])
		{
			if($endres->justificativa_sem_geoiguacu)
			{
				$campos['logradouro_nao_cad_justificativa'] = 1;
				$campos['logradouro_nao_cad_outra_justificativa'] 
					= $endres->justificativa_sem_geoiguacu;
			}
			else
				$campos['logradouro_nao_cad_justificativa'] = 0;
		}

		$campos['logradouro_referencia'] = $endres->referencia;
	}
	// não tem endereço residencial
	else 
	{
		$endres = NULL;
		if($pessoa->idtipo_endereco_variavel)
		{
			$campos['idtipo_endereco_variavel'] 
				= $pessoa->idtipo_endereco_variavel;
		}
		else
		{
			$campos['logradouro_nao_cad_justificativa'] = 2;
			$campos['logradouro_nao_cadastrado'] = 1;
		}
	}

	// Telefones
	foreach(array(TipoTelefone::RESIDENCIAL => 'fixo',
				  TipoTelefone::CELULAR => 'celular',
				  TipoTelefone::RECADO => 'recado') as $tipo => $nome)
	{
		if(!empty($pessoa->telefones[$tipo]))
		{
			$tel = $pessoa->telefones[$tipo];
			$campos["nao_possui_telefone_$nome"] = 0;
			$campos["telefone_$nome"] = output_telefone($tel->ddd.$tel->numero);
		}
		else
			$campos["nao_possui_telefone_$nome"] = 1;
	}

	// Email
	$campos['email'] = $pessoa->email;
	$campos['nao_possui_email'] = !$pessoa->email;

	// Endereço de correspondência
	if(!empty($pessoa->enderecos[TipoEndereco::CORRESPONDENCIA]))
	{
		$endcor = $pessoa->enderecos[TipoEndereco::CORRESPONDENCIA]->endereco;

		$campos['idtipo_logradouro_corresp'] = $endcor->idtipo_logradouro;
		$campos['logradouro_corresp_nome'] = $endcor->logradouro;
		$campos['logradouro_corresp_numero'] = $endcor->numero;
		$campos['logradouro_corresp_complemento'] = $endcor->complemento;
		$campos['logradouro_corresp_bairro'] = $endcor->bairro;
		$campos['logradouro_corresp_idcidade'] = $endcor->idmunicipio;
		$campos['logradouro_corresp_idestado'] 
			= $endcor->municipio->idestado;
		$campos['logradouro_corresp_cep'] = output_cep($endcor->cep);
	}

	$campos['mesmo_logradouro_corresp'] = 
			(!$endcor || ($endres && $endres->id == $endcor->id));

	$prontuario = Doctrine_Query::create()
		->from('Prontuario p')
		->where('idpessoa = ? and idunidade = ?',
			array($pessoa->id, $current_user->unidade->id))
		->orderBy('data desc')
		->fetchOne();
	if($prontuario)
		$campos['comparecimento_prontuario'] = $prontuario->numero;

	if($pessoa->situacao)
	{
		$campos['codigo_situacao'] = $pessoa->situacao->codigo;
		$campos['obs_validacao'] = $pessoa->situacao->correcao;
	}

	$campos["beneficiario_bolsa_familia"] = $pessoa->beneficiario_bolsa_familia===null ? "" : ($pessoa->beneficiario_bolsa_familia?1:0);
	$campos["membro_psf"] = $pessoa->membro_psf === null ? "" : ($pessoa->membro_psf?1:0);
	$campos["membro_pacs"] = $pessoa->membro_pacs === null ? "" : ($pessoa->membro_psf?1:0);
	$campos["residencia_terapeutica"] = $pessoa->residencia_terapeutica === null ? "" : ($pessoa->membro_psf?1:0);

	return $campos;
}/*}}}*/

try
{
	if($idpessoa_cabcomum)
	{
		$campos_comum = le_banco_comum($idpessoa_cabcomum);

		if(!empty($campos_comum['idpessoa_saude']))
			$campos_saude = le_banco_saude("id",$campos_comum['idpessoa_saude']);
		else
			$campos_saude = le_banco_saude("idpessoa_cabcomum",$idpessoa_cabcomum);

		// Prioridade eh do banco comum (pode ter sido atualizado)
		$campos = array_merge($campos_saude, $campos_comum);
	}
	else
		$campos = array();

	foreach($campos as &$val)
	{
		if(is_bool($val))
			$val = $val ? 1 : 0;
		if($val === null)
			$val = '';
	}
}
catch(Exception $e)
{
	$campos = array('error' => $e->getMessage());
}

echo json_encode($campos);

?>


