/home/awneajlw/public_html/codestechvista.com/update_order_status.php
<?php
/**
* Update Order Status with SMS Notifications
* API endpoint to update order status and send notifications
*/
session_start();
require_once 'config/database.php';
require_once 'includes/auth.php';
require_once 'includes/sms_service.php';
// Check authentication
if (!isLoggedIn()) {
http_response_code(401);
echo json_encode(['error' => 'Unauthorized']);
exit();
}
// Only accept POST requests
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
echo json_encode(['error' => 'Method not allowed']);
exit();
}
// Get JSON input
$input = json_decode(file_get_contents('php://input'), true);
if (!$input) {
http_response_code(400);
echo json_encode(['error' => 'Invalid JSON input']);
exit();
}
// Validate required fields
$order_id = intval($input['order_id'] ?? 0);
$new_status = trim($input['status'] ?? '');
if ($order_id <= 0) {
http_response_code(400);
echo json_encode(['error' => 'Invalid order ID']);
exit();
}
if (empty($new_status)) {
http_response_code(400);
echo json_encode(['error' => 'Status is required']);
exit();
}
// Valid status values
$valid_statuses = ['Pending', 'In Progress', 'Completed', 'Cancelled', 'On Hold'];
if (!in_array($new_status, $valid_statuses)) {
http_response_code(400);
echo json_encode(['error' => 'Invalid status value']);
exit();
}
try {
$database = new Database();
$db = $database->getConnection();
// Get current order details
$query = "SELECT id, patient_name, whatsapp_number, total_amount, status FROM orders WHERE id = ?";
$stmt = $db->prepare($query);
$stmt->execute([$order_id]);
$order = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$order) {
http_response_code(404);
echo json_encode(['error' => 'Order not found']);
exit();
}
$old_status = $order['status'];
// Don't update if status is the same
if ($old_status === $new_status) {
echo json_encode([
'success' => true,
'message' => 'Status is already set to ' . $new_status,
'order' => $order
]);
exit();
}
// Update order status
$update_query = "UPDATE orders SET status = ?, updated_at = NOW() WHERE id = ?";
$update_stmt = $db->prepare($update_query);
$result = $update_stmt->execute([$new_status, $order_id]);
if (!$result) {
throw new Exception('Failed to update order status');
}
// Send SMS notifications
$smsService = new SMSService();
$formatted_amount = number_format($order['total_amount'], 0);
try {
if ($new_status === 'Completed') {
// Send completion notification
$smsService->sendOrderCompletedNotification(
$order_id,
$order['patient_name'],
$formatted_amount,
$order['whatsapp_number']
);
} else {
// Send status update notification
$smsService->sendOrderStatusUpdateNotification(
$order_id,
$order['patient_name'],
$old_status,
$new_status,
$order['whatsapp_number']
);
}
$sms_sent = true;
error_log("SMS notification sent for order status update: Order #$order_id from $old_status to $new_status");
} catch (Exception $sms_error) {
$sms_sent = false;
error_log("SMS notification failed for order #$order_id: " . $sms_error->getMessage());
}
// Return success response
echo json_encode([
'success' => true,
'message' => "Order status updated from '$old_status' to '$new_status'",
'order' => [
'id' => $order_id,
'patient_name' => $order['patient_name'],
'old_status' => $old_status,
'new_status' => $new_status,
'sms_sent' => $sms_sent
]
]);
} catch (Exception $e) {
error_log("Order status update error: " . $e->getMessage());
http_response_code(500);
echo json_encode(['error' => 'Failed to update order status: ' . $e->getMessage()]);
}
?>