/**
  * 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;
 }
예제 #2
0
 /**
  * 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;
 }
 /**
  * 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);
 }
 /**
  * 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);
 }
예제 #5
0
 /**
  * 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;
 }
 /**
  * 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);
 }
 /**
  * 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);
 }
 /**
  * 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());
     }
 }
 /**
  * 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);
     }
 }
 /**
  * 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);
 }
 /**
  * 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);
     }
 }
 /**
  * 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);
 }
 /**
  * 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');
     }
 }