/** * 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; }
/** * Atualiza a situação das guias conforme uma coleção de numpre e numpar informados * * @param array $aGuias * @return array * @throws Exception */ public static function atualizaSituacaoGuias(array $aGuias) { $aResultado = array(); // Agrupa os Numpres e Numpars do Contribuinte foreach ($aGuias as $oGuia) { $sChaveNumpreNumpar = "{$oGuia->getNumpre()}/{$oGuia->getMesComp()}"; $aDadosSituacao[$sChaveNumpreNumpar]['iNumpre'] = $oGuia->getNumpre(); $aDadosSituacao[$sChaveNumpreNumpar]['iNumpar'] = $oGuia->getMesComp(); } if (isset($aDadosSituacao)) { $aSitucao = Contribuinte_Model_GuiaEcidade::pesquisaSituacaoGuias($aDadosSituacao); // Altera a situacao da guia conforme as situacoes encontradas na pesquisa foreach ($aGuias as $oGuia) { $sChaveNumpreNumpar = "{$oGuia->getNumpre()}/{$oGuia->getMesComp()}"; $sSituacao = $aSitucao[$sChaveNumpreNumpar]; if (!isset(self::$WS_NFSE_SITUACAO[$sSituacao])) { throw new Exception("Situação de débito {$sSituacao} não mapeada para o modelo Guia"); } $oGuia->setSituacao(self::$WS_NFSE_SITUACAO[$sSituacao]); $oComparaData = new Zend_Date("01-{$oGuia->getMesComp()}-{$oGuia->getAnoComp()}"); $oComparaData->add(1, 'MM'); // Verifica se a guia de débito foi cancelada no E-cidade remove o vinculo da guia, caso seja NFSE e não // estiver um mês retroativo apenas exibe como "Quitada Manualmente" if ($oComparaData->compare(new Zend_Date(), 'MM/yyyy') == 0 && $oGuia->getTipoDocumentoOrigem() == self::$DOCUMENTO_ORIGEM_NFSE || $oGuia->getTipoDocumentoOrigem() == self::$DOCUMENTO_ORIGEM_DMS) { if (!empty($sSituacao) && $sSituacao == 'CANCELADO') { $aAtributos = array('set' => array('guia' => NULL), 'where' => array('guia' => $oGuia->getEntity())); Contribuinte_Model_DesifContaGuia::update($aAtributos['set'], $aAtributos['where']); Contribuinte_Model_Guia::removeGuiaCancelada($oGuia); } else { $aResultado[] = $oGuia; } } else { $aResultado[] = $oGuia; } } } return $aResultado; }
/** * 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; }
/** * Salva as contas selecionadas para emissão da Guia DES-IF */ public function salvarEmissaoAction() { parent::noTemplate(); $aParametro = $this->_request->getPost(); if (!empty($aParametro['selecionados'])) { $aParametro['selecionados'] = array_unique($aParametro['selecionados']); } else { $aParametro['selecionados'] = array(); } $oDesifContaGuia = new Contribuinte_Model_DesifContaGuia(); $aRetornoJson = $oDesifContaGuia->salvarEmissaoContas($aParametro); echo $this->getHelper('json')->sendJson($aRetornoJson); }