function Gerar()
 {
     $this->campoOculto("ref_cod_biblioteca", $this->ref_cod_biblioteca);
     if ($this->ref_cod_acervo) {
         $obj_acervo = new clsPmieducarAcervo($this->ref_cod_acervo);
         $det_acervo = $obj_acervo->detalhe();
         $this->titulo_obra = $det_acervo["titulo"];
     }
     $this->cod_biblioteca = $this->ref_cod_biblioteca;
     $this->campoOculto("cod_biblioteca", $this->cod_biblioteca);
     $obj_biblioteca = new clsPmieducarBiblioteca($this->ref_cod_biblioteca);
     $det_biblioteca = $obj_biblioteca->detalhe();
     $max_emprestimo = $det_biblioteca["max_emprestimo"];
     $valor_maximo_multa = $det_biblioteca["valor_maximo_multa"];
     $this->dias_espera = $det_biblioteca["dias_espera"];
     $this->campoOculto("dias_espera", $this->dias_espera);
     $obj_cliente_suspenso = new clsPmieducarCliente();
     $lst_cliente_suspenso = $obj_cliente_suspenso->lista($this->ref_cod_cliente, null, null, null, null, null, null, null, null, null, 1, null, "suspenso");
     if (is_array($lst_cliente_suspenso)) {
         echo "<script> alert('Cliente atualmente suspenso!\\nNão é possivel realizar a reserva.'); window.location = 'educar_reservas_lst.php';</script>";
         die;
     }
     $obj_reservas = new clsPmieducarReservas();
     $lst_reservas = $obj_reservas->lista(null, null, null, $this->ref_cod_cliente, null, null, null, null, null, null, null, 1, $this->ref_cod_biblioteca);
     // verifica se o cliente excedeu a qntde de reservas permitidas pela biblioteca
     if (count($lst_reservas) >= $max_emprestimo) {
         echo "<script> alert('Excedido o número máximo de reservas do cliente!\\nNão é possivel realizar a reserva.'); window.location = 'educar_reservas_lst.php';</script>";
         die;
     }
     $obj_exemplar_emprestimo = new clsPmieducarExemplarEmprestimo();
     $lst_cliente_divida = $obj_exemplar_emprestimo->clienteDividaTotal(null, $this->ref_cod_cliente);
     if (is_array($lst_cliente_divida) && count($lst_cliente_divida)) {
         // calcula o valor total das multas do cliente em todas as bibliotecas
         foreach ($lst_cliente_divida as $divida) {
             $valor_total_multa = $divida["valor_multa"];
             $valor_total_pago = $divida["valor_pago"];
         }
         $valor_total_divida = $valor_total_multa - $valor_total_pago;
     }
     $lst_cliente_divida = $obj_exemplar_emprestimo->clienteDividaTotal(null, $this->ref_cod_cliente, null, $this->ref_cod_biblioteca);
     if (is_array($lst_cliente_divida) && count($lst_cliente_divida)) {
         // calcula o valor das multas do cliente na biblioteca em que esta realizando o emprestimo
         foreach ($lst_cliente_divida as $divida) {
             $valor_multa = $divida["valor_multa"];
             $valor_pago = $divida["valor_pago"];
         }
         $valor_divida = $valor_multa - $valor_pago;
     }
     // verifica se o valor da divida ultrapassou o valor maximo permitido da multa pela biblioteca
     if ($valor_maximo_multa <= $valor_total_divida && $this->confirmado != true) {
         echo "<script> if(!confirm('Excedido o valor total das multas do cliente! \\n Valor total das multas: R\${$valor_total_divida},00 \\n Valor total das multas nessa biblioteca: R\${$valor_divida},00 \\n Valor máximo da multa permitido nessa biblioteca: R\${$valor_maximo_multa},00 \\n Deseja mesmo assim realizar a reserva?')) window.location = 'educar_reservas_lst.php';</script>";
         $this->confirmado = true;
         $this->campoOculto("confirmado", $this->confirmado);
     }
     if ($this->titulo_obra) {
         $obj_exemplar = new clsPmieducarExemplar();
         $lst_exemplar = $obj_exemplar->lista(null, null, null, $this->ref_cod_acervo, null, null, null, 2, null, null, null, null, null, 1, null, null, null, null, $this->ref_cod_biblioteca);
         // verifica se o exemplar pode ser emprestado
         if (is_array($lst_exemplar) && count($lst_exemplar)) {
             $obj_reservas = new clsPmieducarReservas();
             foreach ($lst_exemplar as $exemplar) {
                 $lst_reservas = $obj_reservas->lista(null, null, null, $this->ref_cod_cliente, null, null, null, null, null, null, $exemplar["cod_exemplar"], 1);
                 if (is_array($lst_reservas) && count($lst_reservas)) {
                     // Já existe uma reserva do exemplar feita pelo cliente
                     $reservou = true;
                 }
             }
             if (!$reservou) {
                 // volta para o inicio da lista
                 reset($lst_exemplar);
                 $reservas = array();
                 foreach ($lst_exemplar as $exemplar) {
                     $obj_situacao = new clsPmieducarSituacao($exemplar["ref_cod_situacao"]);
                     $det_situacao = $obj_situacao->detalhe();
                     $situacao_permite_emprestimo = $det_situacao["permite_emprestimo"];
                     $situacao_emprestada = $det_situacao["situacao_emprestada"];
                     $situacao_padrao = $det_situacao["situacao_padrao"];
                     // verifica se a situacao do exemplar permite emprestimo
                     if ($situacao_permite_emprestimo == 2 && $situacao_emprestada == 0 && $situacao_padrao == 1) {
                         unset($this->titulo_obra);
                         unset($this->ref_cod_acervo);
                         echo "<script> alert('Exemplar disponível para empréstimo!\\nNão é possivel realizar a reserva.\\n  TOMBO #{$exemplar["cod_exemplar"]}'); </script>";
                     } else {
                         if ($situacao_permite_emprestimo == 1 && $situacao_emprestada == 1 && $situacao_padrao == 0) {
                             $lst_reservas = $obj_reservas->lista(null, null, null, null, null, null, null, null, null, null, $exemplar["cod_exemplar"], 1);
                             // verifica se existem reservas do exemplar
                             if (is_array($lst_reservas) && count($lst_reservas)) {
                                 $this->existe_reserva = 2;
                             } else {
                                 // encontrado exemplar sem reservas
                                 $this->ref_cod_exemplar = $exemplar["cod_exemplar"];
                                 break;
                             }
                         } else {
                             unset($this->titulo_obra);
                             unset($this->ref_cod_acervo);
                             echo "<script> alert('Situação atual do exemplar não permite reserva!'); </script>";
                         }
                     }
                 }
             } else {
                 unset($this->titulo_obra);
                 unset($this->ref_cod_acervo);
                 echo "<script> alert('Já existe uma reserva do exemplar feita pelo cliente!'); </script>";
             }
         } else {
             unset($this->titulo_obra);
             unset($this->ref_cod_acervo);
             echo "<script> alert('Exemplar não disponível para reserva/empréstimo!'); </script>";
         }
     }
     // foreign keys
     $obj_cliente = new clsPmieducarCliente($this->ref_cod_cliente);
     $det_cliente = $obj_cliente->detalhe();
     $ref_idpes = $det_cliente["ref_idpes"];
     $obj_pessoa = new clsPessoa_($ref_idpes);
     $det_pessoa = $obj_pessoa->detalhe();
     $nm_pessoa = $det_pessoa["nome"];
     $this->campoTextoInv("nm_pessoa", "Cliente", $nm_pessoa, 30, 255);
     // outros Filtros
     $this->campoTexto("titulo_obra", "Obra", $this->titulo_obra, 30, 255, true, false, false, "", "<img border=\"0\" onclick=\"pesquisa_obra();\" id=\"ref_cod_acervo_lupa\" name=\"ref_cod_acervo_lupa\" src=\"imagens/lupa.png\"\\/>", "", "", true);
     $this->campoOculto("ref_cod_acervo", $this->ref_cod_acervo);
     // caso exemplar esteja emprestado, mas ainda nao exista reserva
     if (isset($this->ref_cod_exemplar)) {
         //			die("emprestado, sem reserva");
         $this->campoOculto("ref_cod_exemplar", $this->ref_cod_exemplar);
         $this->existe_reserva = 1;
         $this->campoOculto("existe_reserva", $this->existe_reserva);
     } else {
         if ($this->existe_reserva == 2) {
             //			die("emprestado, com reserva");
             $lst_reserva = $obj_reservas->getUltimasReservas($this->ref_cod_acervo, 1);
             if (is_array($lst_reserva) && count($lst_reserva)) {
                 $det_reserva = array_shift($lst_reserva);
                 $this->ref_cod_exemplar = $det_reserva["ref_cod_exemplar"];
                 $this->data_disponivel = $det_reserva["data_prevista_disponivel"];
                 $this->data_disponivel = dataFromPgToBr($this->data_disponivel, "Y-m-d");
                 $this->campoOculto("data_disponivel", $this->data_disponivel);
                 $this->campoOculto("ref_cod_exemplar", $this->ref_cod_exemplar);
                 $this->campoOculto("existe_reserva", $this->existe_reserva);
             }
         }
     }
     $this->campoOculto("passo", 1);
     $this->url_cancelar = "educar_reservas_lst.php";
     $this->nome_url_cancelar = "Cancelar";
 }