/**
  * Exclui um objeto oid do Banco de dados
  * @param integer $iOid
  *
  * Caso de Uso: Ao excluir um registro de uma tabela e eo campo for do tipo oid,
  * Deve-se excluir o objeto do banco utilizando este método
  */
 public static function exclusao($iOid)
 {
     $lTransacaoInterna = false;
     global $conn;
     if (!db_utils::inTransaction()) {
         throw new Exception("Sem transação Ativa.");
     }
     return pg_lo_unlink($conn, $iOid);
 }
 /**
  * Funçao que retorna o número + 1 do ultimo alvará cadastrado para evitar descontinuidade na sequence.
  * O numero estará armazenado na tabela de parâmetro issbasenumeracao
  * No momento da chamada da função esse número será atualizado para o próximo (q133_numeracaoatual + 1)
  * e atribuido a váriavel q02_inscr da classe
  *
  * @return boolean
  */
 function getNumeroContinuo()
 {
     $lTransacaoInterna = false;
     $lErro = false;
     if (!db_utils::inTransaction()) {
         $lTransacaoInterna = true;
         db_inicio_transacao();
     }
     $sUpdate = "update issbasenumeracao \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
     $sUpdate .= "   set q133_numeracaoatual = q133_numeracaoatual + 1 ";
     if (db_query($sUpdate)) {
         $sSql = "select q133_numeracaoatual       ";
         $sSql .= "  from issbasenumeracao \t\t\t   ";
         $sSql .= " order by q133_sequencial desc   ";
         $sSql .= " limit 1\t\t\t\t\t\t\t\t\t\t\t   ";
         $rsNumeroContinuo = db_query($sSql);
         if ($rsNumeroContinuo and pg_num_rows($rsNumeroContinuo) > 0) {
             $this->q02_inscr = db_utils::fieldsMemory($rsNumeroContinuo, 0)->q133_numeracaoatual;
         } else {
             $lErro = true;
         }
     }
     if ($lTransacaoInterna) {
         db_fim_transacao($lErro);
     }
     if (!$lErro) {
         if (!db_query("select setval('issbase_q02_inscr_seq', {$this->q02_inscr})")) {
             return false;
         }
         return true;
     } else {
         return false;
     }
 }
 /**
  * Salva os Dados da Nota da Planilha de Retencao 
  * 
  * @access public
  * @return void
  */
 public function salvar()
 {
     if (!db_utils::inTransaction()) {
         throw new Exception("Erro [0] - Não Existe transação ativa");
     }
     $oDaoNotas = db_utils::getDao("issplanit");
     $oDaoNotas->q21_planilha = $this->getCodigoPlanilha();
     //$this->iCodigoPlanilha;
     $oDaoNotas->q21_dataop = $this->getDataOperacao()->getDate();
     //$this->getDatausu();
     $oDaoNotas->q21_horaop = $this->getHoraOperacao();
     //db_hora();
     $oDaoNotas->q21_tipolanc = $this->getTipoLancamento();
     //1;
     $oDaoNotas->q21_retido = $this->isRetido() ? 'true' : 'false';
     //"true";
     $oDaoNotas->q21_status = $this->getStatus();
     //1;
     $oDaoNotas->q21_situacao = $this->getSituacao();
     //"0";
     $oDaoNotas->q21_datanota = $this->getDataNota()->getDate();
     //$oNota->dtNota;
     $oDaoNotas->q21_cnpj = $this->getCNPJ();
     //$oNota->sCnpj;
     $oDaoNotas->q21_serie = $this->getSerie();
     //"";
     $oDaoNotas->q21_nome = $this->getNome();
     //substr($oNota->sNome,0,40);
     $oDaoNotas->q21_nota = $this->getNumeroNota();
     //$oNota->sNumeroNota;
     $oDaoNotas->q21_valorser = $this->getValorServico();
     //$oNota->nValor;
     $oDaoNotas->q21_valor = $this->getValorRetencao();
     //$oNota->nValorTotalRetencao;
     $oDaoNotas->q21_aliq = $this->getAliquota();
     //$oNota-nAliquota;
     $oDaoNotas->q21_valordeducao = $this->getValorDeducao();
     //"{$oNota->nValorDeducao}";
     $oDaoNotas->q21_valorbase = $this->getValorBase();
     //$oNota->nValorBase;
     $oDaoNotas->q21_valorimposto = $this->getValorImposto();
     //$oNota->nValorTotalRetencao;
     $oDaoNotas->q21_servico = $this->getDescricaoServico();
     //"Recolhimento de retencao";
     $oDaoNotas->q21_obs = $this->getObservacoes();
     //"";
     $oDaoNotas->incluir(null);
     if ($oDaoNotas->erro_status == 0) {
         throw new Exception("Erro ao incluir nota na planilha.\n{$oDaoNotas->erro_msg}");
     }
     if (!empty($this->iCodigoNotaLiquidacao)) {
         $oDaoIssPlanOp = db_utils::getDao("issplanitop");
         $oDaoIssPlanOp->q96_issplanit = $this->getCodigoPlanilha();
         $oDaoIssPlanOp->q96_pagordem = $this->getCodigoNotaLiquidacao();
         $oDaoIssPlanOp->incluir(null);
         if ($oDaoIssPlanOp->erro_status == 0) {
             throw new Exception("Erro ao incluir nota na planilha.");
         }
     }
     return true;
 }
 function gerarDebito($sHistorico = null)
 {
     if (!db_utils::inTransaction()) {
         throw new Exception("Erro [0] - Não Existe transação ativa");
     }
     //Criamos um novo Numpre
     $rsNumpre = pg_exec("select nextval('numpref_k03_numpre_seq') as k03_numpre");
     $this->iNumpre = db_utils::fieldsMemory($rsNumpre, 0)->k03_numpre;
     /*
      *Buscamos as informações de configuração da db_confplam 
      */
     $oDaoConfPlan = db_utils::getDao("db_confplan");
     $rsConfPlan = $oDaoConfPlan->sql_record($oDaoConfPlan->sql_query_file());
     if ($oDaoConfPlan->numrows == 0) {
         $sErro = "Erro [1] - Não há configurações informadas para a planilha.";
         $sErro .= "\nConfigure acessando  Prefeitura Online -> Procedimentos -> Manutenção de Planilhas.";
         throw new Exception($sErro);
     }
     $oConfPlanilhas = db_utils::fieldsMemory($rsConfPlan, 0);
     /**
      * Alteramos a planilha , informado o numpre gerado
      */
     $oDaoIssPlan = db_utils::getDao("issplan");
     $oDaoIssPlan->q20_numpre = $this->iNumpre;
     $oDaoIssPlan->q20_planilha = $this->iCodigoPlanilha;
     $oDaoIssPlan->q20_situacao = 3;
     $oDaoIssPlan->alterar($this->iCodigoPlanilha);
     /*
      * incluimos um issvariavel para o mes.
      */
     $oDaoIssVar = db_utils::getDao("issvar");
     $oDaoIssVar->q05_numpre = $this->iNumpre;
     $oDaoIssVar->q05_histor = "ISSQN retenção na fonte.";
     $oDaoIssVar->q05_numpar = 1;
     $oDaoIssVar->q05_ano = $this->iAnoUsu;
     $oDaoIssVar->q05_mes = $this->iMes;
     $oDaoIssVar->q05_valor = $this->nValorTotal;
     $oDaoIssVar->q05_aliq = "0";
     $oDaoIssVar->q05_bruto = "0";
     $oDaoIssVar->q05_vlrinf = "0";
     $oDaoIssVar->incluir(null);
     if ($oDaoIssVar->erro_status == 0) {
         throw new Exception("Erro [2] - Não foi possivel incluir issqn Variavel.");
     }
     /**
      * Incluimos o débito no arrecad
      */
     $oDaoArrecad = db_utils::getDao("arrecad");
     $oDaoArrecad->k00_dtoper = $this->getDatausu();
     $oDaoArrecad->k00_dtvenc = $this->getDatausu();
     $oDaoArrecad->k00_hist = $oConfPlanilhas->w10_hist;
     $oDaoArrecad->k00_receit = $oConfPlanilhas->w10_receit;
     $oDaoArrecad->k00_numcgm = $this->iNumCgm;
     $oDaoArrecad->k00_numdig = "0";
     $oDaoArrecad->k00_numpar = "1";
     $oDaoArrecad->k00_numpre = $this->iNumpre;
     $oDaoArrecad->k00_numtot = 1;
     $oDaoArrecad->k00_tipo = $oConfPlanilhas->w10_tipo;
     $oDaoArrecad->k00_tipojm = "0";
     $oDaoArrecad->k00_valor = $this->nValorTotal;
     $oDaoArrecad->incluir();
     if ($oDaoArrecad->erro_status == 0) {
         throw new Exception("Erro [3] - Não Foi possível incluir débito");
     }
     /**
      * Incluimos o Historico, caso nao seje nulo
      */
     if (!empty($sHistorico)) {
         $sSqlhistorico = "insert into arrehist (\n        k00_numpre,\n        k00_numpar,\n        k00_hist,\n        k00_dtoper,\n        k00_hora,\n        k00_id_usuario,\n        k00_histtxt,\n        k00_limithist,\n        k00_idhist\n          ) values (\n            {$this->iNumpre},\n            0,\n            502,\n            '{$this->dtDatausu}',\n            '" . date("H:i") . "',\n            " . db_getsession("DB_id_usuario") . ",\n            '" . $sHistorico . "',\n            null,\n            nextval('arrehist_k00_idhist_seq'))";
         $rsHistorico = db_query($sSqlhistorico);
         if (!$rsHistorico) {
             throw new Exception("Erro [4] - Não foi possivel informar histórico do Recibo");
         }
     }
     /**
      * Incluimos na tabela issplannumpre - Ligação do numpre da planilha com o numpre;
      */
     $oDaoIssPlanNumpre = db_utils::getDao("issplannumpre");
     $oDaoIssPlanNumpre->q32_planilha = $this->iCodigoPlanilha;
     $oDaoIssPlanNumpre->q32_numpre = $this->iNumpre;
     $oDaoIssPlanNumpre->q32_dataop = $this->getDatausu();
     $oDaoIssPlanNumpre->q32_horaop = db_hora();
     $oDaoIssPlanNumpre->q32_status = 1;
     $oDaoIssPlanNumpre->incluir(null);
     if ($oDaoIssPlanNumpre->erro_status == 0) {
         throw new Exception("Erro [4] - Não Foi possível incluir débito");
     }
     /**
      * Selecionamos todos as notas cadastradas para a planilha , e 
      * vinculamos ao numpre
      */
     $oDaoIssplanIt = db_utils::getDao("issplanit");
     $sSqlNotasPlanilha = $oDaoIssplanIt->sql_query_file(null, "*", null, "q21_planilha = {$this->iCodigoPlanilha}\n        and q21_status = 1");
     $rsNotasPlanilha = $oDaoIssplanIt->sql_record($sSqlNotasPlanilha);
     for ($i = 0; $i < $oDaoIssplanIt->numrows; $i++) {
         $oNotaPlanilha = db_utils::fieldsMemory($rsNotasPlanilha, $i);
         $oDaoNotaNumpre = db_utils::getDao("issplannumpreissplanit");
         $oDaoNotaNumpre->q77_issplanit = $oNotaPlanilha->q21_sequencial;
         $oDaoNotaNumpre->q77_issplannumpre = $oDaoIssPlanNumpre->q32_sequencial;
         $oDaoNotaNumpre->incluir(null);
         if ($oDaoNotaNumpre->erro_status == 0) {
             throw new Exception("Erro [5] - Não Foi possível incluir débito");
         }
     }
     /**
      * vinculamos o numpre a nota de liquidação
      */
     if ($this->iNotaLiquidacao != null) {
         $oDaoCaiRetOrdem = db_utils::getDao("cairetordem");
         $oDaoCaiRetOrdem->k32_numpre = $this->iNumpre;
         $oDaoCaiRetOrdem->k32_ordpag = $this->iNotaLiquidacao;
         $oDaoCaiRetOrdem->incluir(null);
         if ($oDaoCaiRetOrdem->erro_status == 0) {
             throw new Exception("Erro [6] - Não Foi possível incluir débito");
         }
     }
     return $this->iNumpre;
 }