/**
  * Emite e gera as guias conforme a receita e aliquota informadas
  */
 public function emitirGuiaAction()
 {
     parent::noTemplate();
     $aParametros = $this->getAllParams();
     try {
         $iIdImportacao = $aParametros['id'];
         $fAliquota = $aParametros['aliq_issqn'] ? $aParametros['aliq_issqn'] : NULL;
         $oContribuinte = $this->_session->contribuinte;
         $aReceitaDesif = Contribuinte_Model_ImportacaoDesif::getTotalReceitaGuiaDesif($oContribuinte, $iIdImportacao, $fAliquota);
         $sTotalReceita = DBSeller_Helper_Number_Format::toMoney($aReceitaDesif->total_receita, 2, 'R$ ');
         $sTotalIss = DBSeller_Helper_Number_Format::toMoney($aReceitaDesif->total_iss, 2, 'R$ ');
         $oFormEmitirGuia = new Contribuinte_Form_GuiaCompetencia();
         $oFormEmitirGuia->setName('form-emitir-guia');
         $oFormEmitirGuia->setAction('/contribuinte/guia-desif/emitir-guia');
         $oFormEmitirGuia->getElement('ano')->setValue($aReceitaDesif->ano_competencia);
         $oFormEmitirGuia->getElement('mes')->setValue($aReceitaDesif->mes_competencia);
         $oFormEmitirGuia->getElement('aliq_issqn')->setValue($fAliquota);
         $oFormEmitirGuia->getElement('total_servico')->setValue($sTotalReceita);
         $oFormEmitirGuia->getElement('total_iss')->setValue($sTotalIss);
         $oFormEmitirGuia->getElement('data_guia')->setValue(date('d/m/Y'));
         $this->view->form = $oFormEmitirGuia;
         // Verifica se for enviado os dados via $_POST
         if ($this->getRequest()->isPost()) {
             // Formata a data de pagamento da guia
             $sDataInvertida = DBSeller_Helper_Date_Date::invertDate($this->getRequest()->getParam('data_guia'));
             $oDataPagamento = new DateTime($sDataInvertida);
             // Gera a guia e emite o PDF da geração
             $oGuia = Contribuinte_Model_GuiaEcidade::gerarGuiaDesif($oContribuinte, $aParametros['ano'], $aParametros['mes'], $oDataPagamento, $fAliquota, true);
             $this->view->arquivo = $oGuia->arquivo_guia;
         }
     } catch (Exception $oErro) {
         $this->view->mensagem_erro = $oErro->getMessage();
     }
 }
 /**
  * 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;
 }
 /**
  * Gerar as guias em aberto dos contribuintes
  */
 public function gerarAction()
 {
     parent::noLayout();
     $aParametros = $this->getRequest()->getParams();
     /**
      * Parametros de retorno do AJAX
      */
     $aRetornoJson = array('success' => FALSE, 'message' => NULL);
     try {
         /**
          * Verifica competência informada
          */
         if (empty($aParametros['mes_competencia']) || empty($aParametros['ano_competencia'])) {
             throw new Exception('Informe a competência.');
         }
         $iMesCompetencia = str_pad($aParametros['mes_competencia'], 2, '0', STR_PAD_LEFT);
         $iAnoCompetencia = $aParametros['ano_competencia'];
         $iMesCorrente = date('m');
         $iAnoCorrente = date('Y');
         /**
          * Verifica mês e ano corrente
          */
         if ($iMesCompetencia >= $iMesCorrente && $iAnoCompetencia == $iAnoCorrente) {
             throw new Exception('Competência corrente não é gerado guia. <br />Selecione os meses anteriores ao corrente.');
         }
         $oDataPagamento = new DateTime();
         $aGuiasCompetencia = Contribuinte_Model_Competencia::getByGuiasContribuinteAndCompetencia($iMesCompetencia, $iAnoCompetencia);
         /**
          * Verifica se encontro alguma guia em aberto
          */
         if (count($aGuiasCompetencia) == 0) {
             throw new Exception('Nenhum registro encontrado para a competência selecionada.');
         }
         foreach ($aGuiasCompetencia as $oGuiaCompetencia) {
             $oContribuinte = $oGuiaCompetencia->getContribuinte();
             $iMesCompetencia = $oGuiaCompetencia->getMesComp();
             $iAnoCompetencia = $oGuiaCompetencia->getAnoComp();
             $aNotas = $oGuiaCompetencia->getNotas();
             if (empty($iMesCompetencia)) {
                 throw new Exception("O mês de competência do contribuinte {$oContribuinte->getInscricaoMunicipal()} não foi informado.");
             }
             if (empty($iAnoCompetencia)) {
                 throw new Exception("O ano de competência do contribuinte {$oContribuinte->getInscricaoMunicipal()} não foi informado.");
             }
             if (count($aNotas) == 0) {
                 throw new Exception("Não existem notas na competência do contribuinte {$oContribuinte->getInscricaoMunicipal()} não foi informado.");
             }
             $aRetornoGuiaEcidade[] = Contribuinte_Model_GuiaEcidade::gerarGuiaNFSE($oContribuinte, $oGuiaCompetencia, $oDataPagamento, FALSE);
         }
         $aRetornoJson['success'] = TRUE;
         $aRetornoJson['message'] = "Guias de competência {$iMesCompetencia}/{$iAnoCompetencia} geradas com sucesso.";
         /**
          * Para uso como debug de retorno do e-cidade
          */
         //$aRetornoJson['retorno_ecidade'] = $aRetornoGuiaEcidade;
     } catch (Exception $oErro) {
         $aRetornoJson['message'] = $oErro->getMessage();
     }
     echo $this->getHelper('json')->sendJson($aRetornoJson);
 }
 /**
  * Gera a guia da DMS
  */
 public function dmsGerarAction()
 {
     $sDataPagamento = $this->_getParam('data_pagamento', NULL);
     $iCodigoDms = $this->_getParam('id_dms', NULL);
     $aRetornoJson = array();
     $aRetornoJson['status'] = TRUE;
     try {
         $oDms = Contribuinte_Model_Dms::getById($iCodigoDms);
         $oGuia = Contribuinte_Model_GuiaEcidade::gerarGuiaDmsPrestador($oDms, $sDataPagamento);
         // Verifica se retornou algum erro no processo de geração da guia
         if (is_string($oGuia)) {
             throw new Exception($oGuia);
         }
         // Verifica se foi gerado o arquivo de emissão da guia
         if (empty($oGuia->arquivo_guia)) {
             throw new Exception('Ocorreu algum problema na geração da guia de pagamento!');
         }
         $aRetornoJson['url'] = $oGuia->arquivo_guia;
         $aRetornoJson['success'] = $this->translate->_('Guia emitida com sucesso.');
     } catch (Exception $oError) {
         $aRetornoJson['status'] = FALSE;
         $aRetornoJson['error'][] = $oError->getMessage();
     }
     echo $this->getHelper('json')->sendJson($aRetornoJson);
 }
 /**
  * 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 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;
 }