$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 ""; echo "
"; echo "
SGU [".count($elementos_sgu_total)."]
"; foreach($elementos_sgu_total as $sgu){ echo $sgu["hash"]."
"; } echo "
"; echo "
BD [".count($elementos_bd_total)."]
"; foreach($elementos_bd_total as $sgu){ echo $sgu["hash"]." [".$sgu["horario_id"]."]
"; } 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()); } ?>