/** * Retorna os totalizadores da importação para geraçao das guias * * @param integer $iCodigoImportacaoDesif * @param bool $lDetalhes * @param null $fAliquota * @return array */ public static function getTotalReceitasGuia($iCodigoImportacaoDesif, $lDetalhes = FALSE, $fAliquota = NULL) { $aReceitaAgrupadas = array(); $aParametros = array('importacao_desif' => $iCodigoImportacaoDesif, 'guia' => NULL); $aReceitaAgrupadas = NULL; $aContasImportacaoGuia = Contribuinte_Model_DesifContaGuia::getByAttributes($aParametros); /** * Percorre as contas selecionadas que irá gerar as guias */ foreach ($aContasImportacaoGuia as $oDesifContaGuia) { $aParametros = array('importacao_desif' => $iCodigoImportacaoDesif, 'importacao_desif_conta' => $oDesifContaGuia->getImportacaoDesifConta()->getId()); /** * Filtro por aliquota */ if (!empty($fAliquota)) { $aParametros['aliq_issqn'] = "{$fAliquota}"; } $aDesifReceita = Contribuinte_Model_ImportacaoDesifReceita::getByAttributes($aParametros); $fValorTotal = 0; $fValorIss = 0; /** * Percore as receitas de cada importação */ foreach ($aDesifReceita as $oDesifReceita) { $fValor = $oDesifReceita->getValrCredMens(); $fAliqIssqn = DBSeller_Helper_Number_Format::toFloat($oDesifReceita->getAliqIssqn()); /** * Soma os totais por aliquota com detalhamento */ if ($lDetalhes) { if (isset($aAliqIssqnAgrupadas[$fAliqIssqn])) { $aAliqIssqnAgrupadas[$fAliqIssqn]['total_receita'] = $aAliqIssqnAgrupadas[$fAliqIssqn]['total_receita'] + $fValor; } else { $aAliqIssqnAgrupadas[$fAliqIssqn]['total_receita'] = $fValor; } $fValorTotal = $aAliqIssqnAgrupadas[$fAliqIssqn]['total_receita']; $aAliqIssqnAgrupadas[$fAliqIssqn]['total_iss'] = $fValorTotal * ($fAliqIssqn / 100); $aReceitaAgrupadas['id_importacao_desif'] = $iCodigoImportacaoDesif; $aReceitaAgrupadas['id_importacao_desif_conta'][] = $oDesifReceita->getImportacaoDesifConta()->getId(); $aReceitaAgrupadas['data_importacao'] = $oDesifReceita->getImportacaoDesif()->getDataImportacao(); $aReceitaAgrupadas['aliquotas_issqn'] = $aAliqIssqnAgrupadas; } else { $fValorTotal = $fValorTotal + $fValor; $fValorIss = $fValorIss + $fValor * ($fAliqIssqn / 100); } } /** * Retorna os valores totais das receitas e iss totalizadas */ if (!$lDetalhes) { $aReceitaAgrupadas['total_receita'] = $aReceitaAgrupadas['total_receita'] + $fValorTotal; $aReceitaAgrupadas['total_iss'] = $aReceitaAgrupadas['total_iss'] + $fValorIss; } } return $aReceitaAgrupadas; }
/** * 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 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()); }