/**
  * Metodo inicial quando o usuairo for contribuinte
  */
 public function contribuinteAction()
 {
     // Oculta breadcrumbs
     $this->view->oculta_breadcrumbs = TRUE;
     // Matar sessão quando acessado via menu
     if ($this->_getParam('alterar')) {
         $oSessao = new Zend_Session_Namespace('nfse');
         $oSessao->contribuinte = NULL;
         $this->view->contribuinte = NULL;
         $this->_session->id = NULL;
     }
     if (!isset($this->_session->iUsuarioEscolhido) && $this->usuarioLogado->getPerfil()->getId() == 5) {
         $this->_redirector->gotoSimple('listar-cadastros', 'usuario-acesso', 'fiscal');
     }
     // Verifica se a lista de contribuinte e diferente da lista vinculada ao usuario
     if ($this->view->user->getTipo() == Administrativo_Model_TipoUsuario::$CONTADOR) {
         $aContribuintes = Administrativo_Model_Empresa::getByCnpj(trim($this->view->user->getCnpj()));
         // atualiza a lista de contribuintes
         $this->view->user->atualizaListaContribuintes($aContribuintes);
     } else {
         $oContribuinte = $this->view->user->getUsuariosContribuintes();
         $oContribuinte = $oContribuinte[0];
         if ($oContribuinte->getIm()) {
             $aContribuintesInscricao = new Contribuinte_Model_Contribuinte();
             $aContribuintes[] = $aContribuintesInscricao->getDadosContribuinteEcidade($oContribuinte->getIm());
         } else {
             if ($oContribuinte->getCnpjCpf()) {
                 $oContribuinteEventual = new Contribuinte_Model_ContribuinteEventual();
                 $aContribuintes[] = $oContribuinteEventual->getByCpfCnpjWebService($oContribuinte->getCnpjCpf());
             }
         }
     }
     // atualiza o tipo de emissao e permissoes dos contribuintes
     Administrativo_Model_UsuarioContribuinte::atualizaTipoEmissao($aContribuintes);
     $aContribuintes = $this->view->user->getContribuintes();
     $this->view->contribuintes = $aContribuintes;
     //carrega informativo do fiscal
     $oInformativo = Administrativo_Model_Informativo::getByAttribute('id', 1);
     //Verifica se retorna algo da coluna informativo
     if (!empty($oInformativo)) {
         $this->view->descricao = $oInformativo->getDescricao();
     }
     if (count($this->view->contribuintes) == 1 && $this->_session->id == NULL) {
         $aContribuintes = each($this->view->contribuintes);
         $oContribuinte = $aContribuintes['value'];
         self::setContribuinte($oContribuinte);
         $this->_redirector->gotoSimple('contribuinte', 'index', 'contribuinte');
     }
     // Reseta permissões
     new DBSeller_Acl_Setup(TRUE);
 }
