public function inserir(Livro $livro)
 {
     //Objetivo deste metodo é inserir um objeto no banco, fazendo-o ter persistencia.
     //utilizaremos a abstracao do SQL da classe TsqlInstruction
     //1. Foreach dos atributos . PRa cada existencia de atributo é um valor a ser adicionado.
     $instrucao = new TSqlInsert();
     $instrucao->setEntity("livro");
     if ($livro->getId() != null) {
         $instrucao->setRowData("id", $livro->getId());
     }
     if ($livro->getTitulo() != null) {
         $instrucao->setRowData("titulo", $livro->getTitulo());
     }
     if ($livro->getAutor() != null) {
         $instrucao->setRowData("autor", $livro->getAutor());
     }
     if ($livro->getData() != null) {
         $instrucao->setRowData("data", $livro->getData());
     }
     if ($livro->getHora() != null) {
         $instrucao->setRowData("hora", $livro->getHora());
     }
     if ($livro->getUsuario() != null) {
         $instrucao->setRowData("usuario", $livro->getUsuario());
     }
     if ($livro->getDescricao() != null) {
         $instrucao->setRowData("descricao", $livro->getDescricao());
     }
     if ($livro->getLink0() != null) {
         $instrucao->setRowData("link0", $livro->getLink0());
     }
     if ($livro->getLink1() != null) {
         $instrucao->setRowData("link1", $livro->getLink1());
     }
     if ($livro->getLink2() != null) {
         $instrucao->setRowData("link2", $livro->getLink2());
     }
     if ($livro->getVisibilidade() != null) {
         $instrucao->setRowData("visibilidade", $livro->getVisibilidade());
     }
     if ($livro->getCaminhofoto() != null) {
         $instrucao->setRowData("caminhofoto", $livro->getCaminhofoto());
     }
     if ($livro->getFdsifhsodfjos() != null) {
         $instrucao->setRowData("fdsifhsodfjos", $livro->getFdsifhsodfjos());
     }
     echo $instrucao->getInstruction();
     if ($this->Conexao->query($instrucao->getInstruction())) {
         return true;
     } else {
         return false;
     }
 }
 /**
  * Método que retorna os conteúdos do livro informado com o seu andamento
  * @param Livro $livro O livro alvo da busca
  * @param Disciplina $disciplina A disciplina referente ao conteúdo
  * @throws Exception
  */
 public function deLivroComAcompanhamento(Livro $livro, Disciplina $disciplina)
 {
     $select = new Select();
     return $this->tg->selectObj($select->distinct("sequencial_topico")->columns("*, apostilas.acompanhamento.status " . "as topico_status, " . "data_aula as topico_data_aula ")->join("apostilas.capitulo", array("pk_capitulo" => "fk_capitulo"))->join("public.materia_vin", array("pk_materia_vin" => "fk_materia_vin"))->join("public.materia", array("pk_materia" => "fk_materia"))->join("public.materia_mae", array("pk_materia_mae" => "fk_materia_mae"))->join("public.area", array("pk_area" => "fk_area"))->join("apostilas.acompanhamento", array("fk_conteudo" => "pk_conteudo"))->where("fk_livro={$livro->getId()} " . "and pk_materia={$disciplina->getId()} " . "and (status=" . Topico::STATUS_EM_ANDAMENTO . " " . "or status=" . Topico::STATUS_CONCLUIDO . ") " . "and id=(select max(id) from apostilas.acompanhamento " . "where fk_conteudo=pk_conteudo and status!=" . Topico::STATUS_REVISADO . ") " . "and extract(year from data_aula)={$this->anoLetivo}")->order("sequencial_topico"));
 }