Skip to content

Instantly share code, notes, and snippets.

@jonasporto
Last active August 29, 2015 14:02
Show Gist options
  • Save jonasporto/a723d094d615a51c9c46 to your computer and use it in GitHub Desktop.
Save jonasporto/a723d094d615a51c9c46 to your computer and use it in GitHub Desktop.
Code Refactoring and DRY
//old code
private function retornaEndereco($tipoEntidade,$codEntidade){
//Verifica o tipo da entidade
switch($tipoEntidade){
case 'PF':
return
// retorna o endereco da pessoa Fisica
$this->EnderecoPf->find('first'
,array(
'joins'=>array(
array(//join em enderecos para pegar os dados
'table'=>'enderecos',
'type'=>'INNER',
'alias'=>'Enderecos',
'conditions'=>array('EnderecoPf.cod_endereco = Enderecos.cod_endereco')
),
array(//join em pessoa fisica para obrigar que os dados estejam fixados nesta PF
'table'=>'pessoas_fisicas',
'type'=>'INNER',
'alias'=>'PF',
'conditions'=>array('EnderecoPf.cod_pessoa_fisica = PF.cod_pessoa_fisica')
)
),
//condiçoes para fazer o join
'conditions'=>array('EnderecoPf.cod_pessoa_fisica'=>$codEntidade,'EnderecoPf.endereco_padrao'=>'S'),
//campos de retorno
'fields'=>array('Enderecos.logradouro','Enderecos.bairro','Enderecos.cidade','Enderecos.estado')
)
);
break;
case 'PJ':
return
//retorna endereços de PJ
$this->EnderecoPj->find('first',array(
'joins'=>array(//join com tabela endereços (pegar dados de endereço)
array(
'table'=>'enderecos',
'type'=>'INNER',
'alias'=>'Enderecos',
'conditions'=>array('EnderecoPj.cod_endereco = Enderecos.cod_endereco')
),
array(//join para garantir a integridade das informações do find
'table'=>'pessoas_juridicas',
'type'=>'INNER',
'alias'=>'PJ',
'conditions'=>array('EnderecoPj.cod_pessoa_juridica = PJ.cod_pessoa_juridica')
)
),
//condições descritas no comentário da funçao
'conditions'=>array('EnderecoPj.cod_pessoa_juridica'=>$codEntidade,'EnderecoPj.endereco_padrao'=>'S'),
//campos retorenados
'fields'=>array('Enderecos.logradouro','Enderecos.bairro','Enderecos.cidade','Enderecos.estado')
));
break;
case 'ORG':
return
//retorna endereço da organização
$this->EnderecoOrganizacao->find('first',array(
'joins'=>array(
array(//pega dadosda enderecos
'table'=>'enderecos',
'type'=>'INNER',
'alias'=>'Enderecos',
'conditions'=>array('EnderecoOrganizacao.cod_endereco = Enderecos.cod_endereco')
),
array(//join para garantir a integreidade das informações do endereço
'table'=>'organizacoes',
'type'=>'INNER',
'alias'=>'ORG',
'conditions'=>array('EnderecoOrganizacao.cod_organizacao = ORG.cod_porganizacao')
)
),
//condições descritas no comentário da funçao
'conditions'=>array('EnderecoOrganizacao.cod_organizacao'=>$codEntidade,'EnderecoOrganizacao.endereco_padrao'=>'S'),
//campos retornados
'fields'=>array('Enderecos.logradouro','Enderecos.bairro','Enderecos.cidade','Enderecos.estado')
));
break;
}
}
//code refactoring
private function retornaEndereco($tipoEntidade,$codEntidade){
$Model = array('PF'=>array('EnderecoPf','EnderecoPf.cod_pessoa_fisica'),
'PJ'=>array('EnderecoPj','EnderecoPj.cod_pessoa_juridica'),
'ORG'=>array('EnderecoOrganizacao','EnderecoOrganizacao.cod_organizacao'));
$model = $Model[$tipoEntidade][0];
$pk = $Model[$tipoEntidade][1];
return $this->$model->find('first',array('conditions'=>array($pk => $codEntidade,"$model.endereco_padrao"=>"S"),
'fields'=>array('Enderecos.logradouro','Enderecos.bairro','Enderecos.cidade','Enderecos.estado'),
'joins'=>array(array('table'=>'enderecos',
'type'=>'INNER',
'alias'=>'Enderecos',
'conditions'=>array("$model.cod_endereco = Enderecos.cod_endereco")))));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment