/**
  * 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;
 }
 /**
  * Método responsável pela inserção dos dados no Banco de Dados
  * @throws Exception
  */
 public function processarArquivo()
 {
     if ($this->validacao()) {
         $oDoctrine = Zend_Registry::get('em');
         try {
             $oDoctrine->getConnection()->beginTransaction();
             $oDataSistema = new DateTime();
             $oImportacaoDesif = new Contribuinte_Model_ImportacaoDesif();
             $oImportacaoDesif->setContribuinte($this->oContribuinte->getEntity());
             $oImportacaoDesif->setDataImportacao($oDataSistema);
             $oImportacaoDesif->setCompetenciaInicial($this->oDadosDesif->sCompetenciaInicial);
             $oImportacaoDesif->setCompetenciaFinal($this->oDadosDesif->sCompetenciaFinal);
             $oImportacaoDesif->setVersao($this->oDadosDesif->sVersao);
             $oImportacaoDesif->setNomeArquivo($this->oDadosDesif->sNomeArquivo);
             $oImportacaoDesif->persist();
             //Retornar o id para gerar o protocolo de sucesso
             $iImportacaoDesifId = $oImportacaoDesif->getId();
             // Grava as contas que ainda não estão salvas no plano de contas do DESIF
             foreach ($this->aDadosDesifContas as $oDadosConta) {
                 $aDesifConta = Contribuinte_Model_ImportacaoDesifConta::getByAttributes(array('conta' => $oDadosConta->sConta, 'contribuinte' => $this->oContribuinte->getEntity()));
                 $oDesifConta = array_shift($aDesifConta);
                 if (empty($oDesifConta)) {
                     $oPlanoContaAbrasf = Contribuinte_Model_PlanoContaAbrasf::getByAttribute('conta_abrasf', $oDadosConta->sContaCosif);
                     //Verifica se existe conta no plano abrasf para fazer o vínculo
                     if (empty($oPlanoContaAbrasf)) {
                         throw new Exception('Conta informada ' . $oDadosConta->sContaCosif . ' inexistente no plano de conta da ABRASF.', self::EXCEPTION_CONTA_INEXISTENTE_NO_PLANO_ABRASF);
                     }
                     $oImportacaoDesifConta = new Contribuinte_Model_ImportacaoDesifConta();
                     $oImportacaoDesifConta->setConta($oDadosConta->sConta);
                     $oImportacaoDesifConta->setNome($oDadosConta->sNome);
                     $oImportacaoDesifConta->setDescricaoConta($oDadosConta->sDescricaoConta);
                     $oImportacaoDesifConta->setPlanoContaAbrasf($oPlanoContaAbrasf->getEntity());
                     $oImportacaoDesifConta->setContribuinte($this->oContribuinte->getEntity());
                     if (!empty($oDadosConta->sContaPai)) {
                         $aContaPai = Contribuinte_Model_ImportacaoDesifConta::getByAttributes(array('conta' => $oDadosConta->sContaPai, 'contribuinte' => $this->oContribuinte->getEntity()));
                         $oContaPai = array_shift($aContaPai);
                         $oImportacaoDesifConta->setImportacaoDesifConta($oContaPai->getEntity());
                     }
                     $oImportacaoDesifConta->persist();
                 }
             }
             // Adiciona os dados das tarifas do banco
             foreach ($this->aDadosDesifTarifas as $oDesifTarifa) {
                 $aImportacaoDesifConta = Contribuinte_Model_ImportacaoDesifConta::getByAttributes(array('conta' => $oDesifTarifa->sConta, 'contribuinte' => $this->oContribuinte->getEntity()));
                 $oImportacaoDesifConta = array_shift($aImportacaoDesifConta);
                 if (!empty($oImportacaoDesifConta)) {
                     $oImportacaoDesifTarifa = new Contribuinte_Model_ImportacaoDesifTarifa();
                     $oImportacaoDesifTarifa->setImportacaoDesif($oImportacaoDesif->getEntity());
                     $oImportacaoDesifTarifa->setImportacaoDesifConta($oImportacaoDesifConta->getEntity());
                     $oImportacaoDesifTarifa->setTarifaBanco($oDesifTarifa->sTarifaConta);
                     $oImportacaoDesifTarifa->setDescricao($oDesifTarifa->sDescricao);
                     $oImportacaoDesifTarifa->persist();
                 }
             }
             // Adiciona os dados das receitas informadas
             foreach ($this->aDadosDesifReceitas as $oReceita) {
                 $aImportacaoDesifConta = Contribuinte_Model_ImportacaoDesifConta::getByAttributes(array('conta' => $oReceita->sConta, 'contribuinte' => $this->oContribuinte->getEntity()));
                 $oImportacaoDesifConta = array_shift($aImportacaoDesifConta);
                 if (empty($oImportacaoDesifConta)) {
                     throw new Exception("Conta {$oReceita->sConta} é inválida!");
                 }
                 $oImportacaoDesifReceita = new Contribuinte_Model_ImportacaoDesifReceita();
                 $oImportacaoDesifReceita->setImportacaoDesif($oImportacaoDesif->getEntity());
                 $oImportacaoDesifReceita->setImportacaoDesifConta($oImportacaoDesifConta->getEntity());
                 $oImportacaoDesifReceita->setSubTitu($oReceita->sConta);
                 $oImportacaoDesifReceita->setCodTribDesif($oReceita->sCodTribDesif);
                 $oImportacaoDesifReceita->setValrCredMens($oReceita->fValrCredMens);
                 $oImportacaoDesifReceita->setValrDebtMens($oReceita->fValrDebtMens);
                 $oImportacaoDesifReceita->setReceDecl($oReceita->fReceDecl);
                 $oImportacaoDesifReceita->setDeduReceDecl($oReceita->fDeduReceDecl);
                 $oImportacaoDesifReceita->setDescDedu($oReceita->fDescDedu);
                 $oImportacaoDesifReceita->setBaseCalc($oReceita->fBaseCalc);
                 $oImportacaoDesifReceita->setAliqIssqn($oReceita->fAliqIssqn);
                 $oImportacaoDesifReceita->setInctFisc($oReceita->fInctFisc);
                 $oImportacaoDesifReceita->persist();
             }
             $oDoctrine->getConnection()->commit();
             return $iImportacaoDesifId;
         } catch (Exception $oErro) {
             $oDoctrine->getConnection()->rollback();
             if ($oErro->getCode() == self::EXCEPTION_CONTA_INEXISTENTE_NO_PLANO_ABRASF) {
                 throw $oErro;
             }
             throw new Exception('Erro ao processar os arquivos da DES-IF!');
         }
     }
 }
 /**
  * Método para salvar as Contas preparadas para emissão de Guia
  * @param array $aParametros
  * @return array $aRetorno
  * @return Exception
  */
 public function salvarEmissaoContas(array $aParametro)
 {
     $oDoctrine = Zend_Registry::get('em');
     try {
         $oDoctrine->getConnection()->beginTransaction();
         // Prepara parametros a serem removidos da preparação da guia
         $aContasDelete['importacao_desif_conta'] = $aParametro['contasPagina'];
         $aContasDelete['importacao_desif'] = $aParametro['competencia'];
         $aContasDelete['guia'] = null;
         $oImportacaoDesif = Contribuinte_Model_ImportacaoDesif::getById($aParametro['competencia']);
         $oDesifContaGuiaDelete = Contribuinte_Model_DesifContaGuia::delete($aContasDelete);
         foreach ($aParametro['selecionados'] as $iConta) {
             // Salva contas preparadas para a emissão de guia
             $oImportacaoDesifConta = Contribuinte_Model_ImportacaoDesifConta::getById($iConta);
             $oDesifContaGuia = new Contribuinte_Model_DesifContaGuia();
             $oDesifContaGuia->setImportacaoDesif($oImportacaoDesif->getEntity());
             $oDesifContaGuia->setImportacaoDesifConta($oImportacaoDesifConta->getEntity());
             $oDesifContaGuia->persist();
         }
         $oDoctrine->getConnection()->commit();
         $aRetorno['status'] = TRUE;
         $aRetorno['success'] = 'Emissão atualizada!';
     } catch (Exception $oErro) {
         $oDoctrine->getConnection()->rollback();
         $aRetorno['status'] = FALSE;
         $aRetorno['error'][] = 'Não foi possível atualizar a emissão!' . $oErro->getMessage();
     }
     return $aRetorno;
 }
 /**
  * Método que gera o relatório e importações de desif
  */
 public function imprimeImportacaoAction()
 {
     parent::noLayout();
     $iIdImportacao = $this->getRequest()->getParam('id');
     $sDataHoraGeracao = date('YmdHis');
     $sArquivoPdf = "importacao_desif_{$sDataHoraGeracao}.pdf";
     $oContribuinte = $this->_session->contribuinte;
     $oDadosPrefeitura = Administrativo_Model_Prefeitura::getDadosPrefeituraBase();
     $oImportacaoDesif = Contribuinte_Model_ImportacaoDesif::getById($iIdImportacao);
     $sCompInicial = $oImportacaoDesif->getCompetenciaInicial();
     $sCompFinal = $oImportacaoDesif->getCompetenciaFinal();
     $aMes = array('inicial' => substr($sCompInicial, 4), 'final' => substr($sCompFinal, 4));
     $aAno = array('inicial' => substr($sCompInicial, 0, 4), 'final' => substr($sCompFinal, 0, 4));
     $aReceitas = Contribuinte_Model_ImportacaoDesifReceita::getReceitasContasByImportacao($iIdImportacao);
     $oPdf = new Contribuinte_Model_RelatorioReceitasDesif('l');
     $oPdf->setNomeArquivo($sArquivoPdf);
     $oPdf->setAmbiente(getenv('APPLICATION_ENV'));
     $oPdf->setPrefeitura($oDadosPrefeitura);
     $oPdf->openPdf();
     $oPdf->setDadosContribuinte($oContribuinte, $aMes, $aAno, FALSE);
     $oPdf->setDadosReceitas($aReceitas);
     $oPdf->Output();
     parent::download($oPdf->getNomeArquivo());
 }
 /**
  * @param Contribuinte_Model_Contribuinte $oContribuinte
  * @param                                 $iAno
  * @param                                 $iMes
  * @param null                            $fAliquota
  * @return object
  */
 public static function getTotalReceitasCompetencia(Contribuinte_Model_Contribuinte $oContribuinte, $iAno, $iMes, $fAliquota = NULL)
 {
     $aReceitasGuia = array();
     $aParametros = array('contribuinte' => $oContribuinte->getContribuintes(), 'competencia_inicial' => "{$iAno}{$iMes}");
     $aImportacaoDesif = Contribuinte_Model_ImportacaoDesif::getByAttributes($aParametros);
     /**
      * Verifica se retornou uma importacao desif
      */
     if (isset($aImportacaoDesif[0])) {
         $oImportacaoDesif = $aImportacaoDesif[0]->getEntity();
         $aReceitasGuia = Contribuinte_Model_ImportacaoDesif::getTotalReceitasGuia($oImportacaoDesif->getId(), TRUE, $fAliquota);
     }
     return (object) $aReceitasGuia;
 }
 /**
  * Gera a guia de DES-IF no eCidade
  *
  * @param Contribuinte_Model_Contribuinte $oContribuinte
  * @param                                 $iAnoCompetencia
  * @param                                 $iMesCompetencia
  * @param DateTime                        $oDataPagamento
  * @param                                 $fAliquota
  * @param bool                            $lGerarPdf
  * @return bool
  * @throws Exception
  */
 public static function gerarGuiaDesif(Contribuinte_Model_Contribuinte $oContribuinte, $iAnoCompetencia, $iMesCompetencia, DateTime $oDataPagamento, $fAliquota, $lGerarPdf = TRUE)
 {
     // Verifica se já possui uma guia emitida
     $lTemGuiaEmitida = Contribuinte_Model_Guia::existeGuia($oContribuinte, $iMesCompetencia, $iAnoCompetencia, Contribuinte_Model_Guia::$DOCUMENTO_ORIGEM_NFSE);
     if ($lTemGuiaEmitida) {
         throw new Exception('Guia já emitida.');
     }
     $aReceitasDesif = Contribuinte_Model_ImportacaoDesif::getTotalReceitasCompetencia($oContribuinte, $iAnoCompetencia, $iMesCompetencia, $fAliquota);
     $sDataPagamento = $oDataPagamento->format('d/m/Y');
     $oUsuarioContribuinte = Administrativo_Model_UsuarioContribuinte::getById($oContribuinte->getIdUsuarioContribuinte());
     $oValidateDate = new Zend_Validate_Date();
     $sData = DBSeller_Helper_Date_Date::invertDate($sDataPagamento);
     $sDataValidacao = DBSeller_Helper_Date_Date::invertDate($sDataPagamento, '');
     if ($sDataValidacao < date('Ymd')) {
         throw new Exception('Informe uma data posterior a data atual!');
     }
     if ($oValidateDate->isValid($sDataPagamento)) {
         $oData = new DateTime($sData);
     } else {
         throw new Exception('Informe uma data para pagamento válida!');
     }
     /**
      * Alterado o parametro de envio do cpf_cnpj para o e-cidade pois não estava sendo passado corretamente.
      */
     $iCpfCnpj = $oUsuarioContribuinte->getCnpjCpf();
     $iCpf = strlen($iCpfCnpj) == 11 ? $iCpfCnpj : NULL;
     $iCnpj = strlen($iCpfCnpj) == 14 ? $iCpfCnpj : NULL;
     $oGuiaGerar = new StdClass();
     $oGuiaGerar->id_importacao_desif = $aReceitasDesif->id_importacao_desif;
     $oGuiaGerar->id_importacao_desif_conta = $aReceitasDesif->id_importacao_desif_conta;
     $oGuiaGerar->inscricao_municipal = $oUsuarioContribuinte->getIm();
     $oGuiaGerar->cpf = $iCpf;
     $oGuiaGerar->cnpj = $iCnpj;
     $oGuiaGerar->numcgm = $oUsuarioContribuinte->getCgm();
     $oGuiaGerar->mes_competencia = $iMesCompetencia;
     $oGuiaGerar->ano_competencia = $iAnoCompetencia;
     $aListaReceitas = array();
     foreach ($aReceitasDesif->aliquotas_issqn as $fAliquota => $aDadosReceita) {
         $sNumeroNotaFiscal = date('YmdHs', time()) . $aReceitasDesif->id_importacao_desif . str_replace('.', '', $fAliquota);
         $oReceita = new stdClass();
         $oReceita->numero_nota_fiscal = $sNumeroNotaFiscal;
         $oReceita->codigo_documento = $aReceitasDesif->id_importacao_desif;
         $oReceita->data_nota_fiscal = $aReceitasDesif->data_importacao->format('Y-m-d');
         $oReceita->serie_nota_fiscal = NULL;
         $oReceita->valor_base_calculo = $aDadosReceita['total_receita'];
         $oReceita->valor_deducao = 0;
         $oReceita->valor_imposto_retido = $aDadosReceita['total_iss'];
         $oReceita->valor_servico_prestado = $aDadosReceita['total_receita'];
         $oReceita->aliquota = $fAliquota;
         $oReceita->data_pagamento = $sDataPagamento;
         $oReceita->retido = $aDadosReceita['total_iss'];
         $oReceita->situacao = 1;
         $oReceita->status = 1;
         $oReceita->servico_prestado = 'Receita Importada Desif';
         $oReceita->cnpj_prestador = $oUsuarioContribuinte->getCnpjCpf();
         $oReceita->inscricao_prestador = $oUsuarioContribuinte->getIm();
         $oReceita->nome = $oContribuinte->getNome();
         $oReceita->operacao = 2;
         $aListaReceitas[] = $oReceita;
     }
     $oGuiaGerar->notas = $aListaReceitas;
     $aDados = array('planilha' => $oGuiaGerar, 'data_pagamento' => $oData->format('Y-m-d'), 'tipo_debito' => Contribuinte_Model_GuiaEcidade::TIPO_DEBITO_VARIAVEL);
     $oGuiaGerada = WebService_Model_Ecidade::processar('geraDebitoIssContribribuinte', $aDados);
     $oGuia = new Contribuinte_Model_Guia();
     $oGuia->gerarGuiaDesifPrestador($oContribuinte, $oGuiaGerada, $iAnoCompetencia, $iMesCompetencia, $oDataPagamento);
     $sArquivoGuiaPdf = $oGuiaGerada->debito->dados_boleto->arquivo_guia;
     if ($lGerarPdf) {
         $oGuiaGerada->arquivo_guia = Contribuinte_Model_GuiaEcidade::salvarPdf($sArquivoGuiaPdf, 'guia_substituto');
     }
     return $oGuiaGerada;
 }