🤩 File Manager - Mr.X
PHP:
8.3.33
Server:
Apache
OS:
Linux 5.14.0-611.49.1.el9_7.x86_64
User:
websparkit
Navigate
Upload:
Upload
New File
New Folder
Editing:invoice.php
<?php require_once __DIR__ . '/../config/config.php'; require_once __DIR__ . '/../includes/functions.php'; $booking_id = isset($_GET['booking_id']) ? intval($_GET['booking_id']) : 0; $booking = getBooking($booking_id); if (!$booking) { die('Booking not found'); } $customer = getCustomer($booking['customer_id']); $payments = getPayments($booking_id); $inv_stmt = $conn->prepare("SELECT * FROM invoices WHERE booking_id = ?"); $inv_stmt->bind_param("i", $booking_id); $inv_stmt->execute(); $invoice = $inv_stmt->get_result()->fetch_assoc(); $is_print = isset($_GET['print']); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"> <title>Invoice - <?= $booking['booking_id'] ?></title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css"> <style> :root { --navy: #0A2342; --orange: #FF7A00; --gold: #D4A843; } body { background: #f5f6fa; font-family: 'Inter','Segoe UI',sans-serif; padding: 40px 0; } .invoice-wrapper { max-width: 900px; margin: 0 auto; background: white; border-radius: 20px; box-shadow: 0 20px 60px rgba(0,0,0,0.08); overflow: hidden; } .invoice-header { background: linear-gradient(135deg, var(--navy), #12305e); padding: 40px; color: white; } .invoice-header h1 { font-weight: 800; margin: 0; font-size: 2rem; } .invoice-header h1 span { color: var(--orange); } .invoice-header .invoice-no { font-size: 1.2rem; opacity: 0.8; } .invoice-body { padding: 40px; } .invoice-table { width: 100%; border-collapse: collapse; } .invoice-table th { background: var(--navy); color: white; padding: 12px 15px; font-size: 0.85rem; text-transform: uppercase; letter-spacing: 1px; } .invoice-table td { padding: 12px 15px; border-bottom: 1px solid #eee; } .invoice-table tr:last-child td { border-bottom: none; } .total-row td { font-weight: 700; font-size: 1.1rem; } .total-row.grand td { font-size: 1.3rem; color: var(--orange); border-top: 2px solid var(--orange); } .status-badge { display: inline-block; padding: 5px 15px; border-radius: 50px; font-size: 0.8rem; font-weight: 600; } .status-badge.paid { background: #d4edda; color: #155724; } .status-badge.pending { background: #fff3cd; color: #856404; } .status-badge.cancelled { background: #f8d7da; color: #721c24; } .footer-line { border-top: 2px dashed #ddd; margin-top: 30px; padding-top: 20px; text-align: center; color: #999; font-size: 0.85rem; } .btn-print { position: fixed; top: 20px; right: 20px; z-index: 1000; } @media print { body { background: white; padding: 0; } .invoice-wrapper { box-shadow: none; border-radius: 0; } .btn-print, .no-print { display: none !important; } } </style> </head> <body> <?php if (!$is_print): ?> <div class="text-center mb-3 no-print"> <button onclick="window.print()" class="btn btn-navy"><i class="bi bi-printer me-2"></i>Print / Save PDF</button> <a href="invoice.php?booking_id=<?= $booking_id ?>&print=1" target="_blank" class="btn btn-outline-premium"><i class="bi bi-eye me-2"></i>Print View</a> <a href="<?= SITE_URL ?>customer/booking-details.php?id=<?= $booking_id ?>" class="btn btn-outline-secondary"><i class="bi bi-arrow-left me-2"></i>Back</a> </div> <?php endif; ?> <div class="invoice-wrapper"> <div class="invoice-header d-flex justify-content-between align-items-center"> <div> <h1><i class="bi bi-stars text-warning me-2"></i><?= SITE_NAME ?></h1> <p class="mb-0 opacity-75"><?= getSetting('site_description') ?></p> </div> <div class="text-end"> <h2 class="fw-bold mb-0" style="color:var(--orange);">INVOICE</h2> <p class="invoice-no mb-0">#<?= $invoice ? $invoice['invoice_no'] : $booking['booking_id'] ?></p> </div> </div> <div class="invoice-body"> <div class="row g-4 mb-4"> <div class="col-6"> <h6 class="fw-bold" style="color:var(--navy);">BILL TO</h6> <p class="mb-1 fw-bold"><?= htmlspecialchars($customer['name']) ?></p> <p class="mb-1"><?= htmlspecialchars($customer['email']) ?></p> <p class="mb-0"><?= htmlspecialchars($customer['phone']) ?></p> <?php if ($customer['address']): ?><p class="mb-0"><?= htmlspecialchars($customer['address']) ?></p><?php endif; ?> </div> <div class="col-6 text-end"> <h6 class="fw-bold" style="color:var(--navy);">INVOICE DETAILS</h6> <p class="mb-1"><strong>Invoice Date:</strong> <?= date('d M Y', strtotime($invoice['invoice_date'] ?? $booking['created_at'])) ?></p> <p class="mb-1"><strong>Booking ID:</strong> <?= $booking['booking_id'] ?></p> <p class="mb-1"><strong>Event Date:</strong> <?= date('d M Y', strtotime($booking['event_date'])) ?></p> <p class="mb-0"><strong>Status:</strong> <span class="status-badge <?= $booking['payment_status'] == 'full_paid' ? 'paid' : ($booking['payment_status'] == 'pending' ? 'pending' : 'paid') ?>"><?= ucfirst($booking['payment_status']) ?></span></p> </div> </div> <table class="invoice-table"> <thead><tr><th>#</th><th>Description</th><th>Category</th><th>Date</th><th class="text-end">Amount (<?= getSetting('currency')?:'LKR' ?>)</th></tr></thead> <tbody> <?php $pkg_price = isset($booking['package_price']) && $booking['package_price'] > 0 ? floatval($booking['package_price']) : floatval($booking['total_price']) - floatval($booking['transport_cost'] ?? 0); $trans_cost = isset($booking['transport_cost']) ? floatval($booking['transport_cost']) : 0.0; $distance = isset($booking['distance']) ? floatval($booking['distance']) : 0.0; $row_idx = 1; ?> <tr> <td><?= $row_idx++ ?></td> <td><strong><?= htmlspecialchars($booking['package_name']) ?> Package</strong><br><small><?= htmlspecialchars($booking['package_description'] ?? '') ?></small></td> <td><?= htmlspecialchars($booking['category_name']) ?></td> <td><?= date('d M Y', strtotime($booking['event_date'])) ?></td> <td class="text-end"><?= number_format($pkg_price, 2) ?></td> </tr> <?php if ($trans_cost > 0): ?> <tr> <td><?= $row_idx++ ?></td> <td><strong>Transport Cost</strong><br><small>Driving distance: <?= number_format($distance, 2) ?> km from our office</small></td> <td>Transport</td> <td><?= date('d M Y', strtotime($booking['event_date'])) ?></td> <td class="text-end"><?= number_format($trans_cost, 2) ?></td> </tr> <?php endif; ?> <?php foreach ($payments as $p): ?> <tr> <td><?= $row_idx++ ?></td> <td><strong>Payment - <?= ucfirst($p['payment_type']) ?></strong><br><small><?= $p['payment_method'] ?: 'Online' ?> | <?= $p['transaction_id'] ?: '-' ?></small></td> <td>-</td> <td><?= date('d M Y', strtotime($p['created_at'])) ?></td> <td class="text-end">- <?= number_format($p['amount'], 2) ?></td> </tr> <?php endforeach; ?> </tbody> </table> <div class="row mt-4"> <div class="col-6"> <h6 class="fw-bold" style="color:var(--navy);">Payment Information</h6> <p class="mb-1"><strong>Bank:</strong> <?= getSetting('bank_name') ?></p> <p class="mb-1"><strong>Account Name:</strong> <?= getSetting('bank_account_name') ?></p> <p class="mb-1"><strong>Account No:</strong> <?= getSetting('bank_account_no') ?></p> <p class="mb-0"><strong>Branch:</strong> <?= getSetting('bank_branch') ?></p> </div> <div class="col-6"> <table class="invoice-table" style="max-width:300px;margin-left:auto;"> <tr class="total-row"><td>Subtotal</td><td class="text-end"><?= number_format($booking['total_price'], 2) ?></td></tr> <tr class="total-row"><td>Advance Paid</td><td class="text-end text-success">- <?= number_format($booking['advance_amount'], 2) ?></td></tr> <tr class="total-row grand"><td><strong>Balance Due</strong></td><td class="text-end"><strong><?= number_format($booking['balance_amount'], 2) ?></strong></td></tr> </table> </div> </div> <div class="footer-line"> <p class="mb-1"><?= SITE_NAME ?> | <?= getSetting('address') ?> | <?= getSetting('contact_phone') ?> | <?= getSetting('contact_email') ?></p> <p class="mb-0"><?= getSetting('footer_text') ?></p> <p class="mb-0 mt-2"><small>This is a computer-generated invoice.</small></p> </div> </div> </div> </body> </html>
Save Changes
Cancel
Create New File
Create New Folder