/**
  * 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;
 }
Пример #2
0
 /**
  * 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);
 }