/** * Gera guia para substituto tributário * * @param $notas * @param $data * @return array */ public function gerarGuiaTomador($notas, $data) { if ($data == '') { $data = new DateTime(); } else { $data = parent::stringToDate($data); } $cpfcnpj = $notas[0]->getT_cnpjcpf(); $inscricao = $notas[0]->getT_im(); $ano_comp = $notas[0]->getAno_comp(); $mes_comp = $notas[0]->getMes_comp(); $planilha = Contribuinte_Model_GuiaEcidade::gerarPlanilhaRetencao($cpfcnpj, $inscricao, $ano_comp, $mes_comp); $array_servicos = array(); // Vetor que faz cache das descricoes dos servicos foreach ($notas as $n) { $this->addNota($n->getEntity()); $cod_serv = $n->getS_dados_cod_tributacao(); if (!isset($array_servicos[$cod_serv])) { $serv = Contribuinte_Model_Servico::getByCodServico($cod_serv); $descr_serv = urlencode($serv[0]->attr('desc_item_servico')); $array_servicos[$cod_serv] = $descr_serv; } Contribuinte_Model_GuiaEcidade::lancarPlanilhaRetencao($planilha, $n, $data, $array_servicos[$cod_serv]); } $guiaWS = Contribuinte_Model_GuiaEcidade::gerarGuiaTomador($planilha); $this->setValorCorrigido($guiaWS->valor_corrigido); $this->setValorHistorico($guiaWS->valor_historico); $this->setCodigoBarras($guiaWS->codigo_barras); $this->setLinhaDigitavel($guiaWS->linha_digitavel); $this->setJurosMulta($guiaWS->juros_multa); $this->setCodigoGuia($guiaWS->codigo_guia); $numpre = each($guiaWS->debitos_guia); $this->setNumpre($numpre['value']->iNumpre); $this->setAnoComp($ano_comp); $this->setMesComp($mes_comp); $this->setTipo(self::$TOMADOR); $this->setSituacao(self::$ABERTA); $this->setTipoDocumentoOrigem(self::$DOCUMENTO_ORIGEM_DMS); $this->setIm($inscricao); $this->setVencimento($data); $this->persist(); return array('objeto' => $this, 'arquivo' => $guiaWS->arquivo_guia); }
/** * Acao Salvar DMS * * @return boolean */ public function emissaoManualSaidaSalvarAction() { // Perfil do usuario logado $iIdPerfil = $this->oUsuario->getPerfil()->getId(); // Dados Request $aDados = $this->getRequest()->getParams(); // Prestador eventual if ($iIdPerfil == 6) { $oForm = new Contribuinte_Form_DmsSaidaEventual(); } else { $oForm = new Contribuinte_Form_DmsSaida(); } // Popula o formulario $oForm->populate($aDados); // Valida o formulario if ($oForm->isValid($aDados)) { // Verifica se ja existe uma nota com o numero e se tem AIDOF self::emissaoManualSaidaVerificarDocumentoAction(); // 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->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(Contribuinte_Model_Dms::SAIDA); } 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->setIdContribuinte($this->oContribuinte->getIdUsuarioContribuinte()); $oDms->setIdUsuario($this->usuarioLogado->getId()); $oDms->setDataOperacao(new DateTime()); $oDms->setStatus('aberto'); // 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 $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->setSituacaoDocumento($aDados['situacao_documento']); $oDmsNota->setNaturezaOperacao($aDados['natureza_operacao']); $oDmsNota->setEmiteGuia(TRUE); $oDmsNota->setServicoImpostoRetido(FALSE); // Verifica o flag para substituição tributária if (isset($aDados['s_imposto_retido']) && $aDados['s_imposto_retido'] == 1) { $oDmsNota->setServicoImpostoRetido(TRUE); } // Prestador eventual if ($iIdPerfil != 6) { $oGrupoDocumento = Contribuinte_Model_Nota::getTipoNota($aDados['tipo_documento']); $oDmsNota->setGrupoDocumento($oGrupoDocumento->codigo_grupo); $oDmsNota->setTipoDocumento($aDados['tipo_documento']); /* * Verifica se emite guia: * Se a natureza da operacao for 2 (fora da prefeitura) não emite guia * Se for substituto tributário (retido pelo tomador) não emite guia */ if ($aDados['natureza_operacao'] == 2 || $aDados['s_imposto_retido']) { $oDmsNota->setEmiteGuia(FALSE); } else { // Configura o parametro para emitir a guia $oChecaEmissaoGuiaStdClass = new stdClass(); $oChecaEmissaoGuiaStdClass->data = $aDados['s_nota_data']; $oChecaEmissaoGuiaStdClass->inscricao_municipal = $this->oContribuinte->getInscricaoMunicipal(); $oDmsNota->setEmiteGuia(Contribuinte_Model_EmissorGuia::checarEmissaoGuia($oChecaEmissaoGuiaStdClass)); } } else { $oDmsNota->setTipoDocumentoDescricao($aDados['tipo_documento_descricao']); } // Dados Servico $oDataServico = new DateTime(str_replace('/', '-', $aDados['s_data'])); $oDataServico->format('Y-m-d'); // Formatando dados $sServicoValorPagar = DBSeller_Helper_Number_Format::toFloat($aDados['s_valor_bruto']); $sServicoValorDeducao = DBSeller_Helper_Number_Format::toFloat($aDados['s_valor_deducao']); $sServicoValorCondicionado = DBSeller_Helper_Number_Format::toFloat($aDados['s_vl_condicionado']); $sServicoDescontoIncondicionado = DBSeller_Helper_Number_Format::toFloat($aDados['s_vl_desc_incondicionado']); $sServicoAliquota = DBSeller_Helper_Number_Format::toFloat($aDados['s_aliquota']); $sServicoBaseCalculo = DBSeller_Helper_Number_Format::toFloat($aDados['s_base_calculo']); $sServicoValorImposto = DBSeller_Helper_Number_Format::toFloat($aDados['s_valor_imposto']); $sServicoValorLiquido = DBSeller_Helper_Number_Format::toFloat($aDados['s_valor_pagar']); // Populando o 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->setServicoCodigoCnae($aDados['s_dados_cod_cnae']); $oDmsNota->setServicoCodigoServico($aDados['s_servico_prestado']); $oDmsNota->setDescricaoServico($aDados['s_observacao']); $oDmsNota->setServicoCodigoObra($aDados['s_codigo_obra']); $oDmsNota->setServicoArt($aDados['s_art']); $oDmsNota->setServicoInformacoesComplementares($aDados['s_informacoes_complementares']); // Dados Prestador eventual if ($iIdPerfil == 6) { $oDadosPrestador = Contribuinte_Model_ContribuinteEventual::getById($this->oContribuinte->getIdUsuarioContribuinte()); // Salva o código CNAE do serviço quando for prestador eventual $aServicoPrestado = Contribuinte_Model_Servico::getByCodServico($aDados['s_servico_prestado'], FALSE); $oServicoPrestado = is_array($aServicoPrestado) ? reset($aServicoPrestado) : $aServicoPrestado; $oDmsNota->setServicoCodigoCnae($oServicoPrestado->attr('estrut_cnae')); } else { $oDadosPrestador = Contribuinte_Model_Contribuinte::getById($this->oContribuinte->getIdUsuarioContribuinte()); } $oDmsNota->setPrestadorCpfCnpj($oDadosPrestador->getCgcCpf()); $oDmsNota->setPrestadorInscricaoMunicipal($oDadosPrestador->getInscricaoMunicipal()); $oDmsNota->setPrestadorInscricaoEstadual($oDadosPrestador->getInscricaoEstadual()); $oDmsNota->setPrestadorRazaoSocial($oDadosPrestador->getNome()); $oDmsNota->setPrestadorNomeFantasia($oDadosPrestador->getNomeFantasia()); $oDmsNota->setPrestadorEnderecoRua($oDadosPrestador->getDescricaoLogradouro()); $oDmsNota->setPrestadorEnderecoNumero($oDadosPrestador->getLogradouroNumero()); $oDmsNota->setPrestadorEnderecoComplemento($oDadosPrestador->getLogradouroComplemento()); $oDmsNota->setPrestadorEnderecoBairro($oDadosPrestador->getLogradouroBairro()); $oDmsNota->setPrestadorEnderecoCodigoMunicipio($oDadosPrestador->getCodigoIbgeMunicipio()); $oDmsNota->setPrestadorEnderecoEstado($oDadosPrestador->getEstado()); $oDmsNota->setPrestadorEnderecoCodigoPais($oDadosPrestador->getCodigoPais()); $oDmsNota->setPrestadorEnderecoCEP($oDadosPrestador->getCep()); $oDmsNota->setPrestadorTelefone($oDadosPrestador->getTelefone()); $oDmsNota->setPrestadorEmail($oDadosPrestador->getEmail()); $oDmsNota->setIdUsuario($this->usuarioLogado->getId()); $oDmsNota->setIdContribuinte($this->oContribuinte->getIdUsuarioContribuinte()); // Dados Tomador if ($aDados['s_cpf_cnpj'] != NULL) { $oDadosTomador = Contribuinte_Model_Empresa::getByCgcCpf($aDados['s_cpf_cnpj']); } if ($aDados['s_imposto_retido'] && (!isset($oDadosTomador) || !isset($oDadosTomador->eCidade))) { $sMensagem = 'Tomador com CPF/CNPJ %s não cadastrado.'; $sMensagemParametro = '"<b>' . $this->getRequest()->getParam('s_cpf_cnpj') . '</b>"'; $aRetornoJson['status'] = FALSE; $aRetornoJson['fields'] = array_keys($oForm->getMessages()); $aRetornoJson['error'][] = sprintf($this->translate->_($sMensagem), $sMensagemParametro); echo $this->getHelper('json')->sendJson($aRetornoJson); exit; } if (isset($oDadosTomador) && is_object($oDadosTomador) && isset($oDadosTomador->eCidade)) { $oDadosTomadorEcidade = $oDadosTomador->eCidade[0]; $oDmsNota->setTomadorCpfCnpj($aDados['s_cpf_cnpj']); $oDmsNota->setTomadorNomeFantasia($oDadosTomadorEcidade->attr('nome_fanta')); $oDmsNota->setTomadorRazaoSocial($oDadosTomadorEcidade->attr('nome')); $oDmsNota->setTomadorInscricaoMunicipal($oDadosTomadorEcidade->attr('inscricao')); $oDmsNota->setTomadorInscricaoEstadual($oDadosTomadorEcidade->attr('inscr_est')); $oDmsNota->setTomadorEnderecoRua($oDadosTomadorEcidade->attr('endereco')); $oDmsNota->setTomadorEnderecoNumero($oDadosTomadorEcidade->attr('numero')); $oDmsNota->setTomadorEnderecoComplemento($oDadosTomadorEcidade->attr('complemento')); $oDmsNota->setTomadorEnderecoBairro($oDadosTomadorEcidade->attr('bairro')); $oDmsNota->setTomadorEnderecoCodigoMunicipio($oDadosTomadorEcidade->attr('cod_ibge')); $oDmsNota->setTomadorEnderecoEstado($oDadosTomadorEcidade->attr('uf')); $oDmsNota->setTomadorEnderecoCodigoPais($oDadosTomadorEcidade->attr('cod_pais')); $oDmsNota->setTomadorEnderecoCEP($oDadosTomadorEcidade->attr('cep')); $oDmsNota->setTomadorTelefone($oDadosTomadorEcidade->attr('telefone')); $oDmsNota->setTomadorEmail($oDadosTomadorEcidade->attr('email')); } else { if ($aDados['s_cpf_cnpj'] && (!isset($oDadosTomador) || !isset($oDadosTomador->eNota))) { $oDadosTomadorNFSE = new Contribuinte_Model_EmpresaBase(); $aDadosTomador['t_cnpjcpf'] = $aDados['s_cpf_cnpj']; $aDadosTomador['t_razao_social'] = $aDados['s_razao_social']; $oDadosTomadorNFSE->persist($aDadosTomador); } $oDmsNota->setTomadorInscricaoMunicipal($aDados['s_inscricao_municipal']); $oDmsNota->setTomadorCpfCnpj($aDados['s_cpf_cnpj']); $oDmsNota->setTomadorRazaoSocial($aDados['s_razao_social']); } // Vincula o DMS ao documento $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 sucesso $aRetornoJson['status'] = TRUE; $aRetornoJson['success'] = $this->translate->_('Documento lançado com sucesso!'); $aRetornoJson['id_dms'] = $iCodigoDms; // Configura a mensagem para edição if (isset($aDados['id']) && $aDados['id']) { $aRetornoJson['success'] = $this->translate->_('Documento alterado com sucesso!'); $aRetornoJson['url'] = $this->view->baseUrl("/contribuinte/dms/emissao-manual-saida/id_dms/{$iCodigoDms}"); } } else { $aRetornoJson['status'] = FALSE; $aRetornoJson['fields'] = array_keys($oForm->getMessages()); $aRetornoJson['error'][] = $this->translate->_('Preencha os dados corretamente.'); } echo $this->getHelper('json')->sendJson($aRetornoJson); }
/** * Retorna os dados do serviço */ private function obtemDadosServico() { if ($this->entity->getS_dados_cod_tributacao()) { $servico = Contribuinte_Model_Servico::getByCodServico($this->entity->getS_dados_cod_tributacao()); $this->descricao_lista_servico = $servico[0]->attr('desc_item_servico'); } else { $this->descricao_lista_servico = 'Serviço/Atividade Não Informado'; } }
/** * Emissao de NFSE */ public function indexAction() { $oContribuinte = $this->_session->contribuinte; $sCodigoVerificacao = NULL; $oForm = $this->formNota($sCodigoVerificacao, $oContribuinte); try { $this->view->bloqueado_msg = FALSE; $aServicos = Contribuinte_Model_Servico::getByIm($oContribuinte->getInscricaoMunicipal()); $oForm->setListaServicos($aServicos); // Verifica se o contribuinte é prestador de serviços if ($aServicos == NULL || empty($aServicos)) { $this->view->bloqueado_msg = $this->translate->_('Empresa não prestadora de serviço.'); return; } // Verifica se o contribuinte é emissor de NFSe if ($oContribuinte->getTipoEmissao() != Contribuinte_Model_ContribuinteAbstract::TIPO_EMISSAO_NOTA) { $this->view->bloqueado_msg = $this->translate->_('Empresa não emissora de NFS-E.'); return; } // Dados do formulário $aDados = $this->getRequest()->getParams(); // Preeenche da nota copiada if (isset($aDados['id_copia'])) { $iIdCopiaNota = $aDados['id_copia']; $aCopiaDadosNota = Contribuinte_Model_Nota::getByAttribute('id', $iIdCopiaNota, '=', Contribuinte_Model_Nota::TIPO_RETORNO_ARRAY); $aDados = $aCopiaDadosNota[0]; $aDados['id_copia_nota'] = $iIdCopiaNota; } $oForm->preenche($aDados); $oForm->getElement('nota_substituida')->setRequired($oForm->getElement('nota_substituta')->isChecked()); // Processa o formulário if ($this->getRequest()->isPost()) { // Verifica se é tomador é if (!$this->podeReterPessoaFisica($aDados)) { $sMensagemErro = 'Permitido reter apenas para Pessoa Jurídica.'; $this->view->form = $oForm; $this->view->messages[] = array('error' => $sMensagemErro); return; } // Limpa espaços no email $aDados['t_email'] = trim($aDados['t_email']); // Validadores $oValidaData = new Zend_Validate_Date(array('format' => 'yyyy-MM-dd')); // Bloqueia a emissão se possuir declarações sem movimento if (isset($aDados['dt_nota']) && $oValidaData->isValid($aDados['dt_nota'])) { $oDataSimples = new DateTime($aDados['dt_nota']); $aDeclaracaoSemMovimento = Contribuinte_Model_Competencia::getDeclaracaoSemMovimentoPorContribuintes($oContribuinte->getInscricaoMunicipal(), $oDataSimples->format('Y'), $oDataSimples->format('m')); if (count($aDeclaracaoSemMovimento) > 0 && $oContribuinte->getOptanteSimplesCategoria() != Contribuinte_Model_ContribuinteAbstract::OPTANTE_SIMPLES_TIPO_MEI) { $sMensagemErro = 'Não é possível emitir um documento nesta data, pois a competência foi declarada como '; $sMensagemErro .= 'sem movimento.<br>Entre em contato com o setor de arrecadação da prefeitura.'; $this->view->form = $oForm; $this->view->messages[] = array('error' => $sMensagemErro); return; } } // Valida os dados do formulário if (!$oForm->isValid($aDados)) { $this->view->form = $oForm; $this->view->messages[] = array('error' => $this->translate->_('Preencha os dados corretamente.')); } else { // Remova chaves inválidas unset($aDados['enviar'], $aDados['action'], $aDados['controller'], $aDados['module'], $aDados['estado']); // filtro para retornar somente numeros $aFilterDigits = new Zend_Filter_Digits(); $aDados['p_im'] = $oContribuinte->getInscricaoMunicipal(); $aDados['t_cnpjcpf'] = $aFilterDigits->filter($aDados['t_cnpjcpf']); $aDados['t_cep'] = $aFilterDigits->filter($aDados['t_cep']); $aDados['t_telefone'] = $aFilterDigits->filter($aDados['t_telefone']); $aDados['tipo_nota'] = self::TIPO_NOTA; // Recalcula valores para garantir a integridade dos cálculos $aServico = Contribuinte_Model_Servico::getByCodServico($aDados['s_dados_cod_tributacao']); $oServico = reset($aServico); /* caso a atividade sejá retida no municipio de acordo com a legislação * envia para o teste de guia um parametro = true */ $aDados['s_tributacao_municipio'] = $oServico->attr('tributacao_municipio'); $oParametros = new stdClass(); $oParametros->vlr_servico = $oForm->getElement('s_vl_servicos')->getValue(); $oParametros->s_vl_deducoes = $oForm->getElement('s_vl_deducoes')->getValue(); $oParametros->perc_aliquota = $oForm->getElement('s_vl_aliquota')->getValue(); $oParametros->vlr_pis = $oForm->getElement('s_vl_pis')->getValue(); $oParametros->vlr_cofins = $oForm->getElement('s_vl_cofins')->getValue(); $oParametros->vlr_inss = $oForm->getElement('s_vl_inss')->getValue(); $oParametros->vlr_ir = $oForm->getElement('s_vl_ir')->getValue(); $oParametros->vlr_csll = $oForm->getElement('s_vl_csll')->getValue(); $oParametros->vlr_outras_retencoes = $oForm->getElement('s_vl_outras_retencoes')->getValue(); $oParametros->vlr_desc_condicionado = $oForm->getElement('s_vl_condicionado')->getValue(); $oParametros->vlr_desc_incondicionado = $oForm->getElement('s_vl_desc_incondicionado')->getValue(); $oParametros->imposto_retido_tomador = $oForm->getElement('s_dados_iss_retido')->getValue() == 1; $oParametros->deducao_editavel = $oServico->attr('deducao') == 't'; $oParametros->formatar_valores_ptbr = TRUE; // Calcula os valores da nota $oCalculoValores = Contribuinte_Model_Nota::calcularValores($oParametros); // Valores calculados $aDados['s_vl_deducoes'] = $oCalculoValores->s_vl_deducoes; $aDados['s_vl_bc'] = $oCalculoValores->vlr_base; $aDados['s_vl_iss'] = $oCalculoValores->vlr_iss; $aDados['s_vl_pis'] = $oCalculoValores->vlr_pis; $aDados['s_vl_cofins'] = $oCalculoValores->vlr_cofins; $aDados['s_vl_inss'] = $oCalculoValores->vlr_inss; $aDados['s_vl_ir'] = $oCalculoValores->vlr_ir; $aDados['s_vl_csll'] = $oCalculoValores->vlr_csll; $aDados['s_vl_outras_retencoes'] = $oCalculoValores->vlr_outras_retencoes; $aDados['s_vl_condicionado'] = $oCalculoValores->vlr_desc_condicionado; $aDados['s_vl_desc_incondicionado'] = $oCalculoValores->vlr_desc_incondicionado; $aDados['s_vl_liquido'] = $oCalculoValores->vlr_liquido; $aDados['dt_nota'] = Contribuinte_Model_Nota::getDateTime($aDados['dt_nota']); $aDados['id_contribuinte'] = $oContribuinte->getIdUsuarioContribuinte(); $aDados['id_usuario'] = $this->usuarioLogado->getId(); if ($oForm->getElement('nota_substituta')->isChecked()) { $aAtributosPesquisaNotaSubstituida = array('id_contribuinte' => $oContribuinte->getIdUsuarioContribuinte(), 'nota' => $aDados['nota_substituida'], 'cancelada' => FALSE); $oNotaSubstituida = Contribuinte_Model_Nota::getByAttributes($aAtributosPesquisaNotaSubstituida); $oNotaSubstituida = reset($oNotaSubstituida); /* * Caso exista a nota a ser substituida, verifica: * - Se já não possue nota substituta * - Se não possui guia emitida */ if ($oNotaSubstituida instanceof Contribuinte_Model_Nota && !$oNotaSubstituida->getIdNotaSubstituta() && !Contribuinte_Model_Guia::existeGuia($oContribuinte, $oNotaSubstituida->getMes_comp(), $oNotaSubstituida->getAno_comp(), Contribuinte_Model_Guia::$DOCUMENTO_ORIGEM_NFSE)) { // Seta os dados da nota $aDados['idNotaSubstituida'] = $oNotaSubstituida->getId(); } else { $sMensagemErro = '<b>Erro ao substituir a nota, verifique se:</b><br>'; $sMensagemErro .= '- A nota informada já foi emitida no sistema.<br>'; $sMensagemErro .= '- A nota informada não foi substituida.<br>'; $sMensagemErro .= '- A nota informada não possui guia emitida.'; $this->view->messages[] = array('error' => $this->translate->_($sMensagemErro)); $this->view->form = $oForm; return NULL; } unset($aDados['nota_substituta'], $aDados['nota_substituida']); } // Verifica se a nota é substituta // Persiste os dados na base de dados $oNota = new Contribuinte_Model_Nota(); if ($oNota->persist($aDados)) { // Se for nota substituta if (isset($oNotaSubstituida) && $oNotaSubstituida instanceof Contribuinte_Model_Nota) { $sMensagemCancelamento = "Substituida pela Nota nº {$oNota->getNota()}"; $oNotaSubstituida->setIdNotaSubstituta($oNota->getId()); $oNotaSubstituida->setCancelada(TRUE); $oNotaSubstituida->setCancelamentoJustificativa($this->translate->_($sMensagemCancelamento)); $oNotaSubstituida->setEmite_guia(FALSE); $oNotaSubstituida->persist($oNotaSubstituida->getEntity()); } } else { $this->view->form = $oForm; $this->view->messages[] = array('error' => $this->translate->_('Ocorreu um erro emitir a nota.')); return NULL; } // Envia email para o tomador $oValidaEmail = new Zend_Validate_EmailAddress(); if ($oValidaEmail->isValid($aDados['t_email'])) { $iInscricaoMunicipal = $aDados['p_im']; $oContribuinte = Contribuinte_Model_Contribuinte::getByInscricaoMunicipal($iInscricaoMunicipal); // Informações da view $this->view->nota = $oNota; $this->view->tomadorNome = $aDados['t_razao_social']; $this->view->prestadorNome = $oContribuinte->getNome('nome'); $this->view->prestadorCnpj = DBSeller_Helper_Number_Format::maskCPF_CNPJ($oContribuinte->getCgcCpf()); $this->view->nfseNumero = $oNota->getNota(); $this->view->nfseUrl = $oNota->getUrlVerificacaoNota(); // Renderiza o email com o texto diferente para notas substitutas if (isset($oNotaSubstituida) && $oNotaSubstituida instanceof Contribuinte_Model_Nota) { // Informações da View $this->view->sUrlNotaSubstituida = $oNotaSubstituida->getUrlVerificacaoNota(); $this->view->oNotaSubstituida = $oNotaSubstituida; $sMensagemEmail = $this->view->render('nota/email-emissao-substituida.phtml'); } else { $sMensagemEmail = $this->view->render('nota/email-emissao.phtml'); } $sArquivoPdfNfse = $this->getNotaImpressao($oNota->getCod_verificacao(), TRUE, TRUE); // Envia Email DBSeller_Helper_Mail_Mail::sendAttachment($aDados['t_email'], "Nota Fiscal Eletrônica nº {$oNota->getNota()}", $sMensagemEmail, $sArquivoPdfNfse); } $this->view->messages[] = array('success' => $this->translate->_('Nota emitida com sucesso.')); $this->_redirector->gotoSimple('dadosnota', NULL, NULL, array('id' => $oNota->getId())); } } else { $this->view->form = $oForm; $this->view->form->setListaServicos($aServicos); } } catch (Exception $oError) { $this->view->form = $oForm; $this->view->messages[] = array('error' => $this->translate->_($oError->getMessage())); return NULL; } }