function Novo()
 {
     @session_start();
     $this->pessoa_logada = $_SESSION['id_pessoa'];
     $this->ref_cod_cliente = $_SESSION['reservas']['cod_cliente'];
     @session_write_close();
     if ($this->passo == 2) {
         return true;
     }
     $obj_permissoes = new clsPermissoes();
     $obj_permissoes->permissao_cadastra(609, $this->pessoa_logada, 11, "educar_reservas_lst.php");
     $obj_acervo = new clsPmieducarAcervo($this->ref_cod_acervo);
     $det_acervo = $obj_acervo->detalhe();
     // tipo de exemplar
     $cod_exemplar_tipo = $det_acervo["ref_cod_exemplar_tipo"];
     if ($this->existe_reserva == 1) {
         //			die("1");
         //			echo "EMPRESTIMO <br>";
         // ------------------- DADOS DO CLIENTE (EMPRESTIMO) ------------------ //
         $obj_exemplar_emprestimo = new clsPmieducarExemplarEmprestimo();
         $lst_exemplar_emprestimo = $obj_exemplar_emprestimo->lista(null, null, null, null, $this->ref_cod_exemplar, null, null, null, null, null, false, $this->ref_cod_biblioteca);
         if (is_array($lst_exemplar_emprestimo) && count($lst_exemplar_emprestimo)) {
             $det_exemplar_emprestimo = array_shift($lst_exemplar_emprestimo);
             $cod_cliente = $det_exemplar_emprestimo["ref_cod_cliente"];
             // data do emprestimo
             $data_retirada = $det_exemplar_emprestimo["data_retirada"];
             $data_prevista_disponivel = dataFromPgToBr($data_retirada, "Y-m-d");
         } else {
             echo "<script> alert('ERRO - Não foi possível encontrar o registro do empréstimo!'); </script>";
         }
     } else {
         if ($this->existe_reserva == 2) {
             //			die("2");
             //			echo "RESERVA <br>";
             // ------------------- DADOS DO CLIENTE (RESERVA) ------------------ //
             $obj_reservas = new clsPmieducarReservas();
             $lst_reservas = $obj_reservas->lista(null, null, null, null, null, null, $this->data_disponivel, $this->data_disponivel, null, null, $this->ref_cod_exemplar, 1, $this->ref_cod_biblioteca);
             if (is_array($lst_reservas) && count($lst_reservas)) {
                 $det_reservas = array_shift($lst_reservas);
                 $cod_cliente = $det_reservas["ref_cod_cliente"];
                 // data da reserva
                 $data_prevista_disponivel = $this->data_disponivel;
             } else {
                 echo "<script> alert('ERRO - Não foi possível encontrar a reserva!'); </script>";
             }
         }
     }
     //		echo "data_prevista_disponivel 1: ".$data_prevista_disponivel."<br>";
     $obj_cliente_tipo_cliente = new clsPmieducarClienteTipoCliente();
     $lst_cliente_tipo_cliente = $obj_cliente_tipo_cliente->lista(null, $cod_cliente, null, null, null, null, null, null, $this->ref_cod_biblioteca);
     $det_cliente_tipo_cliente = array_shift($lst_cliente_tipo_cliente);
     // tipo do cliente
     $cod_cliente_tipo = $det_cliente_tipo_cliente["ref_cod_cliente_tipo"];
     $obj_cliente_tipo_exemplar_tipo = new clsPmieducarClienteTipoExemplarTipo($cod_cliente_tipo, $cod_exemplar_tipo);
     $det_cliente_tipo_exemplar_tipo = $obj_cliente_tipo_exemplar_tipo->detalhe();
     // qtde de dias disponiveis para emprestimo
     $dias_emprestimo = $det_cliente_tipo_exemplar_tipo["dias_emprestimo"];
     //		echo "dias_espera: ".$this->dias_espera."<br>";
     if ($this->existe_reserva == 2) {
         // Dias que o cliente tem pra pegar o exemplar. Calculo feito levando em consideracao a pior situacao.
         $data_prevista_disponivel = date("D Y-m-d", strtotime("{$data_prevista_disponivel} +" . $this->dias_espera . " days"));
     }
     //		echo "data_prevista_disponivel 2: ".$data_prevista_disponivel."<br>";
     $data_prevista_disponivel = date("D Y-m-d", strtotime("{$data_prevista_disponivel} +" . $dias_emprestimo . " days"));
     //		echo "data_prevista_disponivel 3: ".$data_prevista_disponivel."<br>";
     //---------------------DIAS FUNCIONAMENTO----------------------//
     $obj_biblioteca_dia = new clsPmieducarBibliotecaDia();
     $lst_biblioteca_dia = $obj_biblioteca_dia->lista($this->ref_cod_biblioteca);
     if (is_array($lst_biblioteca_dia) && count($lst_biblioteca_dia)) {
         foreach ($lst_biblioteca_dia as $dia_semana) {
             // dias de funcionamento da biblioteca
             $biblioteca_dias_semana[] = $dia_semana["dia"];
         }
     }
     // salva somente os dias que n se repetem ( dias de n funcionamento)
     $biblioteca_dias_folga = array_diff($this->dias_da_semana, $biblioteca_dias_semana);
     // inverte as relacoes entre chaves e valores ( de $variavel["Sun"] => 1, para $variavel[1] => "Sun")
     $biblioteca_dias_folga = array_flip($biblioteca_dias_folga);
     //---------------------DIAS FERIADO----------------------//
     $obj_biblioteca_feriado = new clsPmieducarBibliotecaFeriados();
     $lst_biblioteca_feriado = $obj_biblioteca_feriado->lista(null, $this->ref_cod_biblioteca);
     if (is_array($lst_biblioteca_feriado) && count($lst_biblioteca_feriado)) {
         foreach ($lst_biblioteca_feriado as $dia_feriado) {
             // dias de feriado da biblioteca
             $biblioteca_dias_feriado[] = dataFromPgToBr($dia_feriado["data_feriado"], "D Y-m-d");
         }
     }
     //		echo "<pre>"; print_r($biblioteca_dias_feriado)."<br>";
     // Cliente tem o dia inteiro para entregar o exemplar. Exemplar somente disponivel para a proxima reserva no dia seguinte.
     $data_prevista_disponivel = date("D Y-m-d ", strtotime("{$data_prevista_disponivel} +1 day"));
     // devido a comparacao das datas, é necessario mudar o formato da data
     $data_prevista_disponivel = dataFromPgToBr($data_prevista_disponivel, "D Y-m-d");
     //		echo "data_prevista_disponivel 4: ".$data_prevista_disponivel."<br>";
     // verifica se a data cai em algum dia que a biblioteca n funciona
     while (in_array(substr($data_prevista_disponivel, 0, 3), $biblioteca_dias_folga) || in_array($data_prevista_disponivel, $biblioteca_dias_feriado)) {
         //			echo "data_prevista_disponivel ASDFG = ".$data_prevista_disponivel."<br>";
         $data_prevista_disponivel = date("D Y-m-d ", strtotime("{$data_prevista_disponivel} +1 day"));
         $data_prevista_disponivel = dataFromPgToBr($data_prevista_disponivel, "D Y-m-d");
         //			echo "data_prevista_disponivel ASDFG = ".$data_prevista_disponivel."<br>";
     }
     //		echo "data_prevista_disponivel 5: ".$data_prevista_disponivel."<br>";die;
     $data_prevista_disponivel = dataFromPgToBr($data_prevista_disponivel, "Y-m-d");
     $obj = new clsPmieducarReservas(null, null, $this->pessoa_logada, $this->ref_cod_cliente, null, $data_prevista_disponivel, null, $this->ref_cod_exemplar, 1);
     $cadastrou = $obj->cadastra();
     if ($cadastrou) {
         $this->mensagem .= "Cadastro efetuado com sucesso.<br>";
         header("Location: educar_reservas_lst.php");
         die;
         return true;
     }
     $this->mensagem = "Cadastro n&atilde;o realizado.<br>";
     echo "<!--\nErro ao cadastrar clsPmieducarReservas\nvalores obrigatorios\n is_numeric( {$this->pessoa_logada} ) && is_numeric( {$this->ref_cod_cliente} ) && is_numeric( {$this->ref_cod_exemplar} )\n-->";
     return false;
 }
 protected function postReserva()
 {
     if ($this->canPostReserva()) {
         $exemplar = $this->loadExemplar();
         $dataPrevistaDisponivel = $this->getDataPrevistaDisponivelForExemplarAfterLastPendencia($exemplar);
         $reserva = new clsPmieducarReservas(null, null, $this->getSession()->id_pessoa, $this->getRequest()->ref_cod_cliente, null, $dataPrevistaDisponivel, null, $this->getRequest()->exemplar_id, 1);
         if ($reserva->cadastra()) {
             $this->messenger->append("Reserva realizada com sucesso.", 'success');
         } else {
             $this->messenger->append("Aparentemente a reserva não foi cadastrada, por favor, tente novamente.", 'error');
         }
     }
     $this->appendResponse($this->loadExemplar($this->getRequest()->exemplar_id, $reload = true));
 }