Edit index.php via Editor

This commit is contained in:
Flatlogic Bot 2026-03-18 02:24:26 +00:00
parent 4c0505676f
commit 0c1d656a8a

774
index.php
View File

@ -49,27 +49,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
file_put_contents('post_debug.log', date('Y-m-d H:i:s') . " - POST: " . json_encode($_POST) . "\n", FILE_APPEND);
}
require_once 'db/config.php';
# Timezone setup
try {
$stmt_tz = db()->prepare("SELECT `value` FROM settings WHERE `key` = 'time_zone'");
$stmt_tz->execute();
$tz_setting = $stmt_tz->fetchColumn();
$timezone = $tz_setting ?: 'Asia/Muscat'; // Default to Muscat
date_default_timezone_set($timezone);
# Sync DB
$now = new DateTime();
$mins = $now->getOffset() / 60;
$sgn = ($mins < 0 ? -1 : 1);
$mins = abs($mins);
$hrs = floor($mins / 60);
$mins -= $hrs * 60;
$offset = sprintf('%+d:%02d', $hrs * $sgn, $mins);
db()->exec("SET time_zone = '$offset'");
} catch (Exception $e) {
date_default_timezone_set('Asia/Muscat');
}
require_once 'includes/DatabaseInstaller.php';
// Auto-install database if not installed
@ -290,24 +269,22 @@ function renderPagination($currentPage, $totalPages) {
<option value='index.php?" . http_build_query(array_merge($_GET, ['limit' => 5, 'p' => 1])) . "' " . ($limit == 5 ? 'selected' : '') . ">5</option>
<option value='index.php?" . http_build_query(array_merge($_GET, ['limit' => 20, 'p' => 1])) . "' " . ($limit == 20 ? 'selected' : '') . ">20</option>
<option value='index.php?" . http_build_query(array_merge($_GET, ['limit' => 40, 'p' => 1])) . "' " . ($limit == 40 ? 'selected' : '') . ">40</option>
<option value='index.php?" . http_build_query(array_merge($_GET, ['limit' => 50, 'p' => 1])) . "' " . ($limit == 50 ? 'selected' : '') . ">50</option>
<option value='index.php?" . http_build_query(array_merge($_GET, ['limit' => 100, 'p' => 1])) . "' " . ($limit == 100 ? 'selected' : '') . ">100</option>
<option value='index.php?" . http_build_query(array_merge($_GET, ['limit' => 200, 'p' => 1])) . "' " . ($limit == 200 ? 'selected' : '') . ">200</option>
<option value='index.php?" . http_build_query(array_merge($_GET, ['limit' => 500, 'p' => 1])) . "' " . ($limit == 500 ? 'selected' : '') . ">500</option>
</select>
</div>
<script>
(function() {
document.addEventListener('DOMContentLoaded', function() {
let scriptTag = document.currentScript;
if(scriptTag) {
let container = scriptTag.parentElement;
let grid = container.previousElementSibling;
if (grid && grid.classList.contains('table-responsive')) {
let dropdown = container.querySelector('.d-flex');
if (dropdown) grid.parentNode.insertBefore(dropdown, grid);
grid.parentNode.insertBefore(container.querySelector('.d-flex'), grid);
}
}
})();
});
</script>
";
@ -3467,64 +3444,7 @@ switch ($page) {
$data['backup_settings'] = $stmt->fetchAll(PDO::FETCH_KEY_PAIR);
break;
case 'accounting':
// Pagination for Journal Entries
$page = isset($_GET['p']) ? max(1, (int)$_GET['p']) : 1;
$limit = isset($_GET['limit']) ? (int)$_GET['limit'] : 20;
$offset = ($page - 1) * $limit;
$total_entries = db()->query("SELECT COUNT(*) FROM acc_journal_entries")->fetchColumn();
$data['total_pages'] = ceil($total_entries / $limit);
$data['current_page'] = $page;
$data['journal_entries'] = db()->query("SELECT je.*,
(SELECT SUM(debit) FROM acc_ledger WHERE journal_entry_id = je.id) as total_debit
FROM acc_journal_entries je
ORDER BY je.entry_date DESC, je.id DESC LIMIT $limit OFFSET $offset")->fetchAll();
$data['accounts'] = db()->query("SELECT * FROM acc_accounts ORDER BY code ASC")->fetchAll();
if (isset($_GET['action']) && $_GET['action'] === 'get_entry_details') {
header('Content-Type: application/json');
$id = (int)$_GET['id'];
$stmt = db()->prepare("SELECT l.*, a.name_en, a.code FROM acc_ledger l JOIN acc_accounts a ON l.account_id = a.id WHERE l.journal_entry_id = ?");
$stmt->execute([$id]);
echo json_encode($stmt->fetchAll());
exit;
}
if (isset($_GET['view']) && $_GET['view'] === 'trial_balance') {
$data['trial_balance'] = db()->query("SELECT a.code, a.name_en, SUM(l.debit) as total_debit, SUM(l.credit) as total_credit
FROM acc_accounts a
LEFT JOIN acc_ledger l ON a.id = l.account_id
GROUP BY a.id
HAVING total_debit > 0 OR total_credit > 0
ORDER BY a.code ASC")->fetchAll();
}
if (isset($_GET['view']) && $_GET['view'] === 'profit_loss') {
$data['revenue_accounts'] = db()->query("SELECT code, name_en, name_ar FROM acc_accounts WHERE type = 'revenue' AND parent_id IS NOT NULL ORDER BY code ASC")->fetchAll();
$data['expense_accounts'] = db()->query("SELECT code, name_en, name_ar FROM acc_accounts WHERE type = 'expense' AND parent_id IS NOT NULL ORDER BY code ASC")->fetchAll();
}
if (isset($_GET['view']) && $_GET['view'] === 'balance_sheet') {
$data['asset_accounts'] = db()->query("SELECT code, name_en, name_ar FROM acc_accounts WHERE type = 'asset' AND parent_id IS NOT NULL ORDER BY code ASC")->fetchAll();
$data['liability_accounts'] = db()->query("SELECT code, name_en, name_ar FROM acc_accounts WHERE type = 'liability' AND parent_id IS NOT NULL ORDER BY code ASC")->fetchAll();
$data['equity_accounts'] = db()->query("SELECT code, name_en, name_ar FROM acc_accounts WHERE type = 'equity' AND parent_id IS NOT NULL ORDER BY code ASC")->fetchAll();
}
if (isset($_GET['view']) && $_GET['view'] === 'vat_report') {
$start = $_GET['start_date'] ?? date('Y-m-01');
$end = $_GET['end_date'] ?? date('Y-m-d');
$data['vat_report'] = getVatReport($start, $end);
$data['start_date'] = $start;
$data['end_date'] = $end;
}
if (isset($_GET['view']) && $_GET['view'] === 'coa') {
$data['coa'] = db()->query("SELECT a.*, p.name_en as parent_name
FROM acc_accounts a
LEFT JOIN acc_accounts p ON a.parent_id = p.id
ORDER BY a.code ASC")->fetchAll();
}
require 'pages/accounting_logic.php';
break;
case 'expense_report':
$start_date = $_GET['start_date'] ?? date('Y-m-01');
@ -3887,7 +3807,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<div class="sidebar">
<div class="sidebar-header">
<div class="text-primary fw-bold">Accounting</div>
<div class="text-primary fw-bold">Meezan Accounting System</div>
<div class="text-muted small" style="font-size: 0.7rem;">System v1.2.5</div>
</div>
<nav class="mt-4">
@ -5052,124 +4972,23 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<form method="POST" enctype="multipart/form-data">
<input type="hidden" name="id" value="<?= $item['id'] ?>">
<div class="modal-body">
<div class="row g-3">
<div class="col-md-6">
<label class="form-label">Name (EN)</label>
<div class="input-group">
<input type="text" name="name_en" id="editItemNameEn<?= $item['id'] ?>" class="form-control" value="<?= htmlspecialchars((string)($item['name_en'] ?? '')) ?>" required>
<button class="btn btn-outline-secondary btn-translate" type="button" data-source="editItemNameAr<?= $item['id'] ?>" data-target="editItemNameEn<?= $item['id'] ?>" data-to="en">
<i class="bi bi-translate"></i> EN
</button>
</div>
</div>
<div class="col-md-6">
<label class="form-label">Name (AR)</label>
<div class="input-group">
<input type="text" name="name_ar" id="editItemNameAr<?= $item['id'] ?>" class="form-control" value="<?= htmlspecialchars((string)($item['name_ar'] ?? '')) ?>" required>
<button class="btn btn-outline-secondary btn-translate" type="button" data-source="editItemNameEn<?= $item['id'] ?>" data-target="editItemNameAr<?= $item['id'] ?>" data-to="ar">
<i class="bi bi-translate"></i> AR
</button>
</div>
</div>
...
<div class="col-md-6">
<label class="form-label">SKU</label>
<input type="text" name="sku" class="form-control" value="<?= htmlspecialchars((string)($item['sku'] ?? '')) ?>">
</div>
</div>
<div class="col-md-6">
<label class="form-label">Name (AR)</label>
<div class="input-group">
<input type="text" name="name_ar" id="editItemNameAr<?= $item['id'] ?>" class="form-control" value="<?= htmlspecialchars($item['name_ar']) ?>" required>
<button class="btn btn-outline-secondary btn-translate" type="button" data-source="editItemNameEn<?= $item['id'] ?>" data-target="editItemNameAr<?= $item['id'] ?>" data-to="ar">
<i class="bi bi-translate"></i> AR
</button>
</div>
</div>
<div class="col-md-4">
<label class="form-label" data-en="Category" data-ar="الفئة">Category</label>
<select name="category_id" class="form-select">
<option value="">---</option>
<?php foreach ($data['categories'] ?? [] as $c): ?>
<option value="<?= $c['id'] ?>" <?= $c['id'] == $item['category_id'] ? 'selected' : '' ?>><?= htmlspecialchars($c['name_en']) ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="col-md-4">
<label class="form-label">Unit</label>
<select name="unit_id" class="form-select">
<option value="">---</option>
<?php foreach ($data['units'] ?? [] as $u): ?>
<option value="<?= $u['id'] ?>" <?= $u['id'] == $item['unit_id'] ? 'selected' : '' ?>><?= htmlspecialchars($u['short_name_en']) ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="col-md-4">
<label class="form-label" data-en="Supplier" data-ar="المورد">Supplier</label>
<select name="supplier_id" class="form-select">
<option value="">---</option>
<?php foreach ($data['suppliers'] ?? [] as $s): ?>
<option value="<?= $s['id'] ?>" <?= $s['id'] == $item['supplier_id'] ? 'selected' : '' ?>><?= htmlspecialchars($s['name']) ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="col-md-3">
<label class="form-label">Sale Price</label>
<input type="number" step="0.001" name="sale_price" class="form-control" value="<?= (float)$item['sale_price'] ?>">
</div>
<div class="col-md-3">
<label class="form-label">Purchase Price</label>
<input type="number" step="0.001" name="purchase_price" class="form-control" value="<?= (float)$item['purchase_price'] ?>">
</div>
<div class="col-md-3">
<label class="form-label">Stock Qty</label>
<input type="number" step="0.001" name="stock_quantity" class="form-control" value="<?= (float)$item['stock_quantity'] ?>">
</div>
<div class="col-md-3">
<label class="form-label">Min Level</label>
<input type="number" step="0.001" name="min_stock_level" class="form-control" value="<?= (float)$item['min_stock_level'] ?>">
</div>
<div class="col-md-6">
<label class="form-label">SKU</label>
<input type="text" name="sku" class="form-control" value="<?= htmlspecialchars($item['sku']) ?>">
</div>
<div class="col-md-6">
<label class="form-label">VAT Rate (%)</label>
<input type="number" step="0.01" name="vat_rate" class="form-control" value="<?= number_format((float)$item['vat_rate'], 2, '.', '') ?>">
</div>
<div class="col-md-12">
<label class="form-label">Item Picture</label>
<input type="file" name="image" class="form-control" accept="image/*">
</div>
<div class="col-12">
<hr>
<h6 data-en="Promotion Details" data-ar="تفاصيل العرض">Promotion Details</h6>
</div>
<div class="col-md-4">
<div class="form-check form-switch mt-4">
<input class="form-check-input isPromotionToggleEdit" type="checkbox" name="is_promotion" value="1" <?= $item['is_promotion'] ? 'checked' : '' ?> id="isPromotionToggleEdit<?= $item['id'] ?>" data-id="<?= $item['id'] ?>">
<label class="form-check-label" for="isPromotionToggleEdit<?= $item['id'] ?>" data-en="On Promotion?" data-ar="في العرض؟">On Promotion?</label>
</div>
</div>
<div class="col-md-8">
<div class="row g-3 promotionFieldsContainerEdit" id="promotionFieldsContainerEdit<?= $item['id'] ?>" style="display: <?= $item['is_promotion'] ? 'flex' : 'none' ?>;">
<div class="col-md-4">
<label class="form-label">Start Date</label>
<input type="date" name="promotion_start" class="form-control" value="<?= $item['promotion_start'] ?>">
</div>
<div class="col-md-4">
<label class="form-label">End Date</label>
<input type="date" name="promotion_end" class="form-control" value="<?= $item['promotion_end'] ?>">
</div>
<div class="col-md-4">
<label class="form-label">Percent (%)</label>
<input type="number" step="0.01" name="promotion_percent" class="form-control" value="<?= (float)$item['promotion_percent'] ?>">
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<div class="form-grid-3">
<div class="col-md-4"><label class="form-label">Name (EN)</label><div class="input-group"><input type="text" name="name_en" id="editItemNameEn<?= $item['id'] ?>" class="form-control" value="<?= htmlspecialchars((string)($item['name_en'] ?? '')) ?>" required><button class="btn btn-outline-secondary btn-translate" type="button" data-source="editItemNameAr<?= $item['id'] ?>" data-target="editItemNameEn<?= $item['id'] ?>" data-to="en"><i class="bi bi-translate"></i> EN</button></div></div>
<div class="col-md-4"><label class="form-label">Name (AR)</label><div class="input-group"><input type="text" name="name_ar" id="editItemNameAr<?= $item['id'] ?>" class="form-control" value="<?= htmlspecialchars((string)($item['name_ar'] ?? '')) ?>" required><button class="btn btn-outline-secondary btn-translate" type="button" data-source="editItemNameEn<?= $item['id'] ?>" data-target="editItemNameAr<?= $item['id'] ?>" data-to="ar"><i class="bi bi-translate"></i> AR</button></div></div>
<div class="col-md-4"><label class="form-label">SKU</label><input type="text" name="sku" class="form-control" value="<?= htmlspecialchars((string)($item['sku'] ?? '')) ?>"></div>
<div class="col-md-4"><label class="form-label" data-en="Category" data-ar="الفئة">Category</label><select name="category_id" class="form-select"><option value="">---</option><?php foreach ($data['categories'] ?? [] as $c): ?><option value="<?= $c['id'] ?>" <?= $c['id'] == $item['category_id'] ? 'selected' : '' ?>><?= htmlspecialchars($c['name_en']) ?></option><?php endforeach; ?></select></div>
<div class="col-md-4"><label class="form-label">Unit</label><select name="unit_id" class="form-select"><option value="">---</option><?php foreach ($data['units'] ?? [] as $u): ?><option value="<?= $u['id'] ?>" <?= $u['id'] == $item['unit_id'] ? 'selected' : '' ?>><?= htmlspecialchars($u['short_name_en']) ?></option><?php endforeach; ?></select></div>
<div class="col-md-4"><label class="form-label" data-en="Supplier" data-ar="المورد">Supplier</label><select name="supplier_id" class="form-select"><option value="">---</option><?php foreach ($data['suppliers'] ?? [] as $s): ?><option value="<?= $s['id'] ?>" <?= $s['id'] == $item['supplier_id'] ? 'selected' : '' ?>><?= htmlspecialchars($s['name']) ?></option><?php endforeach; ?></select></div>
<div class="col-md-4"><label class="form-label">Sale Price</label><input type="number" step="0.001" name="sale_price" class="form-control" value="<?= (float)$item['sale_price'] ?>"></div>
<div class="col-md-4"><label class="form-label">Purchase Price</label><input type="number" step="0.001" name="purchase_price" class="form-control" value="<?= (float)$item['purchase_price'] ?>"></div>
<div class="col-md-4"><label class="form-label">Stock Qty</label><input type="number" step="0.001" name="stock_quantity" class="form-control" value="<?= (float)$item['stock_quantity'] ?>"></div>
<div class="col-md-4"><label class="form-label">Min Level</label><input type="number" step="0.001" name="min_stock_level" class="form-control" value="<?= (float)$item['min_stock_level'] ?>"></div>
<div class="col-md-4"><label class="form-label">VAT Rate (%)</label><input type="number" step="0.01" name="vat_rate" class="form-control" value="<?= number_format((float)$item['vat_rate'], 2, '.', '') ?>"></div>
<div class="col-md-4"><label class="form-label">Item Picture</label><input type="file" name="image" class="form-control" accept="image/*"></div>
<div class="col-12 full-width"><hr><h6 data-en="Promotion Details" data-ar="تفاصيل العرض">Promotion Details</h6></div>
<div class="col-md-12 full-width"><div class="form-check form-switch mt-2"><input class="form-check-input isPromotionToggleEdit" type="checkbox" name="is_promotion" value="1" <?= $item['is_promotion'] ? 'checked' : '' ?> id="isPromotionToggleEdit<?= $item['id'] ?>" data-id="<?= $item['id'] ?>"><label class="form-check-label" for="isPromotionToggleEdit<?= $item['id'] ?>" data-en="On Promotion?" data-ar="في العرض؟">On Promotion?</label></div></div>
<div class="col-12 full-width promotionFieldsContainerEdit" id="promotionFieldsContainerEdit<?= $item['id'] ?>" style="display: <?= $item['is_promotion'] ? 'block' : 'none' ?>;"><div class="form-grid-3"><div><label class="form-label">Start Date</label><input type="date" name="promotion_start" class="form-control" value="<?= $item['promotion_start'] ?>"></div><div><label class="form-label">End Date</label><input type="date" name="promotion_end" class="form-control" value="<?= $item['promotion_end'] ?>"></div><div><label class="form-label">Percent (%)</label><input type="number" step="0.01" name="promotion_percent" class="form-control" value="<?= (float)$item['promotion_percent'] ?>"></div></div></div>
</div></div><div class="modal-footer">
<button type="button" class="btn btn-light" data-bs-dismiss="modal" data-en="Cancel" data-ar="إلغاء">Cancel</button>
<button type="submit" name="edit_item" class="btn btn-primary">Update Item</button>
</div>
@ -6511,7 +6330,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<!-- Filters Section -->
<div class="bg-light p-3 rounded mb-4">
<form method="GET" class="row g-3">
<form method="GET" class="form-grid-3">
<input type="hidden" name="page" value="quotations">
<div class="col-md-3">
<label class="form-label small fw-bold" data-en="Search" data-ar="بحث">Search</label>
@ -6636,7 +6455,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<!-- Filters Section -->
<div class="bg-light p-3 rounded mb-4">
<form method="GET" class="row g-3">
<form method="GET" class="form-grid-3">
<input type="hidden" name="page" value="lpos">
<div class="col-md-3">
<label class="form-label small fw-bold" data-en="Search" data-ar="بحث">Search</label>
@ -6803,7 +6622,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<!-- Filters Section -->
<div class="bg-light p-3 rounded mb-4 d-print-none">
<form method="GET" class="row g-3">
<form method="GET" class="form-grid-3">
<input type="hidden" name="page" value="<?= $page ?>">
<div class="col-md-3">
<label class="form-label small fw-bold" data-en="Search" data-ar="بحث">Search</label>
@ -6952,7 +6771,6 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
</tfoot>
</table>
</div>
<?= renderPagination($data['current_page'] ?? 1, $data['total_pages'] ?? 1) ?>
</div>
@ -7417,370 +7235,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
</div>
<?php elseif ($page === 'accounting'): ?>
<div class="card p-4">
<div class="d-flex justify-content-between align-items-center mb-4 d-print-none">
<h5 class="m-0"><i class="fas fa-calculator me-2"></i> <span data-en="Accounting Module" data-ar="وحدة المحاسبة">Accounting Module</span></h5>
<div class="d-flex gap-2">
<form method="POST" onsubmit="return confirm('This will re-calculate all automatic journal entries from scratch. Continue?')">
<button type="submit" name="sync_accounting" class="btn btn-outline-warning">
<i class="bi bi-arrow-repeat"></i> <span data-en="Sync All" data-ar="مزامنة الكل">Sync All</span>
</button>
</form>
<button class="btn btn-success" data-bs-toggle="modal" data-bs-target="#addManualJournalModal">
<i class="bi bi-plus-lg"></i> <span data-en="Manual Entry" data-ar="قيد يدوي">Manual Entry</span>
</button>
<div class="btn-group">
<a href="index.php?page=accounting" class="btn <?= !isset($_GET['view']) ? 'btn-primary' : 'btn-outline-primary' ?>" data-en="Journal" data-ar="اليومية">Journal</a>
<a href="index.php?page=accounting&view=coa" class="btn <?= isset($_GET['view']) && $_GET['view'] === 'coa' ? 'btn-primary' : 'btn-outline-primary' ?>" data-en="Accounts" data-ar="الحسابات">Accounts</a>
<a href="index.php?page=accounting&view=trial_balance" class="btn <?= isset($_GET['view']) && $_GET['view'] === 'trial_balance' ? 'btn-primary' : 'btn-outline-primary' ?>" data-en="Trial Balance" data-ar="ميزان المراجعة">Trial Balance</a>
<a href="index.php?page=accounting&view=profit_loss" class="btn <?= isset($_GET['view']) && $_GET['view'] === 'profit_loss' ? 'btn-primary' : 'btn-outline-primary' ?>" data-en="P&L" data-ar="الأرباح">P&L</a>
<a href="index.php?page=accounting&view=balance_sheet" class="btn <?= isset($_GET['view']) && $_GET['view'] === 'balance_sheet' ? 'btn-primary' : 'btn-outline-primary' ?>" data-en="Balance Sheet" data-ar="الميزانية">Balance Sheet</a>
<a href="index.php?page=accounting&view=vat_report" class="btn <?= isset($_GET['view']) && $_GET['view'] === 'vat_report' ? 'btn-primary' : 'btn-outline-primary' ?>" data-en="VAT Report" data-ar="تقرير الضريبة">VAT Report</a>
</div>
<button class="btn btn-outline-secondary" onclick="window.print()">
<i class="bi bi-printer"></i> <span data-en="Print" data-ar="طباعة">Print</span>
</button>
</div>
</div>
<div class="d-none d-print-block mb-4">
<div class="row">
<div class="col-6">
<h3 class="mb-0"><?= htmlspecialchars($data['settings']['company_name'] ?? 'Accounting System') ?></h3>
<p class="text-muted small"><?= nl2br(htmlspecialchars($data['settings']['company_address'] ?? '')) ?></p>
</div>
<div class="col-6 text-end">
<h2 class="text-uppercase text-muted"><?= isset($_GET['view']) ? ucwords(str_replace('_', ' ', $_GET['view'])) : 'Journal' ?></h2>
</div>
</div>
</div>
<?php if (!isset($_GET['view'])): ?>
<div class="table-responsive">
<table class="table table-hover align-middle">
<thead>
<tr>
<th data-en="Date" data-ar="التاريخ">Date</th>
<th data-en="Description" data-ar="الوصف">Description</th>
<th data-en="Reference" data-ar="المرجع">Reference</th>
<th data-en="Amount" data-ar="المبلغ">Amount</th>
<th data-en="Action" data-ar="الإجراء">Action</th>
</tr>
</thead>
<tbody>
<?php foreach ($data['journal_entries'] as $entry): ?>
<tr>
<td><?= $entry['entry_date'] ?></td>
<td><?= htmlspecialchars($entry['description']) ?></td>
<td><span class="badge bg-secondary"><?= htmlspecialchars($entry['reference']) ?></span></td>
<td><?= number_format((float)$entry['total_debit'], 3) ?></td>
<td>
<button class="btn btn-sm btn-outline-info" onclick="viewJournalEntry(<?= $entry['id'] ?>)">
<i class="bi bi-eye"></i> <span data-en="View" data-ar="عرض">View</span>
</button>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?= renderPagination($data['current_page'] ?? 1, $data['total_pages'] ?? 1) ?>
<?php elseif ($_GET['view'] === 'coa'): ?>
<div class="d-flex justify-content-end mb-3">
<button class="btn btn-primary btn-sm" data-bs-toggle="modal" data-bs-target="#addAccountModal">
<i class="bi bi-plus-lg"></i> <span data-en="Add Account" data-ar="إضافة حساب">Add Account</span>
</button>
</div>
<div class="table-responsive">
<table class="table table-hover">
<thead class="table-light">
<tr>
<th data-en="Code" data-ar="الكود">Code</th>
<th data-en="Name" data-ar="الاسم">Name</th>
<th data-en="Type" data-ar="النوع">Type</th>
<th data-en="Parent" data-ar="الحساب الأب">Parent</th>
<th data-en="Balance" data-ar="الرصيد" class="text-end">Balance</th>
</tr>
</thead>
<tbody>
<?php foreach ($data['coa'] as $acc): ?>
<tr>
<td class="fw-bold"><?= $acc['code'] ?></td>
<td>
<?= htmlspecialchars($acc['name_en']) ?><br>
<small class="text-muted"><?= htmlspecialchars($acc['name_ar']) ?></small>
</td>
<td><span class="badge bg-light text-dark border text-uppercase"><?= $acc['type'] ?></span></td>
<td><?= htmlspecialchars($acc['parent_name'] ?? '---') ?></td>
<td class="text-end fw-bold"><?= number_format(getAccountBalance($acc['code']), 3) ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?= renderPagination($data['current_page'] ?? 1, $data['total_pages'] ?? 1) ?>
<?php elseif ($_GET['view'] === 'vat_report'): ?>
<div class="row">
<div class="col-md-6 mx-auto">
<div class="bg-light p-3 rounded mb-4 d-print-none">
<form method="GET" class="row g-2">
<input type="hidden" name="page" value="accounting">
<input type="hidden" name="view" value="vat_report">
<div class="col">
<input type="date" name="start_date" class="form-control" value="<?= $data['start_date'] ?>">
</div>
<div class="col">
<input type="date" name="end_date" class="form-control" value="<?= $data['end_date'] ?>">
</div>
<div class="col-auto">
<button type="submit" class="btn btn-primary" data-en="Filter" data-ar="تصفية">Filter</button>
</div>
</form>
</div>
<div class="card shadow-sm border-0">
<div class="card-body">
<h4 class="text-center mb-4 d-print-none">VAT Summary Report</h4>
<table class="table">
<tr>
<th data-en="VAT Input (Purchases)" data-ar="ضريبة المدخلات (المشتريات)">VAT Input (Purchases)</th>
<td class="text-end text-success fw-bold"><?= number_format($data['vat_report']['input_vat'], 2) ?></td>
</tr>
<tr>
<th data-en="VAT Output (Sales)" data-ar="ضريبة المخرجات (المبيعات)">VAT Output (Sales)</th>
<td class="text-end text-danger fw-bold"><?= number_format($data['vat_report']['output_vat'], 2) ?></td>
</tr>
<tr class="table-dark h5">
<th data-en="Net VAT Payable / (Refundable)" data-ar="صافي الضريبة المستحقة / (المستردة)">Net VAT Payable / (Refundable)</th>
<td class="text-end"><?= number_format($data['vat_report']['net_vat'], 2) ?></td>
</tr>
</table>
<div class="alert alert-info small mt-3">
<i class="bi bi-info-circle me-1"></i>
This report calculates the difference between VAT collected on sales and VAT paid on purchases for the selected period.
</div>
</div>
</div>
</div>
</div>
<?php elseif ($_GET['view'] === 'trial_balance'): ?>
<div class="table-responsive">
<table class="table table-bordered">
<thead class="table-light">
<tr>
<th data-en="Code" data-ar="الكود">Code</th>
<th data-en="Account Name" data-ar="اسم الحساب">Account Name</th>
<th class="text-end" data-en="Debit" data-ar="مدين">Debit</th>
<th class="text-end" data-en="Credit" data-ar="دائن">Credit</th>
</tr>
</thead>
<tbody>
<?php
$total_d = 0; $total_c = 0;
foreach ($data['trial_balance'] as $row):
$total_d += (float)$row['total_debit'];
$total_c += (float)$row['total_credit'];
?>
<tr>
<td><?= $row['code'] ?></td>
<td><?= htmlspecialchars($row['name_en']) ?></td>
<td class="text-end"><?= number_format((float)$row['total_debit'], 3) ?></td>
<td class="text-end"><?= number_format((float)$row['total_credit'], 3) ?></td>
</tr>
<?php endforeach; ?>
</tbody>
<tfoot class="table-light fw-bold">
<tr>
<td colspan="2" class="text-end" data-en="Total" data-ar="الإجمالي">Total</td>
<td class="text-end"><?= number_format($total_d, 3) ?></td>
<td class="text-end"><?= number_format($total_c, 3) ?></td>
</tr>
</tfoot>
</table>
</div>
<?php elseif ($_GET['view'] === 'profit_loss'): ?>
<div class="row">
<div class="col-md-8 mx-auto">
<div class="card bg-light">
<div class="card-body">
<h4 class="text-center mb-4 d-print-none" data-en="Profit & Loss Statement" data-ar="قائمة الأرباح والخسائر">Profit & Loss Statement</h4>
<table class="table">
<tr class="table-primary"><th colspan="2" data-en="Revenue" data-ar="الإيرادات">Revenue</th></tr>
<?php
$total_rev = 0;
foreach ($data['revenue_accounts'] as $acc):
$bal = getAccountBalance($acc['code']);
if ($bal == 0) continue;
$total_rev += $bal;
?>
<tr>
<td><?= htmlspecialchars($acc['name_en']) ?></td>
<td class="text-end"><?= number_format($bal, 3) ?></td>
</tr>
<?php endforeach; ?>
<tr class="fw-bold">
<td data-en="Total Revenue" data-ar="إجمالي الإيرادات">Total Revenue</td>
<td class="text-end border-top"><?= number_format($total_rev, 3) ?></td>
</tr>
<tr class="table-warning"><th colspan="2" class="pt-4" data-en="Expenses" data-ar="المصروفات">Expenses</th></tr>
<?php
$total_exp = 0;
foreach ($data['expense_accounts'] as $acc):
$bal = getAccountBalance($acc['code']);
if ($bal == 0) continue;
$total_exp += $bal;
?>
<tr>
<td><?= htmlspecialchars($acc['name_en']) ?></td>
<td class="text-end"><?= number_format($bal, 3) ?></td>
</tr>
<?php endforeach; ?>
<tr class="fw-bold">
<td data-en="Total Expenses" data-ar="إجمالي المصروفات">Total Expenses</td>
<td class="text-end border-top"><?= number_format($total_exp, 3) ?></td>
</tr>
<tr class="table-success h4">
<td data-en="Net Profit / Loss" data-ar="صافي الربح / الخسارة">Net Profit / Loss</td>
<td class="text-end"><?= number_format($total_rev - $total_exp, 3) ?></td>
</tr>
</table>
</div>
</div>
</div>
</div>
<?php elseif ($_GET['view'] === 'balance_sheet'): ?>
<div class="row">
<div class="col-md-10 mx-auto">
<div class="card bg-light">
<div class="card-body">
<h4 class="text-center mb-4 d-print-none" data-en="Balance Sheet" data-ar="الميزانية العمومية">Balance Sheet</h4>
<div class="row">
<div class="col-md-6 border-end">
<h5 class="text-primary border-bottom pb-2" data-en="Assets" data-ar="الأصول">Assets</h5>
<table class="table table-sm">
<?php
$total_assets = 0;
foreach ($data['asset_accounts'] as $acc):
$bal = getAccountBalance($acc['code']);
if ($bal == 0) continue;
$total_assets += $bal;
?>
<tr>
<td><?= htmlspecialchars($acc['name_en']) ?></td>
<td class="text-end"><?= number_format($bal, 3) ?></td>
</tr>
<?php endforeach; ?>
<tr class="fw-bold h5">
<td data-en="Total Assets" data-ar="إجمالي الأصول">Total Assets</td>
<td class="text-end border-top"><?= number_format($total_assets, 3) ?></td>
</tr>
</table>
</div>
<div class="col-md-6">
<h5 class="text-danger border-bottom pb-2" data-en="Liabilities & Equity" data-ar="الالتزامات وحقوق الملكية">Liabilities & Equity</h5>
<table class="table table-sm">
<tr class="bg-light"><td colspan="2" class="small fw-bold text-muted">Liabilities</td></tr>
<?php
$total_liab = 0;
foreach ($data['liability_accounts'] as $acc):
$bal = getAccountBalance($acc['code']);
if ($bal == 0) continue;
$total_liab += $bal;
?>
<tr>
<td><?= htmlspecialchars($acc['name_en']) ?></td>
<td class="text-end"><?= number_format($bal, 3) ?></td>
</tr>
<?php endforeach; ?>
<tr class="bg-light"><td colspan="2" class="small fw-bold text-muted pt-3">Equity</td></tr>
<?php
$total_equity = 0;
foreach ($data['equity_accounts'] as $acc):
$bal = getAccountBalance($acc['code']);
if ($bal == 0) continue;
$total_equity += $bal;
?>
<tr>
<td><?= htmlspecialchars($acc['name_en']) ?></td>
<td class="text-end"><?= number_format($bal, 3) ?></td>
</tr>
<?php endforeach; ?>
<?php
// Current Year Earnings (Revenue - Expenses)
$rev = 0; foreach(db()->query("SELECT code FROM acc_accounts WHERE type='revenue' AND parent_id IS NOT NULL")->fetchAll() as $a) $rev += getAccountBalance($a['code']);
$exp = 0; foreach(db()->query("SELECT code FROM acc_accounts WHERE type='expense' AND parent_id IS NOT NULL")->fetchAll() as $a) $exp += getAccountBalance($a['code']);
$earnings = $rev - $exp;
$total_equity += $earnings;
?>
<tr>
<td data-en="Retained Earnings (Current)" data-ar="الأرباح المحتجزة (الحالية)">Retained Earnings (Current)</td>
<td class="text-end"><?= number_format($earnings, 3) ?></td>
</tr>
<tr class="fw-bold h5 pt-3">
<td data-en="Total Liab. & Equity" data-ar="إجمالي الالتزامات وحقوق الملكية">Total Liab. & Equity</td>
<td class="text-end border-top"><?= number_format($total_liab + $total_equity, 3) ?></td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<?php endif; ?>
</div>
<!-- Journal Entry Details Modal -->
<div class="modal fade" id="journalModal" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" data-en="Journal Entry Details" data-ar="تفاصيل قيد اليومية">Journal Entry Details</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<table class="table table-bordered">
<thead>
<tr>
<th data-en="Account" data-ar="الحساب">Account</th>
<th class="text-end" data-en="Debit" data-ar="مدين">Debit</th>
<th class="text-end" data-en="Credit" data-ar="دائن">Credit</th>
</tr>
</thead>
<tbody id="journalDetailsBody"></tbody>
</table>
</div>
</div>
</div>
</div>
<script>
function viewJournalEntry(id) {
fetch('index.php?page=accounting&action=get_entry_details&id=' + id)
.then(r => r.json())
.then(data => {
let html = '';
data.forEach(row => {
html += `<tr>
<td>${row.code} - ${row.name_en}</td>
<td class="text-end">${parseFloat(row.debit).toFixed(3)}</td>
<td class="text-end">${parseFloat(row.credit).toFixed(3)}</td>
</tr>`;
});
document.getElementById('journalDetailsBody').innerHTML = html;
new bootstrap.Modal(document.getElementById('journalModal')).show();
});
}
</script>
<?php require 'pages/accounting_view.php'; ?>
<?php elseif ($page === 'expenses'): ?>
<div class="card p-4">
<div class="d-flex justify-content-between align-items-center mb-4">
@ -7791,7 +7246,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
</div>
<div class="bg-light p-3 rounded mb-4">
<form method="GET" class="row g-3">
<form method="GET" class="form-grid-3">
<input type="hidden" name="page" value="expenses">
<div class="col-md-3">
<label class="form-label small" data-en="Category" data-ar="الفئة">Category</label>
@ -7983,7 +7438,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
</div>
<div class="bg-light p-3 rounded mb-4 d-print-none">
<form method="GET" class="row g-3">
<form method="GET" class="form-grid-3">
<input type="hidden" name="page" value="expense_report">
<div class="col-md-3">
<label class="form-label small fw-bold" data-en="From Date" data-ar="من تاريخ">From Date</label>
@ -8106,7 +7561,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
</div>
<div class="bg-light p-3 rounded mb-4">
<form method="GET" class="row g-3">
<form method="GET" class="form-grid-3">
<input type="hidden" name="page" value="sales_returns">
<div class="col-md-9">
<input type="text" name="search" class="form-control form-control-sm" value="<?= htmlspecialchars($_GET['search'] ?? '') ?>" placeholder="Search by Return ID, Customer or Invoice ID...">
@ -8167,7 +7622,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
</div>
<div class="bg-light p-3 rounded mb-4">
<form method="GET" class="row g-3">
<form method="GET" class="form-grid-3">
<input type="hidden" name="page" value="purchase_returns">
<div class="col-md-9">
<input type="text" name="search" class="form-control form-control-sm" value="<?= htmlspecialchars($_GET['search'] ?? '') ?>" placeholder="Search by Return ID, Supplier or Invoice ID...">
@ -8331,7 +7786,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<form method="POST">
<input type="hidden" name="id" value="<?= $e['id'] ?>">
<div class="modal-body">
<div class="row g-3">
<div class="form-grid-3">
<div class="col-md-6">
<label class="form-label" data-en="Full Name" data-ar="الاسم الكامل">Full Name</label>
<input type="text" name="name" class="form-control" value="<?= htmlspecialchars($e['name']) ?>" required>
@ -8467,7 +7922,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<option value="on_leave" <?= $e['status'] === 'on_leave' ? 'selected' : '' ?>>On Leave</option>
</select>
</div>
<div class="row g-3">
<div class="form-grid-3">
<div class="col-md-6">
<label class="form-label" data-en="Clock In" data-ar="وقت الدخول">Clock In</label>
<input type="time" name="clock_in" class="form-control" value="<?= $e['clock_in'] ?>">
@ -8625,7 +8080,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<?php endforeach; ?>
</select>
</div>
<div class="row g-3">
<div class="form-grid-3">
<div class="col-md-6">
<label class="form-label" data-en="Bonus" data-ar="مكافأة">Bonus</label>
<input type="number" step="0.001" name="bonus" class="form-control" value="0.000">
@ -8999,7 +8454,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<div class="card p-4 border-0 shadow-sm rounded-4">
<h5 class="mb-4 fw-bold" data-en="Edit Profile" data-ar="تعديل الملف الشخصي">Edit Profile</h5>
<form method="POST" enctype="multipart/form-data">
<div class="row g-3">
<div class="form-grid-3">
<div class="col-md-6">
<label class="form-label fw-semibold" data-en="Username" data-ar="اسم المستخدم">Username</label>
<input type="text" name="username" class="form-control rounded-3" value="<?= htmlspecialchars($data['user']['username'] ?? '') ?>" required>
@ -9035,7 +8490,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<div class="card p-4">
<h5 class="mb-4" data-en="Company Profile" data-ar="ملف الشركة">Company Profile</h5>
<form method="POST" enctype="multipart/form-data">
<div class="row g-3">
<div class="form-grid-3">
<div class="col-md-6">
<label class="form-label" data-en="Company Name" data-ar="اسم الشركة">Company Name</label>
<input type="text" name="settings[company_name]" class="form-control" value="<?= htmlspecialchars($data['settings']['company_name'] ?? '') ?>">
@ -9063,19 +8518,6 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<option value="1" <?= ($data['settings']['allow_zero_stock_sell'] ?? '1') === '1' ? 'selected' : '' ?> data-en="Enabled" data-ar="مفعل">Enabled</option>
</select>
</div>
<div class="col-md-4 mt-3">
<label class="form-label" data-en="Timezone" data-ar="المنطقة الزمنية">Timezone</label>
<select name="settings[time_zone]" class="form-select">
<?php
$current_tz = $data['settings']['time_zone'] ?? 'Asia/Muscat';
$timezones = DateTimeZone::listIdentifiers(DateTimeZone::ALL);
foreach ($timezones as $tz) {
$selected = ($tz === $current_tz) ? 'selected' : '';
echo "<option value='$tz' $selected>$tz</option>";
}
?>
</select>
</div>
<div class="col-md-4 mt-3">
<label class="form-label" data-en="Company Logo" data-ar="شعار الشركة">Company Logo</label>
<input type="file" name="company_logo" class="form-control" accept="image/*">
@ -9105,7 +8547,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
</div>
<div class="col-md-12 mt-4">
<h5 class="mb-3" data-en="Loyalty Configuration" data-ar="إعدادات الولاء">Loyalty Configuration</h5>
<div class="row g-3">
<div class="form-grid-3">
<div class="col-md-4">
<label class="form-label" data-en="Loyalty System" data-ar="نظام الولاء">Loyalty System</label>
<select name="settings[loyalty_enabled]" class="form-select">
@ -9330,7 +8772,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<h5 class="mb-4" data-en="Customer Display Settings" data-ar="إعدادات شاشة العميل">Customer Display Settings</h5>
<form method="POST" enctype="multipart/form-data">
<div class="row g-3">
<div class="form-grid-3">
<div class="col-md-12">
<h6 class="text-muted border-bottom pb-2" data-en="Greeting Message" data-ar="رسالة الترحيب">Greeting Message</h6>
</div>
@ -9908,7 +9350,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body text-start">
<div class="row g-3">
<div class="form-grid-3">
<div class="col-md-6">
<p class="mb-1 text-muted small">Register</p>
<h6><?= htmlspecialchars($s['register_name']) ?></h6>
@ -10369,7 +9811,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
</div>
<form method="POST">
<div class="modal-body">
<div class="row g-3">
<div class="form-grid-3">
<div class="col-md-6">
<label class="form-label" data-en="Full Name" data-ar="الاسم الكامل">Full Name</label>
<input type="text" name="name" class="form-control" required>
@ -10605,122 +10047,24 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
</div>
<form method="POST" enctype="multipart/form-data">
<div class="modal-body">
<div class="row g-3">
<div class="col-md-6">
<label class="form-label" data-en="Name (EN)" data-ar="الاسم (إنجليزي)">Name (EN)</label>
<div class="input-group">
<input type="text" name="name_en" id="addItemNameEn" class="form-control" required>
<button class="btn btn-outline-secondary btn-translate" type="button" data-source="addItemNameAr" data-target="addItemNameEn" data-to="en">
<i class="bi bi-translate"></i> EN
</button>
</div>
</div>
<div class="col-md-6">
<label class="form-label" data-en="Name (AR)" data-ar="الاسم (عربي)">Name (AR)</label>
<div class="input-group">
<input type="text" name="name_ar" id="addItemNameAr" class="form-control" required>
<button class="btn btn-outline-secondary btn-translate" type="button" data-source="addItemNameEn" data-target="addItemNameAr" data-to="ar">
<i class="bi bi-translate"></i> AR
</button>
</div>
</div>
<div class="col-md-4">
<label class="form-label" data-en="Category" data-ar="الفئة">Category</label>
<select name="category_id" class="form-select">
<option value="">---</option>
<?php foreach ($data['categories'] ?? [] as $c): ?>
<option value="<?= $c['id'] ?>"><?= htmlspecialchars($c['name_en']) ?> / <?= htmlspecialchars($c['name_ar']) ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="col-md-4">
<label class="form-label" data-en="Unit" data-ar="الوحدة">Unit</label>
<select name="unit_id" class="form-select">
<option value="">---</option>
<?php foreach ($data['units'] ?? [] as $u): ?>
<option value="<?= $u['id'] ?>"><?= htmlspecialchars($u['short_name_en']) ?> / <?= htmlspecialchars($u['short_name_ar']) ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="col-md-4">
<label class="form-label" data-en="Supplier" data-ar="المورد">Supplier</label>
<select name="supplier_id" class="form-select">
<option value="">---</option>
<?php foreach ($data['suppliers'] ?? [] as $s): ?>
<option value="<?= $s['id'] ?>"><?= htmlspecialchars($s['name']) ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="col-md-6">
<label class="form-label" data-en="SKU / Barcode" data-ar="الباركود">SKU / Barcode</label>
<div class="input-group">
<input type="text" name="sku" id="skuInput" class="form-control">
<button class="btn btn-outline-secondary" type="button" id="suggestSkuBtn" data-en="Suggest" data-ar="اقتراح">Suggest</button>
</div>
</div>
<div class="col-md-3">
<label class="form-label" data-en="Sale Price" data-ar="سعر البيع">Sale Price</label>
<input type="number" step="0.001" name="sale_price" class="form-control" value="0.000">
</div>
<div class="col-md-3">
<label class="form-label" data-en="Purchase Price" data-ar="سعر الشراء">Purchase Price</label>
<input type="number" step="0.001" name="purchase_price" class="form-control" value="0.000">
</div>
<div class="col-md-4">
<label class="form-label" data-en="Initial Stock" data-ar="المخزون الحالي">Initial Stock</label>
<input type="number" step="0.001" name="stock_quantity" class="form-control" value="0.000">
</div>
<div class="col-md-4">
<label class="form-label" data-en="Min Stock Level" data-ar="الحد الأدنى للمخزون">Min Stock Level</label>
<input type="number" step="0.001" name="min_stock_level" class="form-control" value="0.000">
</div>
<div class="col-md-4">
<label class="form-label" data-en="Item Picture" data-ar="صورة الصنف">Item Picture</label>
<input type="file" name="image" class="form-control" accept="image/*">
</div>
<div class="col-md-4">
<label class="form-label" data-en="VAT Rate (%)" data-ar="ضريبة القيمة المضافة (%)">VAT Rate (%)</label>
<input type="number" step="0.01" name="vat_rate" class="form-control" value="0">
</div>
<div class="col-md-8">
<div class="form-check form-switch mt-4">
<input class="form-check-input" type="checkbox" id="hasExpiryToggle">
<label class="form-check-label" for="hasExpiryToggle" data-en="Has Expiry Date?" data-ar="هل له تاريخ انتهاء؟">Has Expiry Date?</label>
</div>
</div>
<div class="col-md-6" id="expiryDateContainer" style="display: none;">
<label class="form-label" data-en="Expiry Date" data-ar="تاريخ الانتهاء">Expiry Date</label>
<input type="date" name="expiry_date" class="form-control">
</div>
<div class="col-12 mt-3">
<hr>
<h6 data-en="Promotion Details" data-ar="تفاصيل العرض">Promotion Details</h6>
</div>
<div class="col-md-4">
<div class="form-check form-switch mt-4">
<input class="form-check-input" type="checkbox" name="is_promotion" id="isPromotionToggle">
<label class="form-check-label" for="isPromotionToggle" data-en="On Promotion?" data-ar="في العرض؟">On Promotion?</label>
</div>
</div>
<div class="col-md-8">
<div class="row g-3" id="promotionFieldsContainer" style="display: none;">
<div class="col-md-4">
<label class="form-label" data-en="Start Date" data-ar="تاريخ البدء">Start Date</label>
<input type="date" name="promotion_start" class="form-control">
</div>
<div class="col-md-4">
<label class="form-label" data-en="End Date" data-ar="تاريخ الانتهاء">End Date</label>
<input type="date" name="promotion_end" class="form-control">
</div>
<div class="col-md-4">
<label class="form-label" data-en="Percent (%)" data-ar="النسبة (%)">Percent (%)</label>
<input type="number" step="0.01" name="promotion_percent" class="form-control" value="0.00">
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<div class="form-grid-3">
<div class="col-md-4"><label class="form-label" data-en="Name (EN)" data-ar="الاسم (إنجليزي)">Name (EN)</label><div class="input-group"><input type="text" name="name_en" id="addItemNameEn" class="form-control" required><button class="btn btn-outline-secondary btn-translate" type="button" data-source="addItemNameAr" data-target="addItemNameEn" data-to="en"><i class="bi bi-translate"></i> EN</button></div></div>
<div class="col-md-4"><label class="form-label" data-en="Name (AR)" data-ar="الاسم (عربي)">Name (AR)</label><div class="input-group"><input type="text" name="name_ar" id="addItemNameAr" class="form-control" required><button class="btn btn-outline-secondary btn-translate" type="button" data-source="addItemNameEn" data-target="addItemNameAr" data-to="ar"><i class="bi bi-translate"></i> AR</button></div></div>
<div class="col-md-4"><label class="form-label" data-en="SKU / Barcode" data-ar="الباركود">SKU / Barcode</label><div class="input-group"><input type="text" name="sku" id="skuInput" class="form-control"><button class="btn btn-outline-secondary" type="button" id="suggestSkuBtn" data-en="Suggest" data-ar="اقتراح">Suggest</button></div></div>
<div class="col-md-4"><label class="form-label" data-en="Category" data-ar="الفئة">Category</label><select name="category_id" class="form-select"><option value="">---</option><?php foreach ($data['categories'] ?? [] as $c): ?><option value="<?= $c['id'] ?>"><?= htmlspecialchars($c['name_en']) ?> / <?= htmlspecialchars($c['name_ar']) ?></option><?php endforeach; ?></select></div>
<div class="col-md-4"><label class="form-label" data-en="Unit" data-ar="الوحدة">Unit</label><select name="unit_id" class="form-select"><option value="">---</option><?php foreach ($data['units'] ?? [] as $u): ?><option value="<?= $u['id'] ?>"><?= htmlspecialchars($u['short_name_en']) ?> / <?= htmlspecialchars($u['short_name_ar']) ?></option><?php endforeach; ?></select></div>
<div class="col-md-4"><label class="form-label" data-en="Supplier" data-ar="المورد">Supplier</label><select name="supplier_id" class="form-select"><option value="">---</option><?php foreach ($data['suppliers'] ?? [] as $s): ?><option value="<?= $s['id'] ?>"><?= htmlspecialchars($s['name']) ?></option><?php endforeach; ?></select></div>
<div class="col-md-4"><label class="form-label" data-en="Sale Price" data-ar="سعر البيع">Sale Price</label><input type="number" step="0.001" name="sale_price" class="form-control" value="0.000"></div>
<div class="col-md-4"><label class="form-label" data-en="Purchase Price" data-ar="سعر الشراء">Purchase Price</label><input type="number" step="0.001" name="purchase_price" class="form-control" value="0.000"></div>
<div class="col-md-4"><label class="form-label" data-en="Initial Stock" data-ar="المخزون الحالي">Initial Stock</label><input type="number" step="0.001" name="stock_quantity" class="form-control" value="0.000"></div>
<div class="col-md-4"><label class="form-label" data-en="Min Stock Level" data-ar="الحد الأدنى للمخزون">Min Stock Level</label><input type="number" step="0.001" name="min_stock_level" class="form-control" value="0.000"></div>
<div class="col-md-4"><label class="form-label" data-en="VAT Rate (%)" data-ar="ضريبة القيمة المضافة (%)">VAT Rate (%)</label><input type="number" step="0.01" name="vat_rate" class="form-control" value="0"></div>
<div class="col-md-4"><label class="form-label" data-en="Item Picture" data-ar="صورة الصنف">Item Picture</label><input type="file" name="image" class="form-control" accept="image/*"></div>
<div class="col-md-12 full-width"><div class="form-check form-switch mt-4"><input class="form-check-input" type="checkbox" id="hasExpiryToggle"><label class="form-check-label" for="hasExpiryToggle" data-en="Has Expiry Date?" data-ar="هل له تاريخ انتهاء؟">Has Expiry Date?</label></div></div>
<div class="col-md-12 full-width" id="expiryDateContainer" style="display: none;"><label class="form-label" data-en="Expiry Date" data-ar="تاريخ الانتهاء">Expiry Date</label><input type="date" name="expiry_date" class="form-control"></div>
<div class="col-12 full-width mt-3"><hr><h6 data-en="Promotion Details" data-ar="تفاصيل العرض">Promotion Details</h6></div>
<div class="col-md-12 full-width promotionFieldsContainer" id="promotionFieldsContainer" style="display: none;"><div class="form-grid-3"><div><label class="form-label">Start Date</label><input type="date" name="promotion_start" class="form-control"></div><div><label class="form-label">End Date</label><input type="date" name="promotion_end" class="form-control"></div><div><label class="form-label">Percent (%)</label><input type="number" step="0.01" name="promotion_percent" class="form-control"></div></div></div>
</div></div><div class="modal-footer">
<button type="button" class="btn btn-light" data-bs-dismiss="modal" data-en="Cancel" data-ar="إلغاء">Cancel</button>
<button type="submit" name="add_item" class="btn btn-primary" data-en="Save Item" data-ar="حفظ الصنف">Save Item</button>
</div>
@ -10927,7 +10271,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
</div>
<form method="POST">
<div class="modal-body">
<div class="row g-3">
<div class="form-grid-3">
<div class="col-md-6">
<label class="form-label" data-en="Name (EN)" data-ar="الاسم (إنجليزي)">Name (EN)</label>
<div class="input-group">
@ -12186,7 +11530,7 @@ document.addEventListener('DOMContentLoaded', function() {
</div>
<form method="POST">
<div class="modal-body">
<div class="row g-3">
<div class="form-grid-3">
<div class="col-md-4">
<label class="form-label" data-en="Code" data-ar="الكود">Code</label>
<input type="text" name="code" class="form-control" required placeholder="e.g. 1101">