print.php PHP
<?php
session_start();
require 'koneksi.php';

// Cek koneksi database
if (!$kon) {
    die("Koneksi database gagal: " . mysqli_connect_error());
}

$resto = isset($_SESSION['resto']) ? $_SESSION['resto'] : null;

// === PROSES PRINT ===
if (isset($_POST['submit'])) {
    $cashier = $_SESSION['user'];
    $tanggal = date('Y-m-d');
    $realtotal = $_POST['realtotal'];
    $total = $_POST['total'];
    $bayar = $_POST['bayar'];
    $kembali = $_POST['kembali'];
    $nama = $_POST['nama'];
    $meja = $_POST['meja'];
    $wallet = $_POST['wallet'];

    // Promo
    $promo = $_POST['promo'];
    $jmlpotongan = trim($_POST['jmlpotongan']);

    // Kupon
    $kupon = $_POST['kupon'];
    $jmlpotongankupon = $_POST['jmlpotongankupon'];

    $id_trx = $_POST['id_trx'];
    $_SESSION['sudahdiprint'] = 'sudah';
} else {
    unset($_SESSION['keranjang_belanja']);
    header('location: /cart');
    die;
}

// Cek keranjang
if (empty($_SESSION['keranjang_belanja'])) {
    header('location: /cart');
    die;
}

// Cek id_trx
$check_trx_query = "SELECT * FROM invoice WHERE id_trx = '$id_trx'";
$l_trx = mysqli_query($kon, $check_trx_query);
if (mysqli_num_rows($l_trx) > 0) {
    unset($_SESSION['keranjang_belanja']);
}

// Ambil pengaturan resto
$stmt = $kon->prepare("SELECT * FROM pengaturan WHERE resto = ? ORDER BY id DESC LIMIT 1");
$stmt->bind_param("s", $resto);
$stmt->execute();
$result = $stmt->get_result();
$data = $result->fetch_assoc();

if (!$data) {
    die("Data pengaturan resto tidak ditemukan!");
}

// Generate kupon acak
$random = "";
for ($i = 0; $i < 10; $i++) {
    $randomChar = chr(rand(49, 122));
    if (is_numeric($randomChar) || preg_match("/[a-z]/", $randomChar)) {
        $random .= $randomChar;
    } else {
        $i--;
    }
}

// Simpan kupon
$insert_kupon_query = "INSERT INTO kupon (kode, resto, potongan, tipe, status) VALUES ('$random', '$_SESSION[resto]', '$data[potongan]', '$data[tipe]', 'aktif')";
mysqli_query($kon, $insert_kupon_query);

// Proses setiap item di keranjang
$total_provit = 0;

foreach ($_SESSION["keranjang_belanja"] as $item) {
    $sub_total = $item["jumlah"] * $item['harga'];

    // Insert array session_keranjang_belanja ke db transaksi
    $insert_trx_query = "INSERT INTO transaksi 
    (tanggal, id_trx, resto, nama, kategori, varian, harga, qty, catatan, sub_total) 
    VALUES 
    ('$tanggal', '$id_trx', '$_SESSION[resto]', '$item[nama_produk]', '$item[kategori]', '$item[varian]', '$item[harga]', '$item[jumlah]', '$item[catatan]', '$sub_total')";
    
    mysqli_query($kon, $insert_trx_query);

    // Ambil kode_produk dari nama produk
    $get_produk_query = "SELECT kode_produk FROM produk WHERE nama = '" . mysqli_real_escape_string($kon, $item['nama_produk']) . "' LIMIT 1";
    $get_produk = mysqli_query($kon, $get_produk_query);

    // Ambil provit dari nama produk
    $get_prov_query = "SELECT provit FROM produk WHERE nama = '" . mysqli_real_escape_string($kon, $item['nama_produk']) . "' LIMIT 1";
    $get_prov = mysqli_query($kon, $get_prov_query);
    $provit = mysqli_fetch_assoc($get_prov);

    if ($provit) {
        // Hasilkan provit dalam invoice ini
        $t_prov = $provit['provit'] * $item["jumlah"];
        $total_provit += $t_prov;
    }

    if ($get_produk && mysqli_num_rows($get_produk) > 0) {
        $data_produk = mysqli_fetch_assoc($get_produk);
        $kode_produk = $data_produk['kode_produk'];

        // Ambil semua ingredient dari produk_ingredient
        $get_ingredients_query = "SELECT id_bahan_baku, jumlah FROM produk_ingredient WHERE kode_produk = '$kode_produk'";
        $get_ingredients = mysqli_query($kon, $get_ingredients_query);

        while ($ingredient = mysqli_fetch_assoc($get_ingredients)) {
            $id_bahan_baku = $ingredient['id_bahan_baku'];
            $jumlah_per_porsi = $ingredient['jumlah'];
            $total_pengurangan = $jumlah_per_porsi * $item['jumlah'];

            // Ambil nama_bahan berdasarkan id_bahan_baku
            $get_bahan_query = "SELECT nama_bahan FROM bahan_baku WHERE id = '$id_bahan_baku' LIMIT 1";
            $get_bahan = mysqli_query($kon, $get_bahan_query);

            if ($get_bahan && mysqli_num_rows($get_bahan) > 0) {
                $data_bahan = mysqli_fetch_assoc($get_bahan);
                $nama_bahan = $data_bahan['nama_bahan'];

                // Update stok bahan baku
                $update_stok_query = "UPDATE bahan_baku SET jumlah_stok = jumlah_stok - $total_pengurangan WHERE id = $id_bahan_baku";
                mysqli_query($kon, $update_stok_query);

                // Insert ke tabel bahan_terpakai
                $insert_bahan_query = "INSERT INTO bahan_terpakai (id_bahan_baku, nama_bahan, kode_produk, total_pengurangan, jumlah_terpakai, tanggal, transaksi_id) VALUES ('$id_bahan_baku', '$nama_bahan', '$kode_produk', '$total_pengurangan', '$total_pengurangan', '$tanggal', '$id_trx')";
                mysqli_query($kon, $insert_bahan_query);
            }
        }
    }

    // Update kupon yang sudah terpakai menjadi kadaluarsa
    if (!empty($kupon)) {
        $update_kupon_query = "UPDATE kupon SET status ='nonaktif' WHERE kode='$kupon'";
        mysqli_query($kon, $update_kupon_query);
    }
}

