Autosave: 20260221-100021

This commit is contained in:
Flatlogic Bot 2026-02-21 10:00:21 +00:00
parent b5a80b944c
commit ac96fe49de
5 changed files with 234 additions and 87 deletions

View File

@ -22,6 +22,39 @@ body.theme-dark {
--border: #334155;
}
body.theme-nord {
--primary: #2e3440;
--primary-light: #3b4252;
--accent: #88c0d0;
--bg: #eceff4;
--surface: #ffffff;
--text: #2e3440;
--text-muted: #4c566a;
--border: #d8dee9;
}
body.theme-dracula {
--primary: #282a36;
--primary-light: #44475a;
--accent: #bd93f9;
--bg: #1e1f29;
--surface: #282a36;
--text: #f8f8f2;
--text-muted: #6272a4;
--border: #44475a;
}
body.theme-citrus {
--primary: #365314;
--primary-light: #4d7c0f;
--accent: #84cc16;
--bg: #f7fee7;
--surface: #ffffff;
--text: #1a2e05;
--text-muted: #65a30d;
--border: #ecfccb;
}
body.theme-ocean {
--primary: #083344;
--primary-light: #164e63;
@ -79,9 +112,13 @@ body {
z-index: 1000;
}
/* Base positioning for desktop */
@media (min-width: 1200px) {
[dir="ltr"] .sidebar { left: 0; }
[dir="rtl"] .sidebar { right: 0; }
[dir="ltr"] .sidebar { left: 0 !important; right: auto !important; }
[dir="rtl"] .sidebar { right: 0 !important; left: auto !important; }
[dir="ltr"] .main-content { margin-left: var(--sidebar-width) !important; margin-right: 0 !important; }
[dir="rtl"] .main-content { margin-left: 0 !important; margin-right: var(--sidebar-width) !important; }
}
.sidebar-header {
@ -157,7 +194,7 @@ body {
}
.pos-cart {
width: 400px;
background: #fff;
background: var(--surface);
border-radius: 12px;
box-shadow: 0 4px 15px rgba(0,0,0,0.05);
display: flex;
@ -170,9 +207,9 @@ body {
gap: 15px;
}
.product-card {
background: #fff;
background: var(--surface);
border-radius: 10px;
border: 1px solid #edf2f7;
border: 1px solid var(--border);
padding: 15px;
text-align: center;
cursor: pointer;
@ -184,7 +221,7 @@ body {
.product-card:hover {
transform: translateY(-5px);
box-shadow: 0 10px 20px rgba(0,0,0,0.05);
border-color: #3b82f6;
border-color: var(--accent);
}
.product-card img {
width: 100%;
@ -195,7 +232,7 @@ body {
}
.product-card .price {
font-weight: 700;
color: #2d3748;
color: var(--text);
}
.cart-items {
flex: 1;
@ -208,11 +245,11 @@ body {
align-items: center;
margin-bottom: 15px;
padding-bottom: 15px;
border-bottom: 1px solid #edf2f7;
border-bottom: 1px solid var(--border);
}
.cart-total {
padding: 20px;
background: #f8fafc;
background: var(--bg);
border-bottom-left-radius: 12px;
border-bottom-right-radius: 12px;
}
@ -225,16 +262,17 @@ body {
width: 24px;
height: 24px;
border-radius: 50%;
border: 1px solid #e2e8f0;
background: #fff;
border: 1px solid var(--border);
background: var(--surface);
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
font-size: 14px;
color: var(--text);
}
.qty-btn:hover {
background: #edf2f7;
background: var(--bg);
}
[dir="rtl"] .nav-link i {
@ -244,7 +282,6 @@ body {
/* Main Content */
.main-content {
margin-left: var(--sidebar-width);
padding: 2rem;
transition: all 0.3s;
min-height: 100vh;
@ -252,26 +289,24 @@ body {
flex-direction: column;
}
[dir="rtl"] .main-content {
margin-left: 0;
margin-right: var(--sidebar-width);
}
/* Desktop margins handled in the top @media block */
@media (max-width: 1199.98px) {
[dir="ltr"] .sidebar {
left: calc(-1 * var(--sidebar-width));
left: calc(-1 * var(--sidebar-width)) !important;
}
[dir="ltr"] .sidebar.show {
left: 0;
box-shadow: 0 0 50px rgba(0,0,0,0.3);
left: 0 !important;
box-shadow: 0 0 50px rgba(0,0,0,0.3) !important;
}
[dir="rtl"] .sidebar {
right: calc(-1 * var(--sidebar-width));
left: auto;
right: calc(-1 * var(--sidebar-width)) !important;
left: auto !important;
}
[dir="rtl"] .sidebar.show {
right: 0;
box-shadow: 0 0 50px rgba(0,0,0,0.3);
right: 0 !important;
left: auto !important;
box-shadow: 0 0 50px rgba(0,0,0,0.3) !important;
}
.main-content {
margin-left: 0 !important;
@ -348,6 +383,75 @@ body {
}
/* RTL Adjustments */
/* Theme Compatibility Overrides */
body.theme-dark, body.theme-dracula {
color-scheme: dark;
}
body:not(.theme-default) .text-dark {
color: var(--text) !important;
}
body:not(.theme-default) .bg-light,
body:not(.theme-default) .bg-white {
background-color: var(--surface) !important;
}
body:not(.theme-default) .border-dark {
border-color: var(--border) !important;
}
body:not(.theme-default) .list-group-item {
background-color: var(--surface);
color: var(--text);
border-color: var(--border);
}
body:not(.theme-default) .list-group-item-action:hover {
background-color: var(--bg);
color: var(--accent);
}
body:not(.theme-default) .dropdown-menu {
background-color: var(--surface);
border-color: var(--border);
}
body:not(.theme-default) .dropdown-item {
color: var(--text);
}
body:not(.theme-default) .dropdown-item:hover {
background-color: var(--primary-light);
color: #fff;
}
body:not(.theme-default) .alert-warning {
background-color: var(--primary-light);
border-color: var(--accent);
color: var(--text);
}
body:not(.theme-default) .modal-content {
background-color: var(--surface);
color: var(--text);
border-color: var(--border);
}
body:not(.theme-default) .form-control,
body:not(.theme-default) .form-select {
background-color: var(--bg);
border-color: var(--border);
color: var(--text);
}
body:not(.theme-default) .form-control:focus,
body:not(.theme-default) .form-select:focus {
background-color: var(--bg);
border-color: var(--accent);
color: var(--text);
}
[dir="rtl"] .ms-auto {
margin-right: auto !important;
margin-left: 0 !important;

View File

@ -1,9 +1,9 @@
document.addEventListener('DOMContentLoaded', function() {
const langToggle = document.getElementById('langToggle');
// Check for saved language
const currentLang = localStorage.getItem('lang') || 'en';
setLanguage(currentLang);
// Use the language set by PHP as initial source of truth
const initialLang = document.documentElement.lang || 'ar';
localStorage.setItem('lang', initialLang);
if (langToggle) {
langToggle.addEventListener('click', function() {
@ -63,7 +63,7 @@ document.addEventListener('DOMContentLoaded', function() {
const theme = this.getAttribute('data-theme');
// Remove all existing theme classes
const themes = ['theme-default', 'theme-dark', 'theme-ocean', 'theme-forest', 'theme-sunset'];
const themes = ['theme-default', 'theme-dark', 'theme-ocean', 'theme-forest', 'theme-sunset', 'theme-nord', 'theme-dracula', 'theme-citrus'];
document.body.classList.remove(...themes);
// Add new theme class
@ -92,6 +92,7 @@ document.addEventListener('DOMContentLoaded', function() {
function setLanguage(lang) {
document.documentElement.lang = lang;
document.documentElement.dir = lang === 'ar' ? 'rtl' : 'ltr';
document.body.dir = lang === 'ar' ? 'rtl' : 'ltr';
localStorage.setItem('lang', lang);
// Update UI text

View File

@ -0,0 +1,2 @@
-- Add theme column to users table
ALTER TABLE users ADD COLUMN theme VARCHAR(20) DEFAULT 'default' AFTER profile_pic;

145
index.php
View File

@ -463,7 +463,7 @@ if (isset($_GET['action']) || isset($_POST['action'])) {
exit;
}
$theme = $_POST['theme'] ?? 'default';
$allowed = ['default', 'dark', 'ocean', 'forest', 'sunset'];
$allowed = ['default', 'dark', 'ocean', 'forest', 'sunset', 'nord', 'dracula', 'citrus'];
if (!in_array($theme, $allowed)) $theme = 'default';
$stmt = db()->prepare("UPDATE users SET theme = ? WHERE id = ?");
@ -2095,67 +2095,67 @@ $data = [
];
$permission_groups = [
'General' => ['dashboard' => 'Dashboard'],
'General' => ['dashboard' => __('dashboard')],
'Inventory' => [
'items' => 'Items',
'categories' => 'Categories',
'units' => 'Units'
'items' => __('items'),
'categories' => __('categories'),
'units' => __('units')
],
'Customers' => [
'customers' => 'Customers'
'customers' => __('customers')
],
'Suppliers' => [
'suppliers' => 'Suppliers'
'suppliers' => __('suppliers')
],
'POS' => [
'pos' => 'POS'
'pos' => __('pos')
],
'Sales' => [
'sales' => 'Sales',
'sales_returns' => 'Sales Returns',
'quotations' => 'Quotations'
'sales' => __('sales'),
'sales_returns' => __('sales_returns'),
'quotations' => __('quotations')
],
'Purchases' => [
'purchases' => 'Purchases',
'lpos' => 'LPOs',
'purchase_returns' => 'Purchase Returns'
'purchases' => __('purchases'),
'lpos' => __('lpos'),
'purchase_returns' => __('purchase_returns')
],
'Expenses' => [
'expense_categories' => 'Expense Categories',
'expenses' => 'Expenses'
'expense_categories' => __('expense_categories'),
'expenses' => __('expenses')
],
'Accounting' => [
'accounting' => 'Journal Entries',
'trial_balance' => 'Trial Balance',
'profit_loss' => 'Profit & Loss',
'balance_sheet' => 'Balance Sheet',
'vat_report' => 'VAT Report'
'accounting' => __('accounting'),
'trial_balance' => __('trial_balance'),
'profit_loss' => __('profit_loss'),
'balance_sheet' => __('balance_sheet'),
'vat_report' => __('vat_report')
],
'HR' => [
'hr_departments' => 'Departments',
'hr_employees' => 'Employees',
'hr_attendance' => 'Attendance',
'hr_payroll' => 'Payroll'
'hr_departments' => __('departments'),
'hr_employees' => __('employees'),
'hr_attendance' => __('attendance'),
'hr_payroll' => __('payroll')
],
'Reports' => [
'customer_statement' => 'Customer Statement',
'supplier_statement' => 'Supplier Statement',
'expense_report' => 'Expense Report',
'cashflow_report' => 'Cashflow Report',
'expiry_report' => 'Expiry Report',
'low_stock_report' => 'Low Stock Report',
'loyalty_history' => 'Loyalty History'
'customer_statement' => __('customer_statement'),
'supplier_statement' => __('supplier_statement'),
'expense_report' => __('expense_report'),
'cashflow_report' => __('cashflow_report'),
'expiry_report' => __('expiry_report'),
'low_stock_report' => __('low_stock_report'),
'loyalty_history' => __('loyalty_history')
],
'Settings' => [
'payment_methods' => 'Payment Methods',
'devices' => 'Biometric Devices',
'settings' => 'Company Settings'
'payment_methods' => __('payment_methods'),
'devices' => __('devices'),
'settings' => __('settings')
],
'Administration' => [
'role_groups' => 'Role Groups',
'users' => 'Users',
'cash_registers' => 'Cash Registers',
'register_sessions' => 'Register Sessions',
'role_groups' => __('role_groups'),
'users' => __('users'),
'cash_registers' => __('cash_registers'),
'register_sessions' => __('register_sessions'),
'logs' => 'System Logs'
]
];
@ -2992,6 +2992,30 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="assets/css/custom.css?v=<?= time() ?>">
<style>
/* Force RTL Sidebar Position */
[dir="rtl"] .sidebar {
right: 0 !important;
left: auto !important;
}
[dir="rtl"] .main-content {
margin-left: 0 !important;
margin-right: 210px !important;
}
@media (max-width: 1199.98px) {
[dir="rtl"] .sidebar {
right: -210px !important;
left: auto !important;
}
[dir="rtl"] .sidebar.show {
right: 0 !important;
left: auto !important;
}
[dir="rtl"] .main-content {
margin-right: 0 !important;
margin-left: 0 !important;
}
}
@media print {
.sidebar, .topbar, .d-print-none, .no-print, .btn-group, .btn, .badge i { display: none !important; }
.main-content { margin: 0 !important; padding: 0 !important; background: white !important; width: 100% !important; }
@ -3362,6 +3386,9 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<li><a class="dropdown-item d-flex align-items-center theme-select" href="#" data-theme="ocean"><span class="rounded-circle me-2" style="width:12px; height:12px; background:#083344;"></span> <?= $lang === 'ar' ? 'محيط' : 'Ocean' ?></a></li>
<li><a class="dropdown-item d-flex align-items-center theme-select" href="#" data-theme="forest"><span class="rounded-circle me-2" style="width:12px; height:12px; background:#064e3b;"></span> <?= $lang === 'ar' ? 'غابة' : 'Forest' ?></a></li>
<li><a class="dropdown-item d-flex align-items-center theme-select" href="#" data-theme="sunset"><span class="rounded-circle me-2" style="width:12px; height:12px; background:#451a03;"></span> <?= $lang === 'ar' ? 'غروب' : 'Sunset' ?></a></li>
<li><a class="dropdown-item d-flex align-items-center theme-select" href="#" data-theme="nord"><span class="rounded-circle me-2" style="width:12px; height:12px; background:#88c0d0;"></span> <?= $lang === 'ar' ? 'نورد' : 'Nord' ?></a></li>
<li><a class="dropdown-item d-flex align-items-center theme-select" href="#" data-theme="dracula"><span class="rounded-circle me-2" style="width:12px; height:12px; background:#bd93f9;"></span> <?= $lang === 'ar' ? 'دراكولا' : 'Dracula' ?></a></li>
<li><a class="dropdown-item d-flex align-items-center theme-select" href="#" data-theme="citrus"><span class="rounded-circle me-2" style="width:12px; height:12px; background:#84cc16;"></span> <?= $lang === 'ar' ? 'حمضيات' : 'Citrus' ?></a></li>
</ul>
</div>
<a href="?lang=<?= $lang === 'ar' ? 'en' : 'ar' ?>" class="btn btn-outline-secondary btn-sm me-3">
@ -5988,9 +6015,9 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<?php elseif ($page === 'customer_statement' || $page === 'supplier_statement'): ?>
<div class="card p-4">
<div class="d-flex justify-content-between align-items-center mb-4 d-print-none">
<h5 class="m-0" data-en="<?= $currTitle['en'] ?>" data-ar="<?= $currTitle['ar'] ?>"><?= $currTitle['en'] ?></h5>
<h5 class="m-0" data-en="<?= $currTitle['en'] ?>" data-ar="<?= $currTitle['ar'] ?>"><?= $lang === 'ar' ? $currTitle['ar'] : $currTitle['en'] ?></h5>
<button class="btn btn-outline-secondary d-print-none" onclick="window.print()">
<i class="bi bi-printer"></i> <span data-en="Print" data-ar="طباعة">Print</span>
<i class="bi bi-printer"></i> <span data-en="Print" data-ar="طباعة"><?= $lang === 'ar' ? 'طباعة' : 'Print' ?></span>
</button>
</div>
@ -5998,7 +6025,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<form method="GET" class="row g-3 align-items-end">
<input type="hidden" name="page" value="<?= $page ?>">
<div class="col-md-4">
<label class="form-label small fw-bold" data-en="Select <?= $page === 'customer_statement' ? 'Customer' : 'Supplier' ?>" data-ar="اختر <?= $page === 'customer_statement' ? 'العميل' : 'المورد' ?>">Select <?= $page === 'customer_statement' ? 'Customer' : 'Supplier' ?></label>
<label class="form-label small fw-bold" data-en="Select <?= $page === 'customer_statement' ? 'Customer' : 'Supplier' ?>" data-ar="اختر <?= $page === 'customer_statement' ? 'العميل' : 'المورد' ?>"><?= $lang === 'ar' ? ($page === 'customer_statement' ? 'اختر العميل' : 'اختر المورد') : 'Select ' . ($page === 'customer_statement' ? 'Customer' : 'Supplier') ?></label>
<select name="entity_id" class="form-select select2" required>
<option value="">---</option>
<?php foreach ($data['entities'] as $e): ?>
@ -6007,16 +6034,16 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
</select>
</div>
<div class="col-md-3">
<label class="form-label small fw-bold" data-en="From Date" data-ar="من تاريخ">From Date</label>
<label class="form-label small fw-bold" data-en="From Date" data-ar="من تاريخ"><?= $lang === 'ar' ? 'من تاريخ' : 'From Date' ?></label>
<input type="date" name="start_date" class="form-control" value="<?= htmlspecialchars($_GET['start_date'] ?? date('Y-m-01')) ?>">
</div>
<div class="col-md-3">
<label class="form-label small fw-bold" data-en="To Date" data-ar="إلى تاريخ">To Date</label>
<label class="form-label small fw-bold" data-en="To Date" data-ar="إلى تاريخ"><?= $lang === 'ar' ? 'إلى تاريخ' : 'To Date' ?></label>
<input type="date" name="end_date" class="form-control" value="<?= htmlspecialchars($_GET['end_date'] ?? date('Y-m-d')) ?>">
</div>
<div class="col-md-2">
<button type="submit" class="btn btn-primary w-100">
<i class="bi bi-search"></i> <span data-en="View Report" data-ar="عرض التقرير">View Report</span>
<i class="bi bi-search"></i> <span data-en="View Report" data-ar="عرض التقرير"><?= $lang === 'ar' ? 'عرض التقرير' : 'View Report' ?></span>
</button>
</div>
</form>
@ -6030,21 +6057,21 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<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" data-en="Statement of Account" data-ar="كشف حساب">Statement of Account</h2>
<h2 class="text-uppercase text-muted" data-en="Statement of Account" data-ar="كشف حساب"><?= $lang === 'ar' ? 'كشف حساب' : 'Statement of Account' ?></h2>
<p class="mb-0"><strong><?= htmlspecialchars($data['selected_entity']['name']) ?></strong></p>
<p class="text-muted small"><?= htmlspecialchars($data['selected_entity']['email']) ?> | <?= htmlspecialchars($data['selected_entity']['phone']) ?><br><span data-en="Period" data-ar="الفترة">Period</span>: <?= $_GET['start_date'] ?> <span data-en="to" data-ar="إلى">to</span> <?= $_GET['end_date'] ?></p>
<p class="text-muted small"><?= htmlspecialchars($data['selected_entity']['email']) ?> | <?= htmlspecialchars($data['selected_entity']['phone']) ?><br><span data-en="Period" data-ar="الفترة"><?= $lang === 'ar' ? 'الفترة' : 'Period' ?></span>: <?= $_GET['start_date'] ?> <span data-en="to" data-ar="إلى"><?= $lang === 'ar' ? 'إلى' : 'to' ?></span> <?= $_GET['end_date'] ?></p>
</div>
</div>
<div class="table-responsive">
<table class="table table-bordered table-sm">
<thead class="bg-light">
<tr>
<th data-en="Date" data-ar="التاريخ">Date</th>
<th data-en="Reference" data-ar="المرجع">Reference</th>
<th data-en="Description" data-ar="الوصف">Description</th>
<th data-en="Debit" data-ar="مدين" class="text-end">Debit</th>
<th data-en="Credit" data-ar="دائن" class="text-end">Credit</th>
<th data-en="Balance" data-ar="الرصيد" class="text-end">Balance</th>
<th data-en="Date" data-ar="التاريخ"><?= $lang === 'ar' ? 'التاريخ' : 'Date' ?></th>
<th data-en="Reference" data-ar="المرجع"><?= $lang === 'ar' ? 'المرجع' : 'Reference' ?></th>
<th data-en="Description" data-ar="الوصف"><?= $lang === 'ar' ? 'الوصف' : 'Description' ?></th>
<th data-en="Debit" data-ar="مدين" class="text-end"><?= $lang === 'ar' ? 'مدين' : 'Debit' ?></th>
<th data-en="Credit" data-ar="دائن" class="text-end"><?= $lang === 'ar' ? 'دائن' : 'Credit' ?></th>
<th data-en="Balance" data-ar="الرصيد" class="text-end"><?= $lang === 'ar' ? 'الرصيد' : 'Balance' ?></th>
</tr>
</thead>
<tbody>
@ -6064,20 +6091,20 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<td><?= $t['trans_type'] === 'invoice' ? ($page === 'supplier_statement' ? 'PUR-' : 'INV-').str_pad((string)$t['ref_no'], 5, '0', STR_PAD_LEFT) : 'RCP-'.str_pad((string)$t['id'], 5, '0', STR_PAD_LEFT) ?></td>
<td>
<?php if ($t['trans_type'] === 'invoice'): ?>
<span data-en="Tax Invoice" data-ar="فاتورة ضريبية">Tax Invoice</span>
<span data-en="Tax Invoice" data-ar="فاتورة ضريبية"><?= $lang === 'ar' ? 'فاتورة ضريبية' : 'Tax Invoice' ?></span>
<?php else: ?>
<span data-en="Payment" data-ar="دفع">Payment</span> - <span data-en="<?= $t['payment_method'] ?>" data-ar="<?= $t['payment_method'] === 'cash' ? 'نقد' : ($t['payment_method'] === 'card' ? 'بطاقة ائتمان' : 'آجل') ?>"><?= $t['payment_method'] ?></span>
<span data-en="Payment" data-ar="دفع"><?= $lang === 'ar' ? 'دفع' : 'Payment' ?></span> - <span data-en="<?= $t['payment_method'] ?>" data-ar="<?= $t['payment_method'] === 'cash' ? 'نقد' : ($t['payment_method'] === 'card' ? 'بطاقة ائتمان' : 'آجل') ?>"><?= $lang === 'ar' ? ($t['payment_method'] === 'cash' ? 'نقد' : ($t['payment_method'] === 'card' ? 'بطاقة ائتمان' : 'آجل')) : $t['payment_method'] ?></span>
<?php endif; ?>
</td>
<td class="text-end"><?= $debit > 0 ? number_format($debit, 3) : '' ?></td>
<td class="text-end"><?= $credit > 0 ? number_format($credit, 3) : '' ?></td>
<td class="text-end fw-bold"><?= number_format($running_balance, 3) ?></td>
<td class="text-end"><?= number_format($debit, 3) ?></td>
<td class="text-end"><?= number_format($credit, 3) ?></td>
<td class="text-end"><?= number_format($running_balance, 3) ?></td>
</tr>
<?php endforeach; ?>
</tbody>
<tfoot class="bg-light fw-bold">
<tr>
<td colspan="5" class="text-end" data-en="Closing Balance" data-ar="رصيد الإقفال">Closing Balance</td>
<td colspan="5" class="text-end" data-en="Closing Balance" data-ar="رصيد الإقفال"><?= $lang === 'ar' ? 'رصيد الإقفال' : 'Closing Balance' ?></td>
<td class="text-end">OMR <?= number_format($running_balance, 3) ?></td>
</tr>
</tfoot>

View File

@ -180,3 +180,16 @@
2026-02-21 08:21:09 - POST: {"text":"Hello","target":"ar"}
2026-02-21 08:22:20 - POST: {"text":"Hello","target":"ar"}
2026-02-21 08:24:11 - POST: {"name_en":"green onion","name_ar":"\u0628\u0635\u0644 \u0627\u062e\u0636\u0631","category_id":"2","unit_id":"1","supplier_id":"8","sku":"778690168233","sale_price":"0.1","purchase_price":"0.08","stock_quantity":"0.000","min_stock_level":"0.000","vat_rate":"5","expiry_date":"","promotion_start":"","promotion_end":"","promotion_percent":"0.00","add_item":""}
2026-02-21 09:33:25 - POST: {"name_en":"green onion","name_ar":"\u0628\u0635\u0644 \u0627\u062e\u0636\u0631","category_id":"2","unit_id":"1","supplier_id":"8","sku":"778690168233","sale_price":"0.1","purchase_price":"0.08","stock_quantity":"0.000","min_stock_level":"0.000","vat_rate":"5","expiry_date":"","promotion_start":"","promotion_end":"","promotion_percent":"0.00","add_item":""}
2026-02-21 09:53:07 - POST: {"action":"save_theme","theme":"dark"}
2026-02-21 09:53:13 - POST: {"action":"save_theme","theme":"default"}
2026-02-21 09:57:48 - POST: {"action":"save_theme","theme":"dark"}
2026-02-21 09:57:59 - POST: {"action":"save_theme","theme":"citrus"}
2026-02-21 09:58:03 - POST: {"action":"save_theme","theme":"nord"}
2026-02-21 09:58:06 - POST: {"action":"save_theme","theme":"nord"}
2026-02-21 09:58:08 - POST: {"action":"save_theme","theme":"dracula"}
2026-02-21 09:58:11 - POST: {"action":"save_theme","theme":"ocean"}
2026-02-21 09:58:17 - POST: {"action":"save_theme","theme":"default"}
2026-02-21 09:58:21 - POST: {"action":"save_theme","theme":"forest"}
2026-02-21 09:58:24 - POST: {"action":"save_theme","theme":"dracula"}
2026-02-21 09:58:32 - POST: {"action":"save_theme","theme":"default"}