Autoría | Ultima modificación | Ver Log |
<?php
defined('MOODLE_INTERNAL') || die();
global $CFG;
require_once($CFG->libdir . '/externallib.php');
require_once $CFG->libdir . '/completionlib.php';
require_once $CFG->dirroot. '/completion/classes/progress.php';
require_once(__DIR__ . '/locallib.php');
require_once $CFG->libdir . '/phpspreadsheet/vendor/autoload.php';
class local_cesa_reportes_ajax_external extends \external_api
{
const _STATUS_PENDING = 0;
const _STATUS_PROCESSING = 1;
const _STATUS_READY = 2;
const _STATUS_ERROR = 3;
public static function report_for_one_course_parameters()
{
return new \external_function_parameters([
'courseid' => new \external_value(PARAM_INT, 'ID del curso', VALUE_DEFAULT, 0),
]);
}
public static function report_for_one_course($courseid)
{
global $CFG, $DB, $OUTPUT, $PAGE;
require_login();
require_capability('local/cesa_reportes:view', context_system::instance());
$PAGE->set_context(context_system::instance());
$filter_userids = [];
$filter_courseids = [$courseid];
$filter_by_company_active = true;
$extra_fields = local_cesa_reportes_get_user_extra_field_names();
$context['fields'] = [];
array_push($context['fields'], ['field' => 'Apellido']);
array_push($context['fields'], ['field' => 'Nombre']);
array_push($context['fields'], ['field' => 'Email']);
array_push($context['fields'], ['field' => 'Curso']);
array_push($context['fields'], ['field' => 'Categoria']);
array_push($context['fields'], ['field' => 'Matriculación']);
array_push($context['fields'], ['field' => 'Fecha finalización']);
array_push($context['fields'], ['field' => 'Actividades asignadas']);
array_push($context['fields'], ['field' => 'Actividades completadas']);
array_push($context['fields'], ['field' => 'Progreso %']);
array_push($context['fields'], ['field' => 'Primera actividad']);
array_push($context['fields'], ['field' => 'Ultima actividad']);
foreach($extra_fields as $extra_field)
{
array_push($context['fields'], ['field' => $extra_field->name]);
}
$context['items'] = [];
$include_modules = false;
$page = 0;
$data = local_cesa_reportes_get_data_for_report_or_excel($filter_by_company_active, $filter_userids, $filter_courseids, $include_modules, $page);
$records = $data['items'];
$context['pagination'] = $data['pagination'];
foreach($records as $record)
{
if(!$record->courses) {
continue;
}
foreach($record->courses as $course)
{
$item = [];
array_push($item, ['value' => $record->lastname ]);
array_push($item, ['value' => $record->firstname ]);
array_push($item, ['value' => $record->email ]);
array_push($item, ['value' => $course->name ]);
array_push($item, ['value' => $course->category ]);
array_push($item, ['value' => empty($course->timeenrolled) ? '' : date('d/m/Y h:i a', $course->timeenrolled) ]);
array_push($item, ['value' => empty($course->timecompleted) ? '' : date('d/m/Y h:i a', $course->timecompleted) ]);
array_push($item, ['value' => $course->activities_assigned, 'align-right' => true ]);
array_push($item, ['value' => $course->activities_completed, 'align-right' => true ]);
array_push($item, ['value' => number_format($course->percentage, 2), 'align-right' => true ]);
array_push($item, ['value' => empty($course->time_activities_first) ? '' : date('d/m/Y h:i a', $course->time_activities_first) ]);
array_push($item, ['value' => empty($course->time_activities_last) ? '' : date('d/m/Y h:i a', $course->time_activities_last) ]);
foreach($extra_fields as $extra_field)
{
$value = '';
foreach($record->extras as $extra)
{
if($extra->id == $extra_field->id) {
$value = $extra->value;
}
}
array_push($item, ['value' => $value ]);
}
array_push($context['items'], ['item' => $item]);
}
}
$data = $OUTPUT->render_from_template('local_cesa_reportes/report_one_course', $context);
return json_encode(['success' =>true, 'data' => $data]);
}
public static function report_for_one_course_returns()
{
return new \external_value(PARAM_RAW, 'The updated JSON output');
}
public static function report_for_one_user_parameters()
{
return new \external_function_parameters([
'userid' => new \external_value(PARAM_INT, 'ID del usuario', VALUE_DEFAULT, 0),
]);
}
public static function report_for_one_user($userid)
{
global $CFG, $DB, $OUTPUT, $PAGE;
require_login();
require_capability('local/cesa_reportes:view', context_system::instance());
$PAGE->set_context(context_system::instance());
$filter_userids = [$userid];
$filter_courseids = [];
$filter_by_company_active = true;
$extra_fields = local_cesa_reportes_get_user_extra_field_names();
$context['fields'] = [];
array_push($context['fields'], ['field' => 'Apellido']);
array_push($context['fields'], ['field' => 'Nombre']);
array_push($context['fields'], ['field' => 'Email']);
array_push($context['fields'], ['field' => 'Curso']);
array_push($context['fields'], ['field' => 'Categoria']);
array_push($context['fields'], ['field' => 'Matriculación']);
array_push($context['fields'], ['field' => 'Fecha finalización']);
array_push($context['fields'], ['field' => 'Actividades asignadas']);
array_push($context['fields'], ['field' => 'Actividades completadas']);
array_push($context['fields'], ['field' => 'Progreso %']);
array_push($context['fields'], ['field' => 'Primera actividad']);
array_push($context['fields'], ['field' => 'Ultima actividad']);
foreach($extra_fields as $extra_field)
{
array_push($context['fields'], ['field' => $extra_field->name]);
}
$context['items'] = [];
$include_modules = false;
$page = 0;
$data = local_cesa_reportes_get_data_for_report_or_excel($filter_by_company_active, $filter_userids, $filter_courseids, $include_modules, $page);
$records = $data['items'];
$context['pagination'] = $data['pagination'];
foreach($records as $record)
{
if(!$record->courses) {
continue;
}
foreach($record->courses as $course)
{
$item = [];
array_push($item, ['value' => $record->lastname ]);
array_push($item, ['value' => $record->firstname ]);
array_push($item, ['value' => $record->email ]);
array_push($item, ['value' => $course->name ]);
array_push($item, ['value' => $course->category ]);
array_push($item, ['value' => empty($course->timeenrolled) ? '' : date('d/m/Y h:i a', $course->timeenrolled) ]);
array_push($item, ['value' => empty($course->timecompleted) ? '' : date('d/m/Y h:i a', $course->timecompleted) ]);
array_push($item, ['value' => $course->activities_assigned, 'align-right' => true ]);
array_push($item, ['value' => $course->activities_completed, 'align-right' => true ]);
array_push($item, ['value' => number_format($course->percentage, 2), 'align-right' => true ]);
array_push($item, ['value' => empty($course->time_activities_first) ? '' : date('d/m/Y h:i a', $course->time_activities_first) ]);
array_push($item, ['value' => empty($course->time_activities_last) ? '' : date('d/m/Y h:i a', $course->time_activities_last) ]);
foreach($extra_fields as $extra_field)
{
$value = '';
foreach($record->extras as $extra)
{
if($extra->id == $extra_field->id) {
$value = $extra->value;
}
}
array_push($item, ['value' => $value ]);
}
array_push($context['items'], ['item' => $item]);
}
}
$data = $OUTPUT->render_from_template('local_cesa_reportes/report_one_course', $context);
return json_encode(['success' => true, 'data' => $data]);
}
public static function report_for_one_user_returns()
{
return new \external_value(PARAM_RAW, 'The updated JSON output');
}
public static function excel_last_seven_days_parameters()
{
return new \external_function_parameters([
'fakeparam' => new \external_value(PARAM_INT, 'fakeparam', VALUE_DEFAULT, 0),
]);
}
public static function excel_last_seven_days($fakeparam)
{
global $CFG, $DB, $PAGE, $USER;
require_login();
require_capability('local/cesa_reportes:view', context_system::instance());
$PAGE->set_context(context_system::instance());
$data = [
'request_userid' => $USER->id,
'request_time' => time(),
'generate_time' => 0,
'status' => self::_STATUS_PENDING,
'parameters' => json_encode([
'type' => 'los_ultimos_siete_dias',
]),
'filename' => '',
];
if($DB->insert_record('local_cesa_reportes', $data)) {
return json_encode(['success' => true, 'data' => 'La petición de generación del reporte ha sido agregada']);
} else {
return json_encode(['success' => false, 'data' => 'No se pudo agregar la petición de generación del reporte']);
}
}
public static function excel_last_seven_days_returns()
{
return new \external_value(PARAM_RAW, 'The updated JSON output');
}
public static function excel_for_one_course_parameters()
{
return new \external_function_parameters([
'courseid' => new \external_value(PARAM_INT, 'ID del usuario', VALUE_DEFAULT, 0),
]);
}
public static function excel_for_one_course($courseid)
{
global $CFG, $DB, $PAGE, $USER;
require_login();
require_capability('local/cesa_reportes:view', context_system::instance());
$PAGE->set_context(context_system::instance());
$data = [
'request_userid' => $USER->id,
'request_time' => time(),
'generate_time' => 0,
'status' => self::_STATUS_PENDING,
'parameters' => json_encode([
'type' => 'todos_los_usuarios_de_un_curso',
'courseid' => $courseid,
]),
'filename' => '',
];
if($DB->insert_record('local_cesa_reportes', $data)) {
return json_encode(['success' => true, 'data' => 'La petición de generación del reporte ha sido agregada']);
} else {
return json_encode(['success' => false, 'data' => 'No se pudo agregar la petición de generación del reporte']);
}
}
public static function excel_for_one_course_returns()
{
return new \external_value(PARAM_RAW, 'The updated JSON output');
}
public static function excel_for_one_user_parameters()
{
return new \external_function_parameters([
'userid' => new \external_value(PARAM_INT, 'ID del usuario', VALUE_DEFAULT, 0),
]);
}
public static function excel_for_one_user($userid)
{
global $CFG, $DB, $PAGE, $USER;
require_login();
require_capability('local/cesa_reportes:view', context_system::instance());
$PAGE->set_context(context_system::instance());
$data = [
'request_userid' => $USER->id,
'request_time' => time(),
'generate_time' => 0,
'status' => self::_STATUS_PENDING,
'parameters' => json_encode([
'type' => 'todos_los_cursos_de_un_usuario',
'userid' => $userid,
]),
'filename' => '',
];
if($DB->insert_record('local_cesa_reportes', $data)) {
return json_encode(['success' => true, 'data' => 'La petición de generación del reporte ha sido agregada']);
} else {
return json_encode(['success' => false, 'data' => 'No se pudo agregar la petición de generación del reporte']);
}
}
public static function excel_for_one_user_returns()
{
return new \external_value(PARAM_RAW, 'The updated JSON output');
}
public static function excel_all_courses_parameters()
{
return new \external_function_parameters([
'fakeparam' => new \external_value(PARAM_INT, 'fakeparam', VALUE_DEFAULT, 0),
]);
}
public static function excel_all_courses($fakeparam)
{
global $CFG, $DB, $PAGE, $USER;
require_login();
require_capability('local/cesa_reportes:view', context_system::instance());
$PAGE->set_context(context_system::instance());
$data = [
'request_userid' => $USER->id,
'request_time' => time(),
'generate_time' => 0,
'status' => self::_STATUS_PENDING,
'parameters' => json_encode([
'type' => 'todos_los_cursos',
]),
'filename' => '',
];
if($DB->insert_record('local_cesa_reportes', $data)) {
return json_encode(['success' => true, 'data' => 'La petición de generación del reporte ha sido agregada']);
} else {
return json_encode(['success' => false, 'data' => 'No se pudo agregar la petición de generación del reporte']);
}
}
public static function excel_all_courses_returns()
{
return new \external_value(PARAM_RAW, 'The updated JSON output');
}
public static function excel_all_courses_with_activites_parameters()
{
return new \external_function_parameters([
'fakeparam' => new \external_value(PARAM_INT, 'fakeparam', VALUE_DEFAULT, 0),
]);
}
public static function excel_all_courses_with_activites($fakeparam)
{
global $CFG, $DB, $PAGE, $USER;
require_login();
require_capability('local/cesa_reportes:view', context_system::instance());
$PAGE->set_context(context_system::instance());
$data = [
'request_userid' => $USER->id,
'request_time' => time(),
'generate_time' => 0,
'status' => self::_STATUS_PENDING,
'parameters' => json_encode([
'type' => 'todos_los_cursos_con_actividades',
]),
'filename' => '',
];
if($DB->insert_record('local_cesa_reportes', $data)) {
return json_encode(['success' => true, 'data' => 'La petición de generación del reporte ha sido agregada']);
} else {
return json_encode(['success' => false, 'data' => 'No se pudo agregar la petición de generación del reporte']);
}
}
public static function excel_all_courses_with_activites_returns()
{
return new \external_value(PARAM_RAW, 'The updated JSON output');
}
public static function all_files_parameters()
{
return new \external_function_parameters([
'fakeparam' => new \external_value(PARAM_INT, 'fakeparam', VALUE_DEFAULT, 0),
]);
}
public static function all_files($fakeparam)
{
global $CFG, $DB, $PAGE, $OUTPUT;
require_login();
require_capability('local/cesa_reportes:view', context_system::instance());
$PAGE->set_context(context_system::instance());
$context['items'] = [];
$users = [];
$records = $DB->get_records('local_cesa_reportes', [], 'request_time DESC');
foreach($records as $record)
{
if(isset($users[$record->request_userid])) {
$user = $users[$record->request_userid];
} else {
$user = $DB->get_record('user', ['id' => $record->request_userid]);
$users[$record->request_userid] = $user;
//select id, username, firstname, lastname, email from db_moodle4_dev.mdl_user
}
$item = [
'id' => $record->id,
'download' => false,
'delete' => false,
'values' => [],
];
array_push($item['values'], ['value' => date('d/m/Y h:i a', $record->request_time)]);
array_push($item['values'], ['value' => $user->firstname . ' ' . $user->lastname ]);
switch($record->status)
{
case 1 :
array_push($item['values'], ['value' => 'Procesando' ]);
break;
case 2 :
array_push($item['values'], ['value' => 'Generado' ]);
$item['delete'] = true;
$item['download'] = true;
break;
case 3 :
array_push($item['values'], ['value' => 'Error' ]);
$item['delete'] = true;
break;
default :
array_push($item['values'], ['value' => 'Pendiente']);
$item['delete'] = true;
break;
}
array_push($item['values'], ['value' => $record->filename] );
array_push($item['values'], ['value' => empty($record->generate_time) ? '' : date('d/m/Y h:i a', $record->generate_time)]);
array_push($context['items'],['item' => $item]);
}
$data = $OUTPUT->render_from_template('local_cesa_reportes/all_files', $context);
return json_encode(['success' => true, 'data' => $data]);
}
public static function all_files_returns()
{
return new \external_value(PARAM_RAW, 'The updated JSON output');
}
public static function delete_file_parameters()
{
return new \external_function_parameters([
'id' => new \external_value(PARAM_INT, 'fakeparam', VALUE_DEFAULT, 0),
]);
}
public static function delete_file($id)
{
global $CFG, $DB, $PAGE, $OUTPUT;
require_login();
require_capability('local/cesa_reportes:view', context_system::instance());
$PAGE->set_context(context_system::instance());
$record = $DB->get_record('local_cesa_reportes', ['id' => $id]);
if($record) {
$full_filename = __DIR__ . DIRECTORY_SEPARATOR . 'files' . DIRECTORY_SEPARATOR . $record->filename ;
if(file_exists($full_filename)) {
@unlink($full_filename);
}
$DB->delete_records('local_cesa_reportes', ['id' => $id]);
}
$context['items'] = [];
$users = [];
$records = $DB->get_records('local_cesa_reportes', [], 'request_time DESC');
foreach($records as $record)
{
if(isset($users[$record->request_userid])) {
$user = $users[$record->request_userid];
} else {
$user = $DB->get_record('user', ['id' => $record->request_userid]);
$users[$record->request_userid] = $user;
//select id, username, firstname, lastname, email from db_moodle4_dev.mdl_user
}
$item = [
'id' => $record->id,
'download' => false,
'delete' => false,
'values' => [],
];
array_push($item['values'], ['value' => date('d/m/Y h:i a', $record->request_time)]);
array_push($item['values'], ['value' => $user->firstname . ' ' . $user->lastname ]);
switch($record->status)
{
case 1 :
array_push($item['values'], ['value' => 'Procesando' ]);
break;
case 2 :
array_push($item['values'], ['value' => 'Generado' ]);
$item['download'] = true;
$item['delete'] = true;
break;
case 3 :
array_push($item['values'], ['value' => 'Error' ]);
$item['delete'] = true;
break;
default :
array_push($item['values'], ['value' => 'Pendiente']);
$item['delete'] = true;
break;
}
array_push($item['values'], ['value' => $record->filename] );
array_push($item['values'], ['value' => empty($record->generate_time) ? '' : date('d/m/Y h:i a', $record->generate_time)]);
array_push($context['items'],['item' => $item]);
}
$data = $OUTPUT->render_from_template('local_cesa_reportes/all_files', $context);
return json_encode(['success' => true, 'data' => $data]);
}
public static function delete_file_returns()
{
return new \external_value(PARAM_RAW, 'The updated JSON output');
}
public static function download_file_parameters()
{
return new \external_function_parameters([
'id' => new \external_value(PARAM_INT, 'fakeparam', VALUE_DEFAULT, 0),
]);
}
public static function download_file($id)
{
global $CFG, $DB, $PAGE, $OUTPUT;
require_login();
require_capability('local/cesa_reportes:view', context_system::instance());
$PAGE->set_context(context_system::instance());
$record = $DB->get_record('local_cesa_reportes', ['id' => $id]);
if($record) {
$full_filename = __DIR__ . DIRECTORY_SEPARATOR . 'files' . DIRECTORY_SEPARATOR . $record->filename ;
if(file_exists($full_filename)) {
$data = base64_encode(file_get_contents($full_filename));
return json_encode(['success' => true, 'data' =>['basename' => $record->filename, 'content' => $data]]);
}
}
return json_encode(['success' => false, 'data' => get_string('cesa_reportes_error_file_not_found', 'local_cesa_reportes')]);
}
public static function download_file_returns()
{
return new \external_value(PARAM_RAW, 'The updated JSON output');
}
public static function report_custom_parameters()
{
return new \external_function_parameters([
'filter_from' => new \external_value(PARAM_ALPHANUMEXT, 'filter_from', VALUE_DEFAULT, ''),
'filter_to' => new \external_value(PARAM_ALPHANUMEXT, 'filter_to', VALUE_DEFAULT, ''),
'filter_userkeyword' => new \external_value(PARAM_RAW, 'filter_userkeyword', VALUE_DEFAULT, ''),
]);
}
public static function report_custom($filter_from, $filter_to, $filter_userkeyword)
{
global $CFG, $DB, $PAGE, $OUTPUT;
require_login();
require_capability('local/cesa_reportes:view', context_system::instance());
$PAGE->set_context(context_system::instance());
$filter_userkeyword = filter_var($filter_userkeyword, FILTER_SANITIZE_STRING);
$extra_fields = local_cesa_reportes_get_user_extra_field_names();
$context['fields'] = [];
array_push($context['fields'], ['field' => 'Apellido']);
array_push($context['fields'], ['field' => 'Nombre']);
array_push($context['fields'], ['field' => 'Email']);
array_push($context['fields'], ['field' => 'Curso']);
array_push($context['fields'], ['field' => 'Categoria']);
array_push($context['fields'], ['field' => 'Matriculación']);
array_push($context['fields'], ['field' => 'Fecha finalización']);
array_push($context['fields'], ['field' => 'Actividades asignadas ']);
array_push($context['fields'], ['field' => 'Actividades completadas ']);
array_push($context['fields'], ['field' => 'Progreso %']);
array_push($context['fields'], ['field' => 'Primera actividad']);
array_push($context['fields'], ['field' => 'Ultima actividad']);
array_push($context['fields'], ['field' => 'Actividad']);
array_push($context['fields'], ['field' => 'Completado']);
foreach($extra_fields as $extra_field)
{
array_push($context['fields'], ['field' => $extra_field->name]);
}
$filter_userids = [];
$filter_by_company_active = false;
$dt = \DateTime::createFromFormat('Y-m-d', $filter_from);
$dt->setTime(0, 0, 0);
$filter_from = $dt ? $dt->getTimestamp() : strtotime('-1 Month');
$dt = \DateTime::createFromFormat('Y-m-d', $filter_to);
$dt->setTime(23, 59, 59);
$filter_to = $dt ? $dt->getTimestamp() : time();
$context['items'] = [];
$context['filter_from'] = $filter_from;
$context['filter_to'] = $filter_to;
$filter_courseids = local_cesa_reportes_get_course_with_activites_range($filter_from, $filter_to);
$filter_by_company_active = true;
$include_modules = false;
$data = local_cesa_reportes_get_data_for_report_or_excel_custom($filter_by_company_active, $filter_userids, $filter_courseids, $filter_userkeyword, $filter_from, $filter_to, $include_modules, $page = 1);
$records = $data['items'];
$context['pagination'] = $data['pagination'];
if($context['pagination']['page'] > 1) {
$context['pagination']['previous_page'] = $context['pagination']['page'] - 1;
}
if($context['pagination']['page'] < $context['pagination']['max_pages']) {
$context['pagination']['next_page'] = $context['pagination']['page'] + 1;
}
foreach($records as $record)
{
if(!$record->courses) {
continue;
}
foreach($record->courses as $course)
{
if(isset($course->activities)) {
foreach($course->activities as $activity)
{
$item = [];
array_push($item, ['value' => $record->lastname ]);
array_push($item, ['value' => $record->firstname ]);
array_push($item, ['value' => $record->email ]);
array_push($item, ['value' => $course->name ]);
array_push($item, ['value' => $course->category ]);
array_push($item, ['value' => empty($course->timeenrolled) ? '' : date('d/m/Y h:i a', $course->timeenrolled)]);
array_push($item, ['value' => empty($course->timecompleted) ? '' : date('d/m/Y h:i a', $course->timecompleted)]);
array_push($item, ['value' => $course->activities_assigned, 'align-right' => true ]);
array_push($item, ['value' => $course->activities_completed, 'align-right' => true ]);
array_push($item, ['value' => number_format($course->percentage, 2), 'align-right' => true ]);
array_push($item, ['value' => empty($course->time_activities_first) ? '' : date('d/m/Y h:i a', $course->time_activities_first) ]);
array_push($item, ['value' => empty($course->time_activities_last) ? '' : date('d/m/Y h:i a', $course->time_activities_last) ]);
array_push($item, ['value' => $activity->module ]);
array_push($item, ['value' => empty($activity->timecompleted) ? '' : date('d/m/Y h:i a', $activity->timecompleted) ]);
foreach($extra_fields as $extra_field)
{
$value = '';
foreach($record->extras as $extra)
{
if($extra->id == $extra_field->id) {
$value = $extra->value;
}
}
array_push($item, ['value' => $value ]);
}
array_push($context['items'], ['item' => $item]);
}
} else {
$item = [];
array_push($item, ['value' => $record->lastname ]);
array_push($item, ['value' => $record->firstname ]);
array_push($item, ['value' => $record->email ]);
array_push($item, ['value' => $course->name ]);
array_push($item, ['value' => $course->category ]);
array_push($item, ['value' => empty($course->timeenrolled) ? '' : date('d/m/Y h:i a', $course->timeenrolled)]);
array_push($item, ['value' => empty($course->timecompleted) ? '' : date('d/m/Y h:i a', $course->timecompleted)]);
array_push($item, ['value' => $course->activities_assigned, 'align-right' => true ]);
array_push($item, ['value' => $course->activities_completed, 'align-right' => true ]);
array_push($item, ['value' => number_format($course->percentage, 2), 'align-right' => true ]);
array_push($item, ['value' => empty($course->time_activities_first) ? '' : date('d/m/Y h:i a', $course->time_activities_first) ]);
array_push($item, ['value' => empty($course->time_activities_last) ? '' : date('d/m/Y h:i a', $course->time_activities_last) ]);
foreach($extra_fields as $extra_field)
{
$value = '';
foreach($record->extras as $extra)
{
if($extra->id == $extra_field->id) {
$value = $extra->value;
}
}
array_push($item, ['value' => $value ]);
}
array_push($context['items'], ['item' => $item]);
}
}
}
$data = $OUTPUT->render_from_template('local_cesa_reportes/report_custom', $context);
return json_encode(['success' => true, 'data' => $data]);
}
public static function report_custom_returns()
{
return new \external_value(PARAM_RAW, 'The updated JSON output');
}
public static function report_excel_custom_parameters()
{
return new \external_function_parameters([
'filter_from' => new \external_value(PARAM_ALPHANUMEXT, 'filter_from', VALUE_DEFAULT, ''),
'filter_to' => new \external_value(PARAM_ALPHANUMEXT, 'filter_to', VALUE_DEFAULT, ''),
'filter_userkeyword' => new \external_value(PARAM_RAW, 'filter_userkeyword', VALUE_DEFAULT, ''),
]);
}
public static function report_excel_custom($filter_from, $filter_to, $filter_userkeyword)
{
global $CFG, $DB, $PAGE, $USER;
require_login();
require_capability('local/cesa_reportes:view', context_system::instance());
$PAGE->set_context(context_system::instance());
$data = [
'request_userid' => $USER->id,
'request_time' => time(),
'generate_time' => 0,
'status' => self::_STATUS_PENDING,
'parameters' => json_encode([
'type' => 'custom',
'filter_from' => $filter_from,
'filter_to' => $filter_to,
'filter_userkeyword' => $filter_userkeyword,
]),
'filename' => '',
];
if($DB->insert_record('local_cesa_reportes', $data)) {
return json_encode(['success' => true, 'data' => 'La petición de generación del reporte ha sido agregada']);
} else {
return json_encode(['success' => false, 'data' => 'No se pudo agregar la petición de generación del reporte']);
}
}
public static function report_excel_custom_returns()
{
return new \external_value(PARAM_RAW, 'The updated JSON output');
}
}