/**
  * Inclui ISSQN Váriavel utilizado pelo nfse
  *
  * @param array $vt
  * @param null|integer $q02_inscr
  * @param null|integer $iNumCgm
  * @return bool
  */
 function incluir_issvar_nfse($vt = array(), $q02_inscr = null, $iNumCgm = null)
 {
     $errocompl = false;
     if ($this->q05_histor == '' && $vt != '') {
         reset($vt);
         $ta = sizeof($vt);
         $vir = '';
         $this->q05_histor = 'REFERENTE NOTAS FISCAIS No.:';
         for ($i = 0; $i < $ta; $i++) {
             $chave = key($vt);
             if (substr($chave, 0, 6) == 'linha_') {
                 $sqlerro = false;
                 $matri = explode('#', $vt[$chave]);
                 $this->q05_histor .= $vir . $matri[0];
                 $vir = ',';
             }
             $proximo = next($vt);
         }
     }
     // Verifica se existir um registro na issvar para aquele ano, mes e numpre apenas altera o seu valor
     // para não duplicar na consulta geral financeira.
     $sWhereIssVar = "q05_numpre={$this->q05_numpre} and q05_mes={$this->q05_mes} and q05_ano = {$this->q05_ano}";
     $sSqlIssVar = $this->sql_query_file(null, '*', null, $sWhereIssVar);
     $rsDadosIssVar = $this->sql_record($sSqlIssVar);
     if (pg_num_rows($rsDadosIssVar) > 0) {
         $oIssVar = db_utils::fieldsMemory($rsDadosIssVar, 0);
         $this->q05_codigo = $oIssVar->q05_codigo;
         //$this->q05_histor = $oIssVar->q05_histor;
         $this->q05_aliq = $oIssVar->q05_aliq;
         $this->q05_bruto = $oIssVar->q05_bruto;
         $this->q05_vlrinf = $oIssVar->q05_vlrinf;
         $this->alterar($this->q05_codigo);
     } else {
         $this->incluir(null);
     }
     if ($this->erro_status == '0') {
         $this->erro_msg;
         $errocompl = true;
     }
     $codigo = $this->q05_codigo;
     if ($errocompl == false and $vt != '') {
         $clissvarnotas = new cl_issvarnotas();
         reset($vt);
         $ta = sizeof($vt);
         for ($i = 0; $i < $ta; $i++) {
             $chave = key($vt);
             if (substr($chave, 0, 6) == 'linha_') {
                 $matri = explode('#', $vt[$chave]);
                 $sql = "select max(q06_seq) +1 as seq from issvarnotas where issvarnotas.q06_codigo = {$codigo} ";
                 $result55 = db_query($sql);
                 $seq = pg_result($result55, 0, 'seq');
                 $q06_seq = $seq == '' ? '1' : $seq;
                 $clissvarnotas->q06_codigo = $codigo;
                 $clissvarnotas->q06_seq = $q06_seq;
                 $clissvarnotas->q06_nota = $matri[0];
                 $clissvarnotas->q06_valor = $matri[1];
                 $clissvarnotas->incluir($codigo, $q06_seq);
                 if ($clissvarnotas->erro_status == '0') {
                     $errocompl = true;
                     $this->erro_msg = $clissvarnotas->erro_msg;
                 }
             }
             $proximo = next($vt);
         }
     }
     if ($errocompl == false && $q02_inscr != '') {
         $clarreinscr = new cl_arreinscr();
         $clarreinscr->k00_numpre = $this->q05_numpre;
         $clarreinscr->k00_inscr = $q02_inscr;
         $clarreinscr->k00_perc = 100;
         // exclui se ja existir, senão da duplicate key
         $clarreinscr->excluir($this->q05_numpre, $q02_inscr);
         $clarreinscr->k00_perc = 100;
         $clarreinscr->incluir($this->q05_numpre, $q02_inscr);
         if ($clarreinscr->erro_status == '0') {
             $errocompl = true;
             $this->erro_msg = $clarreinscr->erro_msg;
         } else {
             $resultcgm = db_query("select q02_numcgm as z01_numcgm from issbase where q02_inscr = {$q02_inscr}");
             $z01_numcgm = pg_result($resultcgm, 0, "z01_numcgm");
         }
     } else {
         $z01_numcgm = $vt['z01_numcgm'];
     }
     if ($errocompl == false) {
         $clarrecad = new cl_arrecad();
         // Obtem a configuração de vencimento
         $clconfvencissqnvariavel = new cl_confvencissqnvariavel();
         $sWhere = "q144_ano = {$this->q05_ano}";
         $sSqlConfVencISSQNVariavel = $clconfvencissqnvariavel->sql_query_file(null, '*', null, $sWhere);
         $rsSqlConfVencISSQNVariavel = $clconfvencissqnvariavel->sql_record($sSqlConfVencISSQNVariavel);
         $iLinhasConfVencISSQNVariavel = $clconfvencissqnvariavel->numrows;
         if ($iLinhasConfVencISSQNVariavel == 0) {
             $errocompl = true;
             $this->erro_msg = " Não existe configurações cadastradas para a competência({$this->q05_ano})!";
         } else {
             $oConfVencISSQNVariavel = db_utils::fieldsMemory($rsSqlConfVencISSQNVariavel, 0);
             $dtVencimento = strtotime("{$this->q05_ano}-{$this->q05_mes}-{$oConfVencISSQNVariavel->q144_diavenc}");
             $dtNovoVencimento = date('Y-m-d', strtotime('+1 month', $dtVencimento));
             $clarrecad->k00_dtvenc = $dtNovoVencimento;
             if ($iNumCgm != null) {
                 $iCgm = $iNumCgm;
             } else {
                 $iCgm = $z01_numcgm;
             }
             $clarrecad->k00_numcgm = $iCgm;
             $clarrecad->k00_dtoper = $clarrecad->k00_dtvenc;
             $clarrecad->k00_valor = $this->q05_valor;
             $clarrecad->k00_numpre = $this->q05_numpre;
             $clarrecad->k00_numpar = $this->q05_mes;
             $clarrecad->k00_numdig = '0';
             $clarrecad->k00_tipojm = '0';
             // Verifica se existe alguma parcela em aberto, se existir atualiza apenas os valores e datas devidos.
             $sWhereArrecad = "k00_numpre={$this->q05_numpre} and k00_numpar={$this->q05_mes}";
             $sSqlArrecad = $clarrecad->sql_query_file(null, '*', null, $sWhereArrecad);
             $rsDadosArrecad = $clarrecad->sql_record($sSqlArrecad);
             if (pg_num_rows($rsDadosArrecad) > 0) {
                 $oArrecad = db_utils::fieldsMemory($rsDadosArrecad, 0);
                 $clarrecad->k00_numtot = $oArrecad->k00_numtot;
                 $clarrecad->alterar(null, $sWhereArrecad);
             } else {
                 $clarrecad->k00_numtot = 1;
                 $clarrecad->k00_receit = $oConfVencISSQNVariavel->q144_receita;
                 $clarrecad->k00_tipo = $oConfVencISSQNVariavel->q144_tipo;
                 $clarrecad->k00_hist = $oConfVencISSQNVariavel->q144_hist;
                 $clarrecad->incluir();
             }
             if ($clarrecad->erro_status == '0') {
                 $errocompl = true;
                 $this->erro_msg = "Arrecad - {$clarrecad->erro_msg}";
             }
         }
     }
     if ($errocompl == false) {
         $this->erro_msg = 'Inclusão efetuada com sucesso.';
         $this->q05_valor = '';
         $this->q05_bruto = '';
         unset($this->q05_histor);
         unset($q06_nota);
         unset($q06_valor);
         return true;
     } else {
         $this->erro_status = '0';
         return false;
     }
 }