// Insert invoice dengan pengecekan error yang ketat
$insert_invoice_query = "INSERT INTO invoice VALUES (NULL,'$tanggal','$id_trx','$cashier','$nama','$meja','$realtotal','$jmlpotongan','$jmlpotongankupon','$total','$wallet','$_SESSION[resto]','tidak','Proses','$total_provit')";

$masukin_inv = mysqli_query($kon, $insert_invoice_query);

if (!$masukin_inv) {
    die("Error insert invoice: " . mysqli_error($kon));
}
?>


<!DOCTYPE html>
<html lang="id">
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>Print Receipt</title>
    <style>
        /* Atur ukuran body sesuai kertas thermal 58mm */
        @media print {
            body {
                width: 58mm;
                margin: 0;
                padding: 0;
                font-family: monospace, Courier, monospace;
                font-size: 14px; /* diperbesar dari 12px */
                color: #000;
            }
            .receipt-container {
                width: 58mm;
                padding: 1px 1px; /* padding sedikit lebih lega */
                
            }
        }

        /* Style umum agar rapi */
        body {
            font-family: monospace, Courier, monospace;
            font-size: 14px; /* diperbesar */
            width: 58mm;
            margin: 10px auto;
            color: #000;
        }
        .receipt-container {
            width: 100%;
            padding: 8px 10px;
            box-sizing: border-box;
            /* border dihapus */
        }
        .logo img {
            display: block;
            margin: 0 auto 8px auto;
            max-width: 80px;
        }
        .restaurant-name {
            text-align: center;
            font-weight: bold;
            font-size: 16px; /* diperbesar */
            margin-bottom: 5px;
        }
        .transaction-id {
            
            font-size: 12px; /* diperbesar */
            margin-bottom: 12px;
        }
        table.info-table, table.info-table td {
            width: 100%;
            border-collapse: collapse;
            font-size: 13px; /* diperbesar */
        }
        table.info-table td {
            padding: 3px 0;
            vertical-align: top;
        }
        table.info-table tr td:nth-child(1) {
            width: 30%;
        }
        table.info-table tr td:nth-child(2) {
            width: 5%;
        }
        table.info-table tr td:nth-child(3) {
            width: 65%;
            text-align: left;
        }
        .divider {
            border-top: 1px dashed #000;
            margin: 10px 0;
        }
        .item-row {
            font-size: 13px; /* diperbesar */
            margin-bottom: 7px;
        }
        .item-name {
            font-weight: bold;
        }
        .item-details {
            font-size: 12px; /* diperbesar */
            margin-left: 6px;
        }
        .total-section {
            font-weight: bold;
            font-size: 15px; /* diperbesar */
        }
        .total-section td {
            padding: 4px 0;
        }
        .total-section tr td:nth-child(3) {
            text-align: right;
        }
        .footer-info {
            font-size: 11px; /* diperbesar */
            margin-top: 15px;
        }
        .barcode img {
            display: block;
            margin: 6px auto;
            max-width: 100%;
            height: auto;
        }
        .wifi-info {
            margin-top: 7px;
            font-size: 11px; /* diperbesar */
        }
    </style>
