ayula-storeee/views/barang/transfer_handler.php

216 lines
7.0 KiB
PHP

<?php
// transfer_handler.php
// File to handle individual and bulk product transfers to cashier
// Koneksi ke database
$servername = "localhost";
$username = "root"; // Sesuaikan dengan username database kamu
$password = ""; // Sesuaikan dengan password database kamu
$database = "ayula_store"; // Sesuaikan dengan nama database kamu
$conn = new mysqli($servername, $username, $password, $database);
// Periksa koneksi
if ($conn->connect_error) {
die(json_encode([
'success' => false,
'message' => "Koneksi gagal: " . $conn->connect_error
]));
}
// Fungsi untuk memvalidasi data yang diterima
function validateData($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
// Handle single product transfer
if (isset($_POST['action']) && $_POST['action'] == 'transfer_product') {
// Ambil data dari POST
$id_barang = validateData($_POST['id_barang']);
$quantity = intval($_POST['quantity']);
// Validasi input
if (empty($id_barang) || $quantity <= 0) {
echo json_encode([
'success' => false,
'message' => 'Data tidak valid.'
]);
exit;
}
// Check if stock is sufficient
$sql = "SELECT stok FROM barang WHERE id_barang = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("s", $id_barang);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows == 0) {
echo json_encode([
'success' => false,
'message' => 'Barang tidak ditemukan.'
]);
$stmt->close();
exit;
}
$row = $result->fetch_assoc();
$current_stock = $row['stok'];
if ($quantity > $current_stock) {
echo json_encode([
'success' => false,
'message' => 'Jumlah melebihi stok tersedia.'
]);
$stmt->close();
exit;
}
// Begin transaction
$conn->begin_transaction();
try {
// Update stock in barang table
$new_stock = $current_stock - $quantity;
$update_sql = "UPDATE barang SET stok = ? WHERE id_barang = ?";
$update_stmt = $conn->prepare($update_sql);
$update_stmt->bind_param("is", $new_stock, $id_barang);
$update_stmt->execute();
// TODO: Insert data to cashier table or perform other actions as needed
// This will depend on your specific requirements for transferring to cashier
// Commit the transaction
$conn->commit();
echo json_encode([
'success' => true,
'message' => 'Berhasil memindahkan ' . $quantity . ' item ke kasir.'
]);
} catch (Exception $e) {
// Rollback transaction on error
$conn->rollback();
echo json_encode([
'success' => false,
'message' => 'Terjadi kesalahan: ' . $e->getMessage()
]);
}
$stmt->close();
if (isset($update_stmt)) {
$update_stmt->close();
}
}
// Handle bulk product transfers
if (isset($_POST['action']) && $_POST['action'] == 'bulk_transfer_products') {
// Get product IDs and quantities
$product_ids = isset($_POST['product_ids']) ? $_POST['product_ids'] : [];
$quantities = isset($_POST['quantities']) ? $_POST['quantities'] : [];
// Validate input
if (empty($product_ids) || empty($quantities) || count($product_ids) != count($quantities)) {
echo json_encode([
'success' => false,
'message' => 'Data tidak valid.'
]);
exit;
}
// Begin transaction
$conn->begin_transaction();
try {
$success_count = 0;
$error_messages = [];
// Process each product
for ($i = 0; $i < count($product_ids); $i++) {
$id_barang = validateData($product_ids[$i]);
$quantity = intval($quantities[$i]);
if (empty($id_barang) || $quantity <= 0) {
$error_messages[] = "Data tidak valid untuk produk #$i";
continue;
}
// Check if stock is sufficient
$sql = "SELECT stok FROM barang WHERE id_barang = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("s", $id_barang);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows == 0) {
$error_messages[] = "Barang dengan ID $id_barang tidak ditemukan";
$stmt->close();
continue;
}
$row = $result->fetch_assoc();
$current_stock = $row['stok'];
if ($quantity > $current_stock) {
$error_messages[] = "Jumlah melebihi stok tersedia untuk produk ID $id_barang";
$stmt->close();
continue;
}
// Update stock in barang table
$new_stock = $current_stock - $quantity;
$update_sql = "UPDATE barang SET stok = ? WHERE id_barang = ?";
$update_stmt = $conn->prepare($update_sql);
$update_stmt->bind_param("is", $new_stock, $id_barang);
$update_stmt->execute();
$update_stmt->close();
$stmt->close();
// TODO: Insert data to cashier table or perform other actions as needed
// This will depend on your specific requirements for transferring to cashier
$success_count++;
}
if ($success_count == 0) {
// If no products were successfully processed, rollback and return error
$conn->rollback();
echo json_encode([
'success' => false,
'message' => 'Tidak ada produk yang berhasil dipindahkan. ' . implode('; ', $error_messages)
]);
} else {
// Commit the transaction if at least one product was successfully processed
$conn->commit();
if (count($error_messages) > 0) {
echo json_encode([
'success' => true,
'message' => "Berhasil memindahkan $success_count produk ke kasir. Beberapa produk gagal: " . implode('; ', $error_messages)
]);
} else {
echo json_encode([
'success' => true,
'message' => "Berhasil memindahkan $success_count produk ke kasir."
]);
}
}
} catch (Exception $e) {
// Rollback transaction on error
$conn->rollback();
echo json_encode([
'success' => false,
'message' => 'Terjadi kesalahan: ' . $e->getMessage()
]);
}
}
// Close connection
$conn->close();
?>