$pag,
CURLOPT_RETURNTRANSFER => true,
//CURLOPT_ENCODING => "",
//CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_CUSTOMREQUEST => "POST",
//CURLOPT_POSTFIELDS => json_encode($params),
CURLOPT_HTTPHEADER => [
"token: ".$token,
"username: SGU_APSA_AUD_ASIST",
"Content-Type: application/json",
'Transfer-Encoding: chunked'
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err)
die("cURL Error #:$err");
$salonesData = json_decode($response, true);
print_r($response);
$salonesTotal_rs = $db->querySingle('SELECT count(1) as total FROM salon');
echo $salonesTotal_rs["total"];
exit();
//--------------ACTUALIZA HORARIOS--------------------------
if(!empty($_GET["fecha"])){
$hoy = $_GET["fecha"];
}else{
$hoy = date("Y-m-d");
}
$dia_hoy = date("w", strtotime($hoy));
$pag = "https://portal.ulsa.edu.mx/servicios/AuditoriaAsistencialRest/AuditoriaAsistencialService.svc/auditoriaAsistencial/seleccionar";
function compareByHash($a, $b) {
return strcmp($a['hash'], $b['hash']);
}
$elementos_bd_total = [];
$elementos_sgu_total = [];
$periodo_sgu_old = 0;
$debug = false;
if(isset($_GET["debug"])){
$debug = true;
print_r( $db->querySingle('select now()'));
}
$periodo_sgu_old = 0;
$log_desc = "";
try{
$pdo->beginTransaction();
$periodos_rs = $db->query('SELECT periodo_id, id_periodo_sgu FROM periodo WHERE :hoy BETWEEN periodo_fecha_inicio AND periodo_fecha_fin AND id_periodo_sgu != 0 ORDER BY periodo_id',
[":hoy"=>$hoy]);
foreach ($periodos_rs as $per){
//Verifica si el día de hoy es festivo
$vacacion_rs = $db->querySingle('select es_festivo(:per, :hoy)', [":per"=>$per["periodo_id"], ":hoy"=>$hoy]);
if($vacacion_rs["es_festivo"]){
if($debug){
echo "
Dia festivo en Periodo: ".$per["id_periodo_sgu"]."[".$per["periodo_id"]."]
";
}
continue;
}
$carreras_rs = $db->query('SELECT c.clave_carrera, c.carrera_id FROM carrera c INNER JOIN periodo_carrera pc ON c.carrera_id = pc.carrera_id WHERE pc.periodo_id = :per',
[":per"=>$per["periodo_id"]]);
if($debug)
echo "Periodo: ".$per["id_periodo_sgu"]."[".$per["periodo_id"]."]
";
if ($periodo_sgu_old != $per["id_periodo_sgu"]){
$periodo_sgu_old = $per["id_periodo_sgu"];
$params = [
'idPeriodo'=>$per["id_periodo_sgu"],
'fecha'=>$hoy
];
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $pag,
CURLOPT_RETURNTRANSFER => true,
//CURLOPT_ENCODING => "",
//CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode($params),
CURLOPT_HTTPHEADER => [
"token: ".$token,
"username: SGU_APSA_AUD_ASIST",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err)
die("cURL Error #:$err");
}
$selectedData = json_decode($response, true);
//claves de carreras en el periodo
$arreglo_claves = array_map(function ($item) {
return $item['clave_carrera'];
}, $carreras_rs);
//print_r($selectedData);
$sguHash = array();
if(!empty($selectedData)){
//Recorre SGU y genera hash
foreach( $selectedData as $row ){
if(!$row["EsMateriaPorReposicion"]){
$sguHash[] = array(
"hash"=>( trim($row["HoraInicio"]."|".($row["NombreMateria"])."|".(trim($row["ClaveProfesor"])==""?"000000":trim($row["ClaveProfesor"]))."|".$row["IdEspacio"]) ),
"data"=>$row
);
}else{//reposición
if(in_array($row["ClaveCarrera"] , $arreglo_claves)){
//busca yyyy-mm-dd hh:mm:ss en la cadena
if (preg_match("/\d{4}-\d{2}-\d{2} de \d{2}:\d{2}:\d{2}/", $row["Observaciones"], $matches)) {
$fecha_orig = str_replace(" de", "", $matches[0]);
$fecha_nueva = $row["FechaStr"]." ".$row["HoraInicio"];
if($debug){
echo "
SELECT * FROM fi_reposicion_sgu($fecha_orig, ".$fecha_nueva.", ".$row["ClaveProfesor"].", ".$per["periodo_id"].", ".$row["IdEspacio"].")";
}else{
$db->query('SELECT * FROM fi_reposicion_sgu(:fecha_orig, :fecha_rep, :prof, :per, :salon)',
[":fecha_orig"=>$fecha_orig, ":fecha_rep"=>$fecha_nueva, ":prof"=>$row["ClaveProfesor"], ":per"=>$per["periodo_id"], ":salon"=>$row["IdEspacio"] ]);
$log_desc .="SELECT * FROM fi_reposicion_sgu($fecha_orig, ".$fecha_nueva.", ".$row["ClaveProfesor"].", ".$per["periodo_id"].") ## ";
}
}else{
if($debug)
echo "No se encontró fecha y hora en: ".$row["Observaciones"]."
";
}
}
}
}
unset($selectedData);
}
$horarios_sgu = [];
/*
print_r($carreras_rs);
echo "
";
print_r($arreglo_claves);
echo "
";*/
//$areacomun = array();
foreach($sguHash as $sgu){
if(in_array($sgu["data"]["ClaveCarrera"] , $arreglo_claves) /*&& !in_array($sgu["data"]["ClaveMateria"], $areacomun)*/){
$horarios_sgu[] = $sgu;
}
}
//print_r($horarios_sgu);exit();
unset($sguHash);
$elementos_sgu_total = array_merge($elementos_sgu_total, $horarios_sgu);
//Recorre BD y genera hash
$horarios_rs = $db->query('SELECT * FROM fs_horarios_hash(:dia, :periodo, :fecha)',
[':dia' => $dia_hoy, ':periodo' => $per["periodo_id"], ':fecha'=>$hoy]);
//echo "**** SELECT * FROM fs_horarios_hash($dia_hoy, ".$per["periodo_id"].")
";
//usort($horarios_rs, 'compareByHash');
$elementos_bd_total = array_merge($elementos_bd_total, $horarios_rs);
}//foreach periodo
//print_r($elementos_sgu_total);
//exit();
if($debug){
echo "Resumen
";
echo "SGU [".count($elementos_sgu_total)."]
";
echo "BD [".count($elementos_bd_total)."]
";
}
// Extraer los "hash" de $lista y $lista2 en arreglos separados
$hashes_sgu = array_column($elementos_sgu_total, 'hash');
$hashes_bd = array_column($elementos_bd_total, 'hash');
//------------------
// Encontrar los "hash" que están en $sgu pero no están en $bd
$hashes_no_en_sgu = array_diff($hashes_bd, $hashes_sgu);
if($debug) echo "hashes_no_en_sgu ".count($hashes_no_en_sgu)."
";
if(count($hashes_no_en_sgu)>0){
// Ahora puedes obtener los elementos completos que cumplen la condición original
$elementos_no_en_sgu = array_filter($elementos_bd_total, function ($item) use ($hashes_no_en_sgu) {
return in_array($item['hash'], $hashes_no_en_sgu);
});
if($debug){
print_r($elementos_no_en_sgu);
echo "Sobran ".count($elementos_no_en_sgu)." en BD
";
}
//Update fecha_fin
$log_desc = "";
foreach($elementos_no_en_sgu as $row){
if($debug){
echo "
SELECT * FROM fu_horario_deshabilita(".$row["horario_id"].")";
}else{
$db->query('SELECT * FROM fu_horario_deshabilita(:horario)', [":horario"=>$row["horario_id"]]);
$log_desc .="SELECT * FROM fu_horario_deshabilita(".$row["horario_id"].") ## ";
}
}
if(!$debug && !empty($log_desc)){
$log = new LogCambios(__DIR__."/log/");
$log->appendLog($log_desc);
}
}
// Encontrar los "hash" que están en $sgu pero no están en $bd
$hashes_no_en_bd = array_diff($hashes_sgu, $hashes_bd);
//echo "hashes_no_en_bd ".count($hashes_no_en_bd)."
";
if(count($hashes_no_en_bd)>0){
// Ahora puedes obtener los elementos completos que cumplen la condición original
$elementos_no_en_bd = array_filter($elementos_sgu_total, function ($item) use ($hashes_no_en_bd) {
return in_array($item['hash'], $hashes_no_en_bd);
});
if($debug){
echo "
Faltan ".count($elementos_no_en_bd)." en BD
";
print_r($elementos_no_en_bd); echo "
";
}
//Inserts
foreach($elementos_no_en_bd as $row){
if($debug){
echo "
SELECT * FROM fi_horario($dia_hoy, '".$row["data"]["HoraInicio"]."','".$row["data"]["HoraFin"]."','"
.$row["data"]["ClaveDependencia"]."','"
.$row["data"]["ClaveCarrera"]."','"
.$row["data"]["NombreMateria"]."','"
.$row["data"]["ClaveMateria"]."','"
.$row["data"]["ClaveProfesor"]."','"
.$row["data"]["NombreProfesor"]."','"
.$row["data"]["CorreoElectronico"]."','"
.$row["data"]["Grupo"]."',"
.$row["data"]["IdEspacio"].");";
if($row["data"]["EsMateriaPorAsignacion"]){ echo " ***Asignacion directa***";}
}else{
$horario_new_rs = $db->querySingle('SELECT * FROM fi_horario(:hoy, :ini, :fin, :dep, :carr, :nom_mat, :cve_mat, :cve_prof, :nom_prof, :correo, :gpo, :espacio)',
[":hoy"=>$dia_hoy,
":ini"=>$row["data"]["HoraInicio"],
":fin"=>$row["data"]["HoraFin"],
":dep"=>$row["data"]["ClaveDependencia"],
":carr"=>$row["data"]["ClaveCarrera"],
":nom_mat"=>$row["data"]["NombreMateria"],
":cve_mat"=>$row["data"]["ClaveMateria"],
":cve_prof"=>$row["data"]["ClaveProfesor"]==""?"000000":$row["data"]["ClaveProfesor"],
":nom_prof"=>$row["data"]["NombreProfesor"],
":correo"=>$row["data"]["CorreoElectronico"],
":gpo"=>$row["data"]["Grupo"],
":espacio"=>$row["data"]["IdEspacio"]]
);
echo $horario_new_rs["fi_horario"]."
";
if( !empty($horario_new_rs["fi_horario"]) ){
if($row["data"]["EsMateriaPorAsignacion"]){
$matasig_rs = $db->querySingle('SELECT * FROM fi_materia_asignacion(:hor,:mat,:carr, :prof)',
[":hor"=>$horario_new_rs["fi_horario"],
":mat"=>$row["data"]["NombreMateria"],
":carr"=>$row["data"]["Carrera"],
":prof"=>$row["data"]["NombreProfesor"]
]
);
}
$log_desc .="SELECT * FROM fi_horario($dia_hoy, '".$row["data"]["HoraInicio"]."','".$row["data"]["HoraFin"]."','"
.$row["data"]["ClaveDependencia"]."','"
.$row["data"]["ClaveCarrera"]."','"
.$row["data"]["NombreMateria"]."','"
.$row["data"]["ClaveMateria"]."','"
.$row["data"]["ClaveProfesor"]."','"
.$row["data"]["NombreProfesor"]."','"
.$row["data"]["CorreoElectronico"]."','"
.$row["data"]["Grupo"]."',"
.$row["data"]["IdEspacio"]."); [ID=".$horario_new_rs["fi_horario"]."] ##";
}
}
}
if(!$debug && !empty($log_desc)){
$log = new LogCambios(__DIR__."/log/");
$log->appendLog($log_desc);
}
}
$stmt = null; // cierra conexion
if($debug) {
echo "
";
usort($elementos_sgu_total, 'compareByHash');
usort($elementos_bd_total, 'compareByHash');
echo "";
echo "";
echo "SGU [".count($elementos_sgu_total)."]";
foreach($elementos_sgu_total as $sgu){
echo $sgu["hash"]." ";
}
echo " | ";
echo "";
echo "BD [".count($elementos_bd_total)."]";
foreach($elementos_bd_total as $sgu){
echo $sgu["hash"]." [".$sgu["horario_id"]."] ";
}
echo " | ";
echo "
";
}else{
$pdo->commit();
echo "Commit";
}
} catch(PDOException $e) {
echo "Error";
"ERROR BD! ".$e->getMessage();
$pdo->rollBack();
if(!$debug){
$log = new LogCambios(__DIR__."/log/");
$log->appendLog("ERROR BD! ".$e->getMessage());
}
print_r($e->getMessage());
} catch(Exception $e2){
echo "Error";
print_r($e2->getMessage());
}
?>