Exemplo n.º 2
0
 /**
  * Popula o combo de serviços
  *
  * @param integer|null $iCodigoServico código do serviço
  * @return $this
  */
 public function setServico($iCodigoServico = NULL)
 {
     $aServicos = Contribuinte_Model_Servico::getByIm($this->oContribuinte->getInscricaoMunicipal());
     $aDados = array('' => '-- Escolha o Serviço --');
     if (is_array($aServicos)) {
         foreach ($aServicos as $oServico) {
             $sAtividade = strtolower($oServico->attr('atividade'));
             $aDados[$oServico->attr('cod_atividade')] = DBSeller_Helper_String_Format::wordsCap($sAtividade);
         }
     }
     $this->getElement('s_servico_prestado')->addMultiOptions($aDados)->setValue($iCodigoServico);
     return $this;
 }
 /**
  * Verifica se deve emitir a guia considerando: 
  * 1 - as características do contribuinte no alvará
  * 2 - tributação dentro ou fora do municipio
  * 
  * 
  * @param stdClass $oParametro
  *   $oParametro->inscricao_municipal
  *   $oParametro->data
  * @throws Exception
  * @return boolean
  * 
  * @tutorial: Abaixo constam as regras para emissão de guia
  * 
  * Regime(4)/Exigibilidade(5) |Exigível(23)|Não Incide(24)|Isento(25)|Export.(26)|Imune(27)|Susp.Judic(28)|Susp.Adm(29)
  * ------------------------------------------------------------------------------------------------------------------
  * (--)Optante Simples        |Não         |Não         |Não       |Não        |Não      |Não           |Não
  * (14)Normal                 |Sim         |Não         |Não       |sim        |Não      |Não           |Não
  * (15)Cooperativa            |Sim         |Não         |Não       |sim        |Não      |Não           |Não
  * (16)EPP                    |Sim         |Não         |Não       |sim        |Não      |Não           |Não
  * (17)Estimativa             |Sim         |Não         |Não       |sim        |Não      |Não           |Não
  * (18)Fixado                 |Não         |Não         |Não       |Não        |Não      |Não           |Não
  * (19)ME municipal           |Sim         |Não         |Não       |sim        |Não      |Não           |Não
  * (20)MEI                    |Não         |Não         |Não       |Não        |Não      |Não           |Não
  * (21)ME                     |Sim         |Não         |Não       |sim        |Não      |Não           |Não
  * (22)Sociedade profissional |Não         |Não         |Não       |Não        |Não      |Não           |Não 
  */
 public static function checarEmissaoGuia($oParametro = NULL)
 {
     $oValidaData = new Zend_Validate_Date();
     if (!is_object($oParametro)) {
         throw new Exception('O parâmetro informado deve ser um objeto.');
     } else {
         if (!isset($oParametro->data) || !isset($oParametro->inscricao_municipal)) {
             throw new Exception('Verifique os parâmetros informados.');
         } else {
             if (!$oValidaData->isValid($oParametro->data)) {
                 throw new Exception('Parâmetro "data" inválido.');
             }
         }
     }
     // Busca os dados do contribuinte da sessão
     $oContribuinte = Contribuinte_Model_Contribuinte::getByInscricaoMunicipal($oParametro->inscricao_municipal);
     if (!is_object($oContribuinte)) {
         throw new Exception('Nenhum contribuinte foi encontrado.');
     }
     // Optante pelo simples no período pesquisado, não emite guia
     $oDataSimples = new DateTime(DBSeller_Helper_Date_Date::invertDate($oParametro->data));
     if ($oContribuinte->isOptanteSimples($oDataSimples)) {
         return FALSE;
     }
     // Verifica se deve emitir a guia conforme as regras de emissão
     $iRegimeTributario = $oContribuinte->getRegimeTributario();
     $iExigibilidade = $oContribuinte->getExigibilidade();
     switch ("{$iRegimeTributario}-{$iExigibilidade}") {
         case '14-23':
         case '14-26':
         case '15-23':
         case '15-26':
         case '16-23':
         case '16-26':
         case '17-23':
         case '17-26':
         case '19-23':
         case '19-26':
         case '21-23':
         case '21-26':
             return TRUE;
             break;
         default:
             return FALSE;
     }
     return FALSE;
 }
 /**
  * Busca o contribuinte pelo CNPJ/CPF
  */
 public function getContribuinteCnpjAction()
 {
     $aRetorno = NULL;
     $iCnpj = DBSeller_Helper_Number_Format::getNumbers($this->_getParam('term'));
     $aDados = Contribuinte_Model_Contribuinte::getInscricaoMunicipalByCpjCnpj($iCnpj);
     $oContribuinte = Contribuinte_Model_Contribuinte::preencherInstanciaContribuinte($aDados[0]);
     $aRetorno = array('razao_social' => $oContribuinte->getRazaoSocial(), 'login' => $oContribuinte->getCgcCpf(), 'nome' => $oContribuinte->getRazaoSocial(), 'email' => $oContribuinte->getEmail(), 'telefone' => DBSeller_Helper_Number_Format::maskPhoneNumber($oContribuinte->getTelefone()));
     if (is_array($aDados) && count($aDados) > 1) {
         foreach ($aDados as $oDadosContribuinte) {
             $iInscricao = Contribuinte_Model_Contribuinte::preencherInstanciaContribuinte($oDadosContribuinte)->getInscricaoMunicipal();
             $aRetorno['inscricoes'][$iInscricao] = $iInscricao;
         }
     }
     echo $this->getHelper('json')->sendJson($aRetorno);
 }
 /**
  * Valida e salva as informações do RPS na base de dados
  * 
  * @throws Exception
  * @return integer|NULL
  */
 public function processarImportacaoRps()
 {
     // Dados da sessão
     $oSessao = new Zend_Session_Namespace('nfse');
     $oDoctrine = Zend_Registry::get('em');
     $oDoctrine->getConnection()->beginTransaction();
     try {
         // Dados da importação
         $oImportacao = new \Contribuinte\ImportacaoArquivo();
         $oImportacao->setData(new DateTime());
         $oImportacao->setHora(new DateTime());
         $oImportacao->setTipo('RPS');
         $oImportacao->setQuantidadeDocumentos($this->oImportacao->lote->quantidade_rps);
         $oImportacao->setVersaoLayout('modelo1');
         $oImportacao->setIdUsuario($this->iUsuarioLogado);
         $oImportacao->setNumeroLote($this->oImportacao->lote->numero);
         // Totalizadores
         $fValorTotalServico = 0;
         $fValorTotalImpostos = 0;
         // Processa a lista de rps
         foreach ($this->oImportacao->rps as $oRps) {
             if ($oRps->servico->valores->valor_iss_retido > 0) {
                 $oRps->servico->valores->valor_iss = $oRps->servico->valores->valor_iss_retido;
                 $oRps->servico->valores->iss_retido = 1;
             }
             $oContribuinte = Contribuinte_Model_Contribuinte::getByCpfCnpj($oRps->prestador->cnpj);
             $iInscricaoMunicipal = $oContribuinte->getInscricaoMunicipal();
             // Dados dos Usuários
             $aDados['id_contribuinte'] = $oSessao->contribuinte->getIdUsuarioContribuinte();
             $aDados['id_usuario'] = $this->iUsuarioLogado;
             // Dados da RPS
             $aDados['grupo_nota'] = Contribuinte_Model_Nota::GRUPO_NOTA_RPS;
             $aDados['tipo_nota'] = $oRps->tipo;
             $aDados['n_rps'] = $oRps->numero;
             $aDados['data_rps'] = $oRps->data_emissao;
             $aDados['dt_nota'] = $oRps->data_emissao;
             $aDados['hr_nota'] = $oRps->data_emissao;
             $aDados['ano_comp'] = $oRps->data_emissao->format('Y');
             $aDados['mes_comp'] = $oRps->data_emissao->format('m');
             $aDados['natureza_operacao'] = $oRps->natureza_operacao;
             // Dados do Prestador
             $aDados['p_im'] = $iInscricaoMunicipal;
             $aDados['p_cnpjcpf'] = $oRps->prestador->cnpj;
             // Dados do Tomador
             $aDados['t_cnpjcpf'] = $oRps->tomador->cpf_cnpj;
             $aDados['t_razao_social'] = $oRps->tomador->razao_social;
             $aDados['t_cep'] = $oRps->tomador->endereco->cep;
             $aDados['t_endereco'] = $oRps->tomador->endereco->descricao;
             $aDados['t_endereco_numero'] = $oRps->tomador->endereco->numero;
             $aDados['t_endereco_comp'] = $oRps->tomador->endereco->complemento;
             $aDados['t_bairro'] = $oRps->tomador->endereco->bairro;
             $aDados['t_cod_municipio'] = $oRps->tomador->endereco->ibge_municipio;
             $aDados['t_uf'] = $oRps->tomador->endereco->uf;
             $aDados['t_telefone'] = $oRps->tomador->contato->telefone;
             $aDados['t_email'] = $oRps->tomador->contato->email;
             // Dados da construção civil
             $aDados['s_codigo_obra'] = $oRps->construcao_civil->codigo_obra;
             $aDados['s_art'] = $oRps->construcao_civil->art;
             // Dados do Serviço
             $iAtividade = $oRps->servico->atividade;
             $oServico = Contribuinte_Model_Servico::getServicoPorAtividade($iInscricaoMunicipal, $iAtividade);
             if (empty($oServico)) {
                 throw new Exception('O código de atividade do serviço inválido.');
             }
             $aDados['descricao'] = $oRps->servico->discriminacao;
             $aDados['s_dados_cod_tributacao'] = $oServico->attr('cod_atividade');
             $aDados['s_dados_cod_municipio'] = $oRps->servico->ibge_municipio;
             $aDados['s_dados_municipio_incidencia'] = $oRps->servico->ibge_municipio;
             $aDados['s_dados_cod_pais'] = 1058;
             //brasil
             // Verifica se o tomador retem o ISS
             $lTomadorRetemIss = $oRps->servico->valores->iss_retido == 1 ? TRUE : FALSE;
             // Valores do Serviço
             $aDados['s_vl_servicos'] = self::converterValor($oRps->servico->valores->valor_servicos);
             $aDados['s_vl_deducoes'] = self::converterValor($oRps->servico->valores->valor_deducoes);
             $aDados['s_vl_pis'] = self::converterValor($oRps->servico->valores->valor_pis);
             $aDados['s_vl_cofins'] = self::converterValor($oRps->servico->valores->valor_cofins);
             $aDados['s_vl_inss'] = self::converterValor($oRps->servico->valores->valor_inss);
             $aDados['s_vl_ir'] = self::converterValor($oRps->servico->valores->valor_ir);
             $aDados['s_vl_csll'] = self::converterValor($oRps->servico->valores->valor_csll);
             $aDados['s_vl_iss'] = self::converterValor($oRps->servico->valores->valor_iss);
             $aDados['s_dados_iss_retido'] = $lTomadorRetemIss ? 1 : 0;
             $aDados['s_vl_outras_retencoes'] = self::converterValor($oRps->servico->valores->outras_retencoes);
             $aDados['s_vl_bc'] = self::converterValor($oRps->servico->valores->base_calculo);
             $aDados['s_vl_aliquota'] = self::converterValor($oRps->servico->valores->aliquota * 100);
             $aDados['s_vl_liquido'] = self::converterValor($oRps->servico->valores->valor_liquido);
             $aDados['vl_liquido_nfse'] = self::converterValor($oRps->servico->valores->valor_liquido);
             $aDados['s_vl_condicionado'] = self::converterValor($oRps->servico->valores->desconto_condicionado);
             $aDados['s_vl_desc_incondicionado'] = self::converterValor($oRps->servico->valores->desconto_incondicionado);
             // Salva o RPS
             $oNotaRps = new Contribuinte_Model_Nota();
             $oNotaRps->persist($aDados);
             // Adiciona os documento aos dados da importação
             $oImportacaoArquivoDocumento = new \Contribuinte\ImportacaoArquivoDocumento();
             $oImportacaoArquivoDocumento->setImportacaoDms($oImportacao);
             $oImportacaoArquivoDocumento->addNota($oNotaRps->getEntity());
             $oImportacaoArquivoDocumento->setValorImposto($oRps->servico->valores->valor_iss);
             $oImportacaoArquivoDocumento->setValorTotal($oRps->servico->valores->valor_servicos);
             // Vincula o documento aos dados da importação
             $oImportacao->addImportacaoArquivoDocumentos($oImportacaoArquivoDocumento);
             // Incrementa os totalizadores
             $fValorTotalServico += $oRps->servico->valores->valor_servicos;
             $fValorTotalImpostos += $oRps->servico->valores->valor_iss;
         }
         // Completa e salva os dados da importação
         $oImportacao->setValorTotal($fValorTotalServico);
         $oImportacao->setValorImposto($fValorTotalImpostos);
         $oDoctrine->persist($oImportacao);
         $oDoctrine->flush();
         $oDoctrine->getConnection()->commit();
         return $oImportacao;
     } catch (Exception $oErro) {
         $oDoctrine->getConnection()->rollback();
         throw new Exception('Ocorreu um erro ao importar o arquivo: ' . $oErro->getMessage());
     }
 }
 /**
  * @param Contribuinte_Model_Contribuinte $oContribuinte
  * @param                                 $iAno
  * @param                                 $iMes
  * @param null                            $fAliquota
  * @return object
  */
 public static function getTotalReceitasCompetencia(Contribuinte_Model_Contribuinte $oContribuinte, $iAno, $iMes, $fAliquota = NULL)
 {
     $aReceitasGuia = array();
     $aParametros = array('contribuinte' => $oContribuinte->getContribuintes(), 'competencia_inicial' => "{$iAno}{$iMes}");
     $aImportacaoDesif = Contribuinte_Model_ImportacaoDesif::getByAttributes($aParametros);
     /**
      * Verifica se retornou uma importacao desif
      */
     if (isset($aImportacaoDesif[0])) {
         $oImportacaoDesif = $aImportacaoDesif[0]->getEntity();
         $aReceitasGuia = Contribuinte_Model_ImportacaoDesif::getTotalReceitasGuia($oImportacaoDesif->getId(), TRUE, $fAliquota);
     }
     return (object) $aReceitasGuia;
 }
 /**
  * Salva os dados complementares do usuário contribuinte
  *
  * @param int $iInscricaoMunicipal
  * @return bool
  */
 private function salvarDadosComplementaresUsuarioContribuinte($iInscricaoMunicipal)
 {
     try {
         $oContribuinte = Contribuinte_Model_Contribuinte::getByInscricaoMunicipal($iInscricaoMunicipal);
         $oContribuinteComplemento = Administrativo_Model_UsuarioContribuinteComplemento::getById($oContribuinte->getCgcCpf());
         $oContribuinteComplemento->setInscricaoMunicipal($oContribuinte->getInscricaoMunicipal());
         $oContribuinteComplemento->setInscricaoEstadual($oContribuinte->getInscricaoEstadual());
         $oContribuinteComplemento->setCnpjcpf($oContribuinte->getCgcCpf());
         $oContribuinteComplemento->setRazaoSocial($oContribuinte->getRazaoSocial() ?: $oContribuinte->getNome());
         $oContribuinteComplemento->setNomeFantasia($oContribuinte->getNomeFantasia());
         $oContribuinteComplemento->setEnderecoPaisCodigo();
         $oContribuinteComplemento->setEnderecoUf($oContribuinte->getEstado());
         $oContribuinteComplemento->setEnderecoMunicipioCodigo($oContribuinte->getCodigoIbgeMunicipio());
         $oContribuinteComplemento->setEnderecoDescricao($oContribuinte->getDescricaoLogradouro());
         $oContribuinteComplemento->setEnderecoBairro($oContribuinte->getLogradouroBairro());
         $oContribuinteComplemento->setEnderecoNumero($oContribuinte->getLogradouroNumero());
         $oContribuinteComplemento->setEnderecoComplemento($oContribuinte->getLogradouroComplemento());
         $oContribuinteComplemento->setEnderecoCep($oContribuinte->getCep());
         $oContribuinteComplemento->setContatoEmail($oContribuinte->getEmail());
         $oContribuinteComplemento->setContatoTelefone($oContribuinte->getTelefone());
         $oContribuinteComplemento->persist();
         return TRUE;
     } catch (Exception $oErro) {
         return FALSE;
     }
 }
 /**
  * Método abstrato para validar o formulário em ambos os relatórios
  *
  * @return array|boolean
  */
 protected function validarFormulario()
 {
     $aDados = $this->getRequest()->getPost();
     $aRetornoErros = array();
     $oForm = new Fiscal_Form_Relatorio6();
     $oForm->render();
     // Verifica se os parâmetros do formulário são válidos
     if ($oForm->isValid($aDados)) {
         // Parâmetros do formulário
         $sCompetenciaInicial = $oForm->getValue('data_competencia_inicial');
         $sCompetenciaFinal = $oForm->getValue('data_competencia_final');
         $sPrestadorCnpj = $oForm->getValue('prestador_cnpj');
         // Valida se é cadastrado e se é prestador de servico
         $oPrestador = Contribuinte_Model_Contribuinte::getByCpfCnpj($sPrestadorCnpj);
         if (!$oPrestador instanceof Contribuinte_Model_Contribuinte) {
             $sMensagemErro = $this->translate->_('Contribuinte não cadastrado no sistema.');
             $aRetornoErros['status'] = FALSE;
             $aRetornoErros['fields'] = array('prestador_cnpj');
             $aRetornoErros['error'][] = $this->translate->_($sMensagemErro);
             return $aRetornoErros;
         } else {
             if (!Contribuinte_Model_Servico::getByIm($oPrestador->getInscricaoMunicipal())) {
                 $sMensagemErro = $this->translate->_('O contribuinte não é prestador de serviços.');
                 $aRetornoErros['status'] = FALSE;
                 $aRetornoErros['fields'] = array('prestador_cnpj');
                 $aRetornoErros['error'][] = $this->translate->_($sMensagemErro);
                 return $aRetornoErros;
             }
         }
         // Objeto para validação das competências inicial e final
         $oValidaCompetencia = new DBSeller_Validator_Competencia();
         $oValidaCompetencia->setCompetenciaInicial($sCompetenciaInicial);
         $oValidaCompetencia->setCompetenciaFinal($sCompetenciaFinal);
         // Valida a competência inicial e final
         if (!$oValidaCompetencia->isValid($sCompetenciaInicial)) {
             $aRetornoErros['status'] = FALSE;
             $aRetornoErros['fields'] = array('data_competencia_inicial', 'data_competencia_final');
             $aMensagensErro = $oValidaCompetencia->getMessages();
             $aIndicesErro = array_keys($aMensagensErro);
             foreach ($aIndicesErro as $sIndiceErro) {
                 if (array_key_exists($sIndiceErro, $aMensagensErro)) {
                     $aRetornoErros['error'][] = $this->translate->_($aMensagensErro[$sIndiceErro]);
                 }
             }
             return $aRetornoErros;
         }
         return TRUE;
     } else {
         $aCamposComErro = array_keys($oForm->getMessages());
         $sMensagemErro = $this->translate->_('Preencha os dados corretamente.');
         if (count($aCamposComErro) > 1) {
             $sMensagemErro = $this->translate->_('Preencha os dados corretamente.');
         } else {
             if (in_array('data_competencia_final', $aCamposComErro)) {
                 $sMensagemErro = $this->translate->_('Informe a Competência Final corretamente.');
             } else {
                 if (in_array('data_competencia_inicial', $aCamposComErro)) {
                     $sMensagemErro = $this->translate->_('Informe a Competência Inicial corretamente.');
                 }
             }
         }
         $aRetornoErros['status'] = FALSE;
         $aRetornoErros['fields'] = array_keys($oForm->getMessages());
         $aRetornoErros['error'][] = $this->translate->_($sMensagemErro);
     }
     return $aRetornoErros;
 }
 /**
  * Preenche os dados do contribuinte
  * @param null $oContribuinteWebService
  *
  * @return Contribuinte_Model_Contribuinte|null
  */
 public static function preencherInstanciaContribuinte($oContribuinteWebService = NULL)
 {
     $oContribuinte = NULL;
     if (is_object($oContribuinteWebService)) {
         $oContribuinte = new Contribuinte_Model_Contribuinte();
         if (isset($oContribuinteWebService->razao_social)) {
             $oContribuinte->setRazaoSocial($oContribuinteWebService->razao_social);
         }
         if (isset($oContribuinteWebService->codigo_empresa)) {
             $oContribuinte->setInscricaoMunicipal($oContribuinteWebService->codigo_empresa);
         }
         if (isset($oContribuinteWebService->endereco)) {
             $oContribuinte->setEndereco($oContribuinteWebService->endereco);
         }
         if (isset($oContribuinteWebService->cgm)) {
             $oContribuinte->setCgm($oContribuinteWebService->cgm);
         }
         if (isset($oContribuinteWebService->tipo)) {
             $oContribuinte->setTipoPessoa($oContribuinteWebService->tipo);
         }
         if (isset($oContribuinteWebService->cnpj)) {
             $oContribuinte->setCgcCpf($oContribuinteWebService->cnpj);
         }
         if (isset($oContribuinteWebService->cgccpf)) {
             $oContribuinte->setCgcCpf($oContribuinteWebService->cgccpf);
         }
         if (isset($oContribuinteWebService->nome)) {
             $oContribuinte->setNome($oContribuinteWebService->nome);
         }
         if (isset($oContribuinteWebService->nome_fanta)) {
             $oContribuinte->setNomeFantasia($oContribuinteWebService->nome_fanta);
         }
         if (isset($oContribuinteWebService->identidade)) {
             $oContribuinte->setIdentidade($oContribuinteWebService->identidade);
         }
         if (isset($oContribuinteWebService->inscr_est)) {
             $oContribuinte->setInscricaoEstadual($oContribuinteWebService->inscr_est);
         }
         if (isset($oContribuinteWebService->tipo_lograd)) {
             $oContribuinte->setTipoLogradouro($oContribuinteWebService->tipo_lograd);
         }
         if (isset($oContribuinteWebService->lograd)) {
             $oContribuinte->setDescricaoLogradouro($oContribuinteWebService->lograd);
         }
         if (isset($oContribuinteWebService->numero)) {
             $oContribuinte->setLogradouroNumero($oContribuinteWebService->numero);
         }
         if (isset($oContribuinteWebService->complemento)) {
             $oContribuinte->setLogradouroComplemento($oContribuinteWebService->complemento);
         }
         if (isset($oContribuinteWebService->bairro)) {
             $oContribuinte->setLogradouroBairro($oContribuinteWebService->bairro);
         }
         if (isset($oContribuinteWebService->cod_ibge)) {
             $oContribuinte->setCodigoIbgeMunicipio($oContribuinteWebService->cod_ibge);
         }
         if (isset($oContribuinteWebService->munic)) {
             $oContribuinte->setDescricaoMunicipio($oContribuinteWebService->munic);
         }
         if (isset($oContribuinteWebService->uf)) {
             $oContribuinte->setEstado($oContribuinteWebService->uf);
         }
         if (isset($oContribuinteWebService->cod_pais)) {
             $oContribuinte->setCodigoPais($oContribuinteWebService->cod_pais);
         }
         if (isset($oContribuinteWebService->pais)) {
             $oContribuinte->setDescricaoPais($oContribuinteWebService->pais);
         }
         if (isset($oContribuinteWebService->cep)) {
             $oContribuinte->setCep($oContribuinteWebService->cep);
         }
         if (isset($oContribuinteWebService->telefone)) {
             $oContribuinte->setTelefone($oContribuinteWebService->telefone);
         }
         if (isset($oContribuinteWebService->fax)) {
             $oContribuinte->setFax($oContribuinteWebService->fax);
         }
         if (isset($oContribuinteWebService->celular)) {
             $oContribuinte->setCelular($oContribuinteWebService->celular);
         }
         if (isset($oContribuinteWebService->email)) {
             $oContribuinte->setEmail(strtolower($oContribuinteWebService->email));
         }
         if (isset($oContribuinteWebService->inscricao)) {
             $oContribuinte->setInscricaoMunicipal($oContribuinteWebService->inscricao);
         }
         if (isset($oContribuinteWebService->data_inscricao)) {
             $oContribuinte->setDataInscricao(new DateTime($oContribuinteWebService->data_inscricao));
         }
         if (isset($oContribuinteWebService->tipo_classificacao)) {
             $oContribuinte->setTipoClassificacao($oContribuinteWebService->tipo_classificacao);
         }
         if (isset($oContribuinteWebService->optante_simples)) {
             $oContribuinte->setOptanteSimples($oContribuinteWebService->optante_simples);
         }
         if (isset($oContribuinteWebService->optante_simples_baixado)) {
             $oContribuinte->setOptanteSimplesBaixado($oContribuinteWebService->optante_simples_baixado);
         }
         if (isset($oContribuinteWebService->tipo_emissao)) {
             $oContribuinte->setTipoEmissao($oContribuinteWebService->tipo_emissao);
         }
         if (isset($oContribuinteWebService->exigibilidade)) {
             $oContribuinte->setExigibilidade($oContribuinteWebService->exigibilidade);
         }
         if (isset($oContribuinteWebService->subst_tributaria)) {
             $oContribuinte->setSubstituicaoTributaria($oContribuinteWebService->subst_tributaria);
         }
         if (isset($oContribuinteWebService->regime_tributario)) {
             $oContribuinte->setRegimeTributario($oContribuinteWebService->regime_tributario);
         }
         if (isset($oContribuinteWebService->incentivo_fiscal)) {
             $oContribuinte->setIncentivoFiscal($oContribuinteWebService->incentivo_fiscal);
         }
         if (isset($oContribuinteWebService->subst_tributaria)) {
             $oContribuinte->setDescricaoSubstituicaoTributaria(Contribuinte_Model_SubstitutoTributario::getById($oContribuinteWebService->subst_tributaria));
             $oContribuinte->setDescricaoExigibilidade(Contribuinte_Model_Exigeiss::getById($oContribuinteWebService->exigibilidade));
             $oContribuinte->setDescricaoIncentivoFiscal(Contribuinte_Model_IncentivoFiscal::getById($oContribuinteWebService->incentivo_fiscal));
             $oContribuinte->setDescricaoRegimeTributario(Contribuinte_Model_Tributacao::getById($oContribuinteWebService->regime_tributario));
             $oContribuinte->setDescricaoTipoClassificacao(Contribuinte_Model_TipoEmpresa::getById($oContribuinteWebService->tipo_classificacao));
             $oContribuinte->setDescricaoTipoEmissao(Contribuinte_Model_TipoEmissao::getById($oContribuinteWebService->tipo_emissao));
             $oContribuinte->setDescricaoOptanteSimples('Não');
             if ($oContribuinteWebService->optante_simples == 'Sim' && $oContribuinteWebService->optante_simples_baixado == 'Sim') {
                 $oContribuinte->setDescricaoOptanteSimples('Não');
             } else {
                 if ($oContribuinteWebService->optante_simples == 'Sim') {
                     $oContribuinte->setDescricaoOptanteSimples('Sim');
                     if (isset($oContribuinteWebService->optante_simples_categoria)) {
                         $oContribuinte->setOptanteSimplesCategoria($oContribuinteWebService->optante_simples_categoria);
                     }
                 }
             }
         }
     }
     return $oContribuinte;
 }
 /**
  * Método responsável pelo envio de email no cancelamento ou na solicitação do mesmo
  *
  * @param $oNota
  * @param $oSolicitacao
  * @param $sJustificativaFiscal
  * @return null|string
  */
 public function enviarEmailRejeicao($oNota, $oSolicitacao, $sJustificativaFiscal)
 {
     //Retorna os usuarios do tipo fiscal
     $aUsuariosFiscal = Administrativo_Model_Usuario::getByAttribute('tipo', Administrativo_Model_Usuario::USUARIO_TIPO_FISCAL);
     //Remove o usuário admin do array
     if ($aUsuariosFiscal[0]->getAdministrativo()) {
         unset($aUsuariosFiscal[0]);
     }
     $aEmailBCC = array();
     //Pega os emails cadastrados dos usuarios fiscais
     foreach ($aUsuariosFiscal as $oUsuarioFiscal) {
         $sEmail = $oUsuarioFiscal->getEmail();
         if (!is_null($sEmail) && $sEmail != '') {
             $aEmailBCC[] = $sEmail;
         }
     }
     $oValidadorEmail = new Zend_Validate_EmailAddress();
     $emailTO = $oNota->getT_email();
     $sMensagemRetorno = NULL;
     $sEmailTomador = $oSolicitacao->getEmailTomador();
     if ($oValidadorEmail->isValid($emailTO) || !empty($sEmailTomador) && $oValidadorEmail->isValid($sEmailTomador) || count($aEmailBCC) > 0) {
         $iInscricaoMunicipal = $oNota->getP_im();
         $oContribuinte = Contribuinte_Model_Contribuinte::getByInscricaoMunicipal($iInscricaoMunicipal);
         $this->view->nota = $oNota;
         $this->view->justificativa_fiscal = $sJustificativaFiscal;
         $this->view->tomadorNome = $oNota->getT_razao_social();
         $this->view->prestadorNome = $oContribuinte->getNome();
         $this->view->prestadorCnpj = DBSeller_Helper_Number_Format::maskCPF_CNPJ($oContribuinte->getCgcCpf());
         $this->view->nfseNumero = $oNota->getNota();
         $this->view->nfseUrl = $oNota->getUrlVerificacaoNota();
         $this->mensagem = $this->view->render('nota/email-rejeicao-cancelamento.phtml');
         // Verifica se foi mudado o e-mail do Tomador para enviar uma cópia oculta do cancelamento
         if (!empty($sEmailTomador) && $sEmailTomador != $oNota->getT_email() && $oValidadorEmail->isValid($sEmailTomador)) {
             $emailTO = $sEmailTomador;
             if ($oValidadorEmail->isValid($oNota->getT_email())) {
                 $aEmailBCC[] = $oNota->getT_email();
             }
             $sMensagemRetorno = "Cancelamento rejeitado com sucesso.<br>Email foi enviado para {$emailTO}";
         }
         // Caso não haja email cadastrado na nota e nem email informado no cancelamento,
         // ou se for uma solicitação de cancelamento, o primeiro email de fiscal é colocado
         // como destinatário principal para que seja possível o envio
         if (is_null($emailTO) || empty($emailTO)) {
             $emailTO = $aEmailBCC[0];
             unset($aEmailBCC[0]);
             $sMensagemRetorno = "Cancelamento efetuado com sucesso.<br>Email foi enviado para {$emailTO}";
         }
         // Envia Email
         DBSeller_Helper_Mail_Mail::send($emailTO, "Nota Fiscal Eletrônica nº {$oNota->getNota()}", $this->mensagem, 'utf-8', $aEmailBCC);
     }
     return $sMensagemRetorno;
 }
 /**
  * Consulta todas as guias dos contribuintes por competência
  * @param $iMes
  * @param $iAno
  * @return array
  */
 public static function getByGuiasContribuinteAndCompetencia($iMes, $iAno)
 {
     $oEntityManager = self::getEm();
     $sSql = 'SELECT nota.id_contribuinte,
                           nota.ano_comp, nota.mes_comp,
                           SUM(nota.s_vl_iss) AS s_vl_iss , SUM(nota.s_vl_servicos) AS s_vl_servicos
                      FROM Contribuinte\\Nota nota
                     WHERE nota.mes_comp           = :mes_comp AND
                           nota.ano_comp           = :ano_comp AND
                           nota.cancelada          = false AND
                           nota.s_vl_iss           > 0 AND
                           nota.s_dados_iss_retido = 1 AND
                           nota.emite_guia         = true AND
                           nota.importada          = false AND
                           NOT EXISTS(SELECT 1
                                        FROM Contribuinte\\Guia guia
                                       WHERE guia.mes_comp = :mes_comp
                                         AND guia.ano_comp = :ano_comp
                                         AND guia.id_contribuinte = nota.id_contribuinte)
                  GROUP BY nota.id_contribuinte, nota.ano_comp, nota.mes_comp
                  ORDER BY nota.ano_comp,
                           nota.mes_comp DESC';
     $oQuery = $oEntityManager->createQuery($sSql);
     $oQuery->setParameter('mes_comp', $iMes);
     $oQuery->setParameter('ano_comp', $iAno);
     $aResultados = $oQuery->getResult();
     $aRetorno = array();
     foreach ($aResultados as $aGuiaCompetencia) {
         $oContribuinte = Contribuinte_Model_Contribuinte::getById($aGuiaCompetencia['id_contribuinte']);
         $oCompetencia = new Contribuinte_Model_Competencia($aGuiaCompetencia['ano_comp'], $aGuiaCompetencia['mes_comp'], $oContribuinte);
         $oCompetencia->setTotalIss($aGuiaCompetencia['s_vl_iss']);
         $oCompetencia->setTotalServico($aGuiaCompetencia['s_vl_servicos']);
         $lExisteGuia = Contribuinte_Model_Guia::existeGuia($oContribuinte, $aGuiaCompetencia['mes_comp'], $aGuiaCompetencia['ano_comp']);
         if ($lExisteGuia) {
             continue;
         }
         $aRetorno[] = $oCompetencia;
     }
     unset($aResultados);
     return $aRetorno;
 }
 /**
  * Método responsável pelo envio de email no cancelamento ou na solicitação do mesmo
  * @param  Contribuinte_Model_Nota $oNota
  * @param  array                   $aDados
  * @param  array                   $aEmailBCC
  * @param  boolean                 $lSolicitacao
  * @param  string                  $sJustificativa
  * @return string|null
  * @throws Exception
  */
 private function enviarEmailCancelamento($oNota, $aDados, $aEmailBCC, $lSolicitacao = FALSE, $sJustificativa = null)
 {
     try {
         $oValidadorEmail = new Zend_Validate_EmailAddress();
         $emailTO = $oNota->getT_email();
         $sMensagemRetorno = NULL;
         if ($oValidadorEmail->isValid($emailTO) || !empty($aDados['email']) && $oValidadorEmail->isValid($aDados['email']) || count($aEmailBCC) > 0) {
             $iInscricaoMunicipal = $oNota->getP_im();
             $oContribuinte = Contribuinte_Model_Contribuinte::getByInscricaoMunicipal($iInscricaoMunicipal);
             $this->view->justificativa = $sJustificativa;
             $this->view->solicitacao = $lSolicitacao;
             $this->view->nota = $oNota;
             $this->view->tomadorNome = $oNota->getT_razao_social();
             $this->view->prestadorNome = $oContribuinte->getNome();
             $this->view->prestadorCnpj = DBSeller_Helper_Number_Format::maskCPF_CNPJ($oContribuinte->getCgcCpf());
             $this->view->nfseNumero = $oNota->getNota();
             $this->view->nfseUrl = $oNota->getUrlVerificacaoNota();
             $this->mensagem = $this->view->render('nota/email-emissao.phtml');
             $aArquivoPdfNfse = $this->getNotaImpressao($oNota->getCod_verificacao(), TRUE, TRUE);
             // Verifica se foi mudado o e-mail do Tomador para enviar uma cópia oculta do cancelamento
             if (!empty($aDados['email']) && $aDados['email'] != $oNota->getT_email() && $oValidadorEmail->isValid($aDados['email'])) {
                 $emailTO = $aDados['email'];
                 if ($oValidadorEmail->isValid($oNota->getT_email())) {
                     $aEmailBCC[] = $oNota->getT_email();
                 }
                 $sMensagemRetorno = "Cancelamento efetuado com sucesso.<br>Email foi enviado para {$emailTO}";
             }
             /*Caso não haja email cadastrado na nota e nem email informado no cancelamento,
               ou se for uma solicitação de cancelamento, o primeiro email de fiscal é colocado
               como destinatário principal para que seja possível o envio*/
             if (is_null($emailTO) || empty($emailTO) || $lSolicitacao) {
                 $emailTO = $aEmailBCC[0];
                 unset($aEmailBCC[0]);
                 if ($lSolicitacao) {
                     $sMensagemRetorno = "Cancelamento solicitado com sucesso.<br>Email foi enviado para {$emailTO}";
                 }
             }
             // Envia Email
             DBSeller_Helper_Mail_Mail::sendAttachment($emailTO, "Nota Fiscal Eletrônica nº {$oNota->getNota()}", $this->mensagem, $aArquivoPdfNfse, $aEmailBCC);
             // Apaga o arquivo temporario gerado para envio do email
             unlink($aArquivoPdfNfse['location']);
             return $sMensagemRetorno;
         }
     } catch (Exception $oError) {
         throw $oError;
     }
 }
 /**
  * Realiza a busca dos dados do contribuinte
  */
 public function buscaContribuinteAction()
 {
     $this->setAjaxContext('getContribuinte');
     $dados = Contribuinte_Model_Contribuinte::getByIm($this->getRequest()->getParam('term'));
     if (empty($dados) || $dados == null) {
         echo json_encode(null);
         return;
     }
     $parametro = $this->buscaParametroContribuinte($dados[0]->attr('inscricao'));
     if ($parametro === null || empty($parametro)) {
         echo json_encode(null);
         return;
     }
     $retorno = new stdClass();
     $retorno->dados = $dados[0]->toArray();
     $retorno->parametros = $parametro->toJson();
     echo json_encode($retorno);
 }
 /**
  * Acao Salvar DMS Entrada
  *
  * @return mixed bool|json
  */
 public function emissaoManualEntradaSalvarAction()
 {
     // Dados Request
     $aDados = $this->getRequest()->getParams();
     // Formulario
     $oForm = new Contribuinte_Form_DmsEntrada();
     $oForm->populate($aDados);
     // Valida o formulario
     if ($oForm->isValid($aDados)) {
         // Verifica se ja existe uma nota com o numero e se tem AIDOF
         self::emissaoManualEntradaVerificarDocumentoAction();
         // Valida se a data da nota esta no mes corrente
         $oValidaDataNota = new DBSeller_Validator_DateCurrentMonth();
         $oValidaDataNota->setMes($aDados['mes_comp']);
         $oValidaDataNota->setAno($aDados['ano_comp']);
         if (!$oValidaDataNota->isValid($aDados['s_nota_data'])) {
             $aErros = $oValidaDataNota->getMessages();
             $aRetornoJson['status'] = FALSE;
             $aRetornoJson['error'][] = $aErros[$oValidaDataNota::COMPETENCIA_INVALIDA];
             echo $this->getHelper('json')->sendJson($aRetornoJson);
             exit;
         }
         // Aplica filtro de mascaras
         $aDados['s_cpf_cnpj'] = $oForm->getElement('s_cpf_cnpj')->getValue();
         // SALVAR DADOS DA DMS (INI)
         if (isset($aDados['id_dms']) && !empty($aDados['id_dms'])) {
             $oDms = Contribuinte_Model_Dms::getById($aDados['id_dms']);
         } else {
             $oDms = new Contribuinte_Model_Dms();
             $oDms->setAnoCompetencia($aDados['ano_comp']);
             $oDms->setMesCompetencia($aDados['mes_comp']);
             $oDms->setOperacao('e');
         }
         if (!is_object($oDms)) {
             $aRetornoJson['status'] = FALSE;
             $aRetornoJson['error'][] = $this->translate->_('Código DMS não encontrado.');
             echo $this->getHelper('json')->sendJson($aRetornoJson);
             exit;
         }
         $oDms->setDataOperacao(new DateTime());
         $oDms->setStatus('aberto');
         $oDms->setIdContribuinte($this->oContribuinte->getIdUsuarioContribuinte());
         $oDms->setIdUsuario($this->usuarioLogado->getId());
         // SALVAR DADOS DA DMS (FIM)
         // SALVAR DADOS DA NOTA (INI)
         if (isset($aDados['id']) && !empty($aDados['id'])) {
             $oDmsNota = Contribuinte_Model_DmsNota::getById($aDados['id']);
         } else {
             $oDmsNota = new Contribuinte_Model_DmsNota();
         }
         if (!is_object($oDmsNota)) {
             $aRetornoJson['status'] = FALSE;
             $aRetornoJson['error'][] = $this->translate->_('Código Dms Nota não encontrado.');
             echo $this->getHelper('json')->sendJson($aRetornoJson);
             exit;
         }
         // Dados Nota
         $oGrupoDocumento = Contribuinte_model_nota::getTipoNota($aDados['tipo_documento']);
         $oDataNota = new DateTime(str_replace('/', '-', $aDados['s_nota_data']));
         $oDataNota->format('Y-m-d');
         $oDmsNota->setNotaNumero($aDados['s_nota']);
         $oDmsNota->setNotaSerie($aDados['s_nota_serie']);
         $oDmsNota->setNotaData($oDataNota);
         $oDmsNota->setGrupoDocumento($oGrupoDocumento->codigo_grupo);
         $oDmsNota->setTipoDocumento($aDados['tipo_documento']);
         $oDmsNota->setSituacaoDocumento($aDados['situacao_documento']);
         $oDmsNota->setNaturezaOperacao($aDados['natureza_operacao']);
         $oDmsNota->setEmiteGuia(TRUE);
         $oDmsNota->setServicoImpostoRetido($aDados['s_imposto_retido'] == 1);
         // Se a natureza da operação for 2 (fora da prefeitura), NÃO emite guia
         if ($aDados['natureza_operacao'] == 2) {
             $oDmsNota->setEmiteGuia(FALSE);
         }
         // Dados Servico
         $oDataServico = new DateTime(str_replace('/', '-', $aDados['s_data']));
         $oDataServico->format('Y-m-d');
         // Formata dados
         $sServicoValorPagar = DBSeller_Helper_Number_Format::toDataBase($aDados['s_valor_bruto']);
         $sServicoValorDeducao = DBSeller_Helper_Number_Format::toDataBase($aDados['s_valor_deducao']);
         $sServicoValorCondicionado = DBSeller_Helper_Number_Format::toDataBase($aDados['s_vl_condicionado']);
         $sServicoDescontoIncondicionado = DBSeller_Helper_Number_Format::toDataBase($aDados['s_vl_desc_incondicionado']);
         $sServicoAliquota = str_replace(',', '.', $aDados['s_aliquota']);
         $sServicoBaseCalculo = DBSeller_Helper_Number_Format::toDataBase($aDados['s_base_calculo']);
         $sServicoValorImposto = DBSeller_Helper_Number_Format::toDataBase($aDados['s_valor_imposto']);
         $sServicoValorLiquido = DBSeller_Helper_Number_Format::toDataBase($aDados['s_valor_pagar']);
         // Seta os dados do Documento de DMS
         $oDmsNota->setNumpre(0);
         $oDmsNota->setServicoData($oDataServico);
         $oDmsNota->setServicoImpostoRetido($aDados['s_imposto_retido']);
         $oDmsNota->setServicoValorPagar($sServicoValorPagar);
         $oDmsNota->setServicoValorDeducao($sServicoValorDeducao);
         $oDmsNota->setServicoValorCondicionado($sServicoValorCondicionado);
         $oDmsNota->setServicoDescontoIncondicionado($sServicoDescontoIncondicionado);
         $oDmsNota->setServicoAliquota($sServicoAliquota);
         $oDmsNota->setServicoBaseCalculo($sServicoBaseCalculo);
         $oDmsNota->setServicoValorImposto($sServicoValorImposto);
         $oDmsNota->setServicoValorLiquido($sServicoValorLiquido);
         $oDmsNota->setDescricaoServico($aDados['s_observacao']);
         $oDmsNota->setServicoCodigoObra($aDados['s_codigo_obra']);
         $oDmsNota->setServicoArt($aDados['s_art']);
         $oDmsNota->setServicoInformacoesComplementares($aDados['s_informacoes_complementares']);
         if ($this->oContribuinte->getInscricaoMunicipal()) {
             $oDadosTomador = Contribuinte_Model_Contribuinte::getByInscricaoMunicipal($this->oContribuinte->getInscricaoMunicipal());
         } else {
             $oDadosTomador = Contribuinte_Model_ContribuinteEventual::getByCpfCnpj($this->oContribuinte->getCgcCpf());
         }
         $oDmsNota->setTomadorCpfCnpj($oDadosTomador->getCgcCpf());
         $oDmsNota->setTomadorInscricaoMunicipal($oDadosTomador->getInscricaoMunicipal());
         $oDmsNota->setTomadorInscricaoEstadual($oDadosTomador->getInscricaoEstadual());
         $oDmsNota->setTomadorRazaoSocial($oDadosTomador->getNome());
         $oDmsNota->setTomadorNomeFantasia($oDadosTomador->getNomeFantasia());
         $oDmsNota->setTomadorEnderecoRua($oDadosTomador->getDescricaoLogradouro());
         $oDmsNota->setTomadorEnderecoNumero($oDadosTomador->getLogradouroNumero());
         $oDmsNota->setTomadorEnderecoComplemento($oDadosTomador->getLogradouroComplemento());
         $oDmsNota->setTomadorEnderecoBairro($oDadosTomador->getLogradouroBairro());
         $oDmsNota->setTomadorEnderecoCodigoMunicipio($oDadosTomador->getCodigoIbgeMunicipio());
         $oDmsNota->setTomadorEnderecoEstado($oDadosTomador->getEstado());
         $oDmsNota->setTomadorEnderecoCodigoPais($oDadosTomador->getCodigoPais());
         $oDmsNota->setTomadorEnderecoCEP($oDadosTomador->getCep());
         $oDmsNota->setTomadorTelefone($oDadosTomador->getTelefone());
         $oDmsNota->setTomadorEmail($oDadosTomador->getEmail());
         // Dados Tomador
         $oDadosPrestador = Contribuinte_Model_Empresa::getByCgcCpf($aDados['s_cpf_cnpj']);
         if (empty($oDadosPrestador->eCidade)) {
             // Se não for cadastrado no eCidade, salva prestador no NFSE
             if (empty($oDadosPrestador->eNota) && !empty($aDados['s_cpf_cnpj'])) {
                 $aDadosPrestador['t_cnpjcpf'] = $aDados['s_cpf_cnpj'];
                 $aDadosPrestador['t_razao_social'] = $aDados['s_razao_social'];
                 $oDadosPrestadorNota = new Contribuinte_Model_EmpresaBase();
                 $oDadosPrestadorNota->persist($aDadosPrestador);
             }
             $oDmsNota->setPrestadorCpfCnpj($aDados['s_cpf_cnpj']);
             $oDmsNota->setPrestadorRazaoSocial($aDados['s_razao_social']);
         } else {
             $oDadosPrestadorEcidade = $oDadosPrestador->eCidade[0];
             $oDmsNota->setPrestadorCpfCnpj($aDados['s_cpf_cnpj']);
             $oDmsNota->setPrestadorNomeFantasia($oDadosPrestadorEcidade->attr('nome_fanta'));
             $oDmsNota->setPrestadorRazaoSocial($oDadosPrestadorEcidade->attr('nome'));
             $oDmsNota->setPrestadorInscricaoMunicipal($oDadosPrestadorEcidade->attr('inscricao'));
             $oDmsNota->setPrestadorInscricaoEstadual($oDadosPrestadorEcidade->attr('inscr_est'));
             $oDmsNota->setPrestadorEnderecoRua($oDadosPrestadorEcidade->attr('endereco'));
             $oDmsNota->setPrestadorEnderecoNumero($oDadosPrestadorEcidade->attr('numero'));
             $oDmsNota->setPrestadorEnderecoComplemento($oDadosPrestadorEcidade->attr('complemento'));
             $oDmsNota->setPrestadorEnderecoBairro($oDadosPrestadorEcidade->attr('bairro'));
             $oDmsNota->setPrestadorEnderecoCodigoMunicipio($oDadosPrestadorEcidade->attr('cod_ibge'));
             $oDmsNota->setPrestadorEnderecoEstado($oDadosPrestadorEcidade->attr('uf'));
             $oDmsNota->setPrestadorEnderecoCodigoPais($oDadosPrestadorEcidade->attr('cod_pais'));
             $oDmsNota->setPrestadorEnderecoCEP($oDadosPrestadorEcidade->attr('cep'));
             $oDmsNota->setPrestadorTelefone($oDadosPrestadorEcidade->attr('telefone'));
             $oDmsNota->setPrestadorEmail($oDadosPrestadorEcidade->attr('email'));
         }
         $oDmsNota->setIdUsuario($this->usuarioLogado->getId());
         $oDmsNota->setIdContribuinte($this->oContribuinte->getIdUsuarioContribuinte());
         $oDmsNota->setDms($oDms->getEntity());
         // Adiciona o documento ao DMS
         $oDms->addDmsNotas($oDmsNota->getEntity());
         // Salva o DMS e o documento
         $iCodigoDms = $oDms->persist();
         // Configura a mensagem de retorno
         $aRetornoJson['status'] = TRUE;
         $aRetornoJson['success'] = $this->translate->_('Documento lançado com sucesso!');
         $aRetornoJson['id_dms'] = $iCodigoDms;
         // Quando for alteração, configura a mensagem de alteração
         if (isset($aDados['id']) && $aDados['id']) {
             $sUrlDmsAlterado = "/contribuinte/dms/emissao-manual-entrada/id_dms/{$iCodigoDms}";
             $aRetornoJson['success'] = $this->translate->_('Documento alterado com sucesso!');
             $aRetornoJson['url'] = $this->view->baseUrl($sUrlDmsAlterado);
         }
     } else {
         $aRetornoJson['status'] = FALSE;
         $aRetornoJson['fields'] = array_keys($oForm->getMessages());
         $aRetornoJson['error'][] = $this->translate->_('Preencha os dados corretamente.');
     }
     echo $this->getHelper('json')->sendJson($aRetornoJson);
 }
 /**
  * Prepara os dados para processar o arquivo do webservice
  *
  * @param string $sArquivo
  * @return bool
  * @throws Exception
  */
 public function preparaDados($sArquivo)
 {
     try {
         // Foi comentado o if de verificação pois estava ocorrendo um problema na emissão e retornava um arquivo em branco.
         // Somente em ambiente de desenvolvimento
         //if (APPLICATION_ENV == 'development') {
         $oDomDocument = new DOMDocument();
         $oDomDocument->loadXml($sArquivo);
         $oData = new Zend_Date();
         $this->sNomeArquivo = "/RecepcionarLote-{$oData->getTimestamp()}.xml";
         $this->sCaminhoArquivo = TEMP_PATH;
         /**
          * Verifica se o caminho do arquivo não existe recria a pasta
          */
         if (!file_exists($this->sCaminhoArquivo)) {
             mkdir($this->sCaminhoArquivo, 0777);
         }
         /**
          * Escreve os dados no arquivo
          */
         $this->sCaminhoNomeArquivo = $this->sCaminhoArquivo . $this->sNomeArquivo;
         $aArquivo = fopen($this->sCaminhoNomeArquivo, 'w');
         fputs($aArquivo, print_r($sArquivo, TRUE));
         fclose($aArquivo);
         //}
         $oValidacao = new DBSeller_Helper_Xml_AssinaturaDigital($sArquivo);
         /**
          * Validação digital do arquivo
          */
         if (!$oValidacao->validar()) {
             throw new Exception($oValidacao->getLastError());
         }
         $oUsuario = Administrativo_Model_Usuario::getByAttribute('cnpj', $oValidacao->getCnpj());
         if (!is_object($oUsuario)) {
             throw new Exception('Usuário contribuinte não existe!', 157);
         }
         /**
          * Busca usuário contribuinte através do usuário cadastrado
          */
         $aUsuarioContribuinte = Administrativo_Model_UsuarioContribuinte::getByAttributes(array('usuario' => $oUsuario->getId(), 'cnpj_cpf' => $oUsuario->getCnpj()));
         if (!is_object($aUsuarioContribuinte[0])) {
             throw new Exception('Usuário contribuinte não encontrado!', 160);
         }
         /**
          * Seta os dados do contribuinte
          */
         $this->oDadosUsuario = $oUsuario;
         $this->oContribuinte->sCpfCnpj = $aUsuarioContribuinte[0]->getCnpjCpf();
         $this->oContribuinte->iCodigoUsuario = $oUsuario->getId();
         $this->oContribuinte->iIdUsuarioContribuinte = $aUsuarioContribuinte[0]->getId();
         /**
          * Atualiza os dados do contribuinte na sessão
          */
         $oSessao = new Zend_Session_Namespace('nfse');
         $oSessao->contribuinte = Contribuinte_Model_Contribuinte::getById($this->oContribuinte->iIdUsuarioContribuinte);
         return TRUE;
     } catch (Exception $oErro) {
         throw new Exception($oErro->getMessage(), $oErro->getCode());
     }
 }
 /**
  * Define os dados do contribuinte
  *
  * @param Contribuinte_Model_Contribuinte $oContribuinte
  * @param                                 $iMesCompetencia
  * @param                                 $iAnoCompetencia
  * @param bool                            $lLivroFiscal
  */
 public function setDadosContribuinte(Contribuinte_Model_Contribuinte $oContribuinte, $iMesCompetencia, $iAnoCompetencia, $lLivroFiscal = TRUE)
 {
     if (!$lLivroFiscal) {
         $this->AddPage();
     }
     // Mês e ano da competnência por extenso
     $sCompetencia = DBSeller_Helper_Date_Date::mesExtenso($iMesCompetencia) . "/{$iAnoCompetencia}";
     $sCompetencia = utf8_decode($sCompetencia);
     // Mostra os campos referentes à guia somente para contribuintes NFSe
     if ($oContribuinte->getTipoEmissao() == Contribuinte_Model_Contribuinte::TIPO_EMISSAO_NOTA || !$lLivroFiscal) {
         // Situação da Guia
         $sDataFechamentoGuia = '-';
         $sSituacaoGuia = 'Em aberto';
         $oGuia = new Contribuinte_Model_Guia();
         $aGuia = $oGuia->getByCompetenciaAndContribuinte($iAnoCompetencia, $iMesCompetencia, $oContribuinte, Contribuinte_Model_Guia::$PRESTADOR);
         if (count($aGuia) > 0) {
             $oGuia = $aGuia[0]->getEntity();
             $sDataFechamentoGuia = $oGuia->getDataFechamento()->format('d/m/Y');
             $sSituacaoGuia = Contribuinte_Model_Guia::$SITUACAO[$oGuia->getSituacao()];
         }
         $aLarguraCelulas = array(57, 55, 55, 55, 55, 45, 50);
         $this->SetFont('Arial', 'B', 8);
         if ($lLivroFiscal) {
             // Mostra CGM ou Inscrição Municipal
             if ($oContribuinte->getCgm()) {
                 $this->Cell($aLarguraCelulas[0], 5, utf8_decode('CGM / Inscrição Municipal:'), 1);
             } else {
                 $this->Cell($aLarguraCelulas[0], 5, utf8_decode('Inscrição Municipal:'), 1);
             }
             $this->Cell($aLarguraCelulas[1], 5, utf8_decode('CPF / CNPJ:'), 1);
             $this->Cell($aLarguraCelulas[2], 5, utf8_decode('Mês Referência:'), 1);
             $this->Cell($aLarguraCelulas[3], 5, utf8_decode('Situação:'), 1);
             $this->Cell($aLarguraCelulas[4], 5, utf8_decode('Encerramento:'), 1);
             $this->Ln();
             $this->SetFont('Arial', NULL, 8);
             // Mostra CGM ou Inscrição Municipal
             if ($oContribuinte->getCgm()) {
                 $this->Cell($aLarguraCelulas[0], 5, $oContribuinte->getCgm(), 1);
             } else {
                 $this->Cell($aLarguraCelulas[0], 5, $oContribuinte->getInscricaoMunicipal(), 1);
             }
             $sCpfCnpjContribuinte = DBSeller_Helper_Number_Format::maskCPF_CNPJ($oContribuinte->getCgcCpf());
             $this->Cell($aLarguraCelulas[1], 5, $sCpfCnpjContribuinte, 1);
             $this->Cell($aLarguraCelulas[2], 5, $sCompetencia, 1);
             $this->Cell($aLarguraCelulas[3], 5, $sSituacaoGuia, 1);
             $this->Cell($aLarguraCelulas[4], 5, $sDataFechamentoGuia, 1);
             $this->Ln(6);
         } else {
             // Mostra CGM ou Inscrição Municipal
             if ($oContribuinte->getCgm()) {
                 $this->Cell($aLarguraCelulas[1], 5, utf8_decode('CGM / Inscrição Municipal:'), 1);
             } else {
                 $this->Cell($aLarguraCelulas[1], 5, utf8_decode('Inscrição Municipal:'), 1);
             }
             $this->Cell($aLarguraCelulas[6], 5, utf8_decode('CPF / CNPJ:'), 1);
             $this->Cell($aLarguraCelulas[5], 5, utf8_decode('Competencia Inicial:'), 1);
             $this->Cell($aLarguraCelulas[5], 5, utf8_decode('Competencia Final:'), 1);
             $this->Cell($aLarguraCelulas[5], 5, utf8_decode('Situação:'), 1);
             $this->Cell(0, 5, utf8_decode('Encerramento:'), 1);
             $this->Ln();
             $this->SetFont('Arial', NULL, 8);
             // Mostra CGM ou Inscrição Municipal
             if ($oContribuinte->getCgm()) {
                 $this->Cell($aLarguraCelulas[1], 5, $oContribuinte->getCgm(), 1);
             } else {
                 $this->Cell($aLarguraCelulas[1], 5, $oContribuinte->getInscricaoMunicipal(), 1);
             }
             $sCpfCnpjContribuinte = DBSeller_Helper_Number_Format::maskCPF_CNPJ($oContribuinte->getCgcCpf());
             $sCompetenciaInicial = $iMesCompetencia['inicial'] . '/' . $iAnoCompetencia['inicial'];
             $sCompetenciaFinal = $iMesCompetencia['final'] . '/' . $iAnoCompetencia['final'];
             $this->Cell($aLarguraCelulas[6], 5, $sCpfCnpjContribuinte, 1);
             $this->Cell($aLarguraCelulas[5], 5, $sCompetenciaInicial, 1);
             $this->Cell($aLarguraCelulas[5], 5, $sCompetenciaFinal, 1);
             $this->Cell($aLarguraCelulas[5], 5, $sSituacaoGuia, 1);
             $this->Cell(0, 5, $sDataFechamentoGuia, 1);
             $this->Ln(6);
         }
     } else {
         $aLarguraCelulas = array(93, 92, 92);
         $this->SetFont('Arial', 'B', 8);
         // Mostra CGM ou Inscrição Municipal
         if ($oContribuinte->getCgm()) {
             $this->Cell($aLarguraCelulas[0], 5, utf8_decode('CGM / Inscrição Municipal:'), 1);
         } else {
             $this->Cell($aLarguraCelulas[0], 5, utf8_decode('Inscrição Municipal:'), 1);
         }
         $this->Cell($aLarguraCelulas[1], 5, utf8_decode('CPF / CNPJ:'), 1);
         $this->Cell($aLarguraCelulas[2], 5, utf8_decode('Mês Referência:'), 1);
         $this->Ln();
         $this->SetFont('Arial', NULL, 8);
         // Mostra CGM ou Inscrição Municipal
         if ($oContribuinte->getCgm()) {
             $this->Cell($aLarguraCelulas[0], 5, $oContribuinte->getCgm(), 1);
         } else {
             $this->Cell($aLarguraCelulas[0], 5, $oContribuinte->getInscricaoMunicipal(), 1);
         }
         $this->Cell($aLarguraCelulas[1], 5, DBSeller_Helper_Number_Format::maskCPF_CNPJ($oContribuinte->getCgcCpf()), 1);
         $this->Cell($aLarguraCelulas[2], 5, $sCompetencia, 1);
         $this->Ln(6);
     }
     $this->SetFont('Arial', 'B', 8);
     $this->Cell(0, 5, utf8_decode('Razão Social:'), 1);
     $this->Ln();
     $this->SetFont('Arial', NULL, 8);
     $this->Cell(0, 5, utf8_decode($oContribuinte->getNome()), 1);
     $this->Ln(6);
     $this->SetFont('Arial', 'B', 8);
     $this->Cell(242, 5, utf8_decode('Endereço:'), 1);
     $this->Cell(35, 5, utf8_decode('Número:'), 1);
     $this->Ln();
     $this->SetFont('Arial', NULL, 8);
     $this->Cell(242, 5, utf8_decode($oContribuinte->getDescricaoLogradouro()), 1);
     $this->Cell(35, 5, utf8_decode($oContribuinte->getLogradouroNumero()), 1);
     $this->Ln(6);
     $this->SetFont('Arial', 'B', 8);
     $this->Cell(90, 5, utf8_decode('Complemento:'), 1);
     $this->Cell(80, 5, utf8_decode('Bairro:'), 1);
     $this->Cell(72, 5, utf8_decode('Cidade:'), 1);
     $this->Cell(35, 5, utf8_decode('Estado:'), 1);
     $this->Ln();
     $this->SetFont('Arial', NULL, 8);
     $this->Cell(90, 5, utf8_decode($oContribuinte->getLogradouroComplemento()), 1);
     $this->Cell(80, 5, utf8_decode($oContribuinte->getLogradouroBairro()), 1);
     $this->Cell(72, 5, utf8_decode($oContribuinte->getDescricaoMunicipio()), 1);
     $this->Cell(35, 5, utf8_decode($oContribuinte->getEstado()), 1);
     $this->Ln(6);
     $oDataAtual = new DateTime();
     $sEnderecoIp = $_SERVER['REMOTE_ADDR'];
     $this->SetFont('Arial', 'B', 8);
     $this->Cell(139, 5, utf8_decode("Endereço IP: {$sEnderecoIp}"), 1);
     $this->Cell(138, 5, utf8_decode("Data da impressão: {$oDataAtual->format('d/m/Y H:i:s')}"), 1);
     $this->Ln(7);
 }
 /**
  * Retorna a Instância do contribuinte
  * @return Contribuinte_Model_ContribuinteAbstract
  */
 public static function getContribuinte($iCodigoContribuinte)
 {
     $oContribuinte = Administrativo_Model_UsuarioContribuinte::getById($iCodigoContribuinte);
     $iCodigoUsuario = $oContribuinte->getId();
     $oUsuarioRetorno = NULL;
     switch ($oContribuinte->getTipoContribuinte()) {
         case Administrativo_Model_UsuarioContribuinte::CONTRIBUINTE_EVENTUAL:
             $oUsuarioRetorno = Contribuinte_Model_ContribuinteEventual::getById($iCodigoUsuario);
             break;
         case Administrativo_Model_UsuarioContribuinte::CONTRIBUINTE_MUNICIPAL:
             $oUsuarioRetorno = Contribuinte_Model_Contribuinte::getById($iCodigoUsuario);
             break;
     }
     return $oUsuarioRetorno;
 }
