diff --git a/public/calculate_expiry.php b/public/calculate_expiry.php index 118680cf..fb49b96f 100644 --- a/public/calculate_expiry.php +++ b/public/calculate_expiry.php @@ -2,11 +2,9 @@ ini_set('display_errors', '1'); ini_set('display_startup_errors', '1'); error_reporting(E_ALL); - include('Connections/bkngstm.php'); $conn = new mysqli($servername, $username, $password, $dbname); - if ($conn->connect_error) { die(json_encode(['error' => 'Connessione al database fallita'])); } @@ -38,22 +36,17 @@ if (isset($_GET['idorder'])) { $expiry_row = $expiry_lessons_result->fetch_assoc(); $expirylessons = $expiry_row['expirylessons']; - // Calcola la data della expirylessons-esima lezione - $expiry_date_query = "SELECT dateschedule FROM serviceschedule WHERE idservice = ? AND dateschedule >= ? ORDER BY dateschedule LIMIT ?, 1"; - $stmt_expiry_date = $conn->prepare($expiry_date_query); - $offset = $expirylessons - 1; - $stmt_expiry_date->bind_param("isi", $service_id, $first_lesson_date, $offset); - $stmt_expiry_date->execute(); - $expiry_date_result = $stmt_expiry_date->get_result(); - - if ($expiry_date_result->num_rows > 0) { - $date_row = $expiry_date_result->fetch_assoc(); - $expireon = $date_row['dateschedule']; + // expirylessons = numero di SETTIMANE di validità (es. 12 ticket -> 15 settimane) + // La scadenza si calcola SEMPRE dalla prima lezione, a prescindere + // dalle date presenti in calendario. + try { + $base = new DateTime($first_lesson_date); + $base->modify('+' . (int)$expirylessons . ' weeks'); + $expireon = $base->format('Y-m-d'); echo json_encode(['expiry_date' => $expireon]); - } else { - echo json_encode(['error' => 'Non abbastanza lezioni disponibili per calcolare la scadenza']); + } catch (Exception $ex) { + echo json_encode(['error' => 'Data prima lezione non valida']); } - $stmt_expiry_date->close(); } else { echo json_encode(['error' => 'Nessun record in expiryparameter per quantityclass: ' . $quantity_class]); } diff --git a/public/propagatesingleorder.php b/public/propagatesingleorder.php index 3f86e7b8..ca2df425 100644 --- a/public/propagatesingleorder.php +++ b/public/propagatesingleorder.php @@ -89,11 +89,20 @@ $stmt_schedule->bind_param("is", $service_id, $first_lesson_date); $stmt_schedule->execute(); $service_schedule_result = $stmt_schedule->get_result(); -if ($service_schedule_result->num_rows > 0) { +$is_openflexy = false; +$stmt_svc_name = $conn->prepare("SELECT servicename FROM service WHERE idservice = ?"); +$stmt_svc_name->bind_param("i", $service_id); +$stmt_svc_name->execute(); +if ($svc_row = $stmt_svc_name->get_result()->fetch_assoc()) { + $is_openflexy = (strcasecmp(trim($svc_row['servicename']), 'OpenFlexy') === 0); +} +$stmt_svc_name->close(); + +if ($is_openflexy || $service_schedule_result->num_rows > 0) { echo "Record per l'ordine ID: $order_id\n"; $inserted_count = 0; - while ($schedule_row = $service_schedule_result->fetch_assoc()) { + while (!$is_openflexy && $schedule_row = $service_schedule_result->fetch_assoc()) { if ($inserted_count >= $quantity_class) { break; } @@ -255,7 +264,12 @@ if ($service_schedule_result->num_rows > 0) { $mail->Subject = "YogiBook - Prenotazioni effettuate per il tuo ordine $ordern"; $mail->Body = str_replace(['{messageedit}', '{buttonedit}'], [$messageedit, $buttonedit], $htmlContent); // Se il template ha placeholders, altrimenti usa direttamente $messageedit come Body $mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; - $mail->send(); + try { + $mail->send(); + } catch (Exception $e) { + // la mail non deve bloccare la finalizzazione dell'ordine + error_log('OpenFlexy/propaga - invio mail fallito: ' . $e->getMessage()); + } header("Location: orderbooklist.php"); exit();