report_traspasonotasexam/lib.php

546 lines
20 KiB
PHP

<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Library of functions and constants for the assignment_files report
*
* @package report
* @subpackage assignment_files
* @author Russell England <russell.england@gmail.com>
* @copyright Russell England <russell.england@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die;
// Required for definitions.
require_once($CFG->dirroot . '/mod/assign/submissionplugin.php');
require_once($CFG->dirroot . '/mod/assign/submission/file/locallib.php');
// Flexible table.
require_once($CFG->libdir . '/tablelib.php');
// require_once($CFG->dirroot .'/auth/db_inacap/auth.php');
/**
* Returns a list of coursefiles for a user
*
* @global object $DB
* @param array $filters
* @param int $totalcount
* @return array $assignments - list of assignments and filenames
*/
function x_traspasonotasexam_get_list($filters) {
global $DB;
$params = array();
$sqlcourse='';
if (isset($filters['cursos']) && $filters['cursos']) {
$params['cursos'] = $filters['cursos'];
}
$sqlcourses= 'SELECT distinct mgi.id item, mgi.itemname, mgi.itemtype, mgi.grademin, mgi.grademax, nvl(mtn.id,0) trapaso
FROM m_grade_items mgi, m_TRASPASONOTASEXAM mtn
WHERE itemtype <> \'course\'
and MGI.ID = mtn.itemMODULE(+)
and mgi.courseid =:cursos
and trim(lower(mgi.itemname)) like lower(\'%Examen%\')
and not regexp_like (trim(lower(mgi.itemname)), lower(\'Formativ(a|o)\'))
and mgi.itemtype =\'mod\'
order by 1 asc';
$submissions = $DB->get_records_sql($sqlcourses, $params);
// var_dump($submissions);
return $submissions;
}
//GET Registros Resumen Histórico P_TraspasoNotasExa
function x_traspasonotasexam_get_resumen($filters) {
global $DB;
$params = array();
$sqlcourse='';
//echo '<br><br><br>cursos'.$filters['cursos'];exit;
if (isset($filters['cursos']) && $filters['cursos']) {
$params['cursos'] = $filters['cursos'];
}else{$params['cursos'] =0;}
$course = $DB->get_record('course', array('id' => $filters['cursos']), '*', MUST_EXIST);
$sqlc="SELECT mt.id idtraspaso,TO_CHAR (to_moodfecha (MT.AUDI_FMODIFICACION), 'dd-mm-yyyy') fcreacionaai,
MT.AUDI_FMODIFICACION_SIGA ftraspaso, gi.ITEMNAME,
-- (SYSDATE - s.SECC_FTERMINO_SEC) fdia, 'Examen' || '-' || TO_CHAR (s.SECC_FTERMINO_SEC, 'dd-mm-yyyy') caliSiga
FROM
-- secciones s,
{TRASPASONOTASEXAM} mt,
{course} mc,
{grade_items} gi
WHERE
TO_CHAR (s.secc_ccod) = mc.idnumber
AND s.secc_ccod = mt.secc_ccod
AND mc.id = gi.courseid
AND mt.ITEMMODULE = gi.id
AND mc.idnumber = ".$course->idnumber;
/* $dbe = new auth_plugin_db_inacap;
$authdb = $dbe->db_init(); */
$enrol = enrol_get_plugin('dbinacap311');
$authdb = $enrol->db_init_inacap311();
$sql_auth = "SELECT mt.id idtraspaso,
'Examen' || '-' || TO_CHAR (s.SECC_FTERMINO_SEC, 'dd-mm-yyyy')
caliSiga,
TO_CHAR (to_moodfecha (MT.AUDI_FMODIFICACION), 'dd-mm-yyyy')
fcreacionaai,
MT.AUDI_FMODIFICACION_SIGA ftraspaso,
gi.ITEMNAME,
(SYSDATE - s.SECC_FTERMINO_SEC) fdia
FROM secciones s,
m_TRASPASONOTASEXAM mt,
m_course mc,
m_grade_items gi
WHERE TO_CHAR (s.secc_ccod) = mc.idnumber
AND s.secc_ccod = mt.secc_ccod
AND mc.id = gi.courseid
AND mt.ITEMMODULE = gi.id
AND mc.idnumber = ".$course->idnumber;
/* SELECT mt.id idtraspaso,CS.CALI_NCORR,TP.TEVA_TDESC|| ' - '|| to_char(CS.CALI_FEVALUACION, 'dd-mm-yyyy') || ' - '|| CS.CALI_NPONDERACION|| '%' caliSiga, to_char(to_moodfecha(MT.AUDI_FMODIFICACION),'dd-mm-yyyy') fcreacionaai,
MT.AUDI_FMODIFICACION_SIGA ftraspaso,
gi.ITEMNAME, (sysdate - cs.CALI_FEVALUACION) fdia FROM CALIFICACIONES_SECCION cs,TIPOS_EVALUACION tp,P_TRASPASO_NOTAS mt,p_course mc,p_grade_items gi WHERE TP.TEVA_CCOD = CS.TEVA_CCOD
AND cs.secc_ccod = mt.secc_ccod AND cs.cali_ncorr = mt.cali_ncorr AND mc.idnumber = TO_CHAR (cs.secc_ccod) and mc.id=gi.courseid and mt.ITEMMODULE = gi.id
AND mc.id = ".$filters['cursos']; */
$rs = $authdb->Execute( $sql_auth );
$objects = array();
if (is_array($rs) || is_object($rs))
{
foreach($rs as $vrs){
$key = reset($vrs);
$data_cal = $vrs["CALISIGA"];
$fcreaAAI = $vrs['FCREACIONAAI'];
$ftraspaso = $vrs['FTRASPASO'];
$idtraspaso = $vrs['IDTRASPASO'];
$itemname = $vrs['ITEMNAME'];
$fdia = $vrs['FDIA'];
$submissions = array('itemname' => $itemname, 'calisiga' => $data_cal, 'fcreacion' => $fcreaAAI, 'ftraspaso' => $ftraspaso,'idtraspaso'=>$idtraspaso, 'fdia' => $fdia);
if (array_key_exists($key, $objects)) {
debugging("Error...");
}
$objects[$key] = (object)$submissions;
}
}
// }
return $objects;
}
/**
* Displays a table of curriculum_files
*
* @param array $submissions array of record objects
* @param array $params - contains paging parameters mu.firstname, mu.lastname,uc.profesion_generic, uc.profesion_amplio
*/
function x_traspasonotasexam_display_list($submissions, $params) {
global $DB;
// var_dump($submissions);
if ($submissions) {
//Cabecera de la tabla
echo html_writer::start_tag('table', array('id'=>'view-tabla','style'=>'margin: 0 auto;'));
echo html_writer::start_tag('tr');
echo html_writer::start_tag('td');
echo '<h2> Actividades LMS-Online</h2>'."\n";
echo html_writer::end_tag('td');
echo html_writer::start_tag('td');
echo html_writer::end_tag('td');
echo html_writer::start_tag('td');
echo '<h2> Examen en SIGA</h2>'."\n";
echo html_writer::end_tag('td');
echo html_writer::end_tag('tr');
echo html_writer::start_tag('tr');
$table = new flexible_table('view-activities');
$table->define_columns(array('id','actividad','migrar'));
$table->define_headers(array('Item', 'Actividad','Seleccionar'));
$table->define_baseurl(new moodle_url('/report/traspasonotasexam/index.php', $params));
$table->collapsible(false);
$table->set_attribute('cellspacing', '1');
$table->set_attribute('id', 'view-activities');
$table->set_attribute('cellpadding','5');
$table->set_attribute('class', 'table table-bordered generaltable generalbox reporttable');
$table->sortable(false,'actividad','ASC');
$table->set_control_variables(array(
TABLE_VAR_SORT => 'ssort',
TABLE_VAR_HIDE => 'shide',
TABLE_VAR_SHOW => 'sshow',
TABLE_VAR_IFIRST => 'sifirst',
TABLE_VAR_ILAST => 'silast',
TABLE_VAR_PAGE => 'spage'
));
echo html_writer::start_tag('td', array('valign'=>'top'));
$table->setup();
// print_r($submissions);
if ($submissions) {
foreach ($submissions as $submission) {
$row = array();
$row[] = format_string($submission->item);
$row[] = format_string($submission->itemname);
if($submission->trapaso <> '0'){
$row[] =' ';
}else {
// AQUI if()
// if($submission->fdia > 15){
// $row[] = '*';
// }else{
$row[] ='<input type="radio" class="activcurs" id="activcurs" name="activ" value="' . $submission->item . '" /> ';
//}
}
$table->add_data($row);
}
// $row = array();
// // $row[] ='Seleccione la actividad que desea traspasar.';
// $row[] ='<td colspan="2">Seleccione la actividad que desea traspasar.</td>';
// $table->add_data($row);
}
$table->print_html();
echo html_writer::end_tag('td');
echo html_writer::start_tag('td');
echo '<img src="Flecha.png" alt="calificaciones" height="22" width="22">'."\n";
echo html_writer::end_tag('td');
}
else
{
return '<br> <strong> Nada que mostrar </strong>';
}
$course = $DB->get_record('course', array('id' => $params['cursos']), 'idnumber', MUST_EXIST);
$enrol = enrol_get_plugin('dbinacap311');
$authdb = $enrol->db_init_inacap311();
/* $dbe = new auth_plugin_db_inacap;
$authdb = $dbe->db_init(); */
$table_cal = new flexible_table('view-grades-siga');
$table_cal->define_columns(array('nro','calificacion','fecha','ponderacion','seleccione'));
$table_cal->define_headers(array('Nro.','Calificaciones','F. Termino Sección',format_string('Ponderación'),'Seleccione'));
$table_cal->define_baseurl(new moodle_url('/report/traspasonotasexam/index.php', $params));
$table_cal->collapsible(false);
$table_cal->set_attribute('cellspacing', '1');
$table_cal->set_attribute('id', 'view-grades-siga');
$table_cal->set_attribute('cellpadding','5');
$table_cal->set_attribute('class', 'table table-bordered generaltable generalbox reporttable');
echo html_writer::start_tag('td', array('valign'=>'top'));
$table_cal->setup();
$row_cal = array();
$sqlDif = "select asi.tasg_ccod,(select ponf_jnota_examen *100
from ponderaciones_nota_final where talu_ccod = nvl (1, 1) and peri_ccod_inicio <= sc.peri_ccod
and sc.peri_ccod <= decode (peri_ccod_termino,0, sc.peri_ccod,peri_ccod_termino))
pond_examen from secciones sc, asignaturas asi Where sc.asig_ccod = asi.asig_ccod and sc.secc_ccod=".$course->idnumber;
$result = $authdb->Execute( $sqlDif );
foreach($result as $Ndif){
$dific = isset($Ndif['POND_EXAMEN']) ? $Ndif['POND_EXAMEN'] : 0;
}
$sql_auth = "
Select nvl(b.suma,0) suma, a.* from (
Select 0 cali_nevaluacion, s.SECC_FTERMINO_SEC feval, to_char(S.SECC_FTERMINO_SEC, 'dd-mm-yyyy') CALI_FEVALUACION, $dific CALI_NPONDERACION, 'Examen' TEVA_TDESC, s.secc_ccod,
case nvl(mt.secc_ccod,0)
when 0 then '<input type=\"radio\" class=\"cali\" id=\"cali\" name=\"cali\" value=\"'|| s.secc_ccod ||'\" /> '
else ' '
end case,
trunc((sysdate - S.SECC_FTERMINO_SEC ),0) fdia
from secciones s, m_TRASPASONOTASEXAM mt
Where s.secc_ccod = mt.secc_ccod(+)
and s.secc_ccod=$course->idnumber
) a left join (select secc_ccod, count(CARG_NNOTA_FINAL) suma from cargas_academicas where secc_ccod = $course->idnumber group by secc_ccod) b
on b.secc_ccod = a.secc_ccod
order by feval
";
$rs = $authdb->Execute( $sql_auth );
// var_dump($rs);
if ($rs){
foreach ($rs as $r) {
$option_b =$r["CASE"];
if($r["SUMA"] != '0') {$option_b .= ' (**)';}
$data_cal = array($r["CALI_NEVALUACION"],$r["TEVA_TDESC"],$r["CALI_FEVALUACION"],$r["CALI_NPONDERACION"].' %',$option_b);
$table_cal->add_data($data_cal);
}
}
else
{
$row_cal[] = '';
$row_cal[] = '';
$row_cal[] = '';
$row_cal[] = '';
$row_cal[] ='';
$table_cal->add_data($row_cal);
}
//$rs->Close();
$table_cal->print_html();
echo html_writer::end_tag('td');
echo html_writer::end_tag('tr');
echo html_writer::start_tag('tr');
echo '<td colspan="3">'.format_string('El traspaso de notas Examen a SIGA se realiza por actividad.').'</td>';
echo html_writer::end_tag('tr');
echo html_writer::start_tag('tr');
echo '<td colspan="3">'.format_string('Seleccione una actividad del LMS Online y una calificación Examen planificada en SIGA para establecer su traspaso.').'</td>';
echo html_writer::end_tag('tr');
/* echo html_writer::start_tag('tr');
echo '<td colspan="3" style="font-weight:bold;">'.format_string('(*) “Sólo se listarán y podrán ser traspasadas las calificaciones dentro de los 15 días siguientes a la fecha de evaluación”').'</td>';
echo html_writer::end_tag('tr'); */
echo html_writer::start_tag('tr');
echo '<td colspan="3" style="font-weight:bold;">'.format_string('(**) “Indica existencia de Calificación Examen en SIGA”').'</td>';
echo html_writer::end_tag('tr');
echo html_writer::end_tag('table');
}
function x_get_user_coursesexa($userid, $onlyactive = false, $fields = NULL, $sort = 'visible DESC,sortorder ASC') {
global $DB;
// Guest account does not have any courses
if (isguestuser($userid) or empty($userid)) {
return(array());
}
$basefields = array('id', 'shortname', 'fullname', 'idnumber');
if (empty($fields)) {
$fields = $basefields;
} else if (is_string($fields)) {
// turn the fields from a string to an array
$fields = explode(',', $fields);
$fields = array_map('trim', $fields);
$fields = array_unique(array_merge($basefields, $fields));
} else if (is_array($fields)) {
$fields = array_unique(array_merge($basefields, $fields));
} else {
throw new coding_exception('Invalid $fileds parameter in enrol_get_my_courses()');
}
if (in_array('*', $fields)) {
$fields = array('*');
}
$orderby = "";
$sort = trim($sort);
if (!empty($sort)) {
$rawsorts = explode(',', $sort);
$sorts = array();
foreach ($rawsorts as $rawsort) {
$rawsort = trim($rawsort);
if (strpos($rawsort, 'c.') === 0) {
$rawsort = substr($rawsort, 2);
}
$sorts[] = trim($rawsort);
}
$sort = 'c.'.implode(',c.', $sorts);
$orderby = "ORDER BY $sort";
}
$params = array('siteid'=>SITEID);
if ($onlyactive) {
$subwhere = "WHERE ue.status = :active AND e.status = :enabled AND ue.timestart < :now1 AND (ue.timeend = 0 OR ue.timeend > :now2)";
$params['now1'] = round(time(), -2); // improves db caching
$params['now2'] = $params['now1'];
$params['active'] = ENROL_USER_ACTIVE;
$params['enabled'] = ENROL_INSTANCE_ENABLED;
} else {
$subwhere = "";
}
$coursefields = 'c.' .join(',c.', $fields);
$ccselect = ', ' . context_helper::get_preload_record_columns_sql('ctx');
$ccjoin = "LEFT JOIN {context} ctx ON (ctx.instanceid = c.id AND ctx.contextlevel = :contextlevel) LEFT JOIN {role_assignments} ra ON (ra.contextid = ctx.id and ra.roleid in (1,3,4,9))";
$params['contextlevel'] = CONTEXT_COURSE;
//note: we can not use DISTINCT + text fields due to Oracle and MS limitations, that is why we have the subselect there
$sql = "SELECT distinct $coursefields $ccselect
FROM {course} c
JOIN (SELECT DISTINCT e.courseid
FROM {enrol} e
JOIN {user_enrolments} ue ON (ue.enrolid = e.id AND ue.userid = :userid)
$subwhere
) en ON (en.courseid = c.id)
$ccjoin
WHERE c.id <> :siteid
and userid= :iduser
$orderby";
$params['userid'] = $userid;
$params['iduser']= $userid;;
//$params['category'] = '2';
// echo '<br>'.$sql.'<br>';
//print_r($params);
//echo '<br>';
$courses = $DB->get_records_sql($sql, $params);
return $courses;
}
function x_traspasonotasexam_Display_Detalles($submissions, $params){
global $DB;
if ($submissions) {
$table = new flexible_table('view-resumen');
$table->define_columns(array('cali_ncorr','calisiga','fcreacion', 'ftraspaso','','idtrapaso'));
$table->define_headers(array('Actividad Online', 'Examen SIGA','Fecha Creación Online', 'Fecha Traspaso a SIGA','Detalle','Acci&oacute;n'));
$table->define_baseurl(new moodle_url('/report/traspasonotasexam/index.php', $params));
$table->collapsible(false);
$table->set_attribute('cellspacing', '1');
$table->set_attribute('id', 'view-resumen');
$table->set_attribute('cellpadding','5');
$table->set_attribute('class', 'generaltable generalbox reporttable');
$table->set_attribute('style','margin: 0 auto;');
$table->setup();
// echo '<pre>';var_dump($submissions);echo '</pre>';
foreach($submissions as $submission) {
$row = array();
$row[] = $submission->itemname;
$row[] = $submission->calisiga;
$row[] = $submission->fcreacion;
if($submission->ftraspaso == 0 ){
$row[] = '';
}else{
$row[] = date('d-m-Y', $submission->ftraspaso);
}
$row[] ='<a data-toggle="modal" href="#myModal" id="'.$submission->idtraspaso.'" class="btn btn-primary btn-large">Detalle</a> ';
if($submission->ftraspaso == 0){
$row[] = '&#160;<input type="button" name="ftraspaso" id="'.$submission->idtraspaso.'" value="Traspasar"/> &#160;<input type="button" name="ftraspasoelim" id="'.$submission->idtraspaso.'" value="Eliminar"/>';
}else{
$row[] = 'Ejecutado (Ver Detalles)';
}
$table->add_data($row);
}
$table->print_html();
}
else
{
return '<br> <strong> Nada que mostrar </strong>';
}
}
function x_traspasonotasexam_get_list_detalle($id_traspaso) {
global $DB;
//$sqlcourses='SELECT id item, itemname, itemtype, grademin, grademax FROM {grade_items} WHERE itemtype <> \'course\' and courseid = :cursos';
$sqlusers= "select MU.FIRSTNAME ||', '||MU.lastNAME usuario, tnd.grade puntaje, tnd.nota nota, tnd.OBSERVACION from m_TRASPASONOTASEXAM_DET tnd, m_user mu
where TND.USERID=MU.ID
and TND.TRASPASOIDEXE = $id_traspaso
order by FIRSTNAME, lastNAME ";
$submissions = $DB->get_records_sql($sqlusers);
// var_dump($submissions);
return $submissions;
}
function x_traspasonotasexam_Display_Detalles_lista($id_traspaso){
global $DB;
$submissions=traspasonotasexam_get_list_detalle($id_traspaso);
if ($submissions) {
$table = new flexible_table('view-detalles');
$table->define_columns(array('usuario','puntaje','nota', 'observacion'));
$table->define_headers(array('Usuario', 'Puntaje','Nota SIGA', 'Observaci&oacute;n'));
$table->define_baseurl(new moodle_url('/report/traspasonotasexam/index.php'));
$table->collapsible(false);
$table->set_attribute('cellspacing', '1');
$table->set_attribute('id', 'view-detalles');
$table->set_attribute('cellpadding','5');
$table->set_attribute('class', 'generaltable generalbox reporttable');
$table->set_attribute('style','margin: 0 auto;');
$table->setup();
// echo '<pre>';var_dump($submissions);echo '</pre>';
foreach($submissions as $submission) {
$row = array();
$row[] = $submission->usuario;
$row[] = $submission->puntaje;
$row[] = $submission->nota;
$row[] = $submission->observacion;
$table->add_data($row);
}
echo ' <!-- Modal -->
<div class="modal" id="myModal" style="display:none">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title">Detalle Traspaso Notas</h4>
</div>
<div class="modal-body">'.
$table->print_html()
.'</div>
<div class="modal-footer">
<a href="#" class="btn btn-default" data-dismiss="modal">Cerrar</a>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->';
}
else
{
return '<br> <strong> Nada que mostrar </strong>';
}
}
function x_miCursoexa($id){
global $DB;
$sqlcurso= "Select fullname from m_course Where id=".$id;
$submissions = $DB->get_records_sql($sqlcurso);
foreach ($submissions as $submission) {
return 'Mi Curso: '. $submission->fullname;
}
}