358 lines
9.7 KiB
PHP
358 lines
9.7 KiB
PHP
|
|
<?php
|
||
|
|
require_once __DIR__.'/auth_guard.php';
|
||
|
|
//ini_set("memory_limit","1024M");
|
||
|
|
require_once "../config.php";
|
||
|
|
require_once "../runtime/encrypt.php";
|
||
|
|
dbConnect();
|
||
|
|
global $link;
|
||
|
|
$resultados = [];
|
||
|
|
$fechainicio = $_GET['fechaini'];
|
||
|
|
$fechainiciotxt = $_GET['fechaini'];
|
||
|
|
$fechafin = $_GET['fechafin'];
|
||
|
|
$fechafintxt = $_GET['fechafin'];
|
||
|
|
$estado_ini = $_GET['estado'];
|
||
|
|
|
||
|
|
if ($estado_ini == 'all') {
|
||
|
|
$estado = 'IN (0,1)';
|
||
|
|
}else{
|
||
|
|
$estado = '= '.$estado_ini;
|
||
|
|
}
|
||
|
|
|
||
|
|
if ($fechainicio == '') {
|
||
|
|
$fechainicio = '2020-07-01';
|
||
|
|
}else{
|
||
|
|
$fechainicio = "".$fechainicio."";
|
||
|
|
}
|
||
|
|
|
||
|
|
if ($fechafin == '') {
|
||
|
|
$fechafin = date('Y-m-d', strtotime($fechafin."+ 1 days") );
|
||
|
|
}else{
|
||
|
|
$fechafin = "".$fechafin."";
|
||
|
|
}
|
||
|
|
|
||
|
|
$categoria = $_GET['categoria'];
|
||
|
|
//$categoria = 1;
|
||
|
|
|
||
|
|
$headers = [
|
||
|
|
'Estado del empleado',
|
||
|
|
'Número de empleado',
|
||
|
|
'Nombres(s)',
|
||
|
|
'Apellidos',
|
||
|
|
'Posición',
|
||
|
|
'Sociedad',
|
||
|
|
'División',
|
||
|
|
'Unidad organizativa',
|
||
|
|
'CeCo',
|
||
|
|
'Distrito',
|
||
|
|
'Centro de trabajo',
|
||
|
|
'Supervisor',
|
||
|
|
];
|
||
|
|
|
||
|
|
$sqlasignados = "SELECT user.userid
|
||
|
|
FROM asignacion
|
||
|
|
INNER JOIN user ON asignacion.uid = user.userid
|
||
|
|
INNER JOIN categoria ON asignacion.catid = categoria.id
|
||
|
|
WHERE user.habilitado $estado AND categoria.habilitado = 1 AND catid = $categoria";
|
||
|
|
|
||
|
|
|
||
|
|
$resultasignacion = mysqli_query($link, $sqlasignados);
|
||
|
|
|
||
|
|
|
||
|
|
if( $resultasignacion ){
|
||
|
|
if (mysqli_num_rows($resultasignacion) <= 0 ) {
|
||
|
|
$data_asignacion = [];
|
||
|
|
}else{
|
||
|
|
mysqli_data_seek($resultasignacion, 0);
|
||
|
|
while ($row = mysqli_fetch_assoc ($resultasignacion)){
|
||
|
|
$data_asignacion[] = $row;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
$cad_numempl = '';
|
||
|
|
$total_asignados = sizeof($data_asignacion);
|
||
|
|
foreach ($data_asignacion as $key => $val) {
|
||
|
|
if ($key == ($total_asignados-1)) {
|
||
|
|
$cad_numempl .= $val['userid'];
|
||
|
|
}else{
|
||
|
|
$cad_numempl .= $val['userid'].",";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
$sqlusers = "";
|
||
|
|
|
||
|
|
$sqlusers .= "SELECT
|
||
|
|
q.numempl,
|
||
|
|
q.nombre AS nombre,
|
||
|
|
q.apellidos,
|
||
|
|
q.nomcentro,
|
||
|
|
q.nomdistrito,
|
||
|
|
q.posicion,
|
||
|
|
q.sociedad,
|
||
|
|
q.division,
|
||
|
|
q.unidad_organizativa,
|
||
|
|
q.ceco,
|
||
|
|
q.supervisor,
|
||
|
|
IF(q.habilitado = 1, 'ACTIVO', 'BAJA') AS estado_empleado,
|
||
|
|
categoria.nombre AS nomcat,
|
||
|
|
q.nomcat AS nomcurso,
|
||
|
|
q.visitado AS visitado,
|
||
|
|
q.fecha AS fecha
|
||
|
|
FROM
|
||
|
|
(
|
||
|
|
SELECT
|
||
|
|
user.numempl AS numempl,
|
||
|
|
user.nombre AS nombre,
|
||
|
|
user.apellido AS apellidos,
|
||
|
|
user.centrotrabajonom AS nomcentro,
|
||
|
|
user.distritonom AS nomdistrito,
|
||
|
|
user.posicion,
|
||
|
|
user.sociedad,
|
||
|
|
user.division,
|
||
|
|
user.unidad_organizativa,
|
||
|
|
user.ceco,
|
||
|
|
user.supervisor,
|
||
|
|
user.habilitado,
|
||
|
|
categoria.padre,
|
||
|
|
categoria.nombre AS nomcat,
|
||
|
|
categoria.id AS cat0,
|
||
|
|
scormpkg.nombre nomcurso,
|
||
|
|
scormpkg.idcategoria AS idcategoria,
|
||
|
|
CASE WHEN scormresults.userid <> '' THEN CONCAT(
|
||
|
|
COUNT(scormresults.userid),
|
||
|
|
' de ',
|
||
|
|
(
|
||
|
|
SELECT
|
||
|
|
COUNT(*)
|
||
|
|
FROM
|
||
|
|
scormpkg
|
||
|
|
WHERE
|
||
|
|
scormpkg.idcategoria = categoria.id
|
||
|
|
)
|
||
|
|
)
|
||
|
|
END AS visitado,
|
||
|
|
scormresults.fecha
|
||
|
|
FROM
|
||
|
|
scormresults
|
||
|
|
INNER JOIN user ON user.userid = scormresults.userid
|
||
|
|
INNER JOIN scormpkg ON scormpkg.id = scormresults.scormid
|
||
|
|
INNER JOIN categoria ON categoria.id = scormpkg.idcategoria
|
||
|
|
WHERE
|
||
|
|
(scormresults.status = 'passed' OR scormresults.status = 'completed') AND user.userid IN ($cad_numempl) AND scormpkg.habilitado = 1";
|
||
|
|
|
||
|
|
if ($estado != 'all') {
|
||
|
|
$sqlusers .= " AND user.habilitado $estado";
|
||
|
|
} else {
|
||
|
|
$sqlusers .= " AND user.habilitado IN (0,1)";
|
||
|
|
}
|
||
|
|
|
||
|
|
if ($fechainicio != '' && $fechafin != '') {
|
||
|
|
$sqlusers .= " AND scormresults.fecha BETWEEN '$fechainicio' AND '$fechafin'";
|
||
|
|
}
|
||
|
|
|
||
|
|
$sqlusers .= " GROUP BY
|
||
|
|
scormresults.userid,
|
||
|
|
scormpkg.idcategoria
|
||
|
|
ORDER BY
|
||
|
|
scormresults.userid,
|
||
|
|
categoria.id
|
||
|
|
DESC
|
||
|
|
) AS q
|
||
|
|
INNER JOIN categoria ON categoria.id = q.padre
|
||
|
|
WHERE categoria.id = $categoria
|
||
|
|
ORDER BY
|
||
|
|
q.numempl,
|
||
|
|
q.cat0 ASC";
|
||
|
|
|
||
|
|
|
||
|
|
$resultusers = mysqli_query($link, $sqlusers);
|
||
|
|
if ($resultusers) {
|
||
|
|
mysqli_data_seek($resultusers, 0);
|
||
|
|
while ($row = mysqli_fetch_assoc($resultusers)) {
|
||
|
|
$data[] = $row;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
$sqlcolumns = "SELECT
|
||
|
|
categoria.id,
|
||
|
|
categoria.clave,
|
||
|
|
categoria.nombre
|
||
|
|
FROM
|
||
|
|
categoria
|
||
|
|
WHERE
|
||
|
|
padre = 0 AND id = $categoria AND habilitado = 1
|
||
|
|
ORDER BY categoria.id";
|
||
|
|
$resultcolumn = mysqli_query($link, $sqlcolumns);
|
||
|
|
if ($resultcolumn) {
|
||
|
|
mysqli_data_seek($resultcolumn, 0);
|
||
|
|
while ($row = mysqli_fetch_assoc($resultcolumn)) {
|
||
|
|
$categorias[] = $row;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
$sqlTotales = "SELECT
|
||
|
|
rs2.total,
|
||
|
|
categoria.nombre
|
||
|
|
FROM
|
||
|
|
(
|
||
|
|
SELECT
|
||
|
|
COUNT(categoria.padre) AS total,
|
||
|
|
categoria.padre as categoripadre
|
||
|
|
FROM
|
||
|
|
(
|
||
|
|
SELECT
|
||
|
|
scormpkg.idcategoria as tema,
|
||
|
|
scormpkg.nombre as nombre_tema
|
||
|
|
FROM
|
||
|
|
scormpkg
|
||
|
|
INNER JOIN categoria ON categoria.id = scormpkg.idcategoria
|
||
|
|
WHERE
|
||
|
|
scormpkg.habilitado = 1
|
||
|
|
AND categoria.habilitado = 1
|
||
|
|
) AS rs1
|
||
|
|
INNER JOIN categoria ON categoria.id = rs1.tema
|
||
|
|
GROUP BY categoria.padre
|
||
|
|
) AS rs2
|
||
|
|
INNER JOIN categoria ON categoria.id = rs2.categoripadre";
|
||
|
|
$resultTotales = mysqli_query($link, $sqlTotales);
|
||
|
|
if ($resultTotales) {
|
||
|
|
mysqli_data_seek($resultTotales, 0);
|
||
|
|
while ($row = mysqli_fetch_assoc($resultTotales)) {
|
||
|
|
$totales[$row['nombre']] = $row['total'];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
$columnasvisibles = array(
|
||
|
|
'Estado del empleado',
|
||
|
|
'Número de empleado',
|
||
|
|
'Nombres(s)',
|
||
|
|
'Apellidos',
|
||
|
|
'Posición',
|
||
|
|
'Sociedad',
|
||
|
|
'División',
|
||
|
|
'Unidad organizativa',
|
||
|
|
'CeCo',
|
||
|
|
'Distrito',
|
||
|
|
'Centro de trabajo',
|
||
|
|
'Supervisor',
|
||
|
|
);
|
||
|
|
foreach ($categorias as $key2 => $cat) {
|
||
|
|
array_push($headers, strip_tags($cat['nombre']));
|
||
|
|
}
|
||
|
|
/*
|
||
|
|
for ($i=0; $i < sizeof($columnasvisibles) ; $i++) {
|
||
|
|
$columnasvisibles[$i] = array('title' => $columnasvisibles[$i]);
|
||
|
|
}
|
||
|
|
$return->columnasvisibles = $columnasvisibles;
|
||
|
|
*/
|
||
|
|
array_push($resultados, $headers);
|
||
|
|
if (!empty($data)) {
|
||
|
|
$anterior = '';
|
||
|
|
$anteriorcat = '';
|
||
|
|
$users = 0;
|
||
|
|
$visitados = 0;
|
||
|
|
foreach ($data as $key1 => $col) {
|
||
|
|
//print_r($col);
|
||
|
|
//echo $col[2]."<br>";
|
||
|
|
if ($col['numempl'] == $anterior) {
|
||
|
|
//echo $col['numempl']." igual - ".$col['nomcat']."- ".$users." <br>";
|
||
|
|
if ($anteriorcat == $col['nomcat']) {
|
||
|
|
$visitas = explode(" de ", $col['visitado']);
|
||
|
|
$visitados = $visitados + $visitas[0];
|
||
|
|
$total = $visitados . " de " . $totales[$col['nomcat']];
|
||
|
|
$datos[($users - 1)][$col['nomcat']] = $total;
|
||
|
|
} else {
|
||
|
|
$visitados = 0;
|
||
|
|
$anteriorcat = $col['nomcat'];
|
||
|
|
$visitas = explode(" de ", $col['visitado']);
|
||
|
|
$visitados = $visitados + $visitas[0];
|
||
|
|
$total = $visitados . " de " . $totales[$col['nomcat']];
|
||
|
|
$datos[($users - 1)][$col['nomcat']] = $total;
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
//echo $col['numempl']." nuevo - ".$col['nomcat']." - ".$users." <br>";
|
||
|
|
$visitados = 0;
|
||
|
|
$datos[$users] = ['estado_empleado' => $col['estado_empleado'], 'numempl' => $col['numempl'], 'nombre' => $col['nombre'], 'apellidos' => $col['apellidos'], 'posicion' => $col['posicion'], 'sociedad' => $col['sociedad'], 'division' => $col['division'], 'unidad_organizativa' => $col['unidad_organizativa'], 'ceco' => $col['ceco'], 'nomdistrito' => $col['nomdistrito'], 'nomcentro' => $col['nomcentro'], 'supervisor' => $col['supervisor']];
|
||
|
|
$visitas = explode(" de ", $col['visitado']);
|
||
|
|
$visitados = $visitas[0];
|
||
|
|
$anteriorcat = $col['nomcat'];
|
||
|
|
foreach ($categorias as $key2 => $cat) {
|
||
|
|
if ($anteriorcat == $cat['nombre']) {
|
||
|
|
$datos[$users][$cat['nombre']] = $visitados . " de " . $totales[$cat['nombre']];
|
||
|
|
} else {
|
||
|
|
$datos[$users][$cat['nombre']] = "0 de " . $totales[$cat['nombre']];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
$users++;
|
||
|
|
}
|
||
|
|
$anterior = $col['numempl'];
|
||
|
|
}
|
||
|
|
//print_r($datos[3]);
|
||
|
|
//echo "<br>";
|
||
|
|
foreach ($datos as $col => $columnas) {
|
||
|
|
$fill = [];
|
||
|
|
foreach ($columnas as $key => $value) {
|
||
|
|
array_push($fill, $value);
|
||
|
|
}
|
||
|
|
$datos[$col] = $fill;
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
$datos = [];
|
||
|
|
}
|
||
|
|
foreach ($datos as $key => $val) {
|
||
|
|
$obj = [
|
||
|
|
$val[0],
|
||
|
|
$val[1],
|
||
|
|
$val[2],
|
||
|
|
$val[3],
|
||
|
|
$val[4],
|
||
|
|
$val[5],
|
||
|
|
$val[6],
|
||
|
|
$val[7],
|
||
|
|
$val[8],
|
||
|
|
$val[9],
|
||
|
|
$val[10],
|
||
|
|
$val[11],
|
||
|
|
$val[12],
|
||
|
|
$val[13],
|
||
|
|
$val[14],
|
||
|
|
$val[15],
|
||
|
|
$val[16],
|
||
|
|
$val[17],
|
||
|
|
$val[18],
|
||
|
|
$val[19],
|
||
|
|
$val[20],
|
||
|
|
$val[21],
|
||
|
|
$val[22],
|
||
|
|
$val[23],
|
||
|
|
$val[24],
|
||
|
|
$val[25],
|
||
|
|
$val[26],
|
||
|
|
|
||
|
|
];
|
||
|
|
array_push($resultados, $obj);
|
||
|
|
}
|
||
|
|
function cleanData(&$str)
|
||
|
|
{
|
||
|
|
$str = mb_convert_encoding($str, 'UTF-16LE', 'UTF-8');
|
||
|
|
$str = preg_replace("/\t/", " ", $str);
|
||
|
|
$str = preg_replace("/\r?\n/", " ", $str);
|
||
|
|
if (strstr($str, '"')) {
|
||
|
|
$str = '"' . str_replace('"', '""', $str) . '"';
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
$nombre_cat = strip_tags($cat['nombre']);
|
||
|
|
|
||
|
|
// filename for download
|
||
|
|
$filename = "reporte - Categorías visitadas __".$nombre_cat."__" . date('Ymd') . ".csv";
|
||
|
|
header("Content-Disposition: attachment; filename=\"$filename\"");
|
||
|
|
header("Content-Type: text/csv");
|
||
|
|
$out = fopen("php://output", 'w');
|
||
|
|
$flag = false;
|
||
|
|
foreach ($resultados as $row) {
|
||
|
|
array_walk($row, __NAMESPACE__ . '\cleanData');
|
||
|
|
fputcsv($out, array_values($row), ',', '"');
|
||
|
|
}
|
||
|
|
fclose($out);
|
||
|
|
exit;
|