</head>
<body>
    <div class="receipt-container">
        <!-- Header -->
        <div class="logo">
            <?php if (!empty($data['urlgambar'])): ?>
                <img src="<?= htmlspecialchars($data['urlgambar']) ?>" alt="Logo" />
            <?php endif; ?>
        </div>

        <div class="restaurant-name"><?= htmlspecialchars($data['resto']) ?></div>
        <div class="transaction-id">No.Trx: <?= htmlspecialchars($id_trx) ?></div>

        <!-- Info transaksi -->
        <table class="info-table">
            <tr><td>Tanggal</td><td>:</td><td><?= date('d/m/Y H:i:s') ?></td></tr>
            <tr><td>No Meja</td><td>:</td><td><?= !empty($meja) ? htmlspecialchars($meja) : '-' ?></td></tr>
            <tr><td>Nama</td><td>:</td><td><?= htmlspecialchars($nama) ?></td></tr>
            <tr><td>Cashier</td><td>:</td><td><?= htmlspecialchars($_SESSION['user']) ?></td></tr>
        </table>

        <div class="divider"></div>

        <!-- Daftar item -->
        <?php foreach ($_SESSION["keranjang_belanja"] as $item):
            $sub_total = $item["jumlah"] * $item['harga'];
        ?>
            <div class="item-row">
                <div class="item-name"><?= htmlspecialchars($item['nama_produk']) ?></div>
                <div class="item-details">
                    <?= $item["jumlah"] ?> x Rp <?= number_format($item['harga'], 0, ',', '.') ?> = Rp <?= number_format($sub_total, 0, ',', '.') ?>
                    <?php if (!empty($item['catatan'])): ?>
                        <br><small>Catatan: <?= htmlspecialchars($item['catatan']) ?></small>
                    <?php endif; ?>
                </div>
            </div>
        <?php endforeach; ?>

        <div class="divider"></div>

        <!-- Total -->
        <table class="info-table total-section">
            <tr><td>Subtotal</td><td>:</td><td>Rp <?= number_format($realtotal, 0, ',', '.') ?></td></tr>
            <?php if (!empty($promo) && $jmlpotongan > 0): ?>
                <tr><td>Promo (<?= htmlspecialchars($promo) ?>)</td><td>:</td><td>- Rp <?= number_format($jmlpotongan, 0, ',', '.') ?></td></tr>
            <?php endif; ?>
            <?php if (!empty($kupon) && $jmlpotongankupon > 0): ?>
                <tr><td>Kupon (<?= htmlspecialchars($kupon) ?>)</td><td>:</td><td>- Rp <?= number_format($jmlpotongankupon, 0, ',', '.') ?></td></tr>
            <?php endif; ?>
            <tr style="border-top:1px solid #000;">
                <td><strong>TOTAL</strong></td><td>:</td><td>Rp <?= number_format($total, 0, ',', '.') ?></td>
            </tr>
            <?php if (!empty($wallet)): ?>
                <tr><td>Bayar (<?= htmlspecialchars($wallet) ?>)</td><td>:</td><td>Rp <?= number_format($bayar, 0, ',', '.') ?></td></tr>
                <tr><td>Kembali</td><td>:</td><td>Rp <?= number_format($kembali, 0, ',', '.') ?></td></tr>
            <?php endif; ?>
        </table>

        <div class="divider"></div>

        <!-- Footer -->
        <div class="footer-info">
            <?= nl2br(htmlspecialchars($data['alamat'])) ?>
            <?php if (!empty($data['wifi'])): ?>
                <div class="wifi-info">
                    <strong>WiFi Password:</strong><br />
                    <?= htmlspecialchars($data['wifi']) ?>
                </div>
            <?php endif; ?>

            <?php if ($data['koded'] == 'yes' && empty($kupon)): ?>
                <div style="margin-top:10px; font-size:12px; text-align:center;">
                    <strong>Kupon Diskon Berikutnya</strong>
                    <div class="barcode">
                        <img src="php-barcode-master/barcode.php?text=<?= htmlspecialchars($random) ?>&print=true&size=45" alt="Barcode Kupon" />
                    </div>
                    Kode: <?= htmlspecialchars($random) ?>
                </div>
            <?php endif; ?>

            <div style="margin-top: 12px; font-size: 12px;">
                Terima kasih atas kunjungan Anda!<br />
                Selamat menikmati!
            </div>
        </div>
    </div>

    <script>
        // Otomatis print saat halaman load
        window.onload = function() {
            window.print();
        };
    </script>
</body>
</html>