Edit index.php via Editor
This commit is contained in:
parent
4c0505676f
commit
0c1d656a8a
774
index.php
774
index.php
@ -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">
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user