/**
  * Retorna os totalizadores da importação para geraçao das guias
  *
  * @param integer $iCodigoImportacaoDesif
  * @param bool    $lDetalhes
  * @param null    $fAliquota
  * @return array
  */
 public static function getTotalReceitasGuia($iCodigoImportacaoDesif, $lDetalhes = FALSE, $fAliquota = NULL)
 {
     $aReceitaAgrupadas = array();
     $aParametros = array('importacao_desif' => $iCodigoImportacaoDesif, 'guia' => NULL);
     $aReceitaAgrupadas = NULL;
     $aContasImportacaoGuia = Contribuinte_Model_DesifContaGuia::getByAttributes($aParametros);
     /**
      * Percorre as contas selecionadas que irá gerar as guias
      */
     foreach ($aContasImportacaoGuia as $oDesifContaGuia) {
         $aParametros = array('importacao_desif' => $iCodigoImportacaoDesif, 'importacao_desif_conta' => $oDesifContaGuia->getImportacaoDesifConta()->getId());
         /**
          * Filtro por aliquota
          */
         if (!empty($fAliquota)) {
             $aParametros['aliq_issqn'] = "{$fAliquota}";
         }
         $aDesifReceita = Contribuinte_Model_ImportacaoDesifReceita::getByAttributes($aParametros);
         $fValorTotal = 0;
         $fValorIss = 0;
         /**
          * Percore as receitas de cada importação
          */
         foreach ($aDesifReceita as $oDesifReceita) {
             $fValor = $oDesifReceita->getValrCredMens();
             $fAliqIssqn = DBSeller_Helper_Number_Format::toFloat($oDesifReceita->getAliqIssqn());
             /**
              * Soma os totais por aliquota com detalhamento
              */
             if ($lDetalhes) {
                 if (isset($aAliqIssqnAgrupadas[$fAliqIssqn])) {
                     $aAliqIssqnAgrupadas[$fAliqIssqn]['total_receita'] = $aAliqIssqnAgrupadas[$fAliqIssqn]['total_receita'] + $fValor;
                 } else {
                     $aAliqIssqnAgrupadas[$fAliqIssqn]['total_receita'] = $fValor;
                 }
                 $fValorTotal = $aAliqIssqnAgrupadas[$fAliqIssqn]['total_receita'];
                 $aAliqIssqnAgrupadas[$fAliqIssqn]['total_iss'] = $fValorTotal * ($fAliqIssqn / 100);
                 $aReceitaAgrupadas['id_importacao_desif'] = $iCodigoImportacaoDesif;
                 $aReceitaAgrupadas['id_importacao_desif_conta'][] = $oDesifReceita->getImportacaoDesifConta()->getId();
                 $aReceitaAgrupadas['data_importacao'] = $oDesifReceita->getImportacaoDesif()->getDataImportacao();
                 $aReceitaAgrupadas['aliquotas_issqn'] = $aAliqIssqnAgrupadas;
             } else {
                 $fValorTotal = $fValorTotal + $fValor;
                 $fValorIss = $fValorIss + $fValor * ($fAliqIssqn / 100);
             }
         }
         /**
          * Retorna os valores totais das receitas e iss totalizadas
          */
         if (!$lDetalhes) {
             $aReceitaAgrupadas['total_receita'] = $aReceitaAgrupadas['total_receita'] + $fValorTotal;
             $aReceitaAgrupadas['total_iss'] = $aReceitaAgrupadas['total_iss'] + $fValorIss;
         }
     }
     return $aReceitaAgrupadas;
 }
 /**
  * Metodo para renderizar o formulario de cadastro/alteracao dos parametros do contribuinte.
  *
  * Retorna para a view a instancia do formulario Contribuinte_Form_ParametrosContribuinte
  */
 public function contribuinteAction()
 {
     $oForm = new Contribuinte_Form_ParametrosContribuinte();
     $oParametroContribuinte = $this->buscaParametroContribuinte($this->view->contribuinte->getIdUsuarioContribuinte());
     $aDados = $this->getRequest()->getPost();
     if ($this->getRequest()->isPost() && $oForm->isValid($aDados)) {
         try {
             $oDoctrine = Zend_Registry::get('em');
             $oDoctrine->getConnection()->beginTransaction();
             $oParametroContribuinte->setAvisofimEmissaoNota($aDados["avisofim_emissao_nota"]);
             $oParametroContribuinte->setCofins(DBSeller_Helper_Number_Format::toDataBase($aDados["cofins"]));
             $oParametroContribuinte->setCsll(DBSeller_Helper_Number_Format::toDataBase($aDados["csll"]));
             $oParametroContribuinte->setIdContribuinte($this->view->contribuinte->getIdUsuarioContribuinte());
             $oParametroContribuinte->setInss(DBSeller_Helper_Number_Format::toDataBase($aDados["inss"]));
             $oParametroContribuinte->setIr(DBSeller_Helper_Number_Format::toDataBase($aDados["ir"]));
             $oParametroContribuinte->setMaxDeducao(DBSeller_Helper_Number_Format::toDataBase($aDados["max_deducao"]));
             $oParametroContribuinte->setPis(DBSeller_Helper_Number_Format::toDataBase($aDados["pis"]));
             $oParametroContribuinte->setValorIssFixo(DBSeller_Helper_Number_Format::toDataBase($aDados["valor_iss_fixo"]));
             $oParametroContribuinte->salvar();
             $oDoctrine->getConnection()->commit();
             $this->view->messages[] = array('success' => 'Parâmetros modificados com sucesso.');
             $oArquivoUpload = new Zend_File_Transfer();
             $oArquivoUpload->receive();
             $iInscricaoMunicipal = $this->view->contribuinte->getInscricaoMunicipal();
             Administrativo_Model_Empresa::setLogoByIm($iInscricaoMunicipal, $oArquivoUpload->getFileInfo());
         } catch (Exception $oErro) {
             $oDoctrine->getConnection()->rollback();
             $this->view->messages[] = array('error' => $oErro->getMessage());
         }
     }
     $oDados->im = $this->view->contribuinte->getInscricaoMunicipal();
     $oDados->nome_contribuinte = $this->view->contribuinte->getNome();
     $oDados->avisofim_emissao_nota = $oParametroContribuinte->getAvisofimEmissaoNota();
     $oDados->cofins = $oParametroContribuinte->getCofins();
     $oDados->csll = $oParametroContribuinte->getCsll();
     $oDados->inss = $oParametroContribuinte->getInss();
     $oDados->ir = $oParametroContribuinte->getIr();
     $oDados->max_deducao = $oParametroContribuinte->getMaxDeducao();
     $oDados->pis = $oParametroContribuinte->getPis();
     $oDados->valor_iss_fixo = $oParametroContribuinte->getValorIssFixo();
     $oForm->preenche($oDados);
     $this->view->sLogoPrestador = Administrativo_Model_Empresa::getLogoByIm($oDados->im);
     $this->view->form = $oForm;
 }
 /**
  * Geração do relatório de insconstências nas declarações
  */
 public function inconsistenciasDeclaracoesGerarAction()
 {
     parent::noLayout();
     $aValidacaoFormulario = self::validarFormulario();
     if (is_array($aValidacaoFormulario)) {
         exit($this->getHelper('json')->sendJson($aValidacaoFormulario));
     }
     try {
         // Parâmetros do formulário
         $sCompetencia = $this->getRequest()->getParam('data_competencia_inicial');
         // Separa os meses e anos
         $iCompetenciaMes = intval(substr($sCompetencia, 0, 2));
         $iCompetenciaAno = intval(substr($sCompetencia, -4));
         $sNomeArquivo = 'relatorio_inconsistencias_declaracoes_' . date('YmdHis') . '.pdf';
         $oPdf = new Fiscal_Model_Relatoriopdfmodelo1('P');
         $oPdf->SetFillColor(220, 220, 220);
         $oPdf->Open(APPLICATION_PATH . "/../public/tmp/{$sNomeArquivo}");
         $oPdf->setLinhaFiltro('Relatório de Inconsistências nas Declarações');
         $oPdf->setLinhaFiltro('');
         $oPdf->setLinhaFiltro("FILTRO: Competência {$sCompetencia}");
         $oPdf->carregaDados();
         $oEntityManager = Zend_Registry::get('em');
         $oConexao = $oEntityManager->getConnection();
         try {
             $sSql = self::getSqlRelatorio();
             $oStatement = $oConexao->prepare($sSql);
             $oStatement->execute(array($iCompetenciaMes, $iCompetenciaAno));
             if ($oStatement->rowCount() < 1) {
                 throw new Exception($this->translate->_('Nenhum registro encontrado.'));
             }
             $aRelatorio = NULL;
             // Monta os dados do relatório com o índice para ordenação
             do {
                 $aRelatorio = $oStatement->fetch();
                 if (empty($aRelatorio)) {
                     continue;
                 }
                 // Dados do Prestador
                 $sPrestadorCnpjCpf = $aRelatorio['prestador_cnpjcpf'];
                 $sPrestadorCnpjCpf = DBSeller_Helper_Number_Format::maskCPF_CNPJ($sPrestadorCnpjCpf);
                 $sPrestadorRazaoSocial = $aRelatorio['prestador_razao_social'];
                 $sPrestadorRazaoSocial = DBSeller_Helper_String_Format::wordsCap($sPrestadorRazaoSocial);
                 $sPrestadorMunicipioUf = $aRelatorio['prestador_endereco_municipio'];
                 $sPrestadorMunicipioUf = DBSeller_Helper_String_Format::wordsCap($sPrestadorMunicipioUf);
                 $sPrestadorMunicipioUf = "{$sPrestadorMunicipioUf}/{$aRelatorio['prestador_endereco_uf']}";
                 $sPrestadorTelefone = $aRelatorio['prestador_contato_telefone'];
                 $sPrestadorTelefone = DBSeller_Helper_Number_Format::maskPhoneNumber($sPrestadorTelefone);
                 $sPrestadorDocumentoNumero = $aRelatorio['prestador_documento_numero'];
                 $sPrestadorDocumentoTipo = $aRelatorio['prestador_documento_tipo'];
                 $sPrestadorDocumentoValor = $aRelatorio['prestador_valor_servico'];
                 $sPrestadorDocumentoValor = DBSeller_Helper_Number_Format::toMoney($sPrestadorDocumentoValor, 2);
                 $sPrestadorDocumentoAliquota = $aRelatorio['prestador_valor_aliquota'];
                 $sPrestadorDocumentoAliquota = DBSeller_Helper_Number_Format::toMoney($sPrestadorDocumentoAliquota, 2);
                 $sPrestadorDocumentoIss = $aRelatorio['prestador_valor_iss'];
                 $sPrestadorDocumentoIss = DBSeller_Helper_Number_Format::toMoney($sPrestadorDocumentoIss, 2);
                 $sPrestadorDocumentoIssRetido = $aRelatorio['prestador_iss_retido'] ? 'Sim' : 'Não';
                 // Dados Tomador
                 $sTomadorCnpjCpf = $aRelatorio['tomador_cnpjcpf'];
                 $sTomadorCnpjCpf = DBSeller_Helper_Number_Format::maskCPF_CNPJ($sTomadorCnpjCpf);
                 $sTomadorRazaoSocial = $aRelatorio['tomador_razao_social'];
                 $sTomadorRazaoSocial = DBSeller_Helper_String_Format::wordsCap($sTomadorRazaoSocial);
                 $sTomadorMunicipioUf = $aRelatorio['tomador_endereco_municipio'];
                 $sTomadorMunicipioUf = DBSeller_Helper_String_Format::wordsCap($sTomadorMunicipioUf);
                 $sTomadorMunicipioUf = "{$sTomadorMunicipioUf}/{$aRelatorio['tomador_endereco_uf']}";
                 $sTomadorTelefone = $aRelatorio['tomador_contato_telefone'];
                 $sTomadorTelefone = DBSeller_Helper_Number_Format::maskPhoneNumber($sTomadorTelefone);
                 $sTomadorDocumentoNumero = $aRelatorio['tomador_documento_numero'];
                 $sTomadorDocumentoTipo = $aRelatorio['tomador_documento_tipo'];
                 $sTomadorDocumentoValor = $aRelatorio['tomador_valor_servico'];
                 $sTomadorDocumentoValor = DBSeller_Helper_Number_Format::toMoney($sTomadorDocumentoValor, 2);
                 $sTomadorDocumentoAliquota = $aRelatorio['tomador_valor_aliquota'];
                 $sTomadorDocumentoAliquota = DBSeller_Helper_Number_Format::toMoney($sTomadorDocumentoAliquota, 2);
                 $sTomadorDocumentoIss = $aRelatorio['tomador_valor_iss'];
                 $sTomadorDocumentoIss = DBSeller_Helper_Number_Format::toMoney($sTomadorDocumentoIss, 2);
                 $sTomadorDocumentoIssRetido = $aRelatorio['tomador_iss_retido'] ? 'Sim' : 'Não';
                 // Pega a descrição do documento tomado, pois NFSE não tem tipo definido
                 $sPrestadorDocumentoTipo = $sPrestadorDocumentoTipo ?: $sTomadorDocumentoTipo;
                 // Descrição do tipo de documento
                 $oPrestadorDocumentoTipo = Contribuinte_Model_Nota::getTipoNota($sPrestadorDocumentoTipo);
                 $sPrestadorDocumentoTipo = DBSeller_Helper_String_Format::wordsCap($oPrestadorDocumentoTipo->descricao);
                 $oTomadorDocumentoTipo = Contribuinte_Model_Nota::getTipoNota($sTomadorDocumentoTipo);
                 $sTomadorDocumentoTipo = DBSeller_Helper_String_Format::wordsCap($oTomadorDocumentoTipo->descricao);
                 // Indice para evitar a repetição do cabeçalho por prestador+tomador
                 $sIndiceRelatorio = "{$aRelatorio['prestador_cnpjcpf']}_{$aRelatorio['tomador_cnpjcpf']}";
                 // Dados do relatório
                 $aDadosRelatorio[$sIndiceRelatorio]['prestador_cnpjcpf'] = utf8_decode($sPrestadorCnpjCpf);
                 $aDadosRelatorio[$sIndiceRelatorio]['prestador_razao_social'] = utf8_decode($sPrestadorRazaoSocial);
                 $aDadosRelatorio[$sIndiceRelatorio]['prestador_municipio_uf'] = utf8_decode($sPrestadorMunicipioUf);
                 $aDadosRelatorio[$sIndiceRelatorio]['prestador_telefone'] = utf8_decode($sPrestadorTelefone);
                 $aDadosRelatorio[$sIndiceRelatorio]['tomador_cnpjcpf'] = utf8_decode($sTomadorCnpjCpf);
                 $aDadosRelatorio[$sIndiceRelatorio]['tomador_razao_social'] = utf8_decode($sTomadorRazaoSocial);
                 $aDadosRelatorio[$sIndiceRelatorio]['tomador_municipio_uf'] = utf8_decode($sTomadorMunicipioUf);
                 $aDadosRelatorio[$sIndiceRelatorio]['tomador_telefone'] = utf8_decode($sTomadorTelefone);
                 $aDadosRelatorio[$sIndiceRelatorio]['documentos'][] = array('prestador_doc_numero' => utf8_decode($sPrestadorDocumentoNumero), 'prestador_doc_tipo' => utf8_decode($sPrestadorDocumentoTipo), 'prestador_doc_valor_servico' => utf8_decode($sPrestadorDocumentoValor), 'prestador_doc_valor_aliquota' => utf8_decode($sPrestadorDocumentoAliquota), 'prestador_doc_valor_iss' => utf8_decode($sPrestadorDocumentoIss), 'prestador_doc_iss_retido' => utf8_decode($sPrestadorDocumentoIssRetido), 'tomador_doc_numero' => utf8_decode($sTomadorDocumentoNumero), 'tomador_doc_tipo' => utf8_decode($sTomadorDocumentoTipo), 'tomador_doc_valor_servico' => utf8_decode($sTomadorDocumentoValor), 'tomador_doc_valor_aliquota' => utf8_decode($sTomadorDocumentoAliquota), 'tomador_doc_valor_iss' => utf8_decode($sTomadorDocumentoIss), 'tomador_doc_iss_retido' => utf8_decode($sTomadorDocumentoIssRetido));
             } while ($aRelatorio);
             // Ordena os dados do relatorio
             if (isset($aDadosRelatorio) && is_array($aDadosRelatorio)) {
                 $aDadosRelatorio = DBSeller_Helper_Array_Abstract::ordenarPorIndice($aDadosRelatorio, 'prestador_cnpjcpf');
             } else {
                 throw new Exception($this->translate->_('Erro ao gerar o relatório.'));
             }
             $iMeiaPaginaX = $oPdf->w / 2 - $oPdf->lMargin;
             // Percorre os dados do relatório
             foreach ($aDadosRelatorio as $aRelatorioOrdenado) {
                 $oPdf->SetFont('Arial', 'B', 8);
                 $oPdf->Cell($iMeiaPaginaX, 5, 'PRESTADOR');
                 $oPdf->Cell($iMeiaPaginaX, 5, 'TOMADOR');
                 $oPdf->Ln();
                 $oPdf->Rect($oPdf->GetX(), $oPdf->GetY(), $iMeiaPaginaX, 15);
                 $oPdf->Rect($iMeiaPaginaX + $oPdf->lMargin, $oPdf->GetY(), $iMeiaPaginaX, 15);
                 $oPdf->Ln(2);
                 $oPdf->SetFont('Arial', 'B', 8);
                 $oPdf->Cell(20, 4, 'CPNJ/CPF:');
                 $oPdf->SetFont('Arial', '', 8);
                 $oPdf->Cell($iMeiaPaginaX - 20, 4, $aRelatorioOrdenado['prestador_cnpjcpf']);
                 $oPdf->SetFont('Arial', 'B', 8);
                 $oPdf->Cell(20, 4, 'CPNJ/CPF:');
                 $oPdf->SetFont('Arial', '', 8);
                 $oPdf->Cell($iMeiaPaginaX - 20, 4, $aRelatorioOrdenado['tomador_cnpjcpf']);
                 $oPdf->Ln();
                 $oPdf->SetFont('Arial', 'B', 8);
                 $oPdf->Cell(20, 4, utf8_decode('Razão Social'));
                 $oPdf->SetFont('Arial', '', 8);
                 $oPdf->Cell($iMeiaPaginaX - 20, 4, $aRelatorioOrdenado['prestador_razao_social']);
                 $oPdf->SetFont('Arial', 'B', 8);
                 $oPdf->Cell(20, 4, utf8_decode('Razão Social'));
                 $oPdf->SetFont('Arial', '', 8);
                 $oPdf->Cell($iMeiaPaginaX - 20, 4, $aRelatorioOrdenado['tomador_razao_social']);
                 $oPdf->Ln();
                 $oPdf->SetFont('Arial', 'B', 8);
                 $oPdf->Cell(20, 4, utf8_decode('Município/UF:'));
                 $oPdf->SetFont('Arial', '', 8);
                 $oPdf->Cell($iMeiaPaginaX - 20, 4, $aRelatorioOrdenado['prestador_municipio_uf']);
                 $oPdf->SetFont('Arial', 'B', 8);
                 $oPdf->Cell(20, 4, utf8_decode('Município/UF:'));
                 $oPdf->SetFont('Arial', '', 8);
                 $oPdf->Cell($iMeiaPaginaX - 20, 4, $aRelatorioOrdenado['tomador_municipio_uf']);
                 $oPdf->Ln(5);
                 if (count($aRelatorioOrdenado['documentos']) > 0) {
                     $aLarguraColuna = array(28, 15, 64, 26, 19, 27, 11);
                     $oPdf->SetFont('Arial', 'B', 8);
                     $oPdf->Cell($aLarguraColuna[0], 5, utf8_decode('Nº do Documento'), 1, 0, 'C', 1);
                     $oPdf->Cell($aLarguraColuna[1], 5, utf8_decode('Origem'), 1, 0, 'L', 1);
                     $oPdf->Cell($aLarguraColuna[2], 5, utf8_decode('Tipo de Documento'), 1, 0, 'L', 1);
                     $oPdf->Cell($aLarguraColuna[3], 5, utf8_decode('Valor Serviço (R$)'), 1, 0, 'R', 1);
                     $oPdf->Cell($aLarguraColuna[4], 5, utf8_decode('Alíquota (%)'), 1, 0, 'R', 1);
                     $oPdf->Cell($aLarguraColuna[5], 5, utf8_decode('Valor Imposto (R$)'), 1, 0, 'R', 1);
                     $oPdf->Cell($aLarguraColuna[6], 5, utf8_decode('Subst.'), 1, 0, 'L', 1);
                     $oPdf->Ln(5);
                     $iFundo = 0;
                     // Alterador do fundo da linha (Zebra)
                     // Percorre os documentos do relatório
                     foreach ($aRelatorioOrdenado['documentos'] as $aDocumento) {
                         $lFundoLinha = $iFundo++ % 2 == 0 ? 0 : 1;
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->MultiCell($aLarguraColuna[0], 10, $aDocumento['prestador_doc_numero'], 1, 'C', $lFundoLinha);
                         $oPdf->SetY($oPdf->getY() - 10);
                         $oPdf->SetX($oPdf->getX() + $aLarguraColuna[0]);
                         $oPdf->Cell($aLarguraColuna[1], 5, 'Prestador', 1, 0, 'L', $lFundoLinha);
                         $oPdf->Cell($aLarguraColuna[2], 5, $aDocumento['prestador_doc_tipo'], 1, 0, 'L', $lFundoLinha);
                         $oPdf->Cell($aLarguraColuna[3], 5, $aDocumento['prestador_doc_valor_servico'], 1, 0, 'R', $lFundoLinha);
                         $oPdf->Cell($aLarguraColuna[4], 5, $aDocumento['prestador_doc_valor_aliquota'], 1, 0, 'R', $lFundoLinha);
                         $oPdf->Cell($aLarguraColuna[5], 5, $aDocumento['prestador_doc_valor_iss'], 1, 0, 'R', $lFundoLinha);
                         $oPdf->Cell($aLarguraColuna[6], 5, $aDocumento['prestador_doc_iss_retido'], 1, 0, 'L', $lFundoLinha);
                         $oPdf->Ln(5);
                         $oPdf->Cell($aLarguraColuna[0], 5, '');
                         $oPdf->Cell($aLarguraColuna[1], 5, 'Tomador', 1, 0, 'L', $lFundoLinha);
                         $oPdf->Cell($aLarguraColuna[2], 5, $aDocumento['tomador_doc_tipo'], 1, 0, 'L', $lFundoLinha);
                         $oPdf->Cell($aLarguraColuna[3], 5, $aDocumento['tomador_doc_valor_servico'], 1, 0, 'R', $lFundoLinha);
                         $oPdf->Cell($aLarguraColuna[4], 5, $aDocumento['tomador_doc_valor_aliquota'], 1, 0, 'R', $lFundoLinha);
                         $oPdf->Cell($aLarguraColuna[5], 5, $aDocumento['tomador_doc_valor_iss'], 1, 0, 'R', $lFundoLinha);
                         $oPdf->Cell($aLarguraColuna[6], 5, $aDocumento['tomador_doc_iss_retido'], 1, 0, 'L', $lFundoLinha);
                         $oPdf->Ln(5);
                     }
                     $oPdf->Ln();
                 }
             }
         } catch (Exception $oErro) {
             throw new Exception($oErro->getMessage());
         }
         $oPdf->Output();
         $aRetornoJson['status'] = TRUE;
         $aRetornoJson['url'] = $this->view->baseUrl("tmp/{$sNomeArquivo}");
         $aRetornoJson['success'] = $this->translate->_('Relatório gerado com sucesso.');
     } catch (Exception $oErro) {
         $aRetornoJson['status'] = FALSE;
         $aRetornoJson['error'][] = $oErro->getMessage();
     }
     echo $this->getHelper('json')->sendJson($aRetornoJson);
 }
 /**
  * Cabeçalho do relatórios
  *
  * @throws Exception
  */
 public function Header()
 {
     $sTarjaSemValorFiscal = APPLICATION_PATH . '/../public/administrativo/img/nfse/tarja_sem_valor.png';
     $sAmbiente = getenv('APPLICATION_ENV');
     if (file_exists($sTarjaSemValorFiscal) && $sAmbiente != 'production') {
         $this->Image($sTarjaSemValorFiscal, 70, 20);
     }
     $this->SetCreator(utf8_decode('Sistema: EcidadeOnline2 - DBSeller Sistemas Integrados'));
     $sLogotipoPrefeitura = APPLICATION_PATH . '/../public/global/img/brasao.jpg';
     if (file_exists($sLogotipoPrefeitura)) {
         $this->Image($sLogotipoPrefeitura, $this->rMargin, $this->tMargin, 20);
     }
     $sNomePrefeitura = utf8_decode($this->oDadosPrefeitura->getNome());
     $sRua = utf8_decode(trim($this->oDadosPrefeitura->getEndereco()));
     $sNumero = utf8_decode(trim($this->oDadosPrefeitura->getNumero()));
     $sMunicipio = utf8_decode(trim($this->oDadosPrefeitura->getMunicipio()));
     $sEstado = utf8_decode(trim($this->oDadosPrefeitura->getUf()));
     $sTelefone = utf8_decode(trim($this->oDadosPrefeitura->getTelefone()));
     $sTelefone = DBSeller_Helper_Number_Format::maskPhoneNumber($sTelefone);
     $sCnpj = utf8_decode(trim($this->oDadosPrefeitura->getCnpj()));
     $sCnpj = DBSeller_Helper_Number_Format::maskCPF_CNPJ($sCnpj);
     $sUrl = utf8_decode(trim($this->oDadosPrefeitura->getUrl()));
     $sEmail = utf8_decode(trim($this->oDadosPrefeitura->getEmail()));
     if (strlen($sNomePrefeitura) > 42) {
         $iTamanhoFonte = 8;
     } else {
         $iTamanhoFonte = 9;
     }
     $this->SetFont('Arial', 'BI', $iTamanhoFonte);
     $this->Text($this->rMargin + 22, $this->tMargin + 5, $sNomePrefeitura);
     $this->SetFont('Arial', 'I', 8);
     $sComplento = '';
     if ($this->oDadosPrefeitura->getComplemento()) {
         $sComplento = ', ' . substr(trim($this->oDadosPrefeitura->getComplemento()), 0, 20);
     }
     $this->Text($this->rMargin + 22, $this->tMargin + 8, "{$sRua}, {$sNumero} {$sComplento}");
     $this->Text($this->rMargin + 22, $this->tMargin + 11, "{$sMunicipio} - {$sEstado}");
     $this->Text($this->rMargin + 22, $this->tMargin + 14, "{$sTelefone} - CNPJ : {$sCnpj}");
     $this->Text($this->rMargin + 22, $this->tMargin + 17, $sEmail);
     $this->Text($this->rMargin + 22, $this->tMargin + 20, $sUrl);
     $this->SetFont('Arial', '', 7);
     $iComprimento = $this->w - $this->rMargin - $this->lMargin;
     if ($this->CurOrientation == 'L') {
         $iTamanhoRetangulo = $iComprimento - 200;
         $iRMargemRetangulo = $this->rMargin + 200;
         $iComprimento = $iComprimento - 6;
     } else {
         $iTamanhoRetangulo = $iComprimento - 120;
         $iRMargemRetangulo = $this->rMargin + 120;
     }
     $this->line($this->rMargin, $this->tMargin + 25, $iComprimento + $this->rMargin, $this->tMargin + 25);
     $this->setfillcolor(255);
     if (!empty($this->oCabecalho)) {
         if (count($this->oCabecalho->aLinhas) > 7) {
             throw new Exception('Número de Registro do Header é maior que o permitido.');
         }
         foreach ($this->oCabecalho->aLinhas as $iLinha => $sHeader) {
             $this->SetXY($iComprimento - 60, $this->tMargin + 2 + $iLinha * 3);
             $this->Cell(70, 3, utf8_decode($sHeader), 0, 1, 'J', TRUE);
         }
     }
     $this->Rect($iRMargemRetangulo, $this->tMargin, $iTamanhoRetangulo, 25);
     $this->setY(35);
     $this->ln(5);
 }
 /**
  * Grava os parâmetros da prefeitura na base de dados
  *
  * @param array $aDados
  */
 public function persist(array $aDados)
 {
     $oEntity = $this->getEm();
     if (isset($aDados['ibge'])) {
         $this->setIbge($aDados['ibge']);
     }
     if (isset($aDados['nome'])) {
         $this->setNome($aDados['nome']);
     }
     if (isset($aDados['controle_aidof'])) {
         $this->setControleAidof($aDados['controle_aidof']);
     }
     if (isset($aDados['avisofim_emissao_nota'])) {
         $this->setQuantidadeAvisoFimEmissao($aDados['avisofim_emissao_nota']);
     }
     if (isset($aDados['verifica_autocadastro'])) {
         $this->setVerificaAutocadastro($aDados['verifica_autocadastro']);
     }
     if (isset($aDados['nota_retroativa'])) {
         $this->setNotaRetroativa($aDados['nota_retroativa']);
     }
     if (isset($aDados['cnpj'])) {
         $this->setCnpj($aDados['cnpj']);
     }
     if (isset($aDados['nome_relatorio'])) {
         $this->setNomeRelatorio($aDados['nome_relatorio']);
     }
     if (isset($aDados['endereco'])) {
         $this->setEndereco($aDados['endereco']);
     }
     if (isset($aDados['numero'])) {
         $this->setNumero($aDados['numero']);
     }
     if (isset($aDados['complemento'])) {
         $this->setComplemento($aDados['complemento']);
     }
     if (isset($aDados['bairro'])) {
         $this->setBairro($aDados['bairro']);
     }
     if (isset($aDados['municipio'])) {
         $this->setMunicipio($aDados['municipio']);
     }
     if (isset($aDados['uf'])) {
         $this->setUf($aDados['uf']);
     }
     if (isset($aDados['cep'])) {
         $this->setCep($aDados['cep']);
     }
     if (isset($aDados['telefone'])) {
         $this->setTelefone($aDados['telefone']);
     }
     if (isset($aDados['fax'])) {
         $this->setFax($aDados['fax']);
     }
     if (isset($aDados['email'])) {
         $this->setEmail($aDados['email']);
     }
     if (isset($aDados['url'])) {
         $this->setUrl($aDados['url']);
     }
     if (isset($aDados['modelo_impressao_nfse'])) {
         $this->setModeloImpressaoNfse($aDados['modelo_impressao_nfse']);
     }
     if (isset($aDados['informacoes_complementares_nfse'])) {
         $this->setInformacoesComplementaresNfse($aDados['informacoes_complementares_nfse']);
     }
     if (isset($aDados['modelo_importacao_rps'])) {
         $this->setModeloImportacaoRps($aDados['modelo_importacao_rps']);
     }
     if (isset($aDados['setor'])) {
         $this->setSetor($aDados['setor']);
     }
     if (isset($aDados['secretaria'])) {
         $this->setSecretaria($aDados['secretaria']);
     }
     if (isset($aDados['valor_iss_fixo'])) {
         $this->setValorIssFixo(DBSeller_Helper_Number_Format::toFloat($aDados['valor_iss_fixo']));
     }
     if (isset($aDados['solicita_cancelamento'])) {
         $this->setSolicitaCancelamento($aDados['solicita_cancelamento']);
     }
     if (isset($aDados['reter_pessoa_fisica'])) {
         $this->setReterPessoaFisica($aDados['reter_pessoa_fisica']);
     }
     // Registra na base de dados
     $oEntity->persist($this->entity);
     // Confirma a gravação na base de dados
     $oEntity->flush();
 }
 /**
  * Geração do relatório de retenções
  */
 public function comparativoRetencoesGerarAction()
 {
     parent::noLayout();
     // Parâmetros do formulário
     $sOrdenacaoCampo = $this->getRequest()->getParam('ordenacao');
     $sOrdenacaoDirecao = $this->getRequest()->getParam('ordem');
     $sTipoRelatorio = $this->getRequest()->getParam('tipo_relatorio');
     $sCompetencia = $this->getRequest()->getParam('data_competencia_inicial');
     // Valida formulário
     $aValidacaoFormulario = self::validarFormulario($sTipoRelatorio);
     if (is_array($aValidacaoFormulario)) {
         exit($this->getHelper('json')->sendJson($aValidacaoFormulario));
     }
     try {
         // Separa os meses e anos
         $iCompetenciaMes = intval(substr($sCompetencia, 0, 2));
         $iCompetenciaAno = intval(substr($sCompetencia, -4));
         $sNomeArquivo = 'comparativo_retencoes_' . date('YmdHis') . '.pdf';
         $aDescricaoFiltros = array('cabecalho_contribuinte_cnpjcpf' => 'CNPJ/CPF', 'cabecalho_contribuinte_razao_social' => 'Nome/Razão', 'asc' => 'Crescente', 'desc' => 'Decrescente');
         $aDescricaoRelatorio[Fiscal_Form_Relatorio4::TIPO9] = array('titulo' => 'Documentos Não retidos pelo Tomador e retidos pelo Prestador', 'descricao_cabecalho' => 'Tomador', 'descricao_lista' => 'Prestador');
         $aDescricaoRelatorio[Fiscal_Form_Relatorio4::TIPO10] = array('titulo' => 'Documentos Não retidos pelo Prestador e retidos pelo Tomador', 'descricao_cabecalho' => 'Prestador', 'descricao_lista' => 'Tomador');
         $oPdf = new Fiscal_Model_Relatoriopdfmodelo1('L');
         $oPdf->Open(APPLICATION_PATH . "/../public/tmp/{$sNomeArquivo}");
         $oPdf->setLinhaFiltro('Relatório Comparativo de Retenções');
         $oPdf->setLinhaFiltro($aDescricaoRelatorio[$sTipoRelatorio]['titulo']);
         $oPdf->setLinhaFiltro('');
         $oPdf->setLinhaFiltro("FILTRO: Competência {$sCompetencia}");
         $oPdf->setLinhaFiltro("ORDEM: {$aDescricaoFiltros[$sOrdenacaoCampo]} ({$aDescricaoFiltros[$sOrdenacaoDirecao]})");
         $oPdf->carregaDados();
         $oEntityManager = Zend_Registry::get('em');
         $oConexao = $oEntityManager->getConnection();
         try {
             $sSql = self::getSqlRelatorio($sTipoRelatorio);
             $oStatement = $oConexao->prepare($sSql);
             $oStatement->execute(array($iCompetenciaMes, $iCompetenciaAno));
             if ($oStatement->rowCount() < 1) {
                 throw new Exception($this->translate->_('Nenhum registro encontrado.'));
             }
             $aRelatorio = NULL;
             // Varre os registros do relatório
             do {
                 $aRelatorio = $oStatement->fetch();
                 if (empty($aRelatorio)) {
                     continue;
                 }
                 $sContribuinteCnpj = $aRelatorio['cabecalho_contribuinte_cnpjcpf'];
                 $oTipoNota = Contribuinte_Model_Nota::getTipoNota($aRelatorio['lista_documento_tipo']);
                 $aDadosRelatorio[$sContribuinteCnpj]['cabecalho_contribuinte_cnpjcpf'] = $sContribuinteCnpj;
                 $aDadosRelatorio[$sContribuinteCnpj]['cabecalho_contribuinte_razao_social'] = DBSeller_Helper_String_Format::wordsCap($aRelatorio['cabecalho_contribuinte_razao_social']);
                 $aDadosRelatorio[$sContribuinteCnpj]['documentos'][] = array('lista_documento_numero' => $aRelatorio['lista_documento_numero'], 'lista_documento_tipo' => DBSeller_Helper_String_Format::wordsCap($oTipoNota->descricao), 'lista_contribuinte_cnpjcpf' => DBSeller_Helper_Number_Format::maskCPF_CNPJ($aRelatorio['lista_contribuinte_cnpjcpf']), 'lista_contribuinte_razao_social' => DBSeller_Helper_String_Format::wordsCap($aRelatorio['lista_contribuinte_razao_social']), 'lista_contribuinte_contato_telefone' => DBSeller_Helper_Number_Format::maskPhoneNumber($aRelatorio['lista_contribuinte_contato_telefone']), 'lista_servico_valor_servicos' => DBSeller_Helper_Number_Format::toMoney($aRelatorio['lista_servico_valor_servicos'], 2));
             } while ($aRelatorio);
             // Dados do relatorio na ordem informada
             if (isset($aDadosRelatorio) && is_array($aDadosRelatorio)) {
                 $aDadosRelatorioOrdenado = DBSeller_Helper_Array_Abstract::ordenarPorIndice($aDadosRelatorio, $sOrdenacaoCampo, $sOrdenacaoDirecao, FALSE);
             } else {
                 throw new Exception($this->translate->_('Erro ao gerar o relatório.'));
             }
             // Percorre os dados do relatório
             foreach ($aDadosRelatorioOrdenado as $aRelatorioOrdenado) {
                 $sContribuinteCnpj = DBSeller_Helper_Number_Format::maskCPF_CNPJ($aRelatorioOrdenado['cabecalho_contribuinte_cnpjcpf']);
                 $sContribuinteRazao = $aRelatorioOrdenado['cabecalho_contribuinte_razao_social'];
                 $sDescricaoCabecalho = $aDescricaoRelatorio[$sTipoRelatorio]['descricao_cabecalho'];
                 // Divisor com as informações do tomador
                 $oPdf->SetFont('Arial', 'B', 8);
                 $oPdf->Cell(30, 5, utf8_decode("CPNJ/CPF {$sDescricaoCabecalho}:"));
                 $oPdf->SetFont('Arial', '', 8);
                 $oPdf->Cell(30, 5, utf8_decode($sContribuinteCnpj));
                 $oPdf->SetFont('Arial', 'B', 8);
                 $oPdf->Cell(33, 5, utf8_decode("Razão Social {$sDescricaoCabecalho}:"));
                 $oPdf->SetFont('Arial', '', 8);
                 $oPdf->Cell(0, 5, utf8_decode($sContribuinteRazao));
                 $oPdf->Ln();
                 if (count($aRelatorioOrdenado['documentos']) > 0) {
                     $sDescricaoLista = $aDescricaoRelatorio[$sTipoRelatorio]['descricao_lista'];
                     $oPdf->SetFont('Arial', 'B', 8);
                     $oPdf->Cell(28, 5, utf8_decode('Nº do Documento'), 1, 0, 'C');
                     $oPdf->Cell(50, 5, utf8_decode('Tipo de Documento'), 1, 0, 'L');
                     $oPdf->Cell(35, 5, utf8_decode("CNPJ/CPF do {$sDescricaoLista}"), 1, 0, 'L');
                     $oPdf->Cell(110, 5, utf8_decode("Razão Social do {$sDescricaoLista}"), 1, 0, 'L');
                     $oPdf->Cell(30, 5, utf8_decode('Telefone'), 1, 0, 'L');
                     $oPdf->Cell(24, 5, utf8_decode('Valor (R$)'), 1, 0, 'R');
                     $oPdf->Ln(5);
                     foreach ($aRelatorioOrdenado['documentos'] as $aRelatorioDocumento) {
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell(28, 5, utf8_decode($aRelatorioDocumento['lista_documento_numero']), 1, 0, 'C');
                         $oPdf->Cell(50, 5, utf8_decode($aRelatorioDocumento['lista_documento_tipo']), 1, 0, 'L');
                         $oPdf->Cell(35, 5, utf8_decode($aRelatorioDocumento['lista_contribuinte_cnpjcpf']), 1, 0, 'L');
                         $oPdf->Cell(110, 5, utf8_decode($aRelatorioDocumento['lista_contribuinte_razao_social']), 1, 0, 'L');
                         $oPdf->Cell(30, 5, utf8_decode($aRelatorioDocumento['lista_contribuinte_contato_telefone']), 1, 0, 'L');
                         $oPdf->Cell(24, 5, utf8_decode($aRelatorioDocumento['lista_servico_valor_servicos']), 1, 0, 'R');
                         $oPdf->Ln(5);
                     }
                     $oPdf->Ln();
                 }
             }
         } catch (Exception $oErro) {
             throw new Exception($oErro->getMessage());
         }
         $oPdf->Output();
         $aRetornoJson['status'] = TRUE;
         $aRetornoJson['url'] = $this->view->baseUrl("tmp/{$sNomeArquivo}");
         $aRetornoJson['success'] = $this->translate->_('Relatório gerado com sucesso.');
     } catch (Exception $oErro) {
         $aRetornoJson['status'] = FALSE;
         $aRetornoJson['error'][] = $oErro->getMessage();
     }
     echo $this->getHelper('json')->sendJson($aRetornoJson);
 }
 /**
  * Consulta detalhes da empresa
  *
  * @return json
  */
 public function dadosCgmAction()
 {
     $bSubstituto = $this->_getParam('substituto', FALSE);
     $sCgcCpf = $this->_getParam('term', NULL);
     $sCgcCpf = DBSeller_Helper_Number_Format::getNumbers($sCgcCpf);
     $aData = Contribuinte_Model_Empresa::getByCgcCpf($sCgcCpf);
     if (!empty($aData)) {
         if (!empty($aData->eCidade)) {
             $aData = $aData->eCidade;
         } else {
             if (!empty($aData->eNota)) {
                 $aData = $aData->eNota;
             }
         }
         $aRetornoJson = array_map(function ($v) {
             return $v->toObject();
         }, $aData);
     }
     if (strlen($sCgcCpf) < 14) {
         $aRetornoJson[0]->isCpf = true;
     } else {
         $aRetornoJson[0]->isCpf = false;
     }
     // Retorna apenas o primeiro resultado
     if (count($aRetornoJson) > 1) {
         $aRetornoJson = $aRetornoJson[0];
     }
     echo $this->getHelper('json')->sendJson($aRetornoJson);
 }
 /**
  * Calcula Valores para Dms
  *
  * @param boolean $lTomadorRetemImposto
  * @param string  $fValorServico
  * @param string  $fValorDeducao
  * @param string  $fValorDescontoCondicionado
  * @param string  $fValorDescontoIncondicionado
  * @param string  $fPercentualAliquota
  * @return Array  $aRetorno
  */
 public static function emissaoManualCalculaValoresDms($lTomadorRetemImposto, $fValorServico, $fValorDeducao, $fValorDescontoCondicionado, $fValorDescontoIncondicionado, $fPercentualAliquota)
 {
     $fValorServico = DBSeller_Helper_Number_Format::toDataBase($fValorServico);
     $fValorDeducao = DBSeller_Helper_Number_Format::toDataBase($fValorDeducao);
     $fValorDescontoCondicionado = DBSeller_Helper_Number_Format::toDataBase($fValorDescontoCondicionado);
     $fValorDescontoIncondicionado = DBSeller_Helper_Number_Format::toDataBase($fValorDescontoIncondicionado);
     $fPercentualAliquota = str_replace(',', '.', $fPercentualAliquota);
     // Validacao
     if ($fValorDeducao >= $fValorServico) {
         $fValorDeducao = 0;
     }
     if ($fValorDescontoCondicionado >= $fValorServico) {
         $fValorDescontoCondicionado = 0;
     }
     if ($fValorDescontoIncondicionado >= $fValorServico) {
         $fValorDescontoIncondicionado = 0;
     }
     // Calculos
     $fValorBaseCalculo = $fValorServico - $fValorDeducao - $fValorDescontoIncondicionado;
     $fValorImposto = $fValorBaseCalculo * ($fPercentualAliquota / 100);
     $fValorLiquido = $fValorServico - $fValorDescontoCondicionado - $fValorDescontoIncondicionado;
     if ($lTomadorRetemImposto == 1) {
         $fValorLiquido -= $fValorImposto;
     }
     // Retorno Json
     $aRetorno['s_valor_bruto'] = DBSeller_Helper_Number_Format::toMoney($fValorServico);
     $aRetorno['s_valor_deducao'] = DBSeller_Helper_Number_Format::toMoney($fValorDeducao);
     $aRetorno['s_vl_condicionado'] = DBSeller_Helper_Number_Format::toMoney($fValorDescontoCondicionado);
     $aRetorno['s_vl_desc_incondicionado'] = DBSeller_Helper_Number_Format::toMoney($fValorDescontoIncondicionado);
     $aRetorno['s_base_calculo'] = DBSeller_Helper_Number_Format::toMoney($fValorBaseCalculo);
     $aRetorno['s_valor_imposto'] = DBSeller_Helper_Number_Format::toMoney($fValorImposto);
     $aRetorno['s_valor_pagar'] = DBSeller_Helper_Number_Format::toMoney($fValorLiquido);
     return $aRetorno;
 }
 /**
  * Busca a aliquota por servico [Json]
  */
 public function emissaoManualBuscarDadosServicoAction()
 {
     try {
         // Perfil do usuario
         $iIdPerfil = $this->oUsuario->getPerfil()->getId();
         $iIdServico = $this->getParam('id_servico');
         $aRetornoJson = array();
         // Ignora se for prestador eventual
         if ($iIdPerfil != 6) {
             $aServicos = Contribuinte_Model_Servico::getByIm($this->oContribuinte->getInscricaoMunicipal(), FALSE);
             if (is_array($aServicos)) {
                 foreach ($aServicos as $oServico) {
                     if ($oServico->attr('cod_atividade') == $iIdServico) {
                         $aRetornoJson = array('item_servico' => $oServico->attr('desc_item_servico'), 'cod_item_servico' => $oServico->attr('cod_item_servico'), 'estrut_cnae' => $oServico->attr('estrut_cnae'), 'deducao' => $oServico->attr('deducao'), 'aliq' => DBSeller_Helper_Number_Format::toMoney($oServico->attr('aliq')));
                         break;
                     }
                 }
             }
         }
         echo $this->getHelper('json')->sendJson($aRetornoJson);
     } catch (Exception $e) {
         $aRetorno['erro'] = TRUE;
         if ($e->getCode() == Global_Lib_Model_WebService::CODIGO_ERRO_CONSULTA_WEBSERVICE) {
             $aRetorno['mensagem'] = "E-cidade temporariamente insdisponível. Emissão bloqueada!";
         } else {
             $aRetorno['mensagem'] = $e->getMessage();
         }
         echo $this->getHelper('json')->sendJson($aRetorno);
     }
 }
 /**
  * Define os dados dos documentos substituídos
  *
  * @param \Doctrine\DBAL\Statement $oStatement
  * @param array                    $aParametros
  * @throws Exception
  */
 public function setDadosDocumentosSubstituidos(Doctrine\DBAL\Statement $oStatement, array $aParametros)
 {
     $this->SetFont('Arial', 'B', 8);
     $this->SetFillColor(201, 201, 201);
     $this->Cell(0, 5, utf8_decode('LANÇAMENTOS RETIDOS'), 1, 1, 'C', TRUE);
     $this->Ln(1);
     $aLarguraCelulas = array(6, 13, 10, 50, 25, 9, 12, 20, 20, 27, 85);
     $this->SetFillColor(230, 230, 230);
     $this->Cell($aLarguraCelulas[0], 5, utf8_decode('Dia'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[1], 5, utf8_decode('Número'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[2], 5, utf8_decode('Série'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[3], 5, utf8_decode('Tipo'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[4], 5, utf8_decode('Situação'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[5], 5, utf8_decode('Cod.'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[6], 5, utf8_decode('Aliq.(%)'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[7], 5, utf8_decode('Base(R$)'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[8], 5, utf8_decode('ISS(R$)'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[9], 5, utf8_decode('CNPJ Tomador'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[10], 5, utf8_decode('Razão Tomador'), 1, NULL, NULL, TRUE);
     $this->SetFont('Arial', NULL, 8);
     try {
         // Processa o query
         $oStatement->execute($aParametros);
         if ($oStatement->rowCount() > 0) {
             $fTotalBase = 0;
             $fTotalIss = 0;
             // Varre a lista de documentos
             while ($aNota = $oStatement->fetch()) {
                 // Define o dia da emissão do documento
                 $sDiaEmissaoDocumento = substr($aNota['documento_data'], -2);
                 $this->Ln();
                 $this->Cell($aLarguraCelulas[0], 5, $sDiaEmissaoDocumento, 1, 0, 'C');
                 $this->Cell($aLarguraCelulas[1], 5, $aNota['documento_numero'], 1, 0, 'R');
                 $this->Cell($aLarguraCelulas[2], 5, $aNota['documento_serie'], 1, 0, 'R');
                 // Tipo de documento
                 if ($aNota['documento_classe'] == 'nfse') {
                     $sTipoNota = 'NFSe';
                     if ($aNota['documento_tipo']) {
                         $aTipoNota = Contribuinte_Model_Nota::getDescricaoTipoNota($aNota['documento_tipo']);
                         $sTipoNota = $aTipoNota[$aNota['documento_tipo']];
                     }
                     $this->Cell($aLarguraCelulas[3], 5, $sTipoNota, 1);
                 } else {
                     if ($aNota['documento_classe'] == 'dms' && $aNota['documento_tipo']) {
                         if ($aNota['documento_tipo_descricao']) {
                             $sTipoNota = $aNota['documento_tipo_descricao'];
                         } else {
                             $aTipoNota = Contribuinte_Model_Nota::getDescricaoTipoNota($aNota['documento_tipo']);
                             $sTipoNota = $aTipoNota[$aNota['documento_tipo']];
                         }
                         $this->Cell($aLarguraCelulas[3], 5, $sTipoNota, 1);
                     } else {
                         $this->Cell($aLarguraCelulas[3], 5, '-', 1);
                     }
                 }
                 // Formata dados
                 $sServicoValorAliquota = DBSeller_Helper_Number_Format::toMoney($aNota['servico_valor_aliquota']);
                 $sServicoValorBaseCalculo = DBSeller_Helper_Number_Format::toMoney($aNota['servico_valor_base_calculo']);
                 $sServicoValorIss = DBSeller_Helper_Number_Format::toMoney($aNota['servico_valor_iss']);
                 $sTomadorCnpjCpf = DBSeller_Helper_Number_Format::maskCPF_CNPJ($aNota['tomador_cnpjcpf']);
                 $sTomadorRazaoSocial = utf8_decode($aNota['tomador_razao_social']);
                 $sTomadorRazaoSocial = substr($sTomadorRazaoSocial, 0, 50);
                 // Trata a situação do documento
                 switch (strtoupper($aNota['documento_situacao'])) {
                     case 'T':
                         $sSituacaoDocumento = utf8_decode('Tributado');
                         break;
                     case 'R':
                         $sSituacaoDocumento = utf8_decode('Retido');
                         break;
                     case 'IS':
                         $sSituacaoDocumento = utf8_decode('Isento');
                         break;
                     case 'E':
                         $sSituacaoDocumento = utf8_decode('Extraviado');
                         break;
                     default:
                         $sSituacaoDocumento = '-';
                 }
                 // ALtera a situação do documento quando a natureza for fora do município
                 if ($aNota['documento_natureza_operacao'] == 2) {
                     $sSituacaoDocumento = utf8_decode('Fora do Município');
                 }
                 // Nota cancelada
                 if ($aNota['documento_status_cancelamento'] == 't' || $aNota['documento_situacao'] == 'c') {
                     $sSituacaoDocumento = utf8_decode('Cancelado');
                 }
                 // Nota substituida
                 if (!empty($aNota['documento_id_nota_substituta'])) {
                     $sSituacaoDocumento = utf8_decode('Substituida');
                 }
                 // Verifica se a nota foi substituida ou cancelada não soma os valores totais
                 if ($aNota['documento_status_cancelamento'] != 't' && empty($aNota['documento_id_nota_substituta'])) {
                     $fTotalBase += $aNota['servico_valor_base_calculo'];
                     $fTotalIss += $aNota['servico_valor_iss'];
                 }
                 $this->Cell($aLarguraCelulas[4], 5, $sSituacaoDocumento, 1, 0, 'L', NULL);
                 $this->Cell($aLarguraCelulas[5], 5, $aNota['servico_item_lista_servico'], 1, 0, 'L', NULL);
                 $this->Cell($aLarguraCelulas[6], 5, $sServicoValorAliquota, 1, 0, 'R', NULL);
                 $this->Cell($aLarguraCelulas[7], 5, $sServicoValorBaseCalculo, 1, 0, 'R', NULL);
                 $this->Cell($aLarguraCelulas[8], 5, $sServicoValorIss, 1, 0, 'R', NULL);
                 $this->Cell($aLarguraCelulas[9], 5, $sTomadorCnpjCpf, 1, 0, 'L', NULL);
                 $this->Cell($aLarguraCelulas[10], 5, $sTomadorRazaoSocial, 1, 0, 'L', NULL);
             }
             $this->SetFont('Arial', 'B', 8);
             $this->Ln();
             $this->Cell(113);
             $this->Cell($aLarguraCelulas[6], 5, 'Total:', 1);
             $this->Cell($aLarguraCelulas[7], 5, DBSeller_Helper_Number_Format::toMoney($fTotalBase), 1, 0, 'R');
             $this->Cell($aLarguraCelulas[8], 5, DBSeller_Helper_Number_Format::toMoney($fTotalIss), 1, 0, 'R');
         } else {
             $this->Ln();
             $this->Cell(0, 5, utf8_decode('Sem Lançamentos no Período'), 1, NULL, 'C');
         }
         $oStatement->closeCursor();
     } catch (Exception $oErro) {
         throw new Exception($oErro->getMessage());
     }
 }
 /**
  * Prenche os= Formulario com os dados
  * @param stdClass $oDados stdClass com as propriedades do formulario a serem preenchidas
  * @return Contribuinte_Form_ParametrosContribuinte
  */
 public function preenche(stdClass $oDados)
 {
     if (!is_object($oDados)) {
         return $this;
     }
     $this->im->setValue($oDados->im);
     if (!empty($oDados->nome_contribuinte)) {
         $this->nome_contribuinte->setValue($oDados->nome_contribuinte);
     }
     if ($oDados->avisofim_emissao_nota != '') {
         $this->avisofim_emissao_nota->setValue($oDados->avisofim_emissao_nota);
     } else {
         $this->avisofim_emissao_nota->setValue('0');
     }
     if (!empty($oDados->max_deducao)) {
         $this->max_deducao->setValue($oDados->max_deducao);
     } else {
         $this->max_deducao->setValue('0');
     }
     if (!empty($oDados->pis)) {
         $this->pis->setValue($oDados->pis);
     }
     if (!empty($oDados->cofins)) {
         $this->cofins->setValue($oDados->cofins);
     }
     if (!empty($oDados->inss)) {
         $this->inss->setValue($oDados->inss);
     }
     if (!empty($oDados->ir)) {
         $this->ir->setValue($oDados->ir);
     }
     if (!empty($oDados->csll)) {
         $this->csll->setValue($oDados->csll);
     }
     if (!empty($oDados->valor_iss_fixo)) {
         $this->valor_iss_fixo->setValue(DBSeller_Helper_Number_Format::toMoney($oDados->valor_iss_fixo));
     }
     return $this;
 }
 /**
  * Geração do relatório de declarações sem movimento
  */
 public function comparativoDeclaracoesGerarAction()
 {
     parent::noLayout();
     $aValidacaoFormulario = self::validarFormulario();
     if (is_array($aValidacaoFormulario)) {
         exit($this->getHelper('json')->sendJson($aValidacaoFormulario));
     }
     try {
         // Parâmetros do formulário
         $sOrdenacaoCampo = $this->getRequest()->getParam('ordenacao');
         $sOrdenacaoDirecao = $this->getRequest()->getParam('ordem');
         $sCompetencia = $this->getRequest()->getParam('data_competencia_inicial');
         // Separa os meses e anos
         $iCompetenciaMes = intval(substr($sCompetencia, 0, 2));
         $iCompetenciaAno = intval(substr($sCompetencia, -4));
         $sNomeArquivo = 'relatorio_comparativo_declaracoes_' . date('YmdHis') . '.pdf';
         $aDescricaoFiltros = array('tomador_cnpjcpf' => 'CPF/CNPJ', 'tomador_razao_social' => 'Nome/Razão Social Tomador', 'asc' => 'Crescente', 'desc' => 'Decrescente');
         $oPdf = new Fiscal_Model_Relatoriopdfmodelo1('L');
         $oPdf->Open(APPLICATION_PATH . "/../public/tmp/{$sNomeArquivo}");
         $oPdf->setLinhaFiltro('Relatório Comparativo de Declarações');
         $oPdf->setLinhaFiltro('');
         $oPdf->setLinhaFiltro("FILTRO: Competência {$sCompetencia}");
         $oPdf->setLinhaFiltro("ORDEM: {$aDescricaoFiltros[$sOrdenacaoCampo]} ({$aDescricaoFiltros[$sOrdenacaoDirecao]})");
         $oPdf->carregaDados();
         $oEntityManager = Zend_Registry::get('em');
         $oConexao = $oEntityManager->getConnection();
         try {
             $sSql = self::getSqlRelatorio();
             $oStatement = $oConexao->prepare($sSql);
             $oStatement->execute(array(Contribuinte_Model_Dms::ENTRADA, $iCompetenciaMes, $iCompetenciaAno));
             if ($oStatement->rowCount() < 1) {
                 throw new Exception('Nenhum registro encontrado.');
             }
             $aRelatorio = NULL;
             // Monta o array com o registros formatados
             do {
                 $aRelatorio = $oStatement->fetch();
                 if (empty($aRelatorio)) {
                     continue;
                 }
                 // Tipo de documento
                 $oDocumentoTipo = Contribuinte_Model_Nota::getTipoNota($aRelatorio['documento_tipo']);
                 $sDocumentoTipo = DBSeller_Helper_String_Format::wordsCap($oDocumentoTipo->descricao);
                 // Formata os dados
                 $iTomadorCnpj = $aRelatorio['tomador_cnpjcpf'];
                 $sTomadorRazaoSocial = DBSeller_Helper_String_Format::wordsCap($aRelatorio['tomador_razao_social']);
                 $sPrestadorCnpjCpf = DBSeller_Helper_Number_Format::maskCPF_CNPJ($aRelatorio['prestador_cnpjcpf']);
                 $sPrestadorRazaoSocial = DBSeller_Helper_String_Format::wordsCap($aRelatorio['prestador_razao_social']);
                 $sPrestadorTelefone = $aRelatorio['prestador_contato_telefone'];
                 $sPrestadorTelefone = DBSeller_Helper_Number_Format::maskPhoneNumber($sPrestadorTelefone);
                 $sValorServico = DBSeller_Helper_Number_Format::toMoney($aRelatorio['servico_valor_servicos'], 2);
                 // Dados do relatorio organizado por índice
                 $aDadosRelatorio[$iTomadorCnpj]['tomador_cnpjcpf'] = $iTomadorCnpj;
                 $aDadosRelatorio[$iTomadorCnpj]['tomador_razao_social'] = $sTomadorRazaoSocial;
                 $aDadosRelatorio[$iTomadorCnpj]['documentos'][] = array('documento_numero' => $aRelatorio['documento_numero'], 'documento_tipo' => $sDocumentoTipo, 'prestador_cnpjcpf' => $sPrestadorCnpjCpf, 'prestador_razao_social' => $sPrestadorRazaoSocial, 'prestador_contato_telefone' => $sPrestadorTelefone, 'servico_valor_servicos' => $sValorServico);
             } while ($aRelatorio);
             // Dados do relatorio na ordem informada
             $aDadosRelatorioOrdenado = DBSeller_Helper_Array_Abstract::ordenarPorIndice($aDadosRelatorio, $sOrdenacaoCampo, $sOrdenacaoDirecao, FALSE);
             // Percorre os dados do relatório, já ordenado
             foreach ($aDadosRelatorioOrdenado as $aRelatorioOrdenado) {
                 $sCpfCnpjTomador = DBSeller_Helper_Number_Format::maskCPF_CNPJ($aRelatorioOrdenado['tomador_cnpjcpf']);
                 $sRazaoTomador = $aRelatorioOrdenado['tomador_razao_social'];
                 // Divisor com as informações do tomador
                 $oPdf->SetFont('Arial', 'B', 8);
                 $oPdf->Cell(29, 5, utf8_decode('CPNJ/CPF Tomador:'));
                 $oPdf->SetFont('Arial', '', 8);
                 $oPdf->Cell(30, 5, utf8_decode($sCpfCnpjTomador));
                 $oPdf->SetFont('Arial', 'B', 8);
                 $oPdf->Cell(32, 5, utf8_decode('Razão Social Tomador:'));
                 $oPdf->SetFont('Arial', '', 8);
                 $oPdf->Cell(0, 5, utf8_decode($sRazaoTomador));
                 $oPdf->Ln();
                 // Cabeçalho com a lista de documentos do tomador
                 if (count($aRelatorioOrdenado['documentos']) > 0) {
                     $oPdf->SetFont('Arial', 'B', 8);
                     $oPdf->Cell(28, 5, utf8_decode('Nº do Documento'), 1, 0, 'C');
                     $oPdf->Cell(50, 5, utf8_decode('Tipo de Documento'), 1, 0, 'L');
                     $oPdf->Cell(35, 5, utf8_decode('CNPJ/CPF do Prestador'), 1, 0, 'L');
                     $oPdf->Cell(110, 5, utf8_decode('Razão Social do Prestador'), 1, 0, 'L');
                     $oPdf->Cell(30, 5, utf8_decode('Telefone'), 1, 0, 'L');
                     $oPdf->Cell(24, 5, utf8_decode('Valor (R$)'), 1, 0, 'R');
                     $oPdf->Ln(5);
                     // Percorre os documentos do tomador
                     foreach ($aRelatorioOrdenado['documentos'] as $aRelatorioDocumento) {
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell(28, 5, utf8_decode($aRelatorioDocumento['documento_numero']), 1, 0, 'C');
                         $oPdf->Cell(50, 5, utf8_decode($aRelatorioDocumento['documento_tipo']), 1, 0, 'L');
                         $oPdf->Cell(35, 5, utf8_decode($aRelatorioDocumento['prestador_cnpjcpf']), 1, 0, 'L');
                         $oPdf->Cell(110, 5, utf8_decode($aRelatorioDocumento['prestador_razao_social']), 1, 0, 'L');
                         $oPdf->Cell(30, 5, utf8_decode($aRelatorioDocumento['prestador_contato_telefone']), 1, 0, 'L');
                         $oPdf->Cell(24, 5, utf8_decode($aRelatorioDocumento['servico_valor_servicos']), 1, 0, 'R');
                         $oPdf->Ln(5);
                     }
                     $oPdf->Ln();
                 }
             }
         } catch (Exception $oErro) {
             throw new Exception($oErro->getMessage());
         }
         // Renderiza o arquivo PDF
         $oPdf->Output();
         // Mensagem de retorno com o link do arquivo PDF
         $aRetornoJson['status'] = TRUE;
         $aRetornoJson['url'] = $this->view->baseUrl("tmp/{$sNomeArquivo}");
         $aRetornoJson['success'] = $this->translate->_('Arquivo importado com sucesso.');
     } catch (Exception $oErro) {
         $aRetornoJson['status'] = FALSE;
         $aRetornoJson['error'][] = $oErro->getMessage();
     }
     echo $this->getHelper('json')->sendJson($aRetornoJson);
 }
 /**
  * Método para confirmação do usuário eventual [json]
  *
  * @throws Exception
  * @return void
  */
 public function confirmarAction()
 {
     $oFiltro = new Zend_Filter_Digits();
     $aDados = $this->getRequest()->getParams();
     $sCpfCnpj = DBSeller_Helper_Number_Format::unmaskCPF_CNPJ($aDados['cnpjcpf']);
     // Popula o formulario
     $oForm = new Default_Form_LiberacaoCadastro();
     $oForm->populate($aDados);
     // Valida o formulario
     if ($oForm->isValid($aDados)) {
         if ($aDados['hash'] == NULL || $sCpfCnpj == NULL) {
             throw new Exception($this->translate->_('Campo(s) obrigatório(s) não informado(s).'));
         }
         $oDoctrine = Zend_Registry::get('em');
         $oDoctrine->getConnection()->beginTransaction();
         try {
             $oCadastroPessoa = Contribuinte_Model_CadastroPessoa::getByAttribute('hash', $aDados['hash']);
             if ($oCadastroPessoa == NULL) {
                 $sMensagemErro = 'Dados informados não encontrados. Favor entrar em contato com o suporte da prefeitura.';
                 throw new Exception($this->translate->_($sMensagemErro));
             }
             $iTipoLiberacaoUsuarioBloqueado = Contribuinte_Model_CadastroPessoa::TIPO_LIBERACAO_USUARIO_BLOQUEADO;
             if ($oCadastroPessoa->getTipoLiberacao() == $iTipoLiberacaoUsuarioBloqueado) {
                 $sMensagemErro = 'Cadastro foi recusado. Favor entrar em contato com o setor de fiscalização.';
                 throw new Exception($this->translate->_($sMensagemErro));
             }
             if ($sCpfCnpj != $oCadastroPessoa->getCpfcnpj()) {
                 throw new Exception($this->translate->_('CNPJ/CPF informado não é o mesmo informado no cadastro.'));
             }
             $oUsuarioCadastrado = Administrativo_Model_Usuario::getByAttribute('email', $oCadastroPessoa->getEmail());
             if ($oUsuarioCadastrado instanceof Administrativo_Model_Usuario) {
                 $sLink = '<a href="' . $this->view->serverUrl('/auth/login/esqueci-minha-senha/') . '">Clique Aqui</a>';
                 $sMensagemErro = "Já encontramos um cadastro com este email.<br>Caso tenha esquecido sua senha. {$sLink}";
                 throw new Exception($this->translate->_($sMensagemErro));
             }
             $oCgm = Contribuinte_Model_Cgm::getDadosCgm($sCpfCnpj);
             if ($oCadastroPessoa->getTipoLiberacao() == Contribuinte_Model_CadastroPessoa::TIPO_LIBERACAO_USUARIO && $oCgm == NULL) {
                 $sErro = $this->translate->_('Parametros estão inválidos (CGM não existe), ');
                 $sErro .= $this->translate->_('favor entrar em contato com o setor de fiscalização.');
                 throw new Exception($sErro);
             }
             if ($oCadastroPessoa->getTipoLiberacao() == Contribuinte_Model_CadastroPessoa::TIPO_LIBERACAO_USUARIO_CGM && $oCgm == NULL) {
                 $oNovoCgm = new Contribuinte_Model_Cgm();
                 if (strlen($oCadastroPessoa->getCpfCnpj()) >= 14) {
                     $oNovoCgm->setJuridico(TRUE);
                     $oNovoCgm->setCNPJ($oCadastroPessoa->getCpfCnpj());
                 } else {
                     $oNovoCgm->setJuridico(FALSE);
                     $oNovoCgm->setCPF($oCadastroPessoa->getCpfCnpj());
                 }
                 $sDescricaoMunicipio = Default_Model_Cadendermunicipio::getById($oCadastroPessoa->getCidade())->getNome();
                 $oNovoCgm->setNome($oCadastroPessoa->getNome());
                 $oNovoCgm->setEmail($oCadastroPessoa->getEmail());
                 $oNovoCgm->setCodigoIbgeCidade($oCadastroPessoa->getCidade());
                 $oNovoCgm->setDescricaoMunicipio($sDescricaoMunicipio);
                 $oNovoCgm->setEstado($oCadastroPessoa->getEstado());
                 $oNovoCgm->setTelefone($oFiltro->filter($oCadastroPessoa->getTelefone()));
                 $oNovoCgm->setCep($oFiltro->filter($oCadastroPessoa->getCep()));
                 $oNovoCgm->setEnderecoEcidade(FALSE);
                 if ($oCadastroPessoa->getCodBairro()) {
                     $oNovoCgm->setEnderecoEcidade(TRUE);
                 }
                 $oNovoCgm->setCodigoBairro($oCadastroPessoa->getCodBairro());
                 $oNovoCgm->setCodigoLogradouro($oCadastroPessoa->getCodEndereco());
                 $oNovoCgm->setDescricaoBairro($oCadastroPessoa->getBairro());
                 $oNovoCgm->setDescricaoLogradouro($oCadastroPessoa->getEndereco());
                 $oNovoCgm->setNumeroLogradouro($oCadastroPessoa->getNumero());
                 $oNovoCgm->setComplemento($oCadastroPessoa->getComplemento());
                 $oCodigoCgm = $oNovoCgm->persist();
                 $iCodigoCgm = $oCodigoCgm->codigo_cgm;
             } else {
                 $iCodigoCgm = $oCgm->getCodigoCgm();
             }
             $aArraTipoLiberacao = array(Contribuinte_Model_CadastroPessoa::TIPO_LIBERACAO_USUARIO_CGM, Contribuinte_Model_CadastroPessoa::TIPO_LIBERACAO_USUARIO);
             if (in_array($oCadastroPessoa->getTipoLiberacao(), $aArraTipoLiberacao)) {
                 // Usuário do sistema
                 $oUsuarioSistema = new Administrativo_Model_Usuario();
                 $oUsuarioSistema->setNome($oCadastroPessoa->getNome());
                 $oUsuarioSistema->setTelefone($oFiltro->filter($oCadastroPessoa->getTelefone()));
                 $oUsuarioSistema->setLogin($oCadastroPessoa->getCpfCnpj());
                 $oUsuarioSistema->setSenha($aDados['senha']);
                 $oUsuarioSistema->setEmail($oCadastroPessoa->getEmail());
                 $oUsuarioSistema->setHabilitado(TRUE);
                 $oUsuarioSistema->setAdministrativo(FALSE);
                 $oUsuarioSistema->setTipo(Administrativo_Model_TipoUsuario::$CONTRIBUINTE);
                 $oUsuarioSistema->setCgm($iCodigoCgm);
                 $oUsuarioSistema->setCnpj($oCadastroPessoa->getCpfCnpj());
                 $oUsuarioSistema->setPerfil($oCadastroPessoa->getPerfil()->getEntity());
                 $oUsuarioSistema->adicionaAcoes($oCadastroPessoa->getPerfil()->getAcoes());
                 $oUsuarioSistema->persist();
                 // Criamos o usuario eventual;
                 $oUsuarioEventual = new Administrativo_Model_UsuarioContribuinte();
                 $oUsuarioEventual->setCGM($iCodigoCgm);
                 $oUsuarioEventual->setHabilitado(TRUE);
                 $oUsuarioEventual->setTipoContribuinte(2);
                 $oUsuarioEventual->setCnpjCpf($oCadastroPessoa->getCpfCnpj());
                 $oUsuarioEventual->setUsuario($oUsuarioSistema->getEntity());
                 $oUsuarioEventual->copiaPerfilAcoes($oCadastroPessoa->getPerfil());
                 $oUsuarioEventual->persist();
                 // Cadastro de Pessoa
                 $oCadastroPessoa->setHash(NULL);
                 $oCadastroPessoa->persist();
             }
             $oDoctrine->getConnection()->commit();
             $aRetornoJson['status'] = TRUE;
             $aRetornoJson['success'] = $this->translate->_('Cadastro efetuado com sucesso.');
             $aRetornoJson['url'] = $this->view->serverUrl();
         } catch (Exception $oErro) {
             $oDoctrine->getConnection()->rollback();
             if (isset($oCodigoCgm) && isset($oCodigoCgm->codigo_cgm) && Contribuinte_Model_Cgm::removerCgm($oCodigoCgm->codigo_cgm)) {
                 $oLog = Zend_Registry::get('logger');
                 $oLog->log("Erro ao excluir o CGM: {$oCodigoCgm->codigo_cgm}", Zend_Log::INFO, ' ');
             }
             $aRetornoJson['status'] = FALSE;
             $aRetornoJson['error'][] = $oErro->getMessage();
         }
     } else {
         $aRetornoJson['status'] = FALSE;
         $aRetornoJson['fields'] = array_keys($oForm->getMessages());
         $aRetornoJson['error'][] = $this->translate->_('Preencha os dados corretamente.');
     }
     echo $this->getHelper('json')->sendJson($aRetornoJson);
 }
 /**
  * Verifica se o contribuinte é optante pelo simples na data especificada
  * Utiliza o mesmo método utilizado no DMS
  *
  * @see Contribuinte_Lib_Controller_AbstractController::verificarContribuinteOptanteSimplesAction()
  * @throws Exception
  */
 public function verificarContribuinteOptanteSimplesAction()
 {
     try {
         $sData = $this->getRequest()->getParam('data');
         if (!$sData) {
             throw new Exception('Informe a data para verificar.');
         }
         $oDataSimples = new DateTime(DBSeller_Helper_Date_Date::invertDate($sData, '-'));
         if (!$oDataSimples instanceof DateTime) {
             throw new Exception('Data inválida');
         }
         $oContribuinte = $this->_session->contribuinte;
         $oParametros = Contribuinte_Model_ParametroContribuinte::getById($oContribuinte->getIdUsuarioContribuinte());
         $aRetorno['optante_simples_nacional'] = $oContribuinte->isOptanteSimples($oDataSimples) ? TRUE : FALSE;
         $aRetorno['optante_simples_categoria'] = $oContribuinte->getOptanteSimplesCategoria();
         if ($oParametros instanceof Contribuinte_Model_ParametroContribuinte) {
             $fAliquota = $oParametros->getEntity()->getValorIssFixo();
             $aRetorno['valor_iss_fixo'] = DBSeller_Helper_Number_Format::toMoney($fAliquota);
         }
         echo $this->getHelper('json')->sendJson($aRetorno);
     } catch (Exception $oError) {
         $aRetorno['erro'] = TRUE;
         $aRetorno['mensagem'] = $oError->getMessage();
         echo $this->getHelper('json')->sendJson($aRetorno);
     }
 }
 /**
  * Reorganiza o array com os dados copiados de uma nota, para preencher o form da emissão de nota
  *
  * @param array $aDados
  * @return array
  */
 public function organizaDadosCopia($aDados)
 {
     // Verifica se os dados são de uma nota copiada
     if (isset($aDados['id_copia_nota'])) {
         $this->getElement('s_dados_cod_tributacao_copia')->setValue($aDados['s_dados_cod_tributacao']);
         // Ajusta os dados do Tomador/Empresa
         $aDados['logradouro'] = $aDados['t_endereco'];
         $aDados['telefone'] = $aDados['t_telefone'];
         $aDados['complemento'] = $aDados['t_endereco_comp'];
         $aDados['numero'] = $aDados['t_endereco_comp'];
         $aDados['email'] = $aDados['t_email'];
         $aDados['nome'] = $aDados['t_cod_municipio'];
         $aDados['bairro'] = $aDados['t_bairro'];
         $aDados['cep'] = $aDados['t_cep'];
         $aDados['logradouro'] = $aDados['t_endereco'];
         $aDados['estado'] = $aDados['t_uf'];
         $aDados['pais'] = $aDados['p_cod_pais'];
         // Ajusta os dados do Serviço
         $aDados['estado'] = $aDados['p_uf'];
         $aDados['descricao'] = $aDados['s_dados_discriminacao'];
         $aDados['s_vl_servicos'] = DBSeller_Helper_Number_Format::toFloat($aDados['s_vl_servicos']);
         if ($aDados['s_dados_iss_retido'] == 1) {
             $aDados['s_dados_iss_retido'] = '0';
         } else {
             if ($aDados['s_dados_iss_retido'] == 2) {
                 $aDados['s_dados_iss_retido'] = '1';
             }
         }
     }
     return $aDados;
 }
 /**
  * Geração do relatório de NFSe's
  */
 public function nfseGerarAction()
 {
     parent::noLayout();
     $aValidacaoFormulario = self::validarFormulario();
     if (is_array($aValidacaoFormulario)) {
         exit($this->getHelper('json')->sendJson($aValidacaoFormulario));
     }
     try {
         // Parâmetros do formulário
         $sCompetenciaInicial = $this->getRequest()->getParam('data_competencia_inicial');
         $sCompetenciaFinal = $this->getRequest()->getParam('data_competencia_final');
         $sPrestadorCnpj = $this->getRequest()->getParam('prestador_cnpj');
         $lGuiaEmitida = $this->getRequest()->getParam('guia_emitida') == 1 ? TRUE : FALSE;
         $sGuiaEmitida = $lGuiaEmitida ? 'Sim' : 'Não';
         // Prestador
         $oPrestador = Contribuinte_Model_Contribuinte::getByCpfCnpj($sPrestadorCnpj);
         // Separa os meses e anos
         $iCompetenciaInicialMes = intval(substr($sCompetenciaInicial, 0, 2));
         $iCompetenciaFinalMes = intval(substr($sCompetenciaFinal, 0, 2));
         $iCompetenciaInicialAno = intval(substr($sCompetenciaInicial, -4));
         $iCompetenciaFinalAno = intval(substr($sCompetenciaFinal, -4));
         $sNomeArquivo = 'relatorio_nfse_' . date('YmdHis') . '.pdf';
         $oPdf = new Fiscal_Model_Relatoriopdfmodelo1('P');
         $oPdf->Open(APPLICATION_PATH . "/../public/tmp/{$sNomeArquivo}");
         $oPdf->setLinhaFiltro('Relatório de NFSe');
         $oPdf->setLinhaFiltro('');
         $oPdf->setLinhaFiltro('FILTROS:');
         $oPdf->setLinhaFiltro("  CNPJ Prestador {$sPrestadorCnpj}");
         $oPdf->setLinhaFiltro("  Competência de {$sCompetenciaInicial} à {$sCompetenciaFinal}");
         $oPdf->setLinhaFiltro("  Guia Emitida? {$sGuiaEmitida}");
         $oPdf->carregaDados();
         $oEntityManager = Zend_Registry::get('em');
         $oConexao = $oEntityManager->getConnection();
         try {
             $lExistemRegistros = FALSE;
             // Prepara a consulta na base de dados
             $sSql = self::getSqlRelatorio2($lGuiaEmitida);
             $oStatement = $oConexao->prepare($sSql);
             // Limpa as máscaras do CNPJ
             $sPrestadorCnpj = DBSeller_Helper_Number_Format::getNumbers($sPrestadorCnpj);
             // Varre os anos
             for ($iAno = 0; $iAno <= $iCompetenciaFinalAno - $iCompetenciaInicialAno; $iAno++) {
                 $iAnoLoop = intval($iCompetenciaInicialAno) + $iAno;
                 // Varre os meses
                 for ($iMesLoop = 1; $iMesLoop <= 12; $iMesLoop++) {
                     // Ignora os meses anteriores e seguintes aos meses inicial e final
                     if ($iAnoLoop == $iCompetenciaInicialAno && $iMesLoop < $iCompetenciaInicialMes || $iAnoLoop == $iCompetenciaFinalAno && $iMesLoop > $iCompetenciaFinalMes) {
                         continue;
                     }
                     // Executa a consulta na base de dados com os parâmetros: cnpj, mês e ano da competência
                     $oStatement->execute(array($iMesLoop, $iAnoLoop, $sPrestadorCnpj, $iMesLoop, $iAnoLoop, $sPrestadorCnpj));
                     // Ignora loop caso não possua registros
                     if ($oStatement->rowCount() < 1) {
                         continue;
                     }
                     $lExistemRegistros = TRUE;
                     // Zera os dados
                     $aRelatorio = NULL;
                     $aDadosRelatorio = NULL;
                     // Monta os dados do relatório com o índice para ordenação
                     do {
                         // Busca os dados na base de dados
                         $aRelatorio = $oStatement->fetch();
                         // Ignora a busca caso não existam resultados
                         if (empty($aRelatorio)) {
                             continue;
                         }
                         // Dados do Prestador
                         $sPrestadorCnpjCpf = $aRelatorio['prestador_cnpjcpf'];
                         $sPrestadorCnpjCpf = DBSeller_Helper_Number_Format::maskCPF_CNPJ($sPrestadorCnpjCpf);
                         $sPrestadorInscricaoMunicipal = $aRelatorio['prestador_inscricao_municipal'];
                         $sPrestadorRazaoSocial = $aRelatorio['prestador_razao_social'];
                         $sPrestadorRazaoSocial = DBSeller_Helper_String_Format::wordsCap($sPrestadorRazaoSocial);
                         $sPrestadorMunicipioUf = $aRelatorio['prestador_endereco_municipio'];
                         $sPrestadorMunicipioUf = DBSeller_Helper_String_Format::wordsCap($sPrestadorMunicipioUf);
                         $sPrestadorMunicipioUf = "{$sPrestadorMunicipioUf}/{$aRelatorio['prestador_endereco_uf']}";
                         $sPrestadorTelefone = $aRelatorio['prestador_contato_telefone'];
                         $sPrestadorTelefone = DBSeller_Helper_Number_Format::maskPhoneNumber($sPrestadorTelefone);
                         $sPrestadorDocumentoNumero = $aRelatorio['prestador_documento_numero'];
                         $oPrestadorDocumentoData = new DateTime($aRelatorio['prestador_documento_data']);
                         $sPrestadorDocumentoTipo = $aRelatorio['prestador_documento_tipo'];
                         $sPrestadorDocumentoValor = $aRelatorio['prestador_valor_servico'];
                         $sPrestadorDocumentoValor = DBSeller_Helper_Number_Format::toMoney($sPrestadorDocumentoValor, 2);
                         $sPrestadorDocumentoAliquota = $aRelatorio['prestador_valor_aliquota'];
                         $sPrestadorDocumentoAliquota = DBSeller_Helper_Number_Format::toMoney($sPrestadorDocumentoAliquota, 2);
                         $sPrestadorDocumentoIss = $aRelatorio['prestador_valor_iss'];
                         $sPrestadorDocumentoIss = DBSeller_Helper_Number_Format::toMoney($sPrestadorDocumentoIss, 2);
                         $sPrestadorDocumentoIssRetido = $aRelatorio['prestador_iss_retido'] ? 'Não' : 'Sim';
                         // Dados Tomador
                         $sTomadorCnpjCpf = $aRelatorio['tomador_cnpjcpf'];
                         $sTomadorCnpjCpf = DBSeller_Helper_Number_Format::maskCPF_CNPJ($sTomadorCnpjCpf);
                         $sTomadorInscricaoMunicipal = $aRelatorio['tomador_inscricao_municipal'];
                         $sTomadorRazaoSocial = $aRelatorio['tomador_razao_social'];
                         $sTomadorRazaoSocial = DBSeller_Helper_String_Format::wordsCap($sTomadorRazaoSocial);
                         $sTomadorMunicipioUf = $aRelatorio['tomador_endereco_municipio'];
                         $sTomadorMunicipioUf = DBSeller_Helper_String_Format::wordsCap($sTomadorMunicipioUf);
                         $sTomadorMunicipioUf = "{$sTomadorMunicipioUf}/{$aRelatorio['tomador_endereco_uf']}";
                         $sTomadorTelefone = $aRelatorio['tomador_contato_telefone'];
                         $sTomadorTelefone = DBSeller_Helper_Number_Format::maskPhoneNumber($sTomadorTelefone);
                         $sTomadorDocumentoNumero = $aRelatorio['tomador_documento_numero'];
                         $oTomadorDocumentoData = new DateTime($aRelatorio['tomador_documento_data']);
                         $sTomadorDocumentoTipo = $aRelatorio['tomador_documento_tipo'];
                         $sTomadorDocumentoValor = $aRelatorio['tomador_valor_servico'];
                         $sTomadorDocumentoValor = DBSeller_Helper_Number_Format::toMoney($sTomadorDocumentoValor, 2);
                         $sTomadorDocumentoAliquota = $aRelatorio['tomador_valor_aliquota'];
                         $sTomadorDocumentoAliquota = DBSeller_Helper_Number_Format::toMoney($sTomadorDocumentoAliquota, 2);
                         $sTomadorDocumentoIss = $aRelatorio['tomador_valor_iss'];
                         $sTomadorDocumentoIss = DBSeller_Helper_Number_Format::toMoney($sTomadorDocumentoIss, 2);
                         $sTomadorDocumentoIssRetido = $aRelatorio['tomador_iss_retido'] ? 'Sim' : 'Não';
                         // Descrição do tipo de documento
                         $oPrestadorDocumentoTipo = Contribuinte_Model_Nota::getTipoNota($sPrestadorDocumentoTipo);
                         $sPrestadorDocumentoTipo = DBSeller_Helper_String_Format::wordsCap($oPrestadorDocumentoTipo->descricao);
                         $oTomadorDocumentoTipo = Contribuinte_Model_Nota::getTipoNota($sTomadorDocumentoTipo);
                         $sTomadorDocumentoTipo = DBSeller_Helper_String_Format::wordsCap($oTomadorDocumentoTipo->descricao);
                         // Indice para evitar a repetição do cabeçalho por prestador+tomador
                         $sIndiceRelatorio = "{$aRelatorio['prestador_cnpjcpf']}_{$aRelatorio['tomador_cnpjcpf']}";
                         // Dados do relatório
                         $aDadosRelatorio[$sIndiceRelatorio]['prestador_cnpjcpf'] = $sPrestadorCnpjCpf;
                         $aDadosRelatorio[$sIndiceRelatorio]['prestador_inscricao_municipal'] = $sPrestadorInscricaoMunicipal;
                         $aDadosRelatorio[$sIndiceRelatorio]['prestador_razao_social'] = utf8_decode($sPrestadorRazaoSocial);
                         $aDadosRelatorio[$sIndiceRelatorio]['prestador_municipio_uf'] = utf8_decode($sPrestadorMunicipioUf);
                         $aDadosRelatorio[$sIndiceRelatorio]['prestador_telefone'] = $sPrestadorTelefone;
                         $aDadosRelatorio[$sIndiceRelatorio]['tomador_cnpjcpf'] = $sTomadorCnpjCpf;
                         $aDadosRelatorio[$sIndiceRelatorio]['tomador_inscricao_municipal'] = $sTomadorInscricaoMunicipal;
                         $aDadosRelatorio[$sIndiceRelatorio]['tomador_razao_social'] = utf8_decode($sTomadorRazaoSocial);
                         $aDadosRelatorio[$sIndiceRelatorio]['tomador_municipio_uf'] = utf8_decode($sTomadorMunicipioUf);
                         $aDadosRelatorio[$sIndiceRelatorio]['tomador_telefone'] = $sTomadorTelefone;
                         $aDadosRelatorio[$sIndiceRelatorio]['documentos'][] = array('prestador_doc_numero' => utf8_decode($sPrestadorDocumentoNumero), 'prestador_doc_data' => $oPrestadorDocumentoData, 'prestador_doc_tipo' => utf8_decode($sPrestadorDocumentoTipo), 'prestador_doc_valor_servico' => utf8_decode($sPrestadorDocumentoValor), 'prestador_doc_valor_aliquota' => utf8_decode($sPrestadorDocumentoAliquota), 'prestador_doc_valor_iss' => utf8_decode($sPrestadorDocumentoIss), 'prestador_doc_iss_retido' => utf8_decode($sPrestadorDocumentoIssRetido), 'tomador_doc_numero' => utf8_decode($sTomadorDocumentoNumero), 'tomador_doc_data' => $oTomadorDocumentoData, 'tomador_doc_tipo' => utf8_decode($sTomadorDocumentoTipo), 'tomador_doc_valor_servico' => utf8_decode($sTomadorDocumentoValor), 'tomador_doc_valor_aliquota' => utf8_decode($sTomadorDocumentoAliquota), 'tomador_doc_valor_iss' => utf8_decode($sTomadorDocumentoIss), 'tomador_doc_iss_retido' => utf8_decode($sTomadorDocumentoIssRetido));
                     } while ($aRelatorio);
                     // Ordena a lista de documentos por número
                     $aDocumentosOrdenados = DBSeller_Helper_Array_Abstract::ordenarPorIndice($aDadosRelatorio[$sIndiceRelatorio]['documentos'], 'prestador_doc_numero');
                     $aDadosRelatorio[$sIndiceRelatorio]['documentos'] = $aDocumentosOrdenados;
                     // Ordena os dados do relatorio
                     if (isset($aDadosRelatorio) && is_array($aDadosRelatorio)) {
                         $aDadosRelatorio = DBSeller_Helper_Array_Abstract::ordenarPorIndice($aDadosRelatorio, 'prestador_cnpjcpf');
                     } else {
                         throw new Exception($this->translate->_('Erro ao gerar o relatório.'));
                     }
                     // Calcula a metade da página
                     $iMeiaPaginaX = $oPdf->w / 2 - $oPdf->lMargin;
                     // Percorre os dados do relatório
                     foreach ($aDadosRelatorio as $aRelatorioOrdenado) {
                         // Formata o texto da competência
                         $sCompetencia = str_pad($iMesLoop, 2, 0, STR_PAD_LEFT) . "/{$iAnoLoop}";
                         $oPdf->SetFont('Arial', 'B', 8);
                         $oPdf->Cell(20, 5, utf8_decode('Competência: '));
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell(22, 5, $sCompetencia);
                         // Dados da guia do prestador
                         if ($lGuiaEmitida) {
                             $oGuiaPrestador = Contribuinte_Model_Guia::getByCompetenciaAndContribuinte($iAnoLoop, $iMesLoop, $oPrestador, Contribuinte_Model_Guia::$PRESTADOR);
                             if (is_array($oGuiaPrestador) && count($oGuiaPrestador) > 0 && $oGuiaPrestador[0] instanceof Contribuinte_Model_Guia) {
                                 $oGuiaPrestador = reset($oGuiaPrestador);
                                 $oPdf->SetFont('Arial', 'B', 8);
                                 $oPdf->Cell(13, 5, utf8_decode('Numpre: '));
                                 $oPdf->SetFont('Arial', '', 8);
                                 $oPdf->Cell(20, 5, $oGuiaPrestador->getNumpre());
                             }
                         }
                         $oPdf->Ln();
                         $oPdf->SetFont('Arial', 'B', 8);
                         $oPdf->Cell($iMeiaPaginaX, 5, 'PRESTADOR', 1, 0, 'L', 1);
                         $oPdf->Cell($iMeiaPaginaX, 5, 'TOMADOR', 1, 0, 'L', 1);
                         $oPdf->Ln();
                         $oPdf->Rect($oPdf->GetX(), $oPdf->GetY(), $iMeiaPaginaX, 25);
                         $oPdf->Rect($iMeiaPaginaX + $oPdf->lMargin, $oPdf->GetY(), $iMeiaPaginaX, 25);
                         $oPdf->Ln(2);
                         $oPdf->SetFont('Arial', 'B', 8);
                         $oPdf->Cell(28, 4, utf8_decode('Inscrição Municipal:'));
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell($iMeiaPaginaX - 28, 4, $aRelatorioOrdenado['prestador_inscricao_municipal']);
                         $oPdf->SetFont('Arial', 'B', 8);
                         $oPdf->Cell(28, 4, utf8_decode('Inscrição Municipal:'));
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell($iMeiaPaginaX - 28, 4, $aRelatorioOrdenado['tomador_inscricao_municipal']);
                         $oPdf->Ln();
                         $oPdf->SetFont('Arial', 'B', 8);
                         $oPdf->Cell(16, 4, 'CPNJ/CPF:');
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell($iMeiaPaginaX - 16, 4, $aRelatorioOrdenado['prestador_cnpjcpf']);
                         $oPdf->SetFont('Arial', 'B', 8);
                         $oPdf->Cell(16, 4, 'CPNJ/CPF:');
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell($iMeiaPaginaX - 16, 4, $aRelatorioOrdenado['tomador_cnpjcpf']);
                         $oPdf->Ln();
                         $oPdf->SetFont('Arial', 'B', 8);
                         $oPdf->Cell(20, 4, utf8_decode('Razão Social:'));
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell($iMeiaPaginaX - 20, 4, $aRelatorioOrdenado['prestador_razao_social']);
                         $oPdf->SetFont('Arial', 'B', 8);
                         $oPdf->Cell(20, 4, utf8_decode('Razão Social:'));
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell($iMeiaPaginaX - 20, 4, $aRelatorioOrdenado['tomador_razao_social']);
                         $oPdf->Ln();
                         $oPdf->SetFont('Arial', 'B', 8);
                         $oPdf->Cell(20, 4, utf8_decode('Município/UF:'));
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell($iMeiaPaginaX - 20, 4, $aRelatorioOrdenado['prestador_municipio_uf']);
                         $oPdf->SetFont('Arial', 'B', 8);
                         $oPdf->Cell(20, 4, utf8_decode('Município/UF:'));
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell($iMeiaPaginaX - 20, 4, $aRelatorioOrdenado['tomador_municipio_uf']);
                         $oPdf->Ln(5);
                         $oPdf->SetFont('Arial', 'B', 8);
                         $oPdf->Cell(14, 4, utf8_decode('Telefone:'));
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell($iMeiaPaginaX - 14, 4, $aRelatorioOrdenado['prestador_telefone']);
                         $oPdf->SetFont('Arial', 'B', 8);
                         $oPdf->Cell(14, 4, utf8_decode('Telefone:'));
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell($iMeiaPaginaX - 14, 4, $aRelatorioOrdenado['tomador_telefone']);
                         $oPdf->Ln(5);
                         if (count($aRelatorioOrdenado['documentos']) > 0) {
                             $aLarguraColuna = array(25, 14, 16, 51, 26, 18, 27, 13);
                             $oPdf->SetFont('Arial', 'B', 8);
                             $oPdf->Cell($aLarguraColuna[0], 5, utf8_decode('Nº do Documento'), 1, 0, 'C', 1);
                             $oPdf->Cell($aLarguraColuna[1], 5, utf8_decode('Origem'), 1, 0, 'L', 1);
                             $oPdf->Cell($aLarguraColuna[2], 5, utf8_decode('Data'), 1, 0, 'L', 1);
                             $oPdf->Cell($aLarguraColuna[3], 5, utf8_decode('Tipo de Documento'), 1, 0, 'L', 1);
                             $oPdf->Cell($aLarguraColuna[4], 5, utf8_decode('Valor Serviço (R$)'), 1, 0, 'R', 1);
                             $oPdf->Cell($aLarguraColuna[5], 5, utf8_decode('Alíquota (%)'), 1, 0, 'R', 1);
                             $oPdf->Cell($aLarguraColuna[6], 5, utf8_decode('Valor Imposto (R$)'), 1, 0, 'R', 1);
                             $oPdf->Cell($aLarguraColuna[7], 5, utf8_decode('Retido'), 1, 0, 'L', 1);
                             $oPdf->Ln(5);
                             // Flag para exibir a cor de fundo nas células
                             $iFundoLinha = 0;
                             // Percorre a lista de documentos
                             foreach ($aRelatorioOrdenado['documentos'] as $aDocumento) {
                                 $lFundoLinha = $iFundoLinha++ % 2 == 0 ? 0 : 1;
                                 // Cor de fundo das linhas (zebra)
                                 $oPdf->SetFont('Arial', '', 8);
                                 $oPdf->MultiCell($aLarguraColuna[0], 10, $aDocumento['prestador_doc_numero'], 1, 'C', $lFundoLinha);
                                 $oPdf->SetY($oPdf->getY() - 10);
                                 $oPdf->SetX($oPdf->getX() + $aLarguraColuna[0]);
                                 $oPdf->Cell($aLarguraColuna[1], 5, 'Prestador', 1, 0, 'L', $lFundoLinha);
                                 $oPdf->Cell($aLarguraColuna[2], 5, $aDocumento['prestador_doc_data']->format('d/m/Y'), 1, 0, 'L', $lFundoLinha);
                                 $oPdf->Cell($aLarguraColuna[3], 5, $aDocumento['prestador_doc_tipo'], 1, 0, 'L', $lFundoLinha);
                                 $oPdf->Cell($aLarguraColuna[4], 5, $aDocumento['prestador_doc_valor_servico'], 1, 0, 'R', $lFundoLinha);
                                 $oPdf->Cell($aLarguraColuna[5], 5, $aDocumento['prestador_doc_valor_aliquota'], 1, 0, 'R', $lFundoLinha);
                                 $oPdf->Cell($aLarguraColuna[6], 5, $aDocumento['prestador_doc_valor_iss'], 1, 0, 'R', $lFundoLinha);
                                 $oPdf->Cell($aLarguraColuna[7], 5, $aDocumento['prestador_doc_iss_retido'], 1, 0, 'L', $lFundoLinha);
                                 $oPdf->Ln(5);
                                 $oPdf->Cell($aLarguraColuna[0], 5, '');
                                 $oPdf->Cell($aLarguraColuna[1], 5, 'Tomador', 1, 0, 'L', $lFundoLinha);
                                 $oPdf->Cell($aLarguraColuna[2], 5, $aDocumento['tomador_doc_data']->format('d/m/Y'), 1, 0, 'L', $lFundoLinha);
                                 $oPdf->Cell($aLarguraColuna[3], 5, $aDocumento['tomador_doc_tipo'], 1, 0, 'L', $lFundoLinha);
                                 $oPdf->Cell($aLarguraColuna[4], 5, $aDocumento['tomador_doc_valor_servico'], 1, 0, 'R', $lFundoLinha);
                                 $oPdf->Cell($aLarguraColuna[5], 5, $aDocumento['tomador_doc_valor_aliquota'], 1, 0, 'R', $lFundoLinha);
                                 $oPdf->Cell($aLarguraColuna[6], 5, $aDocumento['tomador_doc_valor_iss'], 1, 0, 'R', $lFundoLinha);
                                 $oPdf->Cell($aLarguraColuna[7], 5, $aDocumento['tomador_doc_iss_retido'], 1, 0, 'L', $lFundoLinha);
                                 $oPdf->Ln(5);
                             }
                             $oPdf->Ln();
                         }
                     }
                 }
             }
         } catch (Exception $oErro) {
             throw new Exception($oErro->getMessage());
         }
         // Verifica se existem registro para gerar o relatório
         if ($lExistemRegistros) {
             $oPdf->Output();
         } else {
             throw new Exception($this->translate->_('Nenhum registro encontrado.'));
         }
         $aRetornoJson['status'] = TRUE;
         $aRetornoJson['url'] = $this->view->baseUrl("/tmp/{$sNomeArquivo}");
         $aRetornoJson['success'] = $this->translate->_('Relatório gerado com sucesso.');
     } catch (Exception $oErro) {
         $aRetornoJson['status'] = FALSE;
         $aRetornoJson['error'][] = $oErro->getMessage();
     }
     echo $this->getHelper('json')->sendJson($aRetornoJson);
 }
 /**
  * Converte o valor para o formato: 999.999.999,99
  *  
  * @param string $sValor
  * @return string
  */
 private function converterValor($sValor)
 {
     return DBSeller_Helper_Number_Format::toMoney($sValor);
 }
 /**
  * Define CNPJ
  * @param string $sCnpj
  */
 public function setCNPJ($sCnpj)
 {
     $this->cnpj = DBSeller_Helper_Number_Format::unmaskCPF_CNPJ($sCnpj);
 }
 /**
  * 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);
 }
 /**
  * Geração do relatório de valores por atividade / serviço
  */
 public function valoresAtividadeServicoGerarAction()
 {
     parent::noLayout();
     try {
         $aValidacaoFormulario = self::validarFormulario(Fiscal_Form_Relatorio1::TIPO5);
         if (is_array($aValidacaoFormulario)) {
             exit($this->getHelper('json')->sendJson($aValidacaoFormulario));
         }
         $sNomeArquivo = 'evolucao_arrecadacao_ ' . date('YmdHis') . '.pdf';
         $sCaminhoArquivo = APPLICATION_PATH . "/../public/tmp/{$sNomeArquivo}";
         $aParametros = $this->getRequest()->getParams();
         $aFiltros = array('atividade_servico' => 'Atividade / Serviço');
         $sOrdenacao = 'Crescente';
         if (strtoupper($aParametros['ordem']) == 'DESC') {
             $sOrdenacao = 'Decrescente';
         }
         $sFiltro = "Competência {$aParametros['data_competencia_inicial']} até {$aParametros['data_competencia_final']}";
         $sOrdem = $aFiltros[$aParametros['ordenacao']] . " ({$sOrdenacao})";
         $oFpdf = new Fiscal_Model_Relatoriopdfmodelo1('L');
         $oFpdf->setLinhaFiltro('Relatório Evolução de Arrecadação por Atividade/Serviço');
         $oFpdf->setLinhaFiltro('');
         $oFpdf->setLinhaFiltro("FILTRO : {$sFiltro}");
         $oFpdf->setLinhaFiltro("ORDEM : {$sOrdem}");
         $oFpdf->Open($sCaminhoArquivo);
         $oFpdf->carregadados();
         $aDataCompetenciaInicial = explode('/', $aParametros['data_competencia_inicial']);
         $aDataCompetenciaFinal = explode('/', $aParametros['data_competencia_final']);
         $sSql = "SELECT SUM(servico_valor_iss) AS valor_imposto,\n                          servico_codigo_cnae,\n                          documento_competencia_ano,\n                          documento_competencia_mes\n                     FROM view_nota_mais_dms\n                    WHERE documento_emite_guia = TRUE\n                     AND (dms_operacao = 's' OR dms_operacao IS NULL)\n                     AND  documento_situacao NOT IN ('c', 'e')\n                     AND  documento_status_cancelamento = FALSE\n                     AND (documento_competencia_ano || LPAD(CAST(documento_competencia_mes AS VARCHAR), 2, '0'))\n                          BETWEEN ? AND ?\n                 GROUP BY servico_codigo_cnae,\n                          documento_competencia_ano,\n                          documento_competencia_mes ";
         $aDadosRelatorio = array();
         $oEntityManager = Zend_Registry::get('em');
         $oConexao = $oEntityManager->getConnection();
         $oStatement = $oConexao->prepare($sSql);
         $oStatement->execute(array("{$aDataCompetenciaInicial[1]}{$aDataCompetenciaInicial[0]}", "{$aDataCompetenciaFinal[1]}{$aDataCompetenciaFinal[0]}"));
         if ($oStatement->rowCount() < 1) {
             throw new Exception('Nenhum Registro encontrado.');
         }
         while ($aNota = $oStatement->fetch()) {
             $oServicos = Contribuinte_Model_Servico::getServicoPorCnae($aNota['servico_codigo_cnae']);
             if (!$oServicos) {
                 throw new Exception("Erro: {$aNota['servico_codigo_cnae']}");
             }
             $sIndice = md5($aNota['servico_codigo_cnae'] . $oServicos->attr('atividade'));
             $aDadosRelatorio[$sIndice]['estrutural'] = $oServicos->attr('estrutural');
             $aDadosRelatorio[$sIndice]['descricao'] = DBSeller_Helper_String_Format::wordsCap($oServicos->attr('atividade'));
             if (!isset($aDadosRelatorio[$sIndice]['totalAnoMes'][$aNota['documento_competencia_ano']][$aNota['documento_competencia_mes']])) {
                 $aDadosRelatorio[$sIndice]['totalAnoMes'][$aNota['documento_competencia_ano']][$aNota['documento_competencia_mes']] = 0;
             }
             $aDadosRelatorio[$sIndice]['totalAnoMes'][$aNota['documento_competencia_ano']][$aNota['documento_competencia_mes']] += $aNota['valor_imposto'];
             if (!isset($aDadosRelatorio[$sIndice]['totalAcumulado'])) {
                 $aDadosRelatorio[$sIndice]['totalAcumulado'] = 0;
             }
             $aDadosRelatorio[$sIndice]['totalAcumulado'] += $aNota['valor_imposto'];
         }
         switch ($aParametros['ordenacao']) {
             case 'atividade_servico':
                 $sOrdenacao = 'estrutural';
                 break;
             case 'valor_total':
                 $sOrdenacao = 'totalAcumulado';
                 break;
         }
         $iComprimentoPagina = $oFpdf->w - $oFpdf->rMargin - $oFpdf->lMargin;
         $aDadosRelatorio = DBSeller_Helper_Array_Abstract::ordenarPorIndice($aDadosRelatorio, $sOrdenacao, $aParametros['ordem'], TRUE);
         // Percorre os registros do relatório
         foreach ($aDadosRelatorio as $aRegistro) {
             $sAtividadeServico = "Atividade / Serviço: {$aRegistro['estrutural']} - {$aRegistro['descricao']}";
             $oFpdf->SetFont('Arial', 'B', 8);
             $oFpdf->Cell($iComprimentoPagina, 5, utf8_decode($sAtividadeServico), 0, 1, 'J');
             $oFpdf->SetFont('Arial', '', 8);
             $aMeses = DBSeller_Helper_Date_Date::getMesesArray();
             $iTamanhoMes = $iComprimentoPagina / count($aMeses);
             // Ordena a lista pelo índice
             ksort($aRegistro['totalAnoMes']);
             // Percorre a lista pelo total por ano/mes
             foreach ($aRegistro['totalAnoMes'] as $iAno => $aAnos) {
                 // Percorre os meses para gerar o cabeçalho de meses
                 foreach ($aMeses as $iMes => $sDescricaoMes) {
                     $oFpdf->SetFont('Arial', 'B', 8);
                     $oFpdf->Cell($iTamanhoMes, 5, utf8_decode(substr($aMeses[$iMes], 0, 3)) . '/' . $iAno . '(R$)', 1, 0, 'C');
                 }
                 $oFpdf->ln();
                 // Percorre os meses para gerar os dados por mês
                 foreach ($aMeses as $iMes => $sMes) {
                     $oFpdf->SetFont('Arial', '', 8);
                     if (!empty($aAnos[$iMes])) {
                         $oFpdf->Cell($iTamanhoMes, 5, DBSeller_Helper_Number_Format::toMoney($aAnos[$iMes], 2), 1, 0, 'R');
                     } else {
                         $oFpdf->Cell($iTamanhoMes, 5, 'S / M', 1, 0, 'C');
                     }
                 }
                 $oFpdf->proximaPagina(1);
                 if (!$oFpdf->lQuebrouPagina) {
                     $oFpdf->Ln(6);
                 }
             }
             if (!$oFpdf->lQuebrouPagina) {
                 $oFpdf->Ln(2);
             }
         }
         $oFpdf->Output();
         $aRetornoJson['status'] = TRUE;
         $aRetornoJson['url'] = $this->view->baseUrl('tmp/' . $sNomeArquivo);
         $aRetornoJson['success'] = $this->translate->_('Relatório gerado com sucesso.');
     } catch (Exception $oErro) {
         $aRetornoJson['status'] = FALSE;
         $aRetornoJson['error'][] = $this->translate->_($oErro->getMessage());
     }
     echo $this->getHelper('json')->sendJson($aRetornoJson);
 }
 /**
  * Retorna os valores da NFSE calculado
  *
  * @param stdClass $oParametros
  *                                 $oParametros->perc_deducao;            // Percentual Deducao
  *                                 $oParametros->perc_inss;               // Percentual INSS
  *                                 $oParametros->perc_pis;                // Percentual PIS
  *                                 $oParametros->perc_cofins;             // Percentual COFINS
  *                                 $oParametros->perc_ir;                 // Percentual IR
  *                                 $oParametros->perc_csll;               // Percentual CSLL
  *                                 $oParametros->perc_aliquota;           // Percentual Aliquota
  *                                 $oParametros->vlr_servico;             // Valor Bruto do Serviço
  *                                 $oParametros->vlr_outras_retencoes;    // Valor Outras Retenções
  *                                 $oParametros->vlr_desc_condicionado;   // Valor Desconto Condicionado
  *                                 $oParametros->vlr_desc_incondicionado; // Valor Desconto Incondicionado
  *                                 $oParametros->imposto_retido_tomador;  // Imposto retido pelo tomador
  *                                 $oParametros->deducao_editavel;        // Habilita edição da dedução
  *                                 $oParametros->formatar_valores_ptbr;   // Retorna os valores em formato PTBR
  * @throws Exception
  * @see DBSeller_Helper_Number_Format
  * @return object stdClass
  */
 public static function calcularValores($oParametros)
 {
     if (!is_object($oParametros)) {
         throw new Exception('O parâmetro deve ser um objeto com os valores.');
     }
     // Limpa máscaras
     $oParametros->vlr_servico = DBSeller_Helper_Number_Format::toFloat($oParametros->vlr_servico);
     $oParametros->s_vl_deducoes = DBSeller_Helper_Number_Format::toFloat($oParametros->s_vl_deducoes);
     $oParametros->perc_aliquota = DBSeller_Helper_Number_Format::toFloat($oParametros->perc_aliquota);
     $oParametros->vlr_inss = DBSeller_Helper_Number_Format::toFloat($oParametros->vlr_inss);
     $oParametros->vlr_pis = DBSeller_Helper_Number_Format::toFloat($oParametros->vlr_pis);
     $oParametros->vlr_cofins = DBSeller_Helper_Number_Format::toFloat($oParametros->vlr_cofins);
     $oParametros->vlr_ir = DBSeller_Helper_Number_Format::toFloat($oParametros->vlr_ir);
     $oParametros->vlr_csll = DBSeller_Helper_Number_Format::toFloat($oParametros->vlr_csll);
     $oParametros->vlr_outras_retencoes = DBSeller_Helper_Number_Format::toFloat($oParametros->vlr_outras_retencoes);
     $oParametros->vlr_desc_condicionado = DBSeller_Helper_Number_Format::toFloat($oParametros->vlr_desc_condicionado);
     $oParametros->vlr_desc_incondicionado = DBSeller_Helper_Number_Format::toFloat($oParametros->vlr_desc_incondicionado);
     /*
      * Calculo dos os valores
      */
     $oParametros->vlr_base = $oParametros->vlr_servico - $oParametros->s_vl_deducoes;
     $oParametros->vlr_base -= $oParametros->vlr_desc_incondicionado;
     $oParametros->vlr_iss = DBSeller_Helper_Number_Format::toFloat($oParametros->vlr_base * ($oParametros->perc_aliquota / 100));
     $oParametros->vlr_liquido = $oParametros->vlr_servico;
     $oParametros->vlr_liquido -= $oParametros->vlr_inss;
     $oParametros->vlr_liquido -= $oParametros->vlr_pis;
     $oParametros->vlr_liquido -= $oParametros->vlr_cofins;
     $oParametros->vlr_liquido -= $oParametros->vlr_ir;
     $oParametros->vlr_liquido -= $oParametros->vlr_csll;
     $oParametros->vlr_liquido -= $oParametros->vlr_outras_retencoes;
     $oParametros->vlr_liquido -= $oParametros->vlr_desc_condicionado;
     $oParametros->vlr_liquido -= $oParametros->vlr_desc_incondicionado;
     // Desconta o valor do imposto quando retido pelo tomador
     if (isset($oParametros->imposto_retido_tomador) && $oParametros->imposto_retido_tomador) {
         $oParametros->vlr_liquido -= $oParametros->vlr_iss;
     }
     // Configura para o formato de moeda PTBR
     if (isset($oParametros->formatar_valores_ptbr) || $oParametros->formatar_valores_ptbr) {
         $oParametros->vlr_servico = DBSeller_Helper_Number_Format::toMoney($oParametros->vlr_servico);
         $oParametros->vlr_liquido = DBSeller_Helper_Number_Format::toMoney($oParametros->vlr_liquido);
         $oParametros->s_vl_deducoes = DBSeller_Helper_Number_Format::toMoney($oParametros->s_vl_deducoes);
         $oParametros->vlr_base = DBSeller_Helper_Number_Format::toMoney($oParametros->vlr_base);
         $oParametros->vlr_iss = DBSeller_Helper_Number_Format::toMoney($oParametros->vlr_iss);
         $oParametros->vlr_pis = DBSeller_Helper_Number_Format::toMoney($oParametros->vlr_pis);
         $oParametros->vlr_cofins = DBSeller_Helper_Number_Format::toMoney($oParametros->vlr_cofins);
         $oParametros->vlr_inss = DBSeller_Helper_Number_Format::toMoney($oParametros->vlr_inss);
         $oParametros->vlr_ir = DBSeller_Helper_Number_Format::toMoney($oParametros->vlr_ir);
         $oParametros->vlr_csll = DBSeller_Helper_Number_Format::toMoney($oParametros->vlr_csll);
         $oParametros->vlr_outras_retencoes = DBSeller_Helper_Number_Format::toMoney($oParametros->vlr_outras_retencoes);
         $oParametros->vlr_desc_condicionado = DBSeller_Helper_Number_Format::toMoney($oParametros->vlr_desc_condicionado);
         $oParametros->vlr_desc_incondicionado = DBSeller_Helper_Number_Format::toMoney($oParametros->vlr_desc_incondicionado);
     }
     return $oParametros;
 }
 /**
  * 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;
 }
 /**
  * Verifica se a numeração do documento consta na numeração liberada nos AIDOFs
  *
  * @param  integer $iInscricaoMunicipal
  * @param  integer $iNumeroNota
  * @param  integer $iTipoNota
  * @throws Exception
  * @return boolean
  */
 public function verificarNumeracaoValidaParaEmissaoDocumento($iInscricaoMunicipal, $iNumeroNota, $iTipoNota)
 {
     if (!$iInscricaoMunicipal) {
         throw new Exception('Informe a inscrição municipal.');
     }
     if (!$iNumeroNota) {
         throw new Exception('Informe o número do documento.');
     }
     if (!$iTipoNota) {
         throw new Exception('Informe o tipo de documento.');
     }
     $oWebService = new Administrativo_Lib_Model_WebService();
     $aFiltro = array('inscricao' => $iInscricaoMunicipal, 'tipo_nota' => $iTipoNota);
     $aCampos = array('nota_inicial', 'nota_final');
     $aWebService = $oWebService->consultar('getAidofNumeracaoValidaParaEmissaoNotas', array($aFiltro, $aCampos));
     if (!is_array($aWebService)) {
         throw new Exception('Ocorreu um erro ao verificar numeração do documento no WebService.');
     }
     $iNumeroNota = DBSeller_Helper_Number_Format::getNumbers($iNumeroNota);
     $iNumeracaoInicial = isset($aWebService[0]->nota_inicial) ? $aWebService[0]->nota_inicial : 0;
     $iNumeracaoFinal = isset($aWebService[0]->nota_final) ? $aWebService[0]->nota_final : 0;
     //    return ($iNumeroNota >= $iNumeracaoInicial && $iNumeroNota <= $iNumeracaoFinal);    // Ajuste Rafael em 10/06/2015
     return true;
     // Ajuste Rafael em 10/06/2015
 }
 /**
  * Método que busca do e-cidade os dados da empresa agruapada por Inscrição Municipal
  * @param  string $sCnpj
  * @return array  $aContribuinte
  * @throws Exception
  */
 public function getInscricaoMunicipalByCpjCnpj($sCnpj)
 {
     try {
         if ($sCnpj != NULL) {
             // Limpa máscaras
             $iCnpj = DBSeller_Helper_Number_Format::getNumbers($sCnpj);
             // Consulta WebService
             $aParametros = array(array('cnpj' => $iCnpj), self::$aCampos['getDadosEmpresa']);
             $aContribuinte = WebService_Model_Ecidade::consultar('getDadosEmpresa', $aParametros);
             return $aContribuinte;
         }
     } catch (Exception $oError) {
         DBSeller_Plugin_Notificacao::addErro('W009', "Erro ao consultar as Inscrições Municipais do Contribuinte: {$oError->getMessage()}");
         throw new Exception("Erro ao consultar as Inscrições Municipais do Contribuinte: {$oError->getMessage()}");
     }
 }
 /**
  * Carrega dos Dados das Receitas
  *
  * @param array $aDadosApuracaoMensal
  * @return bool
  */
 protected function carregarDadosReceitas(array $aDadosApuracaoMensal)
 {
     foreach ($aDadosApuracaoMensal as $iLinha => $sDados) {
         $aDados = explode('|', $sDados);
         if (is_array($aDados)) {
             $iCodigoRegistro = trim($aDados[1]);
             if ($iCodigoRegistro == '0430') {
                 $oReceita = new StdClass();
                 $oReceita->iIm = (int) $aDados[2];
                 $oReceita->sConta = $aDados[3];
                 $oReceita->sCodTribDesif = $aDados[4];
                 $oReceita->fValrCredMens = DBSeller_Helper_Number_Format::toFloat($aDados[5]);
                 $oReceita->fValrDebtMens = DBSeller_Helper_Number_Format::toFloat($aDados[6]);
                 $oReceita->fReceDecl = DBSeller_Helper_Number_Format::toFloat($aDados[7]);
                 $oReceita->fDeduReceDecl = DBSeller_Helper_Number_Format::toFloat($aDados[8]);
                 $oReceita->fDescDedu = trim($aDados[9]);
                 $oReceita->fBaseCalc = DBSeller_Helper_Number_Format::toFloat($aDados[10]);
                 $oReceita->fAliqIssqn = DBSeller_Helper_Number_Format::toFloat($aDados[11]);
                 $oReceita->fInctFisc = DBSeller_Helper_Number_Format::toFloat($aDados[12]);
                 $this->aDadosDesifReceitas[$iLinha] = $oReceita;
             }
         }
     }
     return TRUE;
 }
 /**
  * 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;
 }
 /**
  * Método para retornar os dados das contas em formato json para a DBJqGrid
  *
  * @param array $aParametros
  * @param bool  $bDetalhes
  * @return array
  */
 protected function retornaContasGuiaDesif(array $aParametros, $bDetalhes = FALSE)
 {
     $aRecord = array();
     $iLimit = $aParametros['rows'];
     $iPage = $aParametros['page'];
     $sSord = $aParametros['sord'];
     $oContribuinte = $this->_session->contribuinte;
     $sCodigosContribuintes = NULL;
     $oPaginatorAdapter = new DBSeller_Controller_Paginator(Contribuinte_Model_ImportacaoDesif::getQuery(), 'Contribuinte_Model_ImportacaoDesif', 'Contribuinte\\ImportacaoDesif');
     foreach ($oContribuinte->getContribuintes() as $iIdContribuinte) {
         if ($sCodigosContribuintes == NULL) {
             $sCodigosContribuintes .= $iIdContribuinte;
         } else {
             $sCodigosContribuintes .= ',' . $iIdContribuinte;
         }
     }
     $oPaginatorAdapter->where("e.contribuinte in ({$sCodigosContribuintes})");
     if (isset($aParametros['id'])) {
         $oPaginatorAdapter->andWhere("e.id = {$aParametros['id']}");
     }
     $oPaginatorAdapter->orderBy("e.competencia_inicial, e.competencia_final", $sSord);
     /**
      * Monta a paginação do GridPanel
      */
     $oResultado = new Zend_Paginator($oPaginatorAdapter);
     $oResultado->setItemCountPerPage($iLimit);
     $oResultado->setCurrentPageNumber($iPage);
     foreach ($oResultado as $oDesif) {
         $aValores = Contribuinte_Model_ImportacaoDesif::getTotalReceitasGuia($oDesif->getId(), $bDetalhes);
         /**
          * Verifica se for para exibir as aliquotas detalhadas
          */
         if ($bDetalhes) {
             foreach ($aValores['aliquotas_issqn'] as $iAliqIssqn => $aReceitas) {
                 $aRecord[] = array('id_importacao_desif' => $oDesif->getId(), 'aliq_issqn' => DBSeller_Helper_Number_Format::toFloat($iAliqIssqn), 'total_receita' => DBSeller_Helper_Number_Format::toMoney($aReceitas['total_receita'], 2, 'R$ '), 'total_iss' => DBSeller_Helper_Number_Format::toMoney($aReceitas['total_iss'], 2, 'R$ '));
             }
         } else {
             if ($aValores['total_receita'] > 0 && $aValores['total_iss'] > 0) {
                 $aRecord[] = array('id' => $oDesif->getId(), 'competencia_inicial' => $oDesif->getCompetenciaInicial(), 'competencia_final' => $oDesif->getCompetenciaFinal(), 'total_receita' => DBSeller_Helper_Number_Format::toMoney($aValores['total_receita'], 2, 'R$ '), 'total_iss' => DBSeller_Helper_Number_Format::toMoney($aValores['total_iss'], 2, 'R$ '), 'aValores' => $aValores);
             }
         }
     }
     $iTotal = $oResultado->getTotalItemCount();
     $iTotalPages = $iTotal > 0 && $iLimit > 0 ? ceil($iTotal / $iLimit) : 0;
     /**
      * Parametros de retorno do AJAX
      */
     $aRetornoJson = array('total' => $iTotalPages, 'page' => $iPage, 'records' => $iTotal, 'rows' => $aRecord);
     return $aRetornoJson;
 }
 /**
  * Trata os dados do formulário para serem salvos no banco de dados
  *
  * @param array $aDados
  * @return $this|bool
  */
 public function persist(array $aDados = NULL)
 {
     if (!is_array($aDados)) {
         return self::persistUsuario();
     }
     if (empty($aDados['senha'])) {
         unset($aDados['senha']);
     }
     $aValidaDados = $this->isValid($aDados);
     if ($aValidaDados['valid']) {
         // seta atributos para serem salvos no banco, habilitado sempre inicia como true
         if (isset($aDados['nome'])) {
             $this->entity->setNome($aDados['nome']);
         }
         if (isset($aDados['fone'])) {
             $this->entity->setTelefone(DBSeller_Helper_Number_Format::getNumbers($aDados['fone']));
         }
         if (isset($aDados['login'])) {
             $this->entity->setLogin($aDados['login']);
         }
         if (isset($aDados['senha'])) {
             $this->entity->setSenha($aDados['senha']);
         }
         if (isset($aDados['email'])) {
             $this->entity->setEmail($aDados['email']);
         }
         if (isset($aDados['habilitado'])) {
             $this->entity->setHabilitado(true);
         }
         if (isset($aDados['administrativo'])) {
             $this->entity->setAdministrativo($aDados['administrativo']);
         }
         if (isset($aDados['tipo'])) {
             $this->entity->setTipo($aDados['tipo']);
         }
         if (isset($aDados['cgm'])) {
             $this->entity->setCgm(DBSeller_Helper_Number_Format::getNumbers($aDados['cgm']));
         }
         if (isset($aDados['cnpj'])) {
             $this->entity->setCnpj(DBSeller_Helper_Number_Format::getNumbers($aDados['cnpj']));
         }
         if (isset($aDados['perfil'])) {
             if (is_numeric($aDados['perfil'])) {
                 $aDados['perfil'] = Administrativo_Model_Perfil::getById($aDados['perfil'])->getEntity();
             }
             $this->entity->setPerfil($aDados['perfil']);
         }
         if ($this->getId() === NULL) {
             // Verifica se o tipo de usuário é Contador e e se for vincula as empresas enviadas pelo e-cidade
             if ($this->getTipo() == Administrativo_Model_TipoUsuario::$CONTADOR) {
                 $aEmpresas = Administrativo_Model_Empresa::getByCnpj($this->getCnpj());
                 // Vincula ações de contribuintes
                 $this->vinculaEmpresas($aEmpresas);
             }
             // Verifica se o usuário é do tipo Contribuinte para vincular a empresa
             if ($this->getTipo() == Administrativo_Model_TipoUsuario::$CONTRIBUINTE) {
                 $oEmpresa = Contribuinte_Model_Contribuinte::getByCpfCnpj($this->getCnpj());
                 $oUsuarioContribuinte = new Administrativo_Model_UsuarioContribuinte();
                 $oUsuarioContribuinte->setIm($oEmpresa->getInscricaoMunicipal());
                 $oUsuarioContribuinte->setCnpjCpf($oEmpresa->getCgcCpf());
                 $oUsuarioContribuinte->setUsuario($this->entity);
                 $oUsuarioContribuinte->setHabilitado(true);
                 // Verifica a inscrição municipal informada
                 if (!empty($aDados['insc_municipal'])) {
                     $oUsuarioContribuinte->setIm($aDados['insc_municipal']);
                 }
                 $this->addUsuarioContribuinte($oUsuarioContribuinte);
                 // Salva os dados complementares do usuário contribuinte
                 if ($oEmpresa instanceof Contribuinte_Model_Contribuinte) {
                     self::salvarDadosComplementaresUsuarioContribuinte($oEmpresa->getInscricaoMunicipal());
                 }
             }
             // Vincula ações administrativas
             $aAcoes = $this->getPerfil()->getAcoes();
             $aAcoesAdministrativas = array();
             foreach ($aAcoes as $oAcao) {
                 $aAcoesAdministrativas[] = $oAcao;
             }
             $this->adicionaAcoes($aAcoesAdministrativas);
         }
         $this->em->persist($this->entity);
         $this->em->flush();
         return $this;
     } else {
         return $aValidaDados['errors'];
     }
 }
 /**
  * Método que monta o pdf para o relatório de guias
  *
  * @return array $aRetorno
  */
 public function montaRelatorio()
 {
     $sNomeArquivo = '/relatorio_guias_' . date('YmsdHis') . '.pdf';
     $sCaminhoArquivo = TEMP_PATH . $sNomeArquivo;
     $this->Open($sCaminhoArquivo);
     $this->AddPage();
     $this->SetFont('Arial', 'B', 8);
     $this->Cell(20, 6, utf8_decode('Competência'), "T L R B", 0, 'C');
     $this->Cell(23, 6, utf8_decode('Valor Total'), "T L R B", 0, 'C');
     $this->Cell(23, 6, utf8_decode('Valor ISS'), "T L R B", 0, 'C');
     $this->Cell(70, 6, utf8_decode('Contribuinte'), "T L R B", 0, 'C');
     $this->Cell(20, 6, utf8_decode('Inscrição'), "T L R B", 0, 'C');
     $this->Cell(35, 6, utf8_decode('CPF/CNPJ'), "T L R B", 1, 'C');
     $this->SetFont('Arial', '', 8);
     foreach ($this->aDados as $oDados) {
         $oDados->cnpj = DBSeller_Helper_Number_Format::maskCPF_CNPJ($oDados->cnpj);
         if (strlen($oDados->razaoSocial) > 35) {
             $oDados->razaoSocial = trim(substr($oDados->razaoSocial, 0, 35)) . "...";
         }
         $this->Cell(20, 6, utf8_decode($oDados->competencia), "T L R B", 0, 'C');
         $this->Cell(23, 6, utf8_decode($oDados->valorTotal), "T L R B", 0, 'C');
         $this->Cell(23, 6, utf8_decode($oDados->valorIss), "T L R B", 0, 'C');
         $this->Cell(70, 6, utf8_decode(trim($oDados->razaoSocial)), "T L R B", 0, 'L');
         $this->Cell(20, 6, utf8_decode($oDados->im), "T L R B", 0, 'C');
         $this->Cell(35, 6, utf8_decode($oDados->cnpj), "T L R B", 1, 'C');
     }
     $this->Output();
     // Opções de retorno
     $aRetorno = array('location' => $sCaminhoArquivo, 'filename' => $sNomeArquivo, 'type' => 'application/pdf');
     return $aRetorno;
 }
 /**
  * Método que cria relatório de importação DES-If
  * @param array $aReceitas
  */
 public function setDadosReceitas($aReceitas)
 {
     // Notas Válidas
     $this->SetFont('Arial', 'B', 8);
     $this->SetFillColor(201, 201, 201);
     $this->Cell(0, 5, utf8_decode('RECEITAS'), 1, 1, 'C', TRUE);
     $this->Ln(1);
     $aLarguraCelulas = array(25, 77);
     $this->SetFillColor(230, 230, 230);
     $this->Cell($aLarguraCelulas[0], 5, utf8_decode('Código Cosif'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[1], 5, utf8_decode('Descrição da Conta'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[0], 5, utf8_decode('Aliq.(%)'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[0], 5, utf8_decode('Ins. Fiscal(R$)'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[0], 5, utf8_decode('Total Cred.(R$)'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[0], 5, utf8_decode('Total Debto.(R$)'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[0], 5, utf8_decode('Receita (R$)'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[0], 5, utf8_decode('Ded. Receita(R$)'), 1, NULL, NULL, TRUE);
     $this->Cell($aLarguraCelulas[0], 5, utf8_decode('Base(R$)'), 1, NULL, NULL, TRUE);
     $this->SetFont('Arial', NULL, 8);
     if (count($aReceitas) > 0) {
         foreach ($aReceitas as $iChave => $oReceita) {
             if (strlen($oReceita['descricao_conta']) >= 40) {
                 $oReceita['descricao_conta'] = substr($oReceita['descricao_conta'], 0, 40) . "...";
             }
             $oReceita['aliq_issqn'] = DBSeller_Helper_Number_Format::toMoney($oReceita['aliq_issqn'], 2, NULL, '%');
             $oReceita['inct_fisc'] = DBSeller_Helper_Number_Format::toMoney($oReceita['inct_fisc'], 2, 'R$');
             $oReceita['valr_cred_mens'] = DBSeller_Helper_Number_Format::toMoney($oReceita['valr_cred_mens'], 2, 'R$');
             $oReceita['valr_debt_mens'] = DBSeller_Helper_Number_Format::toMoney($oReceita['valr_debt_mens'], 2, 'R$');
             $oReceita['rece_decl'] = DBSeller_Helper_Number_Format::toMoney($oReceita['rece_decl'], 2, 'R$');
             $oReceita['dedu_rece_decl'] = DBSeller_Helper_Number_Format::toMoney($oReceita['dedu_rece_decl'], 2, 'R$');
             $oReceita['base_calc'] = DBSeller_Helper_Number_Format::toMoney($oReceita['base_calc'], 2, 'R$');
             $this->Ln();
             $this->Cell($aLarguraCelulas[0], 5, utf8_decode($oReceita['conta_abrasf']), 1, NULL, NULL);
             $this->Cell($aLarguraCelulas[1], 5, utf8_decode($oReceita['descricao_conta']), 1, NULL, NULL);
             $this->Cell($aLarguraCelulas[0], 5, utf8_decode($oReceita['aliq_issqn']), 1, NULL, NULL);
             $this->Cell($aLarguraCelulas[0], 5, utf8_decode($oReceita['inct_fisc']), 1, NULL, NULL);
             $this->Cell($aLarguraCelulas[0], 5, utf8_decode($oReceita['valr_cred_mens']), 1, NULL, NULL);
             $this->Cell($aLarguraCelulas[0], 5, utf8_decode($oReceita['valr_debt_mens']), 1, NULL, NULL);
             $this->Cell($aLarguraCelulas[0], 5, utf8_decode($oReceita['rece_decl']), 1, NULL, NULL);
             $this->Cell($aLarguraCelulas[0], 5, utf8_decode($oReceita['dedu_rece_decl']), 1, NULL, NULL);
             $this->Cell($aLarguraCelulas[0], 5, utf8_decode($oReceita['base_calc']), 1, NULL, NULL);
         }
     } else {
         $this->Ln();
         $this->Cell(0, 5, utf8_decode('Sem receitas neste Período'), 1, NULL, 'C');
     }
 }