/**
  * Implementação do método clsCadastro::Novo()
  *
  * Recebe os valores com códigos de servidor e instituição atual, junto com
  * a data. Casos de uso:
  * - Servidor sem função de professor: apenas é marcado que o servidor está
  *   afastado
  * - Servidor com função de professor:
  *   - Verifica-se quais professores estão aptos a substituir o servidor,
  *     baseado em critérios como horário de aula, alocação na escola,
  *     disciplinas que ministra. Esse passo é realizado no método
  *     {@see $this->Novo()}, ao possibilitar a escolha do substituto ao
  *     usuário
  *
  * @see  clsPmieducarServidorAfastamento
  * @see  ieducar/intranet/include/clsCadastro#Novo()
  * @return  bool  FALSE em caso de falha
  */
 public function Novo()
 {
     session_start();
     $this->pessoa_logada = $_SESSION['id_pessoa'];
     session_write_close();
     $this->ref_cod_servidor = isset($_POST['ref_cod_servidor']) ? $_POST['ref_cod_servidor'] : NULL;
     $urlPermite = sprintf("educar_servidor_det.php?cod_servidor=%d&ref_cod_instituicao=%d", $this->ref_cod_servidor, $this->ref_cod_instituicao);
     $obj_permissoes = new clsPermissoes();
     $obj_permissoes->permissao_cadastra(635, $this->pessoa_logada, 7, $urlPermite);
     $obj = new clsPmieducarServidorAfastamento($this->ref_cod_servidor, NULL, $this->ref_cod_motivo_afastamento, NULL, $this->pessoa_logada, NULL, NULL, $this->data_retorno, $this->data_saida, 1, $this->ref_cod_instituicao);
     $cadastrou = $obj->cadastra();
     if ($cadastrou) {
         if (is_array($_POST['ref_cod_servidor_substituto'])) {
             /*
              * Itera cada substituto e atualiza o quadro de horário com o código
              * do servidor substituto, campos:
              * - ref_cod_instituicao_substituto
              * - ref_cod_servidor_substituto
              */
             foreach ($_POST['ref_cod_servidor_substituto'] as $key => $valor) {
                 $ref_cod_servidor_substituto = $valor;
                 $ref_cod_escola = $_POST["ref_cod_escola_{$key}"];
                 $dia_semana = $_POST["dia_semana_{$key}"];
                 $hora_inicial = urldecode($_POST["hora_inicial_{$key}"]);
                 $hora_final = urldecode($_POST["hora_final_{$key}"]);
                 if (is_numeric($ref_cod_servidor_substituto) && is_numeric($ref_cod_escola) && is_numeric($dia_semana) && is_string($hora_inicial) && is_string($hora_final)) {
                     $obj_horarios = new clsPmieducarQuadroHorarioHorarios(NULL, NULL, $ref_cod_escola, NULL, NULL, NULL, $this->ref_cod_instituicao, $ref_cod_servidor_substituto, $this->ref_cod_servidor, $hora_inicial, $hora_final, NULL, NULL, 1, $dia_semana);
                     $det_horarios = $obj_horarios->detalhe($ref_cod_escola);
                     $obj_horario = new clsPmieducarQuadroHorarioHorarios($det_horarios['ref_cod_quadro_horario'], $det_horarios['ref_cod_serie'], $det_horarios['ref_cod_escola'], $det_horarios['ref_cod_disciplina'], $det_horarios['sequencial'], $det_horarios['ref_cod_instituicao_servidor'], $det_horarios['ref_cod_instituicao_servidor'], $ref_cod_servidor_substituto, $this->ref_cod_servidor, NULL, NULL, NULL, NULL, NULL, NULL);
                     // Caso a atualização não tenha sucesso
                     if (!$obj_horario->edita()) {
                         $this->mensagem = "Cadastro n&atilde;o realizado.<br>";
                         return FALSE;
                     }
                 }
             }
             $this->mensagem .= "Cadastro efetuado com sucesso.<br>";
             header("Location: educar_servidor_det.php?cod_servidor={$this->ref_cod_servidor}&ref_cod_instituicao={$this->ref_cod_instituicao}");
             die;
         }
     } else {
         $this->mensagem = "Cadastro n&atilde;o realizado.<br>";
         return FALSE;
     }
     $this->mensagem .= "Cadastro efetuado com sucesso.<br>";
     header("Location: educar_servidor_det.php?cod_servidor={$this->ref_cod_servidor}&ref_cod_instituicao={$this->ref_cod_instituicao}");
     die;
 }