fixed products
This commit is contained in:
@@ -0,0 +1,135 @@
|
||||
<?php
|
||||
require_once 'include/headscript.php'; // Include il file con la connessione al database
|
||||
|
||||
// Connessione al database
|
||||
$dbHandler = DBHandlerSelect::getInstance();
|
||||
$pdo = $dbHandler->getConnection();
|
||||
|
||||
try {
|
||||
// Inizia una transazione
|
||||
$pdo->beginTransaction();
|
||||
|
||||
// Seleziona gli ordini con status 'completed' e lezioni disponibili
|
||||
$stmt = $pdo->prepare("
|
||||
SELECT o.id, o.user_id, o.class_type_id, o.available_entries, o.school_id
|
||||
FROM orders o
|
||||
WHERE o.status = 'completed' AND o.available_entries > 0
|
||||
");
|
||||
$stmt->execute();
|
||||
$orders = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
$bookings_created = 0;
|
||||
$orders_propagated = 0;
|
||||
|
||||
foreach ($orders as $order) {
|
||||
$order_id = $order['id'];
|
||||
$user_id = $order['user_id'];
|
||||
$class_type_id = $order['class_type_id'];
|
||||
$available_entries = $order['available_entries'];
|
||||
$school_id = $order['school_id'];
|
||||
|
||||
// Recupera i giorni di chiusura della scuola
|
||||
$offStmt = $pdo->prepare("
|
||||
SELECT start_date, end_date
|
||||
FROM day_off
|
||||
WHERE school_id = ? AND (
|
||||
(start_date >= CURDATE()) OR
|
||||
(end_date >= CURDATE()) OR
|
||||
(start_date <= CURDATE() AND end_date >= CURDATE())
|
||||
)
|
||||
");
|
||||
$offStmt->execute([$school_id]);
|
||||
$off_periods = $offStmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
// Crea un array di date di chiusura
|
||||
$off_dates = [];
|
||||
foreach ($off_periods as $period) {
|
||||
$start_date = new DateTime($period['start_date']);
|
||||
$end_date = new DateTime($period['end_date']);
|
||||
$interval = new DateInterval('P1D');
|
||||
$date_range = new DatePeriod($start_date, $interval, $end_date->modify('+1 day'));
|
||||
foreach ($date_range as $date) {
|
||||
$off_dates[] = $date->format('Y-m-d');
|
||||
}
|
||||
}
|
||||
|
||||
// Trova le prossime sessioni disponibili per questo class_type_id
|
||||
$sessionStmt = $pdo->prepare("
|
||||
SELECT id, session_date
|
||||
FROM class_sessions
|
||||
WHERE class_type_id = ? AND session_date >= CURDATE() AND status = 'scheduled'
|
||||
ORDER BY session_date ASC, start_time ASC
|
||||
LIMIT ?
|
||||
");
|
||||
$sessionStmt->execute([$class_type_id, $available_entries]);
|
||||
$sessions = $sessionStmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
$bookings_for_order = 0;
|
||||
|
||||
foreach ($sessions as $session) {
|
||||
$session_id = $session['id'];
|
||||
$session_date = $session['session_date'];
|
||||
|
||||
// Salta se la data è un giorno di chiusura
|
||||
if (in_array($session_date, $off_dates)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Verifica la capacità massima della sessione
|
||||
$capacityStmt = $pdo->prepare("
|
||||
SELECT max_capacity
|
||||
FROM class_sessions
|
||||
WHERE id = ?
|
||||
");
|
||||
$capacityStmt->execute([$session_id]);
|
||||
$max_capacity = $capacityStmt->fetchColumn();
|
||||
|
||||
$bookingCountStmt = $pdo->prepare("
|
||||
SELECT COUNT(*)
|
||||
FROM session_bookings
|
||||
WHERE session_id = ? AND status IN ('booked', 'attended', 'rescheduled')
|
||||
");
|
||||
$bookingCountStmt->execute([$session_id]);
|
||||
$current_bookings = $bookingCountStmt->fetchColumn();
|
||||
|
||||
if ($max_capacity !== null && $current_bookings >= $max_capacity) {
|
||||
continue; // Salta se la sessione è piena
|
||||
}
|
||||
|
||||
// Inserisci la prenotazione in session_bookings
|
||||
$insertStmt = $pdo->prepare("
|
||||
INSERT INTO session_bookings (
|
||||
session_id, user_id, status, booked_at, created_at, updated_at
|
||||
)
|
||||
VALUES (?, ?, 'booked', NOW(), NOW(), NOW())
|
||||
");
|
||||
$insertStmt->execute([
|
||||
$session_id,
|
||||
$user_id
|
||||
]);
|
||||
$bookings_created++;
|
||||
$bookings_for_order++;
|
||||
}
|
||||
|
||||
// Aggiorna available_entries e lo stato dell'ordine
|
||||
if ($bookings_for_order > 0) {
|
||||
$updateStmt = $pdo->prepare("
|
||||
UPDATE orders
|
||||
SET available_entries = available_entries - ?,
|
||||
status = 'propagated'
|
||||
WHERE id = ?
|
||||
");
|
||||
$updateStmt->execute([$bookings_for_order, $order_id]);
|
||||
$orders_propagated++;
|
||||
}
|
||||
}
|
||||
|
||||
// Conferma la transazione
|
||||
$pdo->commit();
|
||||
|
||||
echo "Propagazione completata con successo: $bookings_created prenotazioni create, $orders_propagated ordini aggiornati.";
|
||||
} catch (PDOException $e) {
|
||||
// In caso di errore, annulla la transazione
|
||||
$pdo->rollBack();
|
||||
echo "Errore durante la propagazione: " . $e->getMessage();
|
||||
}
|
||||
Reference in New Issue
Block a user