/**
  * Tela com a lista de DMS de serviços tomados
  */
 public function emissaoManualEntradaListaDmsAction()
 {
     // Parametros request
     $iMes = $this->getRequest()->getParam('mes');
     $iAno = $this->getRequest()->getParam('ano');
     $oDms = new Contribuinte_Model_Dms();
     $aDms = $oDms->getCompetenciaByCpfCnpj($this->oContribuinte->getCgcCpf(), $iMes, $iAno, $oDms::ENTRADA);
     if (count($aDms) > 0) {
         // Varre a lista de DMS
         foreach ($aDms as $oDms) {
             $fValorDms = 0;
             $sStatus = $oDms->getStatus();
             if ($oDms->getStatus() == 'emitida') {
                 $iNumpre = Contribuinte_Model_DmsNota::getNumpreByIdDms($oDms->getId());
                 $sStatusEcidade = Contribuinte_Model_GuiaEcidade::atualizaSituacao($iNumpre, $iMes);
                 if ($sStatusEcidade == 'ABERTO') {
                     $sStatus = 'Emitida Guia';
                 }
             }
             foreach ($oDms->getDmsNotas() as $oNota) {
                 $fValorDms += $oNota->getServicoValorImposto();
             }
             // Formata os dados
             $sMesPorExtenso = DBSeller_Helper_Date_Date::mesExtenso($oDms->getMesCompetencia());
             // Lista de DMS para view
             $oDmsView = new stdClass();
             $oDmsView->id = $oDms->getId();
             $oDmsView->data_operacao = $oDms->getDataOperacao()->format('d/m/Y');
             $oDmsView->competencia = "{$sMesPorExtenso}/{$oDms->getAnoCompetencia()}";
             $oDmsView->fechado = $oDms->getStatus() == 'fechado';
             $oDmsView->status_guia = DBSeller_Helper_String_Format::wordsCap($sStatus);
             $oDmsView->valor_imposto = DBSeller_Helper_Number_Format::toMoney($fValorDms, 2, 'R$ ');
             $aResultado[] = $oDmsView;
         }
     }
     // Competencia
     $oCompetencia = new stdClass();
     $oCompetencia->mes = $iMes;
     $oCompetencia->ano = $iAno;
     // Dados da view
     $this->view->aDms = isset($aResultado) ? $aResultado : array();
     $this->view->competencia = $oCompetencia;
 }
 /**
  * Geração do relatório de empresas omissas
  */
 public function empresasOmissasGerarAction()
 {
     parent::noLayout();
     $aValidacaoFormulario = self::validarFormulario(Fiscal_Form_Relatorio2::TIPO6);
     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');
         $sCompetenciaInicial = $this->getRequest()->getParam('data_competencia_inicial');
         $sCompetenciaFinal = $this->getRequest()->getParam('data_competencia_final');
         // 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_empresas_omissas_' . date('YmdHis') . '.pdf';
         $aDescricaoFiltros = array('inscricao_municipal' => 'Inscrição Municipal', 'nome' => 'Nome', 'asc' => 'Crescente', 'desc' => 'Decrescente');
         $oPdf = new Fiscal_Model_Relatoriopdfmodelo1('L');
         $oPdf->Open(APPLICATION_PATH . "/../public/tmp/{$sNomeArquivo}");
         $oPdf->setLinhaFiltro('Relatório de Empresas Omissas');
         $oPdf->setLinhaFiltro('');
         $oPdf->setLinhaFiltro("FILTRO: Competência de {$sCompetenciaInicial} até {$sCompetenciaFinal}");
         $oPdf->setLinhaFiltro("ORDEM: {$aDescricaoFiltros[$sOrdenacaoCampo]} ({$aDescricaoFiltros[$sOrdenacaoDirecao]})");
         $oPdf->carregaDados();
         $aUsuarioContribuintes = Administrativo_Model_UsuarioContribuinte::getPrestadores();
         $aInscricoesMunicipaisContribuintes = array();
         // Verifica se existem usuários contribuinte cadastrados
         if (count($aUsuarioContribuintes) == 0) {
             throw new Exception($this->translate->_('Não existem contribuintes cadastrados no sistema.'));
         }
         $aDeclaracaoIsentoValidos = array();
         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;
                 }
                 // Varre a lista de usuários contribuintes, verificando quem tem movimentações
                 foreach ($aUsuarioContribuintes as $oContribuinte) {
                     // Verifica se tem movimentação
                     $sSql = "SELECT 1 AS existe_movimento\n                     FROM   view_nota_mais_dms\n                      WHERE (dms_operacao     = 's' OR dms_operacao IS NULL)   AND\n                            prestador_cnpjcpf = '{$oContribuinte->getCnpjCpf()}' AND\n                            documento_competencia_ano = {$iAnoLoop} AND\n                            documento_competencia_mes = {$iMesLoop}";
                     $oStatement = $this->oConexao->prepare($sSql);
                     $oStatement->execute();
                     // Adiciona na lista somente os contribuinte sem movimentação no sistema
                     if ($oStatement->rowCount() == 0) {
                         // Informações complementares do contribuinte
                         $oDadosContribuinteComplemento = Administrativo_Model_UsuarioContribuinteComplemento::getById($oContribuinte->getCnpjCpf());
                         // Variaveis do contribuinte
                         $iInscricaoMunicipal = $oContribuinte->getIm();
                         $sRazaoSocial = $oDadosContribuinteComplemento->getRazaoSocial();
                         $sEndereco = $oDadosContribuinteComplemento->getEnderecoDescricao();
                         if (strlen(trim($iInscricaoMunicipal)) > 0) {
                             // Dados dos contribuintes
                             $aDeclaracaoIsentoValidos[$iAnoLoop][$iMesLoop][$iInscricaoMunicipal] = array('inscricao_municipal' => $iInscricaoMunicipal, 'nome' => DBSeller_Helper_String_Format::wordsCap($sRazaoSocial), 'endereco' => DBSeller_Helper_String_Format::wordsCap($sEndereco), 'telefone' => $oDadosContribuinteComplemento->getContatoTelefone(), 'competencia_ano' => $iAnoLoop, 'competencia_mes' => $iMesLoop);
                         }
                         // Lista para consulta no webservice
                         $aInscricoesMunicipaisContribuintes[$iInscricaoMunicipal] = $iInscricaoMunicipal;
                     }
                 }
             }
         }
         // Mosta a lista de inscrições do contribuintes para verificação no webservice (separados por vírgula)
         $sInscricoesMunicipaisContribuintes = implode("','", $aInscricoesMunicipaisContribuintes);
         // Retorna apenas os contribuintes com declaração de insento
         $aDeclaracaoIsento = Contribuinte_Model_Competencia::getDeclaracaoSemMovimentoPorContribuintes($sInscricoesMunicipaisContribuintes);
         // Limpa as inscricoes com declaração de isenção
         foreach ($aDeclaracaoIsento as $oDeclaracaoIsento) {
             unset($aDeclaracaoIsentoValidos[$oDeclaracaoIsento->ano][$oDeclaracaoIsento->mes][$oDeclaracaoIsento->inscricao_municipal]);
             // Limpa dados do mes, caso não possua registros
             if (isset($aDeclaracaoIsentoValidos[$oDeclaracaoIsento->ano][$oDeclaracaoIsento->mes]) && count($aDeclaracaoIsentoValidos[$oDeclaracaoIsento->ano][$oDeclaracaoIsento->mes]) == 0) {
                 unset($aDeclaracaoIsentoValidos[$oDeclaracaoIsento->ano][$oDeclaracaoIsento->mes]);
             }
             // Limpa dados do ano, caso não possua registros
             if (isset($aDeclaracaoIsentoValidos[$oDeclaracaoIsento->ano]) && count($aDeclaracaoIsentoValidos[$oDeclaracaoIsento->ano]) == 0) {
                 unset($aDeclaracaoIsentoValidos[$oDeclaracaoIsento->ano]);
             }
         }
         if (count($aDeclaracaoIsentoValidos) == 0) {
             $sMensagemErro = 'Nenhuma informação foi encontrada neste período para geração do relatório.';
             throw new Exception($this->translate->_($sMensagemErro));
         }
         // 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;
                 }
                 // Ordena o array pelo índice informado
                 if (isset($aDeclaracaoIsentoValidos[$iAnoLoop][$iMesLoop])) {
                     // Formata para mês por extenso
                     $sMesExtenso = DBSeller_Helper_Date_Date::mesExtenso($iMesLoop);
                     $oPdf->SetFont('Arial', 'B', 8);
                     $oPdf->Cell(20, 5, utf8_decode('Competência:'));
                     $oPdf->SetFont('Arial', NULL, 8);
                     $oPdf->Cell(0, 5, utf8_decode("{$sMesExtenso}/{$iAnoLoop}"));
                     $oPdf->Ln(5);
                     $oPdf->SetFont('Arial', 'B', 8);
                     $oPdf->Cell(28, 5, utf8_decode('Inscrição Municipal'), 1);
                     $oPdf->Cell(100, 5, utf8_decode('Nome'), 1);
                     $oPdf->Cell(117, 5, utf8_decode('Endereço'), 1);
                     $oPdf->Cell(32, 5, utf8_decode('Telefone'), 1);
                     $oPdf->Ln(5);
                     $aDeclaracaoIsentoOrdenado = DBSeller_Helper_Array_Abstract::ordenarPorIndice($aDeclaracaoIsentoValidos[$iAnoLoop][$iMesLoop], $sOrdenacaoCampo, $sOrdenacaoDirecao, TRUE);
                     $oPdf->SetFont('Arial', NULL, 8);
                     foreach ($aDeclaracaoIsentoOrdenado as $oDeclaracaoIsentoOrdenado) {
                         $oPdf->Cell(28, 5, utf8_decode($oDeclaracaoIsentoOrdenado['inscricao_municipal']), 1);
                         $oPdf->Cell(100, 5, utf8_decode($oDeclaracaoIsentoOrdenado['nome']), 1);
                         $oPdf->Cell(117, 5, utf8_decode($oDeclaracaoIsentoOrdenado['endereco']), 1);
                         $oPdf->Cell(32, 5, utf8_decode($oDeclaracaoIsentoOrdenado['telefone']), 1);
                         $oPdf->Ln(5);
                     }
                     $oPdf->Ln(5);
                     $oPdf->proximaPagina(10);
                 }
             }
         }
         $oPdf->Output();
         $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);
 }
 /**
  * Define os dados do contribuinte
  *
  * @param Contribuinte_Model_Contribuinte $oContribuinte
  * @param                                 $iMesCompetencia
  * @param                                 $iAnoCompetencia
  * @param bool                            $lLivroFiscal
  */
 public function setDadosContribuinte(Contribuinte_Model_Contribuinte $oContribuinte, $iMesCompetencia, $iAnoCompetencia, $lLivroFiscal = TRUE)
 {
     if (!$lLivroFiscal) {
         $this->AddPage();
     }
     // Mês e ano da competnência por extenso
     $sCompetencia = DBSeller_Helper_Date_Date::mesExtenso($iMesCompetencia) . "/{$iAnoCompetencia}";
     $sCompetencia = utf8_decode($sCompetencia);
     // Mostra os campos referentes à guia somente para contribuintes NFSe
     if ($oContribuinte->getTipoEmissao() == Contribuinte_Model_Contribuinte::TIPO_EMISSAO_NOTA || !$lLivroFiscal) {
         // Situação da Guia
         $sDataFechamentoGuia = '-';
         $sSituacaoGuia = 'Em aberto';
         $oGuia = new Contribuinte_Model_Guia();
         $aGuia = $oGuia->getByCompetenciaAndContribuinte($iAnoCompetencia, $iMesCompetencia, $oContribuinte, Contribuinte_Model_Guia::$PRESTADOR);
         if (count($aGuia) > 0) {
             $oGuia = $aGuia[0]->getEntity();
             $sDataFechamentoGuia = $oGuia->getDataFechamento()->format('d/m/Y');
             $sSituacaoGuia = Contribuinte_Model_Guia::$SITUACAO[$oGuia->getSituacao()];
         }
         $aLarguraCelulas = array(57, 55, 55, 55, 55, 45, 50);
         $this->SetFont('Arial', 'B', 8);
         if ($lLivroFiscal) {
             // Mostra CGM ou Inscrição Municipal
             if ($oContribuinte->getCgm()) {
                 $this->Cell($aLarguraCelulas[0], 5, utf8_decode('CGM / Inscrição Municipal:'), 1);
             } else {
                 $this->Cell($aLarguraCelulas[0], 5, utf8_decode('Inscrição Municipal:'), 1);
             }
             $this->Cell($aLarguraCelulas[1], 5, utf8_decode('CPF / CNPJ:'), 1);
             $this->Cell($aLarguraCelulas[2], 5, utf8_decode('Mês Referência:'), 1);
             $this->Cell($aLarguraCelulas[3], 5, utf8_decode('Situação:'), 1);
             $this->Cell($aLarguraCelulas[4], 5, utf8_decode('Encerramento:'), 1);
             $this->Ln();
             $this->SetFont('Arial', NULL, 8);
             // Mostra CGM ou Inscrição Municipal
             if ($oContribuinte->getCgm()) {
                 $this->Cell($aLarguraCelulas[0], 5, $oContribuinte->getCgm(), 1);
             } else {
                 $this->Cell($aLarguraCelulas[0], 5, $oContribuinte->getInscricaoMunicipal(), 1);
             }
             $sCpfCnpjContribuinte = DBSeller_Helper_Number_Format::maskCPF_CNPJ($oContribuinte->getCgcCpf());
             $this->Cell($aLarguraCelulas[1], 5, $sCpfCnpjContribuinte, 1);
             $this->Cell($aLarguraCelulas[2], 5, $sCompetencia, 1);
             $this->Cell($aLarguraCelulas[3], 5, $sSituacaoGuia, 1);
             $this->Cell($aLarguraCelulas[4], 5, $sDataFechamentoGuia, 1);
             $this->Ln(6);
         } else {
             // Mostra CGM ou Inscrição Municipal
             if ($oContribuinte->getCgm()) {
                 $this->Cell($aLarguraCelulas[1], 5, utf8_decode('CGM / Inscrição Municipal:'), 1);
             } else {
                 $this->Cell($aLarguraCelulas[1], 5, utf8_decode('Inscrição Municipal:'), 1);
             }
             $this->Cell($aLarguraCelulas[6], 5, utf8_decode('CPF / CNPJ:'), 1);
             $this->Cell($aLarguraCelulas[5], 5, utf8_decode('Competencia Inicial:'), 1);
             $this->Cell($aLarguraCelulas[5], 5, utf8_decode('Competencia Final:'), 1);
             $this->Cell($aLarguraCelulas[5], 5, utf8_decode('Situação:'), 1);
             $this->Cell(0, 5, utf8_decode('Encerramento:'), 1);
             $this->Ln();
             $this->SetFont('Arial', NULL, 8);
             // Mostra CGM ou Inscrição Municipal
             if ($oContribuinte->getCgm()) {
                 $this->Cell($aLarguraCelulas[1], 5, $oContribuinte->getCgm(), 1);
             } else {
                 $this->Cell($aLarguraCelulas[1], 5, $oContribuinte->getInscricaoMunicipal(), 1);
             }
             $sCpfCnpjContribuinte = DBSeller_Helper_Number_Format::maskCPF_CNPJ($oContribuinte->getCgcCpf());
             $sCompetenciaInicial = $iMesCompetencia['inicial'] . '/' . $iAnoCompetencia['inicial'];
             $sCompetenciaFinal = $iMesCompetencia['final'] . '/' . $iAnoCompetencia['final'];
             $this->Cell($aLarguraCelulas[6], 5, $sCpfCnpjContribuinte, 1);
             $this->Cell($aLarguraCelulas[5], 5, $sCompetenciaInicial, 1);
             $this->Cell($aLarguraCelulas[5], 5, $sCompetenciaFinal, 1);
             $this->Cell($aLarguraCelulas[5], 5, $sSituacaoGuia, 1);
             $this->Cell(0, 5, $sDataFechamentoGuia, 1);
             $this->Ln(6);
         }
     } else {
         $aLarguraCelulas = array(93, 92, 92);
         $this->SetFont('Arial', 'B', 8);
         // Mostra CGM ou Inscrição Municipal
         if ($oContribuinte->getCgm()) {
             $this->Cell($aLarguraCelulas[0], 5, utf8_decode('CGM / Inscrição Municipal:'), 1);
         } else {
             $this->Cell($aLarguraCelulas[0], 5, utf8_decode('Inscrição Municipal:'), 1);
         }
         $this->Cell($aLarguraCelulas[1], 5, utf8_decode('CPF / CNPJ:'), 1);
         $this->Cell($aLarguraCelulas[2], 5, utf8_decode('Mês Referência:'), 1);
         $this->Ln();
         $this->SetFont('Arial', NULL, 8);
         // Mostra CGM ou Inscrição Municipal
         if ($oContribuinte->getCgm()) {
             $this->Cell($aLarguraCelulas[0], 5, $oContribuinte->getCgm(), 1);
         } else {
             $this->Cell($aLarguraCelulas[0], 5, $oContribuinte->getInscricaoMunicipal(), 1);
         }
         $this->Cell($aLarguraCelulas[1], 5, DBSeller_Helper_Number_Format::maskCPF_CNPJ($oContribuinte->getCgcCpf()), 1);
         $this->Cell($aLarguraCelulas[2], 5, $sCompetencia, 1);
         $this->Ln(6);
     }
     $this->SetFont('Arial', 'B', 8);
     $this->Cell(0, 5, utf8_decode('Razão Social:'), 1);
     $this->Ln();
     $this->SetFont('Arial', NULL, 8);
     $this->Cell(0, 5, utf8_decode($oContribuinte->getNome()), 1);
     $this->Ln(6);
     $this->SetFont('Arial', 'B', 8);
     $this->Cell(242, 5, utf8_decode('Endereço:'), 1);
     $this->Cell(35, 5, utf8_decode('Número:'), 1);
     $this->Ln();
     $this->SetFont('Arial', NULL, 8);
     $this->Cell(242, 5, utf8_decode($oContribuinte->getDescricaoLogradouro()), 1);
     $this->Cell(35, 5, utf8_decode($oContribuinte->getLogradouroNumero()), 1);
     $this->Ln(6);
     $this->SetFont('Arial', 'B', 8);
     $this->Cell(90, 5, utf8_decode('Complemento:'), 1);
     $this->Cell(80, 5, utf8_decode('Bairro:'), 1);
     $this->Cell(72, 5, utf8_decode('Cidade:'), 1);
     $this->Cell(35, 5, utf8_decode('Estado:'), 1);
     $this->Ln();
     $this->SetFont('Arial', NULL, 8);
     $this->Cell(90, 5, utf8_decode($oContribuinte->getLogradouroComplemento()), 1);
     $this->Cell(80, 5, utf8_decode($oContribuinte->getLogradouroBairro()), 1);
     $this->Cell(72, 5, utf8_decode($oContribuinte->getDescricaoMunicipio()), 1);
     $this->Cell(35, 5, utf8_decode($oContribuinte->getEstado()), 1);
     $this->Ln(6);
     $oDataAtual = new DateTime();
     $sEnderecoIp = $_SERVER['REMOTE_ADDR'];
     $this->SetFont('Arial', 'B', 8);
     $this->Cell(139, 5, utf8_decode("Endereço IP: {$sEnderecoIp}"), 1);
     $this->Cell(138, 5, utf8_decode("Data da impressão: {$oDataAtual->format('d/m/Y H:i:s')}"), 1);
     $this->Ln(7);
 }