adding reservations lookahead
This commit is contained in:
@@ -36,6 +36,24 @@ function check_file($path){//check file for temperature which are to high
|
||||
}
|
||||
}
|
||||
|
||||
function find_print_time($file) {
|
||||
$handle = fopen($file, "r");
|
||||
$targetPhrase = "; estimated printing time (normal mode) = ";
|
||||
$time = null;
|
||||
|
||||
while (($line = fgets($handle)) !== false) {
|
||||
if (strpos($line, $targetPhrase) !== false) {
|
||||
// Extract the time after the target phrase
|
||||
$time = trim(str_replace($targetPhrase, "", $line));
|
||||
break; // Stop once the desired line is found
|
||||
}
|
||||
}
|
||||
|
||||
fclose($handle);
|
||||
|
||||
return $time;
|
||||
}
|
||||
|
||||
function is_time_between($startTime, $endTime, $checkTime) {
|
||||
// Convert times to timestamps
|
||||
$startTimestamp = strtotime($startTime);
|
||||
@@ -52,6 +70,22 @@ function is_time_between($startTime, $endTime, $checkTime) {
|
||||
}
|
||||
}
|
||||
|
||||
function time_to_seconds($print_time) {
|
||||
$seconds = 0;
|
||||
|
||||
if (preg_match('/(\d+)h/', $print_time, $matches)) {
|
||||
$seconds += $matches[1] * 3600; // hours to seconds
|
||||
}
|
||||
if (preg_match('/(\d+)m/', $print_time, $matches)) {
|
||||
$seconds += $matches[1] * 60; // minutes to seconds
|
||||
}
|
||||
if (preg_match('/(\d+)s/', $print_time, $matches)) {
|
||||
$seconds += $matches[1]; // seconds
|
||||
}
|
||||
|
||||
return $seconds;
|
||||
}
|
||||
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
@@ -167,7 +201,7 @@ function is_time_between($startTime, $endTime, $checkTime) {
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
else //print on printers, no queue
|
||||
{
|
||||
$sql="select printer_url, free, system_status,apikey,printer_url from printer where id=$printer_id";
|
||||
//echo $sql;
|
||||
@@ -214,6 +248,52 @@ function is_time_between($startTime, $endTime, $checkTime) {
|
||||
if(move_uploaded_file($_FILES['file_upload']['tmp_name'], $path)) {
|
||||
echo("<center><div style='width:50%' class='alert alert-success' role='alert'>Erfolg! Die Datei ". basename( $_FILES['file_upload']['name']). " wurde hochgeladen.</div></center>");
|
||||
echo("<center><div style='width:50%' class='alert alert-success' role='alert'>Datei wird an den 3D-Drucker gesendet...</div></center>");
|
||||
$print_time=find_print_time($path);
|
||||
//check if the printers are reserved at the time when this print finishes
|
||||
date_default_timezone_set('Europe/Zurich');
|
||||
$reservation_conflict = false;
|
||||
$today = date("Y-m-d");
|
||||
$time_now = date("H:i");
|
||||
|
||||
preg_match('/(\d+)h/', $print_time, $hours_match);
|
||||
preg_match('/(\d+)m/', $print_time, $minutes_match);
|
||||
$hours = isset($hours_match[1]) ? (int)$hours_match[1] : 0;
|
||||
$minutes = isset($minutes_match[1]) ? (int)$minutes_match[1] : 0;
|
||||
|
||||
// Convert $now into a DateTime object and add hours and minutes
|
||||
$time = DateTime::createFromFormat('H:i', $time_now);
|
||||
$time->modify("+{$hours} hour");
|
||||
$time->modify("+{$minutes} minutes");
|
||||
|
||||
// Format $time back into a string
|
||||
$time_now = $time->format('H:i');
|
||||
|
||||
// Query to get reservations for the current day
|
||||
$sql = "SELECT time_from, time_to, for_class FROM reservations WHERE day='$today';";
|
||||
$stmt = $link->prepare($sql);
|
||||
$stmt->execute();
|
||||
$result = $stmt->get_result();
|
||||
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
// Check for overlap with the entire print time period
|
||||
if (is_time_between($row["time_from"], $row["time_to"], $time_now)) {
|
||||
$reservation_conflict = true;
|
||||
$for_class[] = $row["for_class"];
|
||||
}
|
||||
}
|
||||
|
||||
// Ensure $for_class is set if no conflicts were found
|
||||
if (!isset($for_class)) {
|
||||
$for_class[] = 0;
|
||||
}
|
||||
|
||||
// Display conflict message if necessary
|
||||
if ($reservation_conflict && !in_array($class, $for_class) && $class != 0) {
|
||||
$block = true;
|
||||
} else {
|
||||
$block = false;
|
||||
}
|
||||
if($block==false){
|
||||
if(check_file($path) or isset($_POST["ignore_unsafe"])){
|
||||
exec('curl -k -H "X-Api-Key: '.$apikey.'" -F "select=true" -F "print=true" -F "file=@'.$path.'" "'.$printer_url.'/api/files/local" > /var/www/html/user_files/'.$username.'/json.json');
|
||||
//file is on printer and ready to be printed
|
||||
@@ -242,6 +322,9 @@ function is_time_between($startTime, $endTime, $checkTime) {
|
||||
$warning=true;
|
||||
echo("<center><div style='width:50%' class='alert alert-danger' role='alert'>Achtung, deine Bett oder Extruder Temperatur ist sehr hoch eingestellt. Dies wird zur zerstörung des Druckes und somit zu Müll führen. Bitte setze diese Temperaturen tiefer in den Einstellungen deines Slicers.</div></center>");
|
||||
}
|
||||
}else{
|
||||
echo "<center><div style='width:50%' class='alert alert-danger' role='alert'>Dein Druck konnte nicht gestartet werden, da er nicht fertig wäre, befor eine andere Klasse die Drucker reserviert hat.</div></center>";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -271,6 +354,8 @@ function is_time_between($startTime, $endTime, $checkTime) {
|
||||
mysqli_stmt_close($stmt);
|
||||
|
||||
echo("<center><div style='width:50%' class='alert alert-success' role='alert'>Datei wird an den 3D-Drucker gesendet...</div></center>");
|
||||
$printing_time=find_print_time($path);
|
||||
|
||||
if(check_file($path) or isset($_POST["ignore_unsafe"])){
|
||||
exec('curl -k -H "X-Api-Key: '.$apikey.'" -F "select=true" -F "print=true" -F "file=@'.$path.'" "'.$printer_url.'/api/files/local" > /var/www/html/user_files/'.$username.'/json.json');
|
||||
//file is on printer and ready to be printed
|
||||
@@ -279,9 +364,6 @@ function is_time_between($startTime, $endTime, $checkTime) {
|
||||
sys0_log("user ".$_SESSION["username"]." uploaded ".basename($path)." to printer ".$_POST["printer"]."",$_SESSION["username"],"PRINT::UPLOAD::PRINTER");//notes,username,type
|
||||
$fg=file_get_contents("/var/www/html/user_files/$username/json.json");
|
||||
$json=json_decode($fg,true);
|
||||
//echo('curl -k -H "X-Api-Key: '.$apikey.'" -F "select=true" -F "print=true" -F "file=@'.$path.'" "'.$printer_url.'/api/files/local" > /var/www/html/system0/html/user_files/'.$username.'/json.json');
|
||||
//echo("<br><br><br>");
|
||||
//var_dump($json);
|
||||
if($json['effectivePrint']==false or $json["effectiveSelect"]==false)
|
||||
{
|
||||
echo("<center><div style='width:50%' class='alert alert-danger' role='alert'>Ein Fehler ist aufgetreten und der Vorgang konnte nicht gestartet werden. Warte einen Moment und versuche es dann erneut.</div></center>");
|
||||
|
||||
Reference in New Issue
Block a user