segunda-feira, 26 de agosto de 2013

Corrigir data de inscrição no Moodle com comando SQL

Neste post vamos mostrar como atualizar o cadastro de matrícula do aluno para inserir a data de inscrição caso estiver faltando.

    A data de inscrição do aluno no curso do Moodle é de extrema importância para gerar relatórios gerenciais. Ainda mais nos cursos em que a inscrição é aberta, ou seja, pode ocorrer a qualquer momento.

     Para computar evasão, a data de inscrição é o ponto de  referência. Pois, a falta desse registro dificulta emissão de relatórios. Por exemplo, há administradores do Moodle que usam sistema Badiu GMoodle para automatizar o cálculo da evasão tendo como regra os alunos que deixaram de acessar o curso durante 15 dias após a data de inscrição. Essa regra não será viável caso não houver registro de quanto o aluno ingressou no curso.

    A data de inscrição pode não ser lançada ou cadastrada de forma errada quando a carga de dados no Moodle vem de um sistema externo. Para corrigir isso, é necessário usar o comando UPDATE na tabela mdl_user_enrolments na versão 2.x e mdl_role_assignments na versão  1.9.

Versão 2.x do Moodle
Para corrigir data inscrição na versão 2.x do Moodle, execute os seguintes comandos SQL:

1° Passo – Recupere método de inscrição do curso
SELECT id FROM mdl_enrol WHERE courseid=? AND enrol=?




Parâmetro
Descrição
courseid=?
Passe o valor do id do curso. Esse valor fica registrado na tabela mdl_course. Trata-se do curso em que se pretende corrigir a data de inscrição
enrol=?
Trata-se do método de inscrição do curso. Na versão 2.x um curso pode ter mais de um método de inscrição. O método padrão é manual. Se for manual o parâmetro deve ficar assim: enrol='manual'


O id retornado pelo SELECT é o método de inscrição. Esse valor deve ser usado para dar entrada de dados na tabela  mdl_user_enrolments no campo enrolid.

2° Passo – Atualizar data de inscrição
 
UPDATE mdl_user_enrolments SET timestart=?,timeend=?,timemodified=? WHERE enrolid=? AND userid=?


Parâmetro
Descrição
timestart=?
Data do início da inscrição em formato timestamp
timeend=?
Data da validade de inscrição em formato timestamp. Use esse campo apenas se houver data de validade da matrícula.
timemodified=?
Data em que a atualização do registro da matrícula foi feita. Também e em formato timestamp.
enrolid=?
Método de inscrição recuperado pelo comando SQL do 1° passo
userid=?
Id do usuário que se pretende alterar a data de inscrição. O valor do id deve ser recuperado na tabela mdl_user


Para ficar mais prático, vamos juntar os dois comandos em um só.  Código abaixo mostra o resultado dessa junção. 

UPDATE mdl_user_enrolments SET timestart=?,timeend=?,timemodified=? WHERE enrolid IN (SELECT id FROM mdl_enrol WHERE courseid=? AND enrol=?)  AND userid=?

A execução desse comando dá o mesmo resultado que os dois comandos anteriores. É mais prático quando se estiver processando SQL na base de forma manual.


Versão 1.9.x do Moodle

Para corrigir data inscrição na versão 1.9.x e também nas versões inferiores 1.8 e 1.7 do Moodle, execute os seguintes comandos SQL:

1° Passo – Recupere o contexto da inscrição

SELECT id FROM mdl_context WHERE contextlevel=50 AND instanceid=?




Parâmetro
Descrição
contextlevel=50
Especifica que se trata do contexto do curso. Na tabela de domínio, 50 se refere ao contexto do curso. Dê uma olhada nesse link:http://docs.moodle.org/dev/Roles_and_modules#Context
instanceid=?
Aqui passa o id do curso, o qual se pretende corrigir a data de inscrição. O valor desse parâmetro deve ser extraído na tabela mdl_course quando o nível do contexto for 50.



2° Passo – Atualizar data de inscrição

UPDATE mdl_role_assignments SET timestart=?,timeend=?,timemodified=? WHERE contextid=? AND userid=?

Para ficar mais prático, vamos juntar os dois comandos em um só.  Código abaixo mostra o resultado dessa junção. 

UPDATE mdl_role_assignments SET timestart=?,timeend=?,timemodified=? WHERE contextid IN (SELECT id FROM mdl_context WHERE contextlevel=50 AND instanceid=?) AND userid=?

A execução desse comando dá o mesmo resultado que os dois comandos anteriores. É mais prático quando se estiver processando SQL na base de forma manual.

    Agora você já sabe como corrigir a sua base de dados. Há um detalhe importante a ser levado em conta  caso a carga no Moodle for feita por um sistema externo. Se a base externa tiver registro da data de ingresso de cada aluno no curso, para automatizar essa informação no Moodle,  é necessário que as duas bases estejam sincronizadas. Ou seja, a base externa deve possuir uma chave de identificação, de forma precisa, de cada registro de usuário e curso no Moodle. Tendo isso,  basta fazer um loop numa rotina de programação, extraindo a data de matrícula de cada aluno no curso e atualizar o Moodle. Não tendo a sincronização, a alternativa  é fazer manualmente.

    Na eventualidade de não ter a base externa, a data de inscrição pode ser atualizada com a data do primeiro acesso do aluno no ambiente do curso. Há uma margem de erro  que deve ser levada em conta uma vez que não necessariamente o aluno  acessou o curso no dia em que foi inscrito.

Comando SQL que extrai o primeiro acesso no curso
SELECT MIN(time) FROM mdl_log WHERE course=?  AND  userid=?

    Essa alternativa atualiza a data de inscrição apenas dos alunos que acessaram o curso. Os que ainda não acessaram vão continuar sem registro da data de ingresso.
   
    Agora tudo que você precisa é solicitar ao seu desenvolvedor que faça uma rotina de programação para corrigir as informações no Moodle. Geralmente você dá conta desse problema quando precisa gerar relatórios que usam a data de inscrição.  



Nenhum comentário:

Postar um comentário