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

function certidao_valida($folha, $termo, $livro)
{
	if(!$folha || !$termo || !$livro)
		return false;

	if(!ctype_digit($folha) && strtoupper($folha[strlen($folha)-1]) != 'V')
		return false;

	if(!ctype_digit($termo))
		return false;

	return true;
}

class Certidao extends Documento
{
	function setTableDefinition()
	{
		$this->setTableName('saude.certidao');

		$this->hasColumn('idtipo', 'integer', NULL, array('notnull'));
		$this->hasColumn('folha', 'string', 4, array('notnull'));
		$this->hasColumn('termo', 'integer', NULL, array('notnull'));
		$this->hasColumn('livro', 'string', 8, array('notnull','notblank'));
		$this->hasColumn('cartorio', 'string', 100);
		$this->hasColumn('data_emissao', 'date');

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

		Documento::setTableDefinition();
	}

	function validate()
	{
		Documento::validate();

		$erros = array();

		if(!$this->idtipo)
			$erros[] = 'O tipo da certidão deve ser informado';

		$this->folha = strtoupper(str_replace(' ','',$this->folha));
		$this->livro = strtoupper(str_replace(' ','',$this->livro));

		if(!$this->data_emissao)
			$this->data_emissao = null;

		if($this->folha == NULL)
			$erros[] = 'O número da folha da certidão deve ser informado';

		if($this->termo == NULL)
			$erros[] = 'O número do termo da certidão deve ser informado';

		if($this->livro == NULL)
			$erros[] = 'O número do livro da certidão deve ser informado';

		if($this->folha && $this->termo && $this->livro && !certidao_valida($this->folha, $this->termo, $this->livro))
			$erros[] = 'Identificação de certidão inválida';

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

	function setUp()
	{
		Documento::setUp();

		$this->index('unique_certidao',
			array('fields' => array('folha','termo', 'livro'),
			      'type' => 'unique'));

		$this->index('unique_pessoa_tipo_certidao',
			array('fields' => array('idtipo','idpessoa'),
			      'type' => 'unique'));

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

?>
