<?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 'util.php';

class Pessoa extends Doctrine_Record
{
	const BRASILEIRO = 0,
		  NATURALIZADO = 1;

	function setTableDefinition()
	{
		$this->setTableName('saude.pessoa');

		$this->hasColumn('nome','string', 120, array('notblank'));
		$this->hasColumn('nome_mae', 'string');

		$this->hasColumn('idsexo', 'string', 1, 
			array('notnull', 'fixed'));

		$this->hasColumn('data_nascimento', 'date');
		$this->hasColumn('idmunicipio_nascimento', 'integer');

		// brasileiro == true com pais != Brasil eh naturalizado
		// brasileiro == true com pais == Brasil eh brasileiro mesmo
		// brasileiro == false, entao eh estrangeiro

		$this->hasColumn('idpais_nascimento', 'integer');
		$this->hasColumn('brasileiro','boolean', NULL, array('notnull'));
		$this->hasColumn('data_naturalizacao', 'date');

		$this->hasColumn('idraca', 'integer', NULL, array('notnull'));
		$this->hasColumn('idescolaridade', 'integer');

		$this->hasColumn('idtipo_endereco_variavel', 'integer');

		$this->hasColumn('email', 'string', 60, array('email'));

		$this->hasColumn('beneficiario_bolsa_familia','boolean');

		// Programa de Saúde da Família
		$this->hasColumn('membro_psf','boolean');

		// Programa de Agentes Comunitários da Saúde
		$this->hasColumn('membro_pacs','boolean');

		$this->hasColumn('residencia_terapeutica','boolean');

		$this->hasColumn('idpessoa_cabcomum','integer');
	}

	function validate()
	{
		trim_string_columns($this);

		$erros = array();

		if(!$this->data_nascimento)
			$this->data_nascimento = NULL;

		if(!$this->data_naturalizacao)
			$this->data_naturalizacao = NULL;

		if(!$this->nome)
			$erros[] = 'É necessário especificar o nome do paciente';
		else
			$this->nome = normaliza($this->nome);
		if($this->nome_mae)
		{
			$this->nome_mae = normaliza($this->nome_mae);
			if(preg_match('/\b(INVALID|IGNORAD|DESCONHECID)/',$this->nome_mae))
			{
				$erros[] = 'Nome da mãe não permitido. Caso ela seja desconhecida, deixar o campo em branco';
			}
		}

		if($this->brasileiro === NULL)
			$erros[] = 'É necessário especificar a nacionalidade do paciente';
		else if(!$this->brasileiro && $this->idpais_nascimento == ID_BRASIL)
			$erros[] = 'Se o paciente é estrangeiro ou naturalizado seu país de origem não pode ser o Brasil';

		if($this->idsexo == NULL)
			$erros[] = 'É necessário especificar o sexo do paciente';

		if($erros)
			throw new Exception(implode("\n",$erros));
	}

    function setUp()
	{
		$this->actAs('Timestampable',
			array('created' => array('name' => 'data_criacao'),
			      'updated' => array('name' => 'data_atualizacao')));

		$this->hasOne('Sexo as sexo',
			array('local'=>'idsexo',
			      'foreign'=>'id'));

		$this->hasOne('Raca as raca',
			array('local'=>'idraca',
			      'foreign'=>'id'));

		$this->hasOne('Municipio as municipio_nascimento',
			array('local'=>'idmunicipio_nascimento',
			      'foreign'=>'id'));

		$this->hasOne('Pais as pais_nascimento',
			array('local'=>'idpais_nascimento',
			      'foreign'=>'id'));

		$this->hasOne('Escolaridade as escolaridade',
			array('local'=>'idescolaridade',
			      'foreign'=>'id'));

		$this->hasOne('TipoEnderecoVariavel as tipo_endereco_variavel',
			array('local'=>'idtipo_endereco_variavel',
			      'foreign'=>'id'));

		$this->hasOne('CabcomumPessoa as pessoa_cabcomum',
			array('local'=>'idpessoa_cabcomum',
			      'foreign'=>'id'));

		$this->index('unique_pessoa_mae',
			array('fields' => array('nome', 'nome_mae'),
				  'type' => 'unique'));

		$this->index('idx_pessoa_nome',
			array('fields' => array('nome')));

		/* tem que ser criado externamente
		$this->index('idx_pessoa_nome_fulltext',
			array('fields' => array("to_tsvector('portuguese',nome)"),
			      'type' => 'gin'));
		 */

		$this->hasMany('Telefone as telefones',
			array('local'=>'id',
			      'foreign'=>'idpessoa'));

		$this->hasMany('EnderecoPessoa as enderecos',
			array('local'=>'id',
			      'foreign'=>'idpessoa'));

		$this->hasOne('CPF as cpf',
			array('local'=>'id',
			      'foreign'=>'idpessoa'));
		$this->hasOne('CNS as cns',
			array('local'=>'id',
			      'foreign'=>'idpessoa'));
		$this->hasMany('Certidao as certidoes',
			array('local'=>'id',
			      'foreign'=>'idpessoa'));

		$this->hasOne('PIS as pis',
			array('local'=>'id',
			      'foreign'=>'idpessoa'));
		$this->hasOne('NIS as nis',
			array('local'=>'id',
			      'foreign'=>'idpessoa'));
		$this->hasOne('TituloEleitor as titulo_eleitor',
			array('local'=>'id',
			      'foreign'=>'idpessoa'));
		$this->hasOne('CTPS as ctps',
			array('local'=>'id',
			      'foreign'=>'idpessoa'));
		$this->hasOne('CNH as cnh',
			array('local'=>'id',
			      'foreign'=>'idpessoa'));
		$this->hasMany('RG as rg',
			array('local'=>'id',
			      'foreign'=>'idpessoa'));

		$this->hasOne('SituacaoFormulario as situacao',
			array('local'=>'id',
			      'foreign'=>'idpessoa'));
	}
};

?>
