<?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 CabcomumPessoa extends Doctrine_Record
{
	function setTableDefinition()
	{
		$this->setTableName('cabcomum.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('idnacionalidade', 'integer',2,array('notnull'));

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

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

		$this->hasColumn('fone_residencial', 'string', 15);
		$this->hasColumn('fone_celular', 'string', 15);
		$this->hasColumn('fone_recado', 'string', 15);
		$this->hasColumn('fone_trabalho', 'string', 15);
		$this->hasColumn('idestado_nascimento', 'integer');
		$this->hasColumn('idref_sistema', 'integer',2,array('notnull'));
		$this->hasColumn('idpessoa_sistema', 'string',50,array('notnull'));

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

	function validate()
	{
		trim_string_columns($this);

		$erros = array();

		if(!$this->data_nascimento)
			$this->data_nascimento = 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->idnacionalidade === NULL)
			$erros[] = 'É necessário especificar a nacionalidade do paciente';
		else if($this->idnacionalidade != ID_NACIONALIDADE_BRASILEIRA && $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('CabcomumSexo as sexo',
			array('local'=>'idsexo',
			      'foreign'=>'id'));

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

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

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

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

		$this->hasOne('CabcomumNacionalidade as nacionalidade',
			array('local'=>'idnacionalidade',
			      'foreign'=>'id'));

		$this->hasOne('CabcomumRefSistema as ref_sistema',
			array('local'=>'idref_sistema',
			      'foreign'=>'id'));

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

		$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('CabcomumPessoaDocumento as documentos',
			array('local'=>'id',
			      'foreign'=>'idpessoa'));

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

?>
