/** * 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; }
/** * Retorna os dados da Nota Substituta */ public function getNotaSubstituta() { $oNota = $this->oNotaFiscal; $oXml = $this->oDomDocument; if ($oNota->getIdNotaSubstituta() != '') { $oNotaSubstituta = Contribuinte_Model_Nota::getById($oNota->getIdNotaSubstituta()); if (empty($oNotaSubstituta)) { return null; } $oXmlDadosSubstituicao = $oXml->createElement('ii:NfseSubstituicao'); $oXmlDadosSubstituidora = $oXml->createElement('ii:NfseSubstituidora', $this->formatarNumeroNota($oNotaSubstituta)); $oXmlDadosSubstituicao->appendChild($oXmlDadosSubstituidora); return $oXmlDadosSubstituicao; } return null; }
/** * Consulta notas para exportar RPS */ public function rpsConsultarAction() { parent::noTemplate(); $aParametros = $this->getRequest()->getParams(); /** * Verifica se foi informado mês e ano da competência */ if (!empty($aParametros['mes_competencia']) && !empty($aParametros['ano_competencia'])) { $oContribuinte = $this->_session->contribuinte; $sCodigosContribuintes = implode(',', $oContribuinte->getContribuintes()); $oPaginatorAdapter = new DBSeller_Controller_Paginator(Contribuinte_Model_Nota::getQuery(), 'Contribuinte_Model_Nota', 'Contribuinte\\Nota'); /** * Monta a query de consulta */ $oPaginatorAdapter->where("e.id_contribuinte in ({$sCodigosContribuintes})"); $oPaginatorAdapter->andWhere("e.mes_comp = {$aParametros['mes_competencia']}"); $oPaginatorAdapter->andWhere("e.ano_comp = {$aParametros['ano_competencia']}"); if (!empty($aParametros['numero_rps'])) { $oPaginatorAdapter->andWhere("e.nota = {$aParametros['numero_rps']}"); } $oPaginatorAdapter->orderBy('e.nota', 'DESC'); /** * Monta a paginação do GridPanel */ $oResultado = new Zend_Paginator($oPaginatorAdapter); $oResultado->setItemCountPerPage(10); $oResultado->setCurrentPageNumber($this->_request->getParam('page')); foreach ($oResultado as $oNota) { $oNota->oContribuinte = $oContribuinte; $oNota->lNaoGeraGuia = !$oNota->getEmite_guia(); $oNota->lGuiaEmitida = Contribuinte_Model_Guia::existeGuia($oContribuinte, $oNota->getMes_comp(), $oNota->getAno_comp(), Contribuinte_Model_Guia::$DOCUMENTO_ORIGEM_NFSE); /** * Informações da nota substituta */ $oNota->oNotaSubstituida = NULL; if ($oNota->getIdNotaSubstituida()) { $oNota->oNotaSubstituida = Contribuinte_Model_Nota::getById($oNota->getIdNotaSubstituida()); } /** * Informações da nota substituta */ $oNota->oNotaSubstituta = NULL; if ($oNota->getIdNotaSubstituta()) { $oNota->oNotaSubstituta = Contribuinte_Model_Nota::getById($oNota->getIdNotaSubstituta()); } } /** * Valores da pesquisa para montar a paginação */ if (is_array($aParametros)) { foreach ($aParametros as $sParametro => $sParametroValor) { if ($sParametroValor) { $sParametroValor = str_replace('/', '-', $sParametroValor); $this->view->sBusca .= "{$sParametro}/{$sParametroValor}/"; } } } $this->view->oDadosNota = $oResultado; } }
/** * Método para rejeitar a solicitação de cancelamento de NFSE */ public function rejeitarAction() { parent::noTemplate(); $aDados = $this->getRequest()->getParams(); $oForm = new Fiscal_Form_CancelamentoRejeitar(); $this->view->solicitacao = $aDados; $oForm->populate(array('id' => $aDados['id'])); $this->view->form = $oForm; if ($this->getRequest()->isPost()) { parent::noLayout(); try { $aDados = $this->getRequest()->getParams(); $oSolicitacao = Contribuinte_Model_SolicitacaoCancelamento::getById($aDados['id']); $oNota = Contribuinte_Model_Nota::getById($oSolicitacao->getNota()->getId()); $sRetornoEmail = $this->enviarEmailRejeicao($oNota, $oSolicitacao, $aDados['justificativa_fiscal']); $sMensagemRetorno = 'Solicitação rejeitada com sucesso!'; $sMensagemRetorno = is_null($sRetornoEmail) ? $sMensagemRetorno : $sRetornoEmail; $oSolicitacao->destroy(); $aRetornoJson['status'] = TRUE; $aRetornoJson['success'] = $sMensagemRetorno; } catch (Exception $oError) { $aRetornoJson['status'] = FALSE; $aRetornoJson['error'][] = $oError->getMessage(); } echo $this->getHelper('json')->sendJson($aRetornoJson); } }
/** * Execucao do cancelamento de NFSE via ajax */ public function cancelarPostAction() { $aDados = $this->getRequest()->getParams(); $oForm = new Contribuinte_Form_NotaCancelar(); $oForm->populate($aDados); if (!$oForm->isValid($aDados)) { $aRetornoJson['status'] = FALSE; $aRetornoJson['fields'] = array_keys($oForm->getMessages()); $aRetornoJson['error'][] = 'Preencha os dados corretamente.'; } else { try { $oContribuinte = $this->_session->contribuinte; $oPrefeitura = Administrativo_Model_Prefeitura::getDadosPrefeituraBase(); $aLoginUsuario = Zend_Auth::getInstance()->getIdentity(); $oUsuario = Administrativo_Model_Usuario::getByAttribute('login', $aLoginUsuario['login']); $oDataCancelamento = new DateTime(); $oNota = Contribuinte_Model_Nota::getById($aDados['id']); if ($oNota->podeCancelar($oContribuinte)) { //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; } } if ($oPrefeitura->getSolicitaCancelamento()) { $oSolicitacaoCancelamento = new Contribuinte_Model_SolicitacaoCancelamento(); $oSolicitacaoCancelamento->solicitar($oNota->getEntity(), $aDados, $oUsuario->getEntity()); $sJustificativa = $oSolicitacaoCancelamento->getJustificativa(); $sRetornoEmail = $this->enviarEmailCancelamento($oNota, $aDados, $aEmailBCC, TRUE, $sJustificativa); $sMensagemRetorno = "Cancelamento solicitado com sucesso!"; } else { $oCancelamentoNota = new Contribuinte_Model_CancelamentoNota(); $oCancelamentoNota->setUsuarioCancelamento($oUsuario); $oCancelamentoNota->setNotaCancelada($oNota); $oCancelamentoNota->setJustificativa($aDados['cancelamento_justificativa']); $oCancelamentoNota->setMotivoCancelmento($aDados['cancelamento_motivo']); $oCancelamentoNota->setDataHora($oDataCancelamento); $oCancelamentoNota->salvar(); $sRetornoEmail = $this->enviarEmailCancelamento($oNota, $aDados, $aEmailBCC, FALSE); $sMensagemRetorno = "Cancelamento efetuado com sucesso!"; } $sMensagemRetorno = is_null($sRetornoEmail) ? $sMensagemRetorno : $sRetornoEmail; $aRetornoJson['status'] = TRUE; $aRetornoJson['success'] = $sMensagemRetorno; } else { throw new Exception("Esta nota não pode mais ser cancelada!"); } } catch (Exception $oErro) { $aRetornoJson['status'] = FALSE; $aRetornoJson['error'][] = $oErro->getMessage(); } } echo $this->getHelper('json')->sendJson($aRetornoJson); }