Exemplo n.º 18
0
 /**
  * Retorna os dados para a emissão da nfse
  *
  * @param string $sCodigoVerificacao
  * @param object $oNota
  * @param object $oPrefeitura
  * @return array
  */
 public static function getDadosEmissao($sCodigoVerificacao, $oNota, $oPrefeitura)
 {
     /**
      * Verifica se os dados foram enviados pela verificar de autenticidade sem nescessidade de estar logado ao sistema
      */
     if ($oNota->getId_contribuinte()) {
         $oPrestador = Contribuinte_Model_Contribuinte::getById($oNota->getId_contribuinte());
     } else {
         $oPrestador = Contribuinte_Model_Contribuinte::getByInscricaoMunicipal($oNota->getP_im());
     }
     $oBaseUrlHelper = new Zend_View_Helper_BaseUrl();
     $oServerUrlHelper = new Zend_View_Helper_ServerUrl();
     // Calcula e divide a quantidade de páginas conforme os dados descritos no campo de 'Descrição do Serviço'
     $iTamanhoTotalTexto = strlen($oNota->getS_dados_discriminacao());
     $iQndPaginas = $iTamanhoTotalTexto > 800 ? 2 : 1;
     $aDados = array();
     // Quebra os modelos de nota em páginas conforme os dados descritos no campo de 'Descrição do Serviço'
     for ($iIndex = 1; $iIndex <= $iQndPaginas; $iIndex++) {
         // Dados de manipulação do cabeçalho
         $oDadosCabecalho = new StdClass();
         $oDadosCabecalho->sBrasao = $oBaseUrlHelper->baseUrl('/global/img/brasao.jpg');
         $oDadosCabecalho->oDadosPrefeitura = $oPrefeitura;
         if (getenv('APPLICATION_ENV') != 'production') {
             $oDadosCabecalho->sUrlTarja = $oBaseUrlHelper->baseUrl('/administrativo/img/nfse/tarja_sem_valor.png');
         } else {
             if ($oNota->getIdNotaSubstituta()) {
                 $oDadosCabecalho->sUrlTarja = $oBaseUrlHelper->baseUrl('/administrativo/img/nfse/tarja_substituida.gif');
             } else {
                 if ($oNota->getCancelada()) {
                     $oDadosCabecalho->sUrlTarja = $oBaseUrlHelper->baseUrl('/administrativo/img/nfse/tarja_cancelada.gif');
                 }
             }
         }
         // Gera o QRCode apenas para os modelos que exibem o mesmo
         if (in_array($oPrefeitura->getModeloImpressaoNfse(), array(2, 3))) {
             $aVerificacao = array('module' => 'auth', 'controller' => 'nfse', 'action' => 'autenticar-post', 'prestador_cnpjcpf' => $oNota->getP_cnpjcpf(), 'codigo_verificacao' => $sCodigoVerificacao);
             $sUrlVerificada = DBSeller_Helper_Url_Encrypt::encrypt(array('module' => 'default', 'controller' => 'index', 'action' => 'autentica', 'url' => $aVerificacao));
             //"codigo_verificacao/{$sCodigoVerificacao}/prestador_cnpjcpf/{$oNota->getP_cnpjcpf()}"));
             $sQRCodeImagem = DBSeller_Helper_QRCode_QRCode::getQrCodeNfse($sUrlVerificada, $sCodigoVerificacao);
             $oDadosCabecalho->sQRCode = $oBaseUrlHelper->baseUrl("/tmp/{$sQRCodeImagem}");
         }
         // Dados de manipulação do prestador
         $oDadosPrestador = new StdClass();
         $oDadosPrestador->oPrestador = $oPrestador;
         $sLogoPrestador = Administrativo_Model_Empresa::getLogoByIm($oNota->getP_im());
         $oDadosPrestador->sLogoPrestador = $oBaseUrlHelper->baseUrl("/tmp/{$sLogoPrestador}");
         // Dados de manipulação do serviço
         $oDadosServico = new StdClass();
         $oDadosServico->oDadosNota = $oNota;
         // Verifica se não é a primeira página que será impressa e quebra as demais 'Descrição do Serviço'
         $iInicioCaracterPagina = 0;
         $iQndCaracterPagina = 800;
         if ($iIndex == 2) {
             $iInicioCaracterPagina = 800;
             $iQndCaracterPagina = $iTamanhoTotalTexto;
         }
         $sDiscriminacaoServico = substr($oNota->getS_dados_discriminacao(), $iInicioCaracterPagina, $iQndCaracterPagina);
         $oDadosServico->sDiscriminacaoServico = $sDiscriminacaoServico;
         // Dados de manipulação da nota subtstituida
         $iIdNotaSubstituida = $oNota->getIdNotaSubstituida();
         if ($iIdNotaSubstituida) {
             $oDadosServico->oDadosNotaSubstituida = Contribuinte_Model_Nota::getById($iIdNotaSubstituida);
         }
         $oRegistro = new StdClass();
         $oRegistro->iPagina = $iIndex;
         $oRegistro->oDadosCabecalho = $oDadosCabecalho;
         $oRegistro->oDadosPrestador = $oDadosPrestador;
         $oRegistro->oDadosServico = $oDadosServico;
         $aDados[] = $oRegistro;
     }
     return $aDados;
 }
 /**
  * Valida a importação de arquivo do tipo RPS modelo 1 (ABRASF 1.0)
  */
 public function validaArquivoCarregado()
 {
     $oSessao = new Zend_Session_Namespace('nfse');
     if (empty($this->oDadosPrefeitura)) {
         $aParametrosPrefeitura = Administrativo_Model_ParametroPrefeitura::getAll(0, 1);
         if (count($aParametrosPrefeitura) == 0) {
             throw new Exception('Parâmetros da prefeitura não configurados. Processamento Abortado');
         }
         $this->oDadosPrefeitura = $aParametrosPrefeitura[0];
     }
     if (empty($this->oArquivoXmlRetorno->lote->numero)) {
         $this->setMensagemErro('E88');
     }
     if (empty($this->oArquivoXmlRetorno->lote->cnpj)) {
         $this->setMensagemErro('E46');
     }
     $oContribuinte = Contribuinte_Model_Contribuinte::getByCpfCnpj($this->oArquivoXmlRetorno->lote->cnpj);
     if (empty($oContribuinte)) {
         $this->setMensagemErro('E45', 'Contribuinte: ' . $this->oArquivoXmlRetorno->lote->cnpj);
     } else {
         if ($oContribuinte->getCgcCpf() != $oSessao->contribuinte->getCgcCpf()) {
             $this->setMensagemErro('E156', '', true);
         }
     }
     if ($this->oArquivoXmlRetorno->lote->quantidade_rps != count($this->oArquivoXmlRetorno->rps)) {
         $this->setMensagemErro('E69');
     }
     if (strlen($this->oArquivoXmlRetorno->lote->quantidade_rps) > 4) {
         $this->setMensagemErro('E72');
     }
     $aNumeracaoRPS = array();
     foreach ($this->oArquivoXmlRetorno->rps as $oRps) {
         if ($this->oArquivoXmlRetorno->lote->inscricao_municipal != $oRps->prestador->inscricao_municipal) {
             $this->setMensagemErro('E70', 'RPS: ' . $oRps->numero);
         }
         if (empty($oRps->numero)) {
             $this->setMensagemErro('E11');
         } else {
             if (is_int($oRps->numero) && strlen($oRps->numero) > 15) {
                 $this->setMensagemErro('E96', 'RPS: ' . $oRps->numero);
             }
             if (in_array($oRps->numero, $aNumeracaoRPS)) {
                 $this->setMensagemErro('E71', 'RPS: ' . $oRps->numero);
             }
             $aNumeracaoRPS[$oRps->numero] = NULL;
         }
         if (strlen($oRps->serie) > 5) {
             $this->setMensagemErro('E97', 'RPS: ' . $oRps->numero);
         }
         if (empty($oRps->tipo)) {
             $this->setMensagemErro('E12', 'RPS: ' . $oRps->numero);
         }
         if (empty($oRps->natureza_operacao)) {
             $this->setMensagemErro('E3', 'RPS: ' . $oRps->numero);
         } else {
             if (!in_array($oRps->natureza_operacao, array(1, 2, 3, 4, 5, 6))) {
                 $this->setMensagemErro('E144', 'RPS: ' . $oRps->numero);
             }
         }
         if (empty($oRps->optante_simples_nacional)) {
             $this->setMensagemErro('E8', 'RPS: ' . $oRps->numero);
         } else {
             if (!in_array($oRps->optante_simples_nacional, array(1, 2))) {
                 $this->setMensagemErro('E146', 'RPS: ' . $oRps->numero);
             }
         }
         if (empty($oRps->incentivador_cultural)) {
             $this->setMensagemErro('E9', 'RPS: ' . $oRps->numero);
         } else {
             if (!in_array($oRps->incentivador_cultural, array(1, 2))) {
                 $this->setMensagemErro('E147', 'RPS: ' . $oRps->numero);
             }
         }
         if (empty($oRps->data_emissao)) {
             $this->setMensagemErro('E14', 'RPS: ' . $oRps->numero);
         }
         if (!in_array($oRps->status, array(1, 2))) {
             $this->setMensagemErro('E68', 'RPS: ' . $oRps->numero);
         }
         if ($oRps->data_emissao->format('Ymd') > date('Ymd')) {
             $this->setMensagemErro('E16', 'RPS: ' . $oRps->numero);
         }
         if ($oRps->prestador->cnpj == $oRps->tomador->cpf_cnpj) {
             $this->setMensagemErro('E52', 'RPS: ' . $oRps->numero);
         }
         // validação dos valores se float
         $oNumeroFloat = new Zend_Validate_Float();
         if ($oRps->servico->valores->valor_servicos <= 0) {
             $this->setMensagemErro('E18', 'RPS: ' . $oRps->numero);
         }
         if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_servicos)) {
             $this->setMensagemErro('E100', 'RPS: ' . $oRps->numero);
         }
         if ($oRps->servico->valores->valor_servicos <= 0) {
             $this->setMensagemErro('E18', 'RPS: ' . $oRps->numero);
         }
         if ($oRps->servico->valores->valor_deducoes > $oRps->servico->valores->valor_servicos) {
             $this->setMensagemErro('E19', 'RPS: ' . $oRps->numero);
         }
         if ($oRps->servico->valores->valor_deducoes < 0) {
             $this->setMensagemErro('E20', 'RPS: ' . $oRps->numero);
         }
         if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_deducoes)) {
             $this->setMensagemErro('E101', 'RPS: ' . $oRps->numero);
         }
         $fTotalDesconto = $oRps->servico->valores->desconto_incondicionado + $oRps->servico->valores->desconto_condicionado;
         if ($fTotalDesconto > $oRps->servico->valores->valor_servicos) {
             $this->setMensagemErro('E21', 'RPS: ' . $oRps->numero);
         }
         if ($fTotalDesconto < 0) {
             $this->setMensagemErro('E22', 'RPS: ' . $oRps->numero);
         }
         if (!$oNumeroFloat->isValid($fTotalDesconto)) {
             $this->setMensagemErro('E102', 'RPS: ' . $oRps->numero);
         }
         if ($oRps->servico->valores->valor_pis < 0) {
             $this->setMensagemErro('E23', 'RPS: ' . $oRps->numero);
         }
         if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_pis)) {
             $this->setMensagemErro('E103', 'RPS: ' . $oRps->numero);
         }
         if ($oRps->servico->valores->valor_cofins < 0) {
             $this->setMensagemErro('E24', 'RPS: ' . $oRps->numero);
         }
         if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_cofins)) {
             $this->setMensagemErro('E103', 'RPS: ' . $oRps->numero);
         }
         if ($oRps->servico->valores->valor_inss < 0) {
             $this->setMensagemErro('E25', 'RPS: ' . $oRps->numero);
         }
         if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_inss)) {
             $this->setMensagemErro('E103', 'RPS: ' . $oRps->numero);
         }
         if ($oRps->servico->valores->valor_ir < 0) {
             $this->setMensagemErro('E26', 'RPS: ' . $oRps->numero);
         }
         if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_ir)) {
             $this->setMensagemErro('E103', 'RPS: ' . $oRps->numero);
         }
         if ($oRps->servico->valores->valor_csll < 0) {
             $this->setMensagemErro('E27', 'RPS: ' . $oRps->numero);
         }
         if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_csll)) {
             $this->setMensagemErro('E103', 'RPS: ' . $oRps->numero);
         }
         if (!in_array($oRps->servico->valores->iss_retido, array(1, 2))) {
             $this->setMensagemErro('E36', 'RPS: ' . $oRps->numero);
         }
         if ($oRps->servico->valores->iss_retido == 1) {
             if ($oRps->servico->valores->valor_iss_retido <= 0) {
                 $this->setMensagemErro('E40', 'RPS: ' . $oRps->numero);
             }
             if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_iss_retido)) {
                 $this->setMensagemErro('E153', 'RPS: ' . $oRps->numero);
             }
             if (strlen(DBSeller_Helper_Number_Format::unmaskCPF_CNPJ($oRps->tomador->cpf_cnpj)) != 14) {
                 $this->setMensagemErro('E39', 'RPS: ' . $oRps->numero . ". Serviços tomados por pessoa Física não pode reter iss");
             }
         }
         if ($oRps->servico->valores->iss_retido == 1 && $oRps->servico->valores->valor_iss_retido > $oRps->servico->valores->valor_servicos) {
             $this->setMensagemErro('E99', 'RPS: ' . $oRps->numero);
         }
         if (empty($oRps->servico->discriminacao)) {
             $this->setMensagemErro('E41', 'RPS: ' . $oRps->numero);
         }
         if (!empty($oContribuinte)) {
             $iInscricaoMunicipal = $oContribuinte->getInscricaoMunicipal();
             $aServicos = Contribuinte_Model_Servico::getByIm($iInscricaoMunicipal);
             // Valida se o prestador de serviço pode atuar no município
             if (empty($aServicos)) {
                 $this->setMensagemErro('E17', 'RPS: ' . $oRps->numero);
             }
             // Valida se o prestador do serviço é emissor de NFSE
             $iTipoEmissaoNfse = Contribuinte_Model_ContribuinteAbstract::TIPO_EMISSAO_NOTA;
             if ($oContribuinte->getTipoEmissao($iInscricaoMunicipal) != $iTipoEmissaoNfse) {
                 $this->setMensagemErro('E138', 'RPS: ' . $oRps->numero);
             }
             // Valida a competência
             $oCompetencia = new Contribuinte_Model_Competencia($oRps->data_emissao->format('Y'), $oRps->data_emissao->format('m'), $oContribuinte);
             if (empty($oCompetencia) || $oCompetencia->existeGuiaEmitida()) {
                 $this->setMensagemErro(null, "A competência da RPS \"{$oRps->numero}\" é inválida, já existe Guia Emitida.");
             }
         }
         // Valida se a data é maior que a atual
         if ($oRps->data_emissao->format('Y-m') > date('Y-m')) {
             $this->setMensagemErro('E2', 'RPS: ' . $oRps->numero);
         }
         // Valida se já existe na base de dados
         $oTipoRps = Administrativo_Model_ParametroPrefeituraRps::getByTipoNfse($oRps->tipo);
         $iTipoRps = 0;
         // Valida o tipo de RPS
         if (is_object($oTipoRps)) {
             $iTipoRps = $oTipoRps->getEntity()->getTipoEcidade($oRps->tipo);
         }
         if ($iTipoRps == 0) {
             $this->setMensagemErro('E13', 'RPS: ' . $oRps->numero);
         }
         // Verifica se a numeração do AIDOF é válida
         $oAidof = new Administrativo_Model_Aidof();
         $lVerificaNumeracaoRps = $oAidof->verificarNumeracaoValidaParaEmissaoDocumento($oSessao->contribuinte->getInscricaoMunicipal(), $oRps->numero, $iTipoRps);
         if ($lVerificaNumeracaoRps === FALSE) {
             $this->setMensagemErro('E90', 'RPS: ' . $oRps->numero);
         }
         $lExisteRps = Contribuinte_Model_Nota::existeRps($oSessao->contribuinte, $oRps->numero, $oRps->tipo);
         if ($lExisteRps) {
             $this->setMensagemErro('E10', 'RPS: ' . $oRps->numero);
         }
         if (empty($oRps->servico->atividade)) {
             $this->setMensagemErro('E31', 'RPS: ' . $oRps->numero);
         } else {
             if (strlen($oRps->servico->atividade) > 5) {
                 $this->setMensagemErro('E104', 'RPS: ' . $oRps->numero);
             }
             // Valida Grupo de Serviço/Atividade
             if (!empty($iInscricaoMunicipal)) {
                 $oServico = Contribuinte_Model_Servico::getServicoPorAtividade($iInscricaoMunicipal, $oRps->servico->atividade);
                 if (!$oServico) {
                     $this->setMensagemErro('E30', 'RPS: ' . $oRps->numero);
                 }
             }
         }
         if (empty($oRps->servico->codigo_cnae)) {
             $this->setMensagemErro('E33', 'RPS: ' . $oRps->numero);
         } else {
             if (strlen($oRps->servico->codigo_cnae) > 7) {
                 $this->setMensagemErro('E105', 'RPS: ' . $oRps->numero);
             }
         }
         if (!empty($oRps->servico->ibge_municipio)) {
             if (strlen($oRps->servico->ibge_municipio) > 7) {
                 $this->setMensagemErro('E108', 'RPS: ' . $oRps->numero);
             }
             // 2 = fora do municipio
             if ($oRps->natureza_operacao == 2 && $oRps->servico->ibge_municipio == $this->oDadosPrefeitura->getIbge()) {
                 $this->setMensagemErro('E110', 'RPS: ' . $oRps->numero);
             }
         }
         // Validar IBGE Prefeitura
         if ($oRps->natureza_operacao == 1 && $this->oDadosPrefeitura->getIbge() !== $oRps->servico->ibge_municipio) {
             $this->setMensagemErro('E42', 'RPS: ' . $oRps->numero);
         }
         if (strlen($oRps->construcao_civil->art) > 15) {
             $this->setMensagemErro('E130', 'RPS: ' . $oRps->numero);
         }
         if (strlen($oRps->construcao_civil->codigo_obra) > 15) {
             $this->setMensagemErro('E129', 'Rps: ' . $oRps->numero);
         }
         if (count($this->aMensagensErroValidacao) >= 50) {
             $this->setMensagemErro('E49', '', TRUE);
         }
     }
     // Se existirem erros executa uma exceção com a lista de erros
     if (count($this->aMensagensErroValidacao) > 0) {
         return FALSE;
     }
     return TRUE;
 }