153 lines
5.3 KiB
PHP
153 lines
5.3 KiB
PHP
<?php
|
|
// Enable error logging
|
|
error_reporting(E_ALL);
|
|
ini_set('display_errors', 0);
|
|
ini_set('log_errors', 1);
|
|
ini_set('error_log', '../logs/php_errors.log');
|
|
|
|
// Start output buffering
|
|
ob_start();
|
|
|
|
// Function to log errors
|
|
function logError($message, $context = []) {
|
|
$logMessage = date('[Y-m-d H:i:s] ') . $message;
|
|
if (!empty($context)) {
|
|
$logMessage .= ' Context: ' . json_encode($context, JSON_UNESCAPED_UNICODE);
|
|
}
|
|
error_log($logMessage);
|
|
}
|
|
|
|
try {
|
|
session_start();
|
|
|
|
// Log session data
|
|
logError('Session data', [
|
|
'session' => $_SESSION,
|
|
'status_login' => isset($_SESSION['status_login']) ? $_SESSION['status_login'] : 'not set',
|
|
'id_pembeli' => isset($_SESSION['id_pembeli']) ? $_SESSION['id_pembeli'] : 'not set'
|
|
]);
|
|
|
|
include '../config.php';
|
|
|
|
// Set proper JSON header
|
|
header('Content-Type: application/json');
|
|
|
|
// Function to send JSON response and exit
|
|
function sendJsonResponse($status, $message, $debug = null) {
|
|
ob_clean(); // Clear any output buffer
|
|
$response = ['status' => $status, 'message' => $message];
|
|
if ($debug !== null) {
|
|
$response['debug'] = $debug;
|
|
}
|
|
echo json_encode($response, JSON_UNESCAPED_UNICODE);
|
|
exit;
|
|
}
|
|
|
|
// Log the incoming request
|
|
logError('Processing cancel order request', [
|
|
'POST' => $_POST,
|
|
'SESSION' => $_SESSION
|
|
]);
|
|
|
|
// Pastikan user sudah login
|
|
if (!isset($_SESSION['status_login']) || !$_SESSION['status_login']) {
|
|
echo json_encode(['status' => 'error', 'message' => 'Anda harus login terlebih dahulu']);
|
|
exit;
|
|
}
|
|
|
|
// Pastikan ada ID pesanan
|
|
if (!isset($_POST['id_order'])) {
|
|
echo json_encode(['status' => 'error', 'message' => 'ID Pesanan tidak valid']);
|
|
exit;
|
|
}
|
|
|
|
$id_order = intval($_POST['id_order']);
|
|
$id_pembeli = $_SESSION['id_pembeli'];
|
|
|
|
// Log the query parameters
|
|
logError('Query parameters', [
|
|
'id_order' => $id_order,
|
|
'id_pembeli' => $id_pembeli
|
|
]);
|
|
|
|
// Ambil data pesanan
|
|
$query = mysqli_query($conn, "SELECT * FROM orders WHERE id_order = '$id_order' AND id_pembeli = '$id_pembeli'");
|
|
$order = mysqli_fetch_assoc($query);
|
|
|
|
if (!$order) {
|
|
echo json_encode(['status' => 'error', 'message' => 'Pesanan tidak ditemukan']);
|
|
exit;
|
|
}
|
|
|
|
// Log order data
|
|
logError('Data pesanan yang ditemukan', [
|
|
'order' => $order,
|
|
'status_order' => $order['status_order'],
|
|
'metode_pembayaran' => $order['metode_pembayaran']
|
|
]);
|
|
|
|
// Cek status pesanan dan metode pembayaran
|
|
$can_cancel = false;
|
|
$message = '';
|
|
|
|
if (($order['status_order'] == 'Belum Dibayar' && in_array($order['metode_pembayaran'], ['COD', 'QRIS'])) ||
|
|
($order['status_order'] == 'Pembayaran Sukses' && $order['metode_pembayaran'] == 'SALDO')) {
|
|
$can_cancel = true;
|
|
$message = 'Pesanan berhasil dibatalkan';
|
|
}
|
|
|
|
if (!$can_cancel) {
|
|
echo json_encode(['status' => 'error', 'message' => 'Pesanan tidak dapat dibatalkan. Status: ' . $order['status_order'] . ', Metode: ' . $order['metode_pembayaran']]);
|
|
exit;
|
|
}
|
|
|
|
// Mulai transaksi
|
|
mysqli_begin_transaction($conn);
|
|
|
|
try {
|
|
// Update status pesanan
|
|
mysqli_query($conn, "UPDATE orders SET status_order = 'Dibatalkan' WHERE id_order = '$id_order'");
|
|
|
|
// Ambil detail pesanan untuk mengembalikan stok
|
|
$query_details = mysqli_query($conn, "SELECT id_produk, jumlah FROM order_details WHERE id_order = '$id_order'");
|
|
while ($detail = mysqli_fetch_assoc($query_details)) {
|
|
// Kembalikan stok produk
|
|
mysqli_query($conn, "UPDATE produk SET stok = stok + {$detail['jumlah']} WHERE id_produk = {$detail['id_produk']}");
|
|
}
|
|
|
|
// Jika pembayaran menggunakan saldo, kembalikan saldo
|
|
if ($order['metode_pembayaran'] == 'SALDO') {
|
|
$total_pembayaran = $order['total_harga'] + $order['ongkos_kirim'];
|
|
mysqli_query($conn, "UPDATE pembeli SET saldo = saldo + $total_pembayaran WHERE id_pembeli = '$id_pembeli'");
|
|
|
|
// Update session saldo
|
|
if (isset($_SESSION['user_global_pembeli']) && is_object($_SESSION['user_global_pembeli'])) {
|
|
$_SESSION['user_global_pembeli']->saldo += $total_pembayaran;
|
|
}
|
|
$message .= ' dan saldo telah dikembalikan';
|
|
}
|
|
|
|
mysqli_commit($conn);
|
|
echo json_encode(['status' => 'success', 'message' => $message]);
|
|
} catch (Exception $e) {
|
|
mysqli_rollback($conn);
|
|
echo json_encode(['status' => 'error', 'message' => 'Terjadi kesalahan saat membatalkan pesanan']);
|
|
}
|
|
} catch (Exception $e) {
|
|
logError('Unexpected error', [
|
|
'error' => $e->getMessage(),
|
|
'trace' => $e->getTraceAsString(),
|
|
'file' => $e->getFile(),
|
|
'line' => $e->getLine()
|
|
]);
|
|
echo json_encode(['status' => 'error', 'message' => 'Terjadi kesalahan yang tidak terduga', 'details' => $e->getMessage()]);
|
|
} catch (Error $e) {
|
|
logError('PHP Error', [
|
|
'error' => $e->getMessage(),
|
|
'trace' => $e->getTraceAsString(),
|
|
'file' => $e->getFile(),
|
|
'line' => $e->getLine()
|
|
]);
|
|
echo json_encode(['status' => 'error', 'message' => 'Terjadi kesalahan sistem', 'details' => $e->getMessage()]);
|
|
}
|
|
?>
|