/** * Metodo Responsável por atualizar a lista de contribuintes * * @param array $contribuintes_novos */ public function atualizaListaContribuintes($contribuintes_novos) { $contribuintes_velhos = Administrativo_Model_UsuarioContribuinte::getByAttribute('usuario', $this->getId()); $novos_im = array(); $velhos_im = array(); // monta array de inscricoes novas. recebidas pelo webservice foreach ($contribuintes_novos as $c) { $novos_im[$c->attr('inscricao')] = $c; } if (!empty($contribuintes_velhos)) { // monta array de inscricoes velhas. recebidas do banco de dados if (is_array($contribuintes_velhos)) { foreach ($contribuintes_velhos as $c) { $velhos_im[$c->getIm()] = $c; } } else { $velhos_im[$contribuintes_velhos->getIm()] = $contribuintes_velhos; } } // diferença entre as novas e velhas são as inscricoes que precisam ser adicionadas $adicionar = array_diff_key($novos_im, $velhos_im); // diferença entre as velhas e as novas sao as incricões que precisam ser removidas $remover = array_diff_key($velhos_im, $novos_im); // Reabilita vinculos existentes foreach ($novos_im as $oNovoContribuinte) { if (isset($velhos_im[$oNovoContribuinte->attr('inscricao')])) { $oUsuarioContribuinteExistente = $velhos_im[$oNovoContribuinte->attr('inscricao')]; $oUsuarioContribuinteExistente->setHabilitado(TRUE); $oUsuarioContribuinteExistente->persist(); } } // Cria novos vinculos foreach ($adicionar as $oNovoContribuinte) { $oUsuarioContribuinte = new Administrativo_Model_UsuarioContribuinte(); $oUsuarioContribuinte->setUsuario($this->entity); $oUsuarioContribuinte->setIm($oNovoContribuinte->attr('inscricao')); $oUsuarioContribuinte->setCnpjCpf($oNovoContribuinte->attr('cnpj')); $oUsuarioContribuinte->setHabilitado(true); $this->addUsuarioContribuinte($oUsuarioContribuinte); $oUsuarioContribuinte->persist(); } // Desabilita o usuario contribuinte foreach ($remover as $oUsuarioRemover) { $oUsuarioRemover->setHabilitado(FALSE); $oUsuarioRemover->persist(); } }