/**
  * Complementa os dados da Guia DMS após retornar do webservice
  *
  * @param object                   $oDadosGuia
  * @param Contribuinte_Model_Dms   $oDms
  * @return Contribuinte_Model_Guia $this
  */
 public function complementaGuiaDmsPrestador($oDadosGuia, Contribuinte_Model_Dms $oDms)
 {
     $this->setValorCorrigido($oDadosGuia->dados_boleto->valor_corrigido);
     $this->setValorHistorico($oDadosGuia->dados_boleto->valor_historico);
     $this->setCodigoBarras($oDadosGuia->dados_boleto->codigo_barras);
     $this->setLinhaDigitavel($oDadosGuia->dados_boleto->linha_digitavel);
     $this->setJurosMulta($oDadosGuia->dados_boleto->juros_multa);
     $this->setCodigoGuia($oDadosGuia->dados_boleto->codigo_guia);
     $this->addDms($oDms->getEntity());
     foreach ($oDadosGuia->lista_debitos as $oDebito) {
         $this->addNumpre($oDebito->numpre);
         $this->setNumpre($oDebito->numpre);
     }
     $this->persist();
     return $this;
 }
 /**
  * Lista de DMS Saida
  */
 public function emissaoDmsListaAction()
 {
     parent::noTemplate();
     $iMes = $this->_getParam('mes_competencia', NULL);
     $iAno = $this->_getParam('ano_competencia', NULL);
     $sDmsTipo = $this->_getParam('tipo', NULL);
     $oContribuinte = $this->_session->contribuinte;
     $oDms = new Contribuinte_Model_Dms();
     $aResultado = $oDms->getDMSSemGuiaNaCompetencia($oContribuinte, $iAno, $iMes, $sDmsTipo);
     // Filtra as notas isentas
     foreach ($aResultado as $oDms) {
         $bEmiteGuia = FALSE;
         $iQuantidadeNotas = 0;
         $fValorGuia = 0;
         // Notas de DMS
         foreach ($oDms->getDmsNotas() as $oNota) {
             // Ignora notas prestadas e retidas pelo tomador
             if ($oDms->getOperacao() == 's' && $oNota->getServicoImpostoRetido() == TRUE) {
                 continue;
             }
             // Ignora notas tomadas e retidas pelo tomador
             if ($oDms->getOperacao() == 'e' && $oNota->getServicoImpostoRetido() == FALSE) {
                 continue;
             }
             // nota: anulada, extraviada ou cancelada
             if ($oNota->getStatus() == 5 || in_array($oNota->getSituacaoDocumento(), array('E', 'C'))) {
                 continue;
             }
             // verifica se o contribuinte emite guia
             if ($oNota->getEmiteGuia()) {
                 $iQuantidadeNotas++;
                 $fValorGuia += $oNota->getServicoValorImposto();
                 $bEmiteGuia = TRUE;
             }
         }
         // Adiciona a quantidade e o valor total das DMS agrupadas
         $oDms->iQuantidadeNotas = $iQuantidadeNotas;
         $oDms->fValorGuia = $fValorGuia;
         if ($bEmiteGuia) {
             $aListaDms[] = $oDms;
         }
     }
     $this->view->aDms = isset($aListaDms) ? $aListaDms : array();
     $this->view->urlEdicaoDms = '/contribuinte/dms/emissao-manual-saida';
     if ($sDmsTipo == Contribuinte_Model_Dms::ENTRADA) {
         $this->view->urlEdicaoDms = '/contribuinte/dms/emissao-manual-entrada';
     }
 }
 /**
  * Metodo responsavel por criar as guias dms do prestador
  *
  * @param Contribuinte_Model_Dms $oDms
  * @param                        $sDataPagamento
  * @return StdClass
  */
 public static function gerarGuiaDmsPrestador(Contribuinte_Model_Dms $oDms, $sDataPagamento)
 {
     try {
         $oDoctrine = Zend_Registry::get('em');
         $oDoctrine->getConnection()->beginTransaction();
         $aNotas = array();
         foreach ($oDms->getDmsNotas() as $oDadosNota) {
             $oNota = new Contribuinte_Model_DmsNota($oDadosNota);
             // Ignora notas prestadas e retidas pelo tomador
             if ($oDms->getOperacao() == 's' && $oNota->getServicoImpostoRetido() == TRUE) {
                 continue;
             }
             // Ignora notas tomadas e retidas pelo tomador
             if ($oDms->getOperacao() == 'e' && $oNota->getServicoImpostoRetido() == FALSE) {
                 continue;
             }
             // Ignora notas anuladas, extraviadas ou canceladas
             if ($oNota->getStatus() == 5 || in_array($oNota->getSituacaoDocumento(), array('E', 'C'))) {
                 continue;
             }
             // Ignora notas isentas
             if ($oNota->getEmiteGuia() == FALSE) {
                 continue;
             }
             // Ignora notas com aliquota ou servico zerados
             if (floatval($oNota->getServicoAliquota()) <= 0) {
                 continue;
             } else {
                 if (floatval($oNota->getServicoValorImposto()) <= 0) {
                     continue;
                 }
             }
             $aNotas[$oNota->getId()] = $oNota;
         }
         $iMesCompetencia = $oDms->getMesCompetencia();
         $iAnoCompetencia = $oDms->getAnoCompetencia();
         $oUsuarioContribuinte = Administrativo_Model_UsuarioContribuinte::getById($oDms->getIdContribuinte());
         $oContribuinte = Administrativo_Model_UsuarioContribuinte::getContribuinte($oDms->getIdContribuinte());
         // Salva guia antes de ser gerada no e-cidade
         $oGuia = new Contribuinte_Model_Guia();
         $sDataPagamentoGuia = DBSeller_Helper_Date_Date::invertDate($sDataPagamento);
         $oGuia->gerarGuiaDmsPrestador($oContribuinte, new DateTime($sDataPagamentoGuia), $iMesCompetencia, $iAnoCompetencia);
         // Envia Guia para o e-cidade
         $oGuiaGerar = self::montaDadosGuia($oUsuarioContribuinte, $iAnoCompetencia, $iMesCompetencia, $aNotas, $sDataPagamento, $oGuia->getId());
         $oGuiaGerada = self::gerarGuia($oGuiaGerar, $sDataPagamento, self::TIPO_DEBITO_RETIDO);
         $oDms->setCodigoPlanilha($oGuiaGerada->codigo_planilha);
         $oDms->setStatus('emitida');
         $aDadosNotas = $oGuiaGerar->notas;
         $aDadosNotas += $oGuiaGerada->notas;
         foreach ($aDadosNotas as $oNotaProcessada) {
             $oNota = $aNotas[$oNotaProcessada->codigo_documento];
             $oNota->setCodigoNotaPlanilha($oNotaProcessada->codigo_nota_planilha);
             $oNota->setNumpre($oGuiaGerada->debito_planilha);
         }
         $oDms->persist();
         $oGuia->complementaGuiaDmsPrestador($oGuiaGerada->debito, $oDms);
         $oGuiaGerada->arquivo_guia = self::salvarPdf($oGuiaGerada->debito->dados_boleto->arquivo_guia, 'guia_substituto');
         $oDoctrine->getConnection()->commit();
         return $oGuiaGerada;
     } catch (Exception $oError) {
         $oDoctrine->getConnection()->rollback();
         return $oError->getMessage();
     }
 }
 /**
  * Calcula valores [Json]
  */
 public function emissaoManualCalculaValoresDmsAction()
 {
     // Parametros
     $lTomadorRetemImposto = $this->getRequest()->getParam('s_imposto_retido', 1);
     $fValorServico = $this->getRequest()->getParam('s_valor_bruto', 0);
     $fValorDeducao = $this->getRequest()->getParam('s_valor_deducao', 0);
     $fValorDescontoCondicionado = $this->getRequest()->getParam('s_vl_condicionado', 0);
     $fValorDescontoIncondicionado = $this->getRequest()->getParam('s_vl_desc_incondicionado', 0);
     $fPercentualAliquota = $this->getRequest()->getParam('s_aliquota', 0);
     $aValidacaoValores = Contribuinte_Model_Dms::emissaoManualCalculaValoresDms($lTomadorRetemImposto, $fValorServico, $fValorDeducao, $fValorDescontoCondicionado, $fValorDescontoIncondicionado, $fPercentualAliquota);
     echo $this->getHelper('json')->sendJson($aValidacaoValores);
 }
 /**
  * Remove os Meses que existe movimentacao ou foi declarado sem movimento
  *
  * @return $this
  */
 public function removerMesesComMovimentacaoDeNotas()
 {
     $oSession = new Zend_Session_Namespace('nfse');
     $iMesCompetencia = (int) date('m') - 1;
     $iAnoCompetencia = (int) ((int) date('m') == 1 ? date('Y') - 1 : date('Y'));
     $oContribuinte = $oSession->contribuinte;
     $oCompetencia = new Contribuinte_Model_Competencia($iAnoCompetencia, $iMesCompetencia, $oContribuinte);
     $aMeses = DBSeller_Helper_Date_Date::getMesesAnterioresArray($iMesCompetencia);
     $aDeclaracaoSemMovimento = $oCompetencia->getDeclaracaoSemMovimento();
     // Remove os meses que já tem declaracao sem movimento
     if (count($aDeclaracaoSemMovimento) > 0) {
         foreach ($aDeclaracaoSemMovimento as $oDeclaracaoSemMovimento) {
             unset($aMeses[$oDeclaracaoSemMovimento->mes]);
         }
     }
     // Verifica se existem notas lancadas no NFSE
     if (count($aMeses) > 0) {
         foreach ($aMeses as $iMes => $sMes) {
             $aResultadoDms = Contribuinte_Model_Dms::getDadosPorCompetencia($oContribuinte->getContribuintes(), $iAnoCompetencia, $iMes, Contribuinte_Model_Dms::SAIDA);
             // Verifica se tem NFSe lancadas na competência
             $oParametros = new stdClass();
             $oParametros->iMes = $iMes;
             $oParametros->iAno = $iAnoCompetencia;
             $aResultadoNota = Contribuinte_Model_Nota::getByContribuinteAndCompetencia($oContribuinte->getContribuintes(), $oParametros);
             // Limpa os meses
             if (count($aResultadoDms) > 0 || count($aResultadoNota) > 0) {
                 unset($aMeses[$iMes]);
             }
         }
     }
     // Desabilita geração quando não possuir meses válidos
     if (count($aMeses) == 0) {
         $this->getElement('mes_competencia')->setAttrib('disabled', TRUE);
         $this->getElement('btn_competencia')->setAttrib('disabled', TRUE);
     }
     $this->getElement('mes_competencia')->setMultiOptions($aMeses);
     return $this;
 }