Autosave: 20260221-173519

This commit is contained in:
Flatlogic Bot 2026-02-21 17:35:19 +00:00
parent 516cfb21f3
commit 259f6c425e
13 changed files with 136 additions and 274 deletions

View File

@ -4,9 +4,19 @@
function get_ai_env($key) {
$val = getenv($key);
if ($val !== false && $val !== '') return $val;
if (isset($_ENV[$key]) && $_ENV[$key] !== '') return $_ENV[$key];
if (isset($_SERVER[$key]) && $_SERVER[$key] !== '') return $_SERVER[$key];
if ($val !== false && $val !== '') {
error_log("get_ai_env: $key from getenv: " . $val);
return $val;
}
if (isset($_ENV[$key]) && $_ENV[$key] !== '') {
error_log("get_ai_env: $key from \$_ENV: " . $_ENV[$key]);
return $_ENV[$key];
}
if (isset($_SERVER[$key]) && $_SERVER[$key] !== '') {
error_log("get_ai_env: $key from \$_SERVER: " . $_SERVER[$key]);
return $_SERVER[$key];
}
error_log("get_ai_env: $key not found in environment");
return null;
}
@ -14,6 +24,7 @@ $projectUuid = get_ai_env('PROJECT_UUID');
$projectId = get_ai_env('PROJECT_ID');
if (!$projectUuid || !$projectId) {
error_log("PROJECT_UUID or PROJECT_ID missing, starting .env search");
$possiblePaths = [
__DIR__ . '/../../.env',
__DIR__ . '/../.env',
@ -24,18 +35,22 @@ if (!$projectUuid || !$projectId) {
foreach ($possiblePaths as $path) {
if (file_exists($path) && is_readable($path)) {
$lines = @file($path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) ?: [];
foreach ($lines as $line) {
$line = trim($line);
if ($line === '' || $line[0] === '#') continue;
if (!str_contains($line, '=')) continue;
[$k, $v] = array_map('trim', explode('=', $line, 2));
$v = trim($v, "\"' ");
if (!$projectUuid && $k === 'PROJECT_UUID') $projectUuid = $v;
if (!$projectId && $k === 'PROJECT_ID') $projectId = $v;
error_log("Trying .env path: $path");
$env = @parse_ini_file($path);
if ($env) {
if (!$projectUuid && !empty($env['PROJECT_UUID'])) {
$projectUuid = $env['PROJECT_UUID'];
error_log("Found PROJECT_UUID in $path: " . $projectUuid);
}
if (!$projectId && !empty($env['PROJECT_ID'])) {
$projectId = $env['PROJECT_ID'];
error_log("Found PROJECT_ID in $path: " . $projectId);
}
} else {
error_log("Failed to parse_ini_file: $path");
}
} else {
error_log("Path not found or not readable: $path");
}
if ($projectUuid && $projectId) break;
}
@ -50,7 +65,7 @@ return [
'project_id' => $projectId,
'project_uuid' => $projectUuid,
'project_header' => 'project-uuid',
'default_model' => 'gpt-5-mini',
'default_model' => 'gpt-4o-mini',
'timeout' => 30,
'verify_tls' => true,
];

View File

@ -110,6 +110,26 @@ body {
top: 0;
transition: all 0.3s;
z-index: 1000;
overflow-y: auto;
overflow-x: hidden;
}
/* Custom scrollbar for sidebar */
.sidebar::-webkit-scrollbar {
width: 6px;
}
.sidebar::-webkit-scrollbar-track {
background: transparent;
}
.sidebar::-webkit-scrollbar-thumb {
background: rgba(255, 255, 255, 0.2);
border-radius: 3px;
}
.sidebar::-webkit-scrollbar-thumb:hover {
background: rgba(255, 255, 255, 0.3);
}
/* Base positioning for desktop */

View File

@ -35,7 +35,7 @@ if (empty($slides)) {
<title>Customer Display</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.1/font/bootstrap-icons.css">
<link rel="stylesheet" href="assets/css/custom.css">
<link rel="stylesheet" href="assets/css/custom.css?v=<?= time() ?>">
<style>
body {
background-color: var(--bg);

View File

@ -1,31 +0,0 @@
// --- User & Role Groups Handlers ---
if (isset($_POST['add_role_group'])) {
$name = $_POST['name'] ?? '';
$permissions = isset($_POST['permissions']) ? json_encode($_POST['permissions']) : '[]';
if ($name) {
try {
$stmt = db()->prepare("INSERT INTO role_groups (name, permissions) VALUES (?, ?)");
$stmt->execute([$name, $permissions]);
$message = "Role Group added successfully!";
} catch (PDOException $e) {
$message = "Error adding role group: " . $e->getMessage();
}
}
}
if (isset($_POST['add_user'])) {
$username = $_POST['username'] ?? '';
$password = $_POST['password'] ?? '';
$email = $_POST['email'] ?? '';
$group_id = (int)($_POST['group_id'] ?? 0) ?: null;
if ($username && $password) {
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
$stmt = db()->prepare("INSERT INTO users (username, password, email, group_id) VALUES (?, ?, ?, ?)");
try {
$stmt->execute([$username, $hashed_password, $email, $group_id]);
$message = "User added successfully!";
} catch (PDOException $e) {
if ($e->getCode() == '23000') {
$message = "Error: Username already exists.";
} else {

View File

@ -1 +0,0 @@
Where: 1=1 Params: []

View File

@ -548,6 +548,7 @@ if (isset($_GET['action']) || isset($_POST['action'])) {
$translated = trim(LocalAIApi::extractText($resp));
echo json_encode(['success' => true, 'translated' => $translated]);
} else {
error_log("Translation failed for text '$text': " . json_encode($resp));
echo json_encode(['success' => false, 'error' => $resp['error'] ?? 'Translation failed']);
}
exit;
@ -1257,6 +1258,7 @@ function getPromotionalPrice($item) {
$stmt->execute([$sku, $name_en, $name_ar, (float)$sale_price, (float)$purchase_price]);
$count++;
} catch (Throwable $e) {
file_put_contents('import_debug.log', date('Y-m-d H:i:s') . " - Row error: " . $e->getMessage() . " Data: " . json_encode($data) . "\n", FILE_APPEND);
error_log("Import row error: " . $e->getMessage() . " Data: " . print_r($data, true));
$errors++;
}
@ -3795,7 +3797,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<tr>
<td><?= htmlspecialchars($c['name']) ?></td>
<td><?= htmlspecialchars($c['phone']) ?></td>
<td class="text-end">OMR <?= number_format((float)$c['balance'], 3) ?></td>
<td class="text-end" data-en="OMR <?= number_format((float)$c['balance'], 3) ?>" data-ar="<?= number_format((float)$c['balance'], 3) ?> ر.ع."><?= $lang === 'ar' ? number_format((float)$c['balance'], 3) . ' ر.ع.' : 'OMR ' . number_format((float)$c['balance'], 3) ?></td>
</tr>
<?php endforeach; ?>
</tbody>
@ -3902,7 +3904,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<td><?= htmlspecialchars($c['tax_id'] ?? '---') ?></td>
<td><?= htmlspecialchars($c['email']) ?></td>
<td><?= htmlspecialchars($c['phone']) ?></td>
<td class="text-end">OMR <?= number_format((float)$c['balance'], 3) ?></td>
<td class="text-end" data-en="OMR <?= number_format((float)$c['balance'], 3) ?>" data-ar="<?= number_format((float)$c['balance'], 3) ?> ر.ع."><?= $lang === 'ar' ? number_format((float)$c['balance'], 3) . ' ر.ع.' : 'OMR ' . number_format((float)$c['balance'], 3) ?></td>
<td class="text-end">
<div class="btn-group btn-group-sm">
<?php if (can('customers_edit') || can('suppliers_edit')): ?>
@ -6170,7 +6172,12 @@ $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'] ?>"><?= $lang === 'ar' ? $currTitle['ar'] : $currTitle['en'] ?></h5>
<?php
$entity_suffix = isset($data['selected_entity']['name']) ? ' - ' . htmlspecialchars($data['selected_entity']['name']) : '';
$page_title_en = $currTitle['en'] . $entity_suffix;
$page_title_ar = $currTitle['ar'] . $entity_suffix;
?>
<h5 class="m-0" data-en="<?= $page_title_en ?>" data-ar="<?= $page_title_ar ?>"><?= $lang === 'ar' ? $page_title_ar : $page_title_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="طباعة"><?= $lang === 'ar' ? 'طباعة' : 'Print' ?></span>
</button>
@ -6212,7 +6219,7 @@ $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="كشف حساب"><?= $lang === 'ar' ? 'كشف حساب' : 'Statement of Account' ?></h2>
<h2 class="text-uppercase text-muted" data-en="Statement of Account - <?= htmlspecialchars($data['selected_entity']['name']) ?>" data-ar="كشف حساب - <?= htmlspecialchars($data['selected_entity']['name']) ?>"><?= $lang === 'ar' ? 'كشف حساب' : 'Statement of Account' ?> - <?= htmlspecialchars($data['selected_entity']['name']) ?></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="الفترة"><?= $lang === 'ar' ? 'الفترة' : 'Period' ?></span>: <?= $_GET['start_date'] ?> <span data-en="to" data-ar="إلى"><?= $lang === 'ar' ? 'إلى' : 'to' ?></span> <?= $_GET['end_date'] ?></p>
</div>
@ -6243,7 +6250,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
?>
<tr>
<td><?= $t['trans_date'] ?></td>
<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><?= $t['trans_type'] === 'invoice' ? ($lang === 'ar' ? ($page === 'supplier_statement' ? 'شراء-' : 'بيع-') : ($page === 'supplier_statement' ? 'PUR-' : 'INV-')).str_pad((string)$t['ref_no'], 5, '0', STR_PAD_LEFT) : ($lang === 'ar' ? 'قبض-' : '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="فاتورة ضريبية"><?= $lang === 'ar' ? 'فاتورة ضريبية' : 'Tax Invoice' ?></span>
@ -6260,7 +6267,7 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Accounting System';
<tfoot class="bg-light fw-bold">
<tr>
<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>
<td class="text-end" data-en="OMR <?= number_format($running_balance, 3) ?>" data-ar="<?= number_format($running_balance, 3) ?> ر.ع."><?= $lang === 'ar' ? number_format($running_balance, 3) . ' ر.ع.' : 'OMR ' . number_format($running_balance, 3) ?></td>
</tr>
</tfoot>
</table>

View File

@ -1,5 +0,0 @@
2026-02-18 06:51:36 - Failed login for 'admin'. Reason: Password mismatch
2026-02-18 06:51:52 - Failed login for 'admin'. Reason: Password mismatch
2026-02-18 07:32:35 - Failed login for 'admin'. Reason: Password mismatch
2026-02-18 07:59:54 - Failed login for 'admin'. Reason: Password mismatch
2026-02-18 07:59:58 - Failed login for 'admin'. Reason: Password mismatch

View File

@ -1,200 +1,5 @@
2026-02-18 09:15:41 - POST: {"username":"admin","password":"admin","login":""}
2026-02-18 09:30:37 - POST: {"username":"moosa","email":"aalabry@gmail.com","password":"123456","group_id":"1","add_user":""}
2026-02-18 09:32:14 - POST: {"name":"Cashier","permissions":["pos_view","pos_add","items_view","items_add"],"add_role_group":""}
2026-02-18 09:33:29 - POST: {"name":"Admin","permissions":["pos_view","pos_add","pos_edit","quotations_view","quotations_add","quotations_edit","customers_view","customers_add","customers_edit","suppliers_view","suppliers_add","suppliers_edit","sales_view","sales_add","sales_edit","purchases_view","purchases_add","purchases_edit","hr_view","hr_add","hr_edit","hr_delete","users_view"],"add_role_group":""}
2026-02-18 09:34:03 - POST: {"name":"Accountant","permissions":["accounting_view","accounting_add","accounting_edit"],"add_role_group":""}
2026-02-18 10:10:35 - POST: {"name":"Accountant","permissions":["accounting_view","accounting_add","accounting_edit"],"add_role_group":""}
2026-02-18 10:10:56 - POST: {"id":"7","delete_role_group":""}
2026-02-18 10:12:05 - POST: {"create_backup":""}
2026-02-18 10:46:04 - POST: {"license_key":"Flat-8822-1192-3301","activate":""}
2026-02-18 10:46:14 - POST: {"license_key":": FLAT-8822-1192-3301","activate":""}
2026-02-18 10:48:04 - POST: {"license_key":" FLAT-8822-1192-3301","activate":""}
2026-02-18 11:33:56 - POST: {"name":"Counter 1","add_cash_register":""}
2026-02-18 11:34:15 - POST: {"name":"Counter 2","add_cash_register":""}
2026-02-18 11:43:14 - POST: {"register_id":"1","opening_balance":"0.000","open_register":""}
2026-02-18 11:50:03 - POST: {"register_id":"1","opening_balance":"0.000","open_register":""}
2026-02-18 12:01:49 - POST: {"session_id":"1","cash_in_hand":"0","notes":"","close_register":""}
2026-02-18 13:05:39 - POST: {"settings":{"company_name":"Bahjet Al-Safa Trading","company_phone":"99359472","company_email":"aalabry@gmail.com","vat_number":"OM25418","company_address":"AL Hamra\r\nOman","allow_zero_stock_sell":"0","loyalty_enabled":"0","loyalty_points_per_unit":"1","loyalty_redeem_points_per_unit":"100"},"update_settings":""}
2026-02-18 13:06:21 - POST: {"settings":{"company_name":"Bahjet Al-Safa Trading","company_phone":"99359472","company_email":"aalabry@gmail.com","vat_number":"OM25418","company_address":"AL Hamra\r\nOman","allow_zero_stock_sell":"1","loyalty_enabled":"0","loyalty_points_per_unit":"1","loyalty_redeem_points_per_unit":"100"},"update_settings":""}
2026-02-18 13:33:14 - POST: {"action":"save_pos_transaction","customer_id":"1","payments":"[{\"method\":\"credit\",\"amount\":1.19}]","total_amount":"1.19","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":2,\"price\":0.3825},{\"id\":2,\"qty\":2,\"price\":0.2125}]"}
2026-02-18 14:03:07 - POST: {"action":"hold_pos_cart","cart_name":"Cart 6:03:04 PM","items":"[{\"id\":1,\"nameEn\":\"Tomato\",\"nameAr\":\"\u0637\u0645\u0627\u0637\u0645\",\"price\":0.3825,\"stock_quantity\":-17.5,\"qty\":1}]","customer_id":""}
2026-02-18 14:03:18 - POST: {"action":"delete_held_cart","id":"9"}
2026-02-18 15:09:18 - POST: {"username":"admin","password":"admin","login":""}
2026-02-18 15:09:38 - POST: {"action":"save_theme","theme":"dark"}
2026-02-18 15:09:45 - POST: {"action":"save_theme","theme":"forest"}
2026-02-18 15:09:50 - POST: {"action":"save_theme","theme":"sunset"}
2026-02-18 15:09:55 - POST: {"action":"save_theme","theme":"dark"}
2026-02-18 15:10:04 - POST: {"action":"save_theme","theme":"forest"}
2026-02-18 15:10:09 - POST: {"action":"save_theme","theme":"sunset"}
2026-02-18 15:24:03 - POST: {"action":"save_theme","theme":"default"}
2026-02-18 15:32:30 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.595}]","total_amount":"0.595","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.3825},{\"id\":2,\"qty\":1,\"price\":0.2125}]"}
2026-02-18 15:36:20 - POST: {"action":"save_theme","theme":"forest"}
2026-02-18 15:36:22 - POST: {"action":"save_theme","theme":"sunset"}
2026-02-18 15:37:25 - POST: {"action":"save_theme","theme":"default"}
2026-02-18 15:40:10 - POST: {"action":"save_theme","theme":"sunset"}
2026-02-18 15:40:14 - POST: {"action":"save_theme","theme":"ocean"}
2026-02-18 15:40:20 - POST: {"action":"save_theme","theme":"default"}
2026-02-18 17:02:02 - POST: {"settings":{"customer_display_greeting_title":"Welcome","customer_display_greeting_text":"\u0623\u0647\u0644\u0627 \u0648\u0633\u0647\u0644\u0627\u064b \u0628\u0643\u0640\u0640\u0645"},"update_settings":""}
2026-02-18 18:09:07 - POST: {"open_register":"1","register_id":"1","opening_balance":"0"}
2026-02-18 18:09:25 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.383}]","total_amount":"0.3825","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.3825}]"}
2026-02-18 18:09:27 - POST: {"open_register":"1","register_id":"1","opening_balance":"0"}
2026-02-18 18:09:44 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.595}]","total_amount":"0.595","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":2,\"qty\":1,\"price\":0.2125},{\"id\":1,\"qty\":1,\"price\":0.3825}]"}
2026-02-18 18:09:48 - POST: {"open_register":"1","register_id":"1","opening_balance":"0"}
2026-02-18 18:10:17 - POST: {"close_register":"1","session_id":"2","cash_in_hand":"5","notes":""}
2026-02-19 05:17:29 - POST: {"license_key":"FLAT-5FDB-C2BB","activate":""}
2026-02-19 05:18:29 - POST: {"open_register":"1","register_id":"1","opening_balance":"0"}
2026-02-19 05:18:39 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.595}]","total_amount":"0.595","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.3825},{\"id\":2,\"qty\":1,\"price\":0.2125}]"}
2026-02-19 05:18:51 - POST: {"open_register":"1","register_id":"1","opening_balance":"0"}
2026-02-19 05:47:55 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.595}]","total_amount":"0.595","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.3825},{\"id\":2,\"qty\":1,\"price\":0.2125}]"}
2026-02-19 05:59:46 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.595}]","total_amount":"0.595","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.3825},{\"id\":2,\"qty\":1,\"price\":0.2125}]"}
2026-02-19 06:00:05 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.595}]","total_amount":"0.595","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.3825},{\"id\":2,\"qty\":1,\"price\":0.2125}]"}
2026-02-19 06:00:51 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.595}]","total_amount":"0.595","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.3825},{\"id\":2,\"qty\":1,\"price\":0.2125}]"}
2026-02-19 06:12:12 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.595}]","total_amount":"0.595","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.3825},{\"id\":2,\"qty\":1,\"price\":0.2125}]"}
2026-02-19 06:12:47 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.595}]","total_amount":"0.595","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":2,\"qty\":1,\"price\":0.2125},{\"id\":1,\"qty\":1,\"price\":0.3825}]"}
2026-02-19 06:17:13 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.595}]","total_amount":"0.595","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.3825},{\"id\":2,\"qty\":1,\"price\":0.2125}]"}
2026-02-19 06:17:33 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.595}]","total_amount":"0.595","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.3825},{\"id\":2,\"qty\":1,\"price\":0.2125}]"}
2026-02-19 06:23:28 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.595}]","total_amount":"0.595","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.3825},{\"id\":2,\"qty\":1,\"price\":0.2125}]"}
2026-02-19 06:50:40 - POST: {"name_en":"Tissue","name_ar":"\u0645\u062d\u0627\u0631\u0645 \u0648\u0631\u0642\u064a\u0629","category_id":"2","unit_id":"2","supplier_id":"6","sku":"5673086966938977","sale_price":"0.25","purchase_price":"0.2","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-19 06:53:36 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.978}]","total_amount":"0.9775","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":2,\"price\":0.3825},{\"id\":2,\"qty\":1,\"price\":0.2125}]"}
2026-02-19 07:01:43 - POST: {"name_en":"Tissue","name_ar":"\u0645\u062d\u0627\u0631\u0645 \u0648\u0631\u0642\u064a\u0629","category_id":"2","unit_id":"2","supplier_id":"6","sku":"760115926272","sale_price":"0.25","purchase_price":"0.2","stock_quantity":"5","min_stock_level":"0.000","vat_rate":"5","expiry_date":"","promotion_start":"","promotion_end":"","promotion_percent":"0.00","add_item":""}
2026-02-19 07:02:59 - POST: {"name_en":"Tissue","name_ar":"\u0645\u062d\u0627\u0631\u0645 \u0648\u0631\u0642\u064a\u0629","category_id":"2","unit_id":"2","supplier_id":"6","sku":"760115926272","sale_price":"0.25","purchase_price":"0.2","stock_quantity":"5","min_stock_level":"0.000","vat_rate":"5","expiry_date":"","promotion_start":"","promotion_end":"","promotion_percent":"0.00","add_item":""}
2026-02-19 07:12:25 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.883}]","total_amount":"0.8825000000000001","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.3825},{\"id\":3,\"qty\":2,\"price\":0.25}]"}
2026-02-19 07:12:39 - POST: {"close_register":"1","session_id":"3","cash_in_hand":"5","notes":""}
2026-02-19 07:30:27 - POST: {"open_register":"1","register_id":"1","opening_balance":"6"}
2026-02-19 07:30:51 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.845}]","total_amount":"0.8450000000000001","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.3825},{\"id\":3,\"qty\":1,\"price\":0.25},{\"id\":2,\"qty\":1,\"price\":0.2125}]"}
2026-02-19 07:30:56 - POST: {"open_register":"1","register_id":"1","opening_balance":"6"}
2026-02-19 07:31:28 - POST: {"close_register":"1","session_id":"4","cash_in_hand":"55","notes":""}
2026-02-19 07:33:04 - POST: {"open_register":"1","register_id":"1","opening_balance":"10"}
2026-02-19 07:33:19 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.845}]","total_amount":"0.845","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":3,\"qty\":1,\"price\":0.25},{\"id\":2,\"qty\":1,\"price\":0.2125},{\"id\":1,\"qty\":1,\"price\":0.3825}]"}
2026-02-19 07:33:23 - POST: {"open_register":"1","register_id":"1","opening_balance":"10"}
2026-02-19 07:33:39 - POST: {"close_register":"1","session_id":"5","cash_in_hand":"10","notes":""}
2026-02-19 07:57:20 - POST: {"open_register":"1","register_id":"1","opening_balance":"44"}
2026-02-19 07:57:30 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.845}]","total_amount":"0.8450000000000001","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.3825},{\"id\":3,\"qty\":1,\"price\":0.25},{\"id\":2,\"qty\":1,\"price\":0.2125}]"}
2026-02-19 07:57:44 - POST: {"close_register":"1","session_id":"6","cash_in_hand":"9","notes":""}
2026-02-19 07:58:34 - POST: {"open_register":"1","register_id":"1","opening_balance":"11"}
2026-02-19 07:58:46 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.845}]","total_amount":"0.8450000000000001","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.3825},{\"id\":3,\"qty\":1,\"price\":0.25},{\"id\":2,\"qty\":1,\"price\":0.2125}]"}
2026-02-19 07:59:08 - POST: {"close_register":"1","session_id":"7","cash_in_hand":"13","notes":""}
2026-02-19 08:20:34 - POST: {"open_register":"1","register_id":"1","opening_balance":"12"}
2026-02-19 08:20:44 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.845}]","total_amount":"0.8450000000000001","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.3825},{\"id\":3,\"qty\":1,\"price\":0.25},{\"id\":2,\"qty\":1,\"price\":0.2125}]"}
2026-02-19 08:20:57 - POST: {"close_register":"1","session_id":"8","cash_in_hand":"14","notes":""}
2026-02-19 10:20:51 - POST: {"open_register":"1","register_id":"1","opening_balance":"22"}
2026-02-19 10:21:00 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.845}]","total_amount":"0.8450000000000001","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.3825},{\"id\":3,\"qty\":1,\"price\":0.25},{\"id\":2,\"qty\":1,\"price\":0.2125}]"}
2026-02-19 10:21:15 - POST: {"close_register":"1","session_id":"9","cash_in_hand":"10","notes":""}
2026-02-19 10:50:12 - POST: {"open_register":"1","register_id":"2","opening_balance":"10"}
2026-02-19 10:50:49 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.845}]","total_amount":"0.8450000000000001","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.3825},{\"id\":3,\"qty\":1,\"price\":0.25},{\"id\":2,\"qty\":1,\"price\":0.2125}]"}
2026-02-19 10:51:45 - POST: {"id":"3","name_en":"Tissue","name_ar":"\u0645\u062d\u0627\u0631\u0645 \u0648\u0631\u0642\u064a\u0629","category_id":"2","unit_id":"2","supplier_id":"6","sale_price":"0.25","purchase_price":"0.2","stock_quantity":"-4","min_stock_level":"0","sku":"760115926272","vat_rate":"0","promotion_start":"","promotion_end":"","promotion_percent":"0","edit_item":""}
2026-02-19 10:52:25 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.845}]","total_amount":"0.8450000000000001","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.3825},{\"id\":3,\"qty\":1,\"price\":0.25},{\"id\":2,\"qty\":1,\"price\":0.2125}]"}
2026-02-19 10:54:21 - POST: {"open_register":"1","register_id":"1","opening_balance":"5"}
2026-02-19 10:54:24 - POST: {"open_register":"1","register_id":"1","opening_balance":"5"}
2026-02-19 10:54:25 - POST: {"open_register":"1","register_id":"2","opening_balance":"5"}
2026-02-19 10:54:25 - POST: {"open_register":"1","register_id":"2","opening_balance":"5"}
2026-02-19 10:54:26 - POST: {"open_register":"1","register_id":"2","opening_balance":"5"}
2026-02-19 11:26:49 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.845}]","total_amount":"0.8450000000000001","tax_amount":"0.010119047619047618","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":3,\"qty\":1,\"price\":0.25,\"vat_rate\":0,\"vat_amount\":0},{\"id\":1,\"qty\":1,\"price\":0.3825,\"vat_rate\":0,\"vat_amount\":0},{\"id\":2,\"qty\":1,\"price\":0.2125,\"vat_rate\":5,\"vat_amount\":0.010119047619047618}]"}
2026-02-19 11:27:38 - POST: {"type":"sale","customer_id":"4","invoice_date":"2026-02-19","payment_type":"cash","status":"unpaid","paid_amount":"0.000","add_invoice":""}
2026-02-19 11:48:37 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":1}]","total_amount":"0.2125","tax_amount":"0.010119047619047618","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":2,\"qty\":1,\"price\":0.2125,\"vat_rate\":5,\"vat_amount\":0.010119047619047618}]"}
2026-02-19 12:56:11 - POST: {"type":"purchase","customer_id":"5","invoice_date":"2026-02-19","payment_type":"cash","status":"unpaid","paid_amount":"0.000","item_ids":["1"],"quantities":["1"],"prices":["0.400"],"add_invoice":""}
2026-02-19 12:56:41 - POST: {"type":"purchase","customer_id":"5","invoice_date":"2026-02-19","payment_type":"cash","status":"unpaid","paid_amount":"0.000","item_ids":["1"],"quantities":["1"],"prices":["0.400"],"add_invoice":""}
2026-02-19 12:57:01 - POST: {"type":"purchase","customer_id":"5","invoice_date":"2026-02-19","payment_type":"cash","status":"unpaid","paid_amount":"0.000","item_ids":["1"],"quantities":["1"],"prices":["0.400"],"add_invoice":""}
2026-02-19 12:57:13 - POST: {"type":"purchase","customer_id":"5","invoice_date":"2026-02-19","payment_type":"cash","status":"unpaid","paid_amount":"0.000","item_ids":["1"],"quantities":["1"],"prices":["0.400"],"add_invoice":""}
2026-02-19 12:57:25 - POST: {"type":"purchase","customer_id":"5","invoice_date":"2026-02-19","payment_type":"cash","status":"unpaid","paid_amount":"0.000","item_ids":["1"],"quantities":["1"],"prices":["0.400"],"add_invoice":""}
2026-02-19 13:13:37 - POST: {"type":"purchase","customer_id":"5","invoice_date":"2026-02-19","payment_type":"cash","status":"unpaid","paid_amount":"0.000","item_ids":["1"],"quantities":["1"],"prices":["0.400"],"add_invoice":""}
2026-02-19 13:14:31 - POST: {"type":"purchase","customer_id":"6","invoice_date":"2026-02-19","payment_type":"cash","status":"unpaid","paid_amount":"0.000","item_ids":["1"],"quantities":["1"],"prices":["0.400"],"add_invoice":""}
2026-02-19 13:14:55 - POST: {"type":"sale","customer_id":"4","invoice_date":"2026-02-19","payment_type":"cash","status":"unpaid","paid_amount":"0.000","item_ids":["1"],"quantities":["1"],"prices":["0.450"],"add_invoice":""}
2026-02-19 13:59:29 - POST: {"type":"sale","customer_id":"4","invoice_date":"2026-02-19","payment_type":"cash","status":"unpaid","paid_amount":"0.000","item_ids":["1"],"quantities":["1"],"prices":["0.450"],"add_invoice":""}
2026-02-19 14:55:10 - POST: {"type":"sale","customer_id":"4","invoice_date":"2026-02-19","payment_type":"cash","status":"unpaid","paid_amount":"0.000","item_ids":["1"],"quantities":["1"],"prices":["0.450"],"add_invoice":""}
2026-02-19 14:55:32 - POST: {"type":"sale","customer_id":"4","invoice_date":"2026-02-19","payment_type":"cash","status":"paid","paid_amount":"0.000","item_ids":["1"],"quantities":["1"],"prices":["0.450"],"add_invoice":""}
2026-02-19 15:06:48 - POST: {"type":"sale","customer_id":"4","invoice_date":"2026-02-19","payment_type":"cash","status":"paid","paid_amount":"0.000","item_ids":["1"],"quantities":["1"],"prices":["0.450"],"add_invoice":""}
2026-02-19 18:01:51 - POST: {"license_key":"FLAT-TEST-1234-5678","activate":""}
2026-02-19 18:07:46 - POST: {"license_key":"FLAT-TEST-1234-5678","activate":""}
2026-02-19 18:07:51 - POST: {"license_key":"FLAT-TEST-1234-5678","activate":""}
2026-02-19 18:08:00 - POST: {"license_key":"FLAT-TEST-1234-5678","activate":""}
2026-02-19 18:08:08 - POST: {"license_key":"FLAT-TEST-1234-5678","activate":""}
2026-02-19 18:15:44 - POST: {"license_key":"FLAT-5FDB-C2BB","activate":""}
2026-02-19 18:26:28 - POST: {"license_key":"FLAT-5FDB-C2BB","activate":""}
2026-02-20 03:06:13 - POST: {"id":"6","name":"Accountant","permissions":["accounting_view","accounting_add","accounting_edit","accounting_delete","trial_balance_view","trial_balance_add","trial_balance_edit","trial_balance_delete","profit_loss_view","profit_loss_add","profit_loss_edit","profit_loss_delete","balance_sheet_view","balance_sheet_add","balance_sheet_edit","balance_sheet_delete","vat_report_view","vat_report_add","vat_report_edit","vat_report_delete"],"edit_role_group":""}
2026-02-20 03:06:37 - POST: {"id":"1","name":"Administrator","permissions":["dashboard_view","dashboard_add","dashboard_edit","dashboard_delete","items_view","items_add","items_edit","items_delete","categories_view","categories_add","categories_edit","categories_delete","units_view","units_add","units_edit","units_delete","customers_view","customers_add","customers_edit","customers_delete","suppliers_view","suppliers_add","suppliers_edit","suppliers_delete","pos_view","pos_add","pos_edit","pos_delete","sales_view","sales_add","sales_edit","sales_delete","sales_returns_view","sales_returns_add","sales_returns_edit","sales_returns_delete","quotations_view","quotations_add","quotations_edit","quotations_delete","purchases_view","purchases_add","purchases_edit","purchases_delete","purchase_returns_view","purchase_returns_add","purchase_returns_edit","purchase_returns_delete","expense_categories_view","expense_categories_add","expense_categories_edit","expense_categories_delete","expenses_view","expenses_add","expenses_edit","expenses_delete","accounting_view","accounting_add","accounting_edit","accounting_delete","trial_balance_view","trial_balance_add","trial_balance_edit","trial_balance_delete","profit_loss_view","profit_loss_add","profit_loss_edit","profit_loss_delete","balance_sheet_view","balance_sheet_add","balance_sheet_edit","balance_sheet_delete","vat_report_view","vat_report_add","vat_report_edit","vat_report_delete","hr_departments_view","hr_departments_add","hr_departments_edit","hr_departments_delete","hr_employees_view","hr_employees_add","hr_employees_edit","hr_employees_delete","hr_attendance_view","hr_attendance_add","hr_attendance_edit","hr_attendance_delete","hr_payroll_view","hr_payroll_add","hr_payroll_edit","hr_payroll_delete","customer_statement_view","customer_statement_add","customer_statement_edit","customer_statement_delete","supplier_statement_view","supplier_statement_add","supplier_statement_edit","supplier_statement_delete","cashflow_report_view","cashflow_report_add","cashflow_report_edit","cashflow_report_delete","expiry_report_view","expiry_report_add","expiry_report_edit","expiry_report_delete","low_stock_report_view","low_stock_report_add","low_stock_report_edit","low_stock_report_delete","loyalty_history_view","loyalty_history_add","loyalty_history_edit","loyalty_history_delete","payment_methods_view","payment_methods_add","payment_methods_edit","payment_methods_delete","devices_view","devices_add","devices_edit","devices_delete","settings_view","settings_add","settings_edit","settings_delete","role_groups_view","role_groups_add","role_groups_edit","role_groups_delete","users_view","users_add","users_edit","users_delete","cash_registers_view","cash_registers_add","cash_registers_edit","cash_registers_delete","register_sessions_view","register_sessions_add","register_sessions_edit","register_sessions_delete","scale_devices_view","scale_devices_add","scale_devices_edit","scale_devices_delete","customer_display_settings_view","customer_display_settings_add","customer_display_settings_edit","customer_display_settings_delete","backups_view","backups_add","backups_edit","backups_delete","logs_view","logs_add","logs_edit","logs_delete"],"edit_role_group":""}
2026-02-20 03:07:31 - POST: {"id":"4","name":"Cashier","permissions":["items_view","items_add","pos_view","pos_add","sales_view","sales_add"],"edit_role_group":""}
2026-02-20 03:34:50 - POST: {"id":"4","name":"Cashier","permissions":["items_view","items_add","pos_view","pos_add","sales_view","sales_add"],"edit_role_group":""}
2026-02-20 03:35:39 - POST: {"action":"translate","text":"\u062d\u0628 \u0647\u0627\u0644","target":"en"}
2026-02-20 03:37:34 - POST: {"action":"translate","text":"\u0628\u0647\u0627\u0631\u0627\u062a","target":"en"}
2026-02-20 03:37:42 - POST: {"name_en":"Spices","name_ar":"\u0628\u0647\u0627\u0631\u0627\u062a","add_category":""}
2026-02-20 03:53:00 - POST: {"action":"translate","text":"\u0623\u062f\u0648\u0627\u062a \u0645\u0646\u0632\u0644\u064a\u0629","target":"en"}
2026-02-20 03:53:17 - POST: {"id":"1","name_en":"Household items","name_ar":"\u0623\u062f\u0648\u0627\u062a \u0645\u0646\u0632\u0644\u064a\u0629","edit_category":""}
2026-02-20 03:53:42 - POST: {"action":"translate","text":"\u0628\u0642\u0648\u0644\u064a\u0627\u062a","target":"en"}
2026-02-20 03:53:58 - POST: {"name_en":"Legumes","name_ar":"\u0628\u0642\u0648\u0644\u064a\u0627\u062a","add_category":""}
2026-02-20 03:54:22 - POST: {"action":"translate","text":"\u0639\u064a\u0634","target":"en"}
2026-02-20 03:54:43 - POST: {"name_en":"Rice","name_ar":"\u0639\u064a\u0634","add_category":""}
2026-02-20 03:55:23 - POST: {"action":"save_theme","theme":"dark"}
2026-02-20 03:55:24 - POST: {"action":"save_theme","theme":"ocean"}
2026-02-20 07:27:29 - POST: {"action":"save_theme","theme":"default"}
2026-02-20 07:27:58 - POST: {"type":"supplier","name":"Al BAimain","email":"","phone":"","tax_id":"om12344","balance":"0.000","add_customer":""}
2026-02-20 07:28:32 - POST: {"type":"customer","name":"Hamed Mohammed","email":"","phone":"","tax_id":"","balance":"0.000","add_customer":""}
2026-02-20 07:29:31 - POST: {"type":"sale","customer_id":"7","invoice_date":"2026-02-20","due_date":"","payment_type":"cash","status":"paid","paid_amount":"0.000","item_ids":["1"],"quantities":["1"],"prices":["0.450"],"add_invoice":""}
2026-02-20 07:30:15 - POST: {"type":"purchase","customer_id":"7","invoice_date":"2026-02-20","due_date":"","payment_type":"cash","status":"paid","paid_amount":"0.000","item_ids":["1"],"quantities":["150"],"prices":["0.400"],"add_invoice":""}
2026-02-20 09:27:36 - POST: {"invoice_id":"7","return_date":"2026-02-20","quantities":["5"],"item_ids":["1"],"prices":["0.400"],"notes":"","add_purchase_return":""}
2026-02-20 09:28:59 - POST: {"invoice_id":"7","return_date":"2026-02-20","quantities":["3"],"item_ids":["1"],"prices":["0.400"],"notes":"","add_purchase_return":""}
2026-02-20 09:31:35 - POST: {"invoice_id":"31","return_date":"2026-02-20","quantities":["1"],"item_ids":["1"],"prices":["0.450"],"notes":"","add_sales_return":""}
2026-02-20 09:50:43 - POST: {"supplier_id":"7","lpo_date":"2026-02-20","delivery_date":"2026-02-22","terms_conditions":"","add_lpo":""}
2026-02-20 09:50:46 - POST: {"supplier_id":"7","lpo_date":"2026-02-20","delivery_date":"2026-02-22","terms_conditions":"","add_lpo":""}
2026-02-20 09:53:21 - POST: {"supplier_id":"7","lpo_date":"2026-02-20","delivery_date":"2026-02-22","terms_conditions":"","add_lpo":""}
2026-02-20 10:00:29 - POST: {"supplier_id":"7","lpo_date":"2026-02-20","delivery_date":"2026-02-22","terms_conditions":"","add_lpo":""}
2026-02-20 10:00:33 - POST: {"delete_lpo":"","id":"1"}
2026-02-20 10:10:17 - POST: {"lpo_id":"4","supplier_id":"6","lpo_date":"2026-02-20","delivery_date":"2026-02-22","status":"pending","terms_conditions":"","item_ids":["1"],"quantities":["100"],"prices":["0.400"],"edit_lpo":""}
2026-02-20 10:21:07 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.95}]","total_amount":"0.95","tax_amount":"0.011904761904761904","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.45,\"vat_rate\":0,\"vat_amount\":0},{\"id\":3,\"qty\":1,\"price\":0.25,\"vat_rate\":0,\"vat_amount\":0},{\"id\":2,\"qty\":1,\"price\":0.25,\"vat_rate\":5,\"vat_amount\":0.011904761904761904}]"}
2026-02-20 10:22:29 - POST: {"lpo_id":"4","supplier_id":"6","lpo_date":"2026-02-20","delivery_date":"2026-02-22","status":"pending","terms_conditions":"","item_ids":["1"],"quantities":["10"],"prices":["0.400"],"edit_lpo":""}
2026-02-20 11:13:39 - POST: {"lpo_id":"4","supplier_id":"6","lpo_date":"2026-02-20","delivery_date":"2026-02-22","status":"pending","terms_conditions":"","item_ids":["1"],"quantities":["10"],"prices":["0.400"],"edit_lpo":""}
2026-02-20 11:14:12 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":0.95}]","total_amount":"0.95","tax_amount":"0.011904761904761904","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.45,\"vat_rate\":0,\"vat_amount\":0},{\"id\":3,\"qty\":1,\"price\":0.25,\"vat_rate\":0,\"vat_amount\":0},{\"id\":2,\"qty\":1,\"price\":0.25,\"vat_rate\":5,\"vat_amount\":0.011904761904761904}]"}
2026-02-20 11:15:52 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":6.3}]","total_amount":"6.3","tax_amount":"0","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":14,\"price\":0.45,\"vat_rate\":0,\"vat_amount\":0}]"}
2026-02-20 11:21:57 - POST: {"supplier_id":"7","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["1"],"quantities":["112"],"prices":["0.400"],"add_lpo":""}
2026-02-20 11:22:28 - POST: {"delete_lpo":"","id":"2"}
2026-02-20 11:22:40 - POST: {"delete_lpo":"","id":"3"}
2026-02-20 11:22:48 - POST: {"delete_lpo":"","id":"4"}
2026-02-20 11:27:45 - POST: {"supplier_id":"6","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["100"],"prices":["0.150"],"add_lpo":""}
2026-02-20 11:28:37 - POST: {"supplier_id":"5","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["100"],"prices":["0.150"],"add_lpo":""}
2026-02-20 11:32:03 - POST: {"supplier_id":"5","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["100"],"prices":["0.150"],"add_lpo":""}
2026-02-20 11:32:32 - POST: {"supplier_id":"5","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["100"],"prices":["0.150"],"add_lpo":""}
2026-02-20 11:33:08 - POST: {"supplier_id":"5","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["100"],"prices":["0.150"],"add_lpo":""}
2026-02-20 11:34:18 - POST: {"supplier_id":"5","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["100"],"prices":["0.150"],"add_lpo":""}
2026-02-20 11:34:41 - POST: {"supplier_id":"6","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["1"],"prices":["0.150"],"add_lpo":""}
2026-02-20 11:37:33 - POST: {"supplier_id":"6","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["1"],"prices":["0.150"],"add_lpo":""}
2026-02-20 11:39:11 - POST: {"supplier_id":"6","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["1"],"prices":["0.150"],"add_lpo":""}
2026-02-20 11:45:55 - POST: {"supplier_id":"6","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["1"],"prices":["0.150"],"add_lpo":""}
2026-02-20 11:46:07 - POST: {"supplier_id":"6","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["1"],"prices":["0.150"],"add_lpo":""}
2026-02-20 11:49:24 - POST: {"supplier_id":"6","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["1"],"prices":["0.150"],"add_lpo":""}
2026-02-20 12:39:16 - POST: {"supplier_id":"6","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["1"],"prices":["0.150"],"add_lpo":""}
2026-02-20 12:39:30 - POST: {"supplier_id":"6","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["1"],"prices":["0.150"],"add_lpo":""}
2026-02-20 12:40:43 - POST: {"supplier_id":"7","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["1"],"prices":["0.150"],"add_lpo":""}
2026-02-20 12:40:54 - POST: {"supplier_id":"7","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["1"],"prices":["0.150"],"add_lpo":""}
2026-02-20 13:31:46 - POST: {"action":"save_pos_transaction","customer_id":"7","payments":"[{\"method\":\"credit\",\"amount\":2.3}]","total_amount":"2.3","tax_amount":"0","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":4,\"price\":0.45,\"vat_rate\":0,\"vat_amount\":0},{\"id\":3,\"qty\":2,\"price\":0.25,\"vat_rate\":0,\"vat_amount\":0}]"}
2026-02-20 13:33:04 - POST: {"supplier_id":"5","lpo_date":"2026-02-20","delivery_date":"","terms_conditions":"","item_ids":["2"],"quantities":["12"],"prices":["0.150"],"add_lpo":""}
2026-02-20 13:33:26 - POST: {"convert_lpo_to_purchase":"","lpo_id":"22"}
2026-02-21 07:33:44 - POST: {"action":"translate","text":"sugar 5 kg","target":"ar"}
2026-02-21 07:34:05 - POST: {"name_en":"sugar 5 kg","name_ar":"\u0633\u0643\u0631","category_id":"2","unit_id":"3","supplier_id":"7","sku":"834687678048","sale_price":"1","purchase_price":"0.8","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 08:09:18 - POST: {"license_key":"FLAT-ED9A-CBE3-A23D","activate":""}
2026-02-21 08:13:32 - POST: {"action":"translate","text":"onion","target":"ar"}
2026-02-21 08:16:19 - POST: {"type":"supplier","name":"al baimani","email":"","phone":"","tax_id":"","balance":"0.000","add_customer":""}
2026-02-21 08:16:34 - POST: {"type":"supplier","name":"al marai","email":"","phone":"","tax_id":"","balance":"0.000","add_customer":""}
2026-02-21 08:16:47 - POST: {"type":"supplier","name":"cash","email":"","phone":"","tax_id":"","balance":"0.000","add_customer":""}
2026-02-21 08:17:45 - 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 08:19:13 - 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 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"}
2026-02-21 12:39:00 - POST: {"action":"translate","text":"Hello","target":"ar"}
2026-02-21 12:39:03 - POST: {"backup_limit":"5","backup_time":"00:00","backup_auto_enabled":"1","save_backup_settings":""}
2026-02-21 12:39:43 - POST: {"create_backup":""}
2026-02-21 12:40:23 - POST: {"action":"translate","text":"World","target":"ar"}
2026-02-21 12:41:26 - POST: {"action":"translate","text":"Success","target":"ar"}
2026-02-21 13:22:08 - POST: {"action":"translate","text":"Apple"}
2026-02-21 17:33:35 - POST: {"name":"Counter 1","add_cash_register":""}
2026-02-21 17:33:52 - POST: {"open_register":"1","register_id":"3","opening_balance":"2"}
2026-02-21 17:34:02 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":15.45}]","total_amount":"15.45","tax_amount":"0","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.45,\"vat_rate\":0,\"vat_amount\":0},{\"id\":8,\"qty\":1,\"price\":15,\"vat_rate\":0,\"vat_amount\":0}]"}
2026-02-21 17:34:26 - POST: {"action":"save_pos_transaction","customer_id":"","payments":"[{\"method\":\"cash\",\"amount\":15.45}]","total_amount":"15.45","tax_amount":"0","discount_code_id":"","discount_amount":"0","loyalty_redeemed":"0","items":"[{\"id\":1,\"qty\":1,\"price\":0.45,\"vat_rate\":0,\"vat_amount\":0},{\"id\":8,\"qty\":1,\"price\":15,\"vat_rate\":0,\"vat_amount\":0}]"}

View File

@ -1,15 +0,0 @@
2026-02-19 13:59:25 - search_items call: q=to
2026-02-19 14:55:24 - search_items call: q=to
2026-02-20 07:29:03 - search_items call: q=to
2026-02-20 07:30:08 - search_items call: q=to
2026-02-20 10:08:31 - search_items call: q=a
2026-02-20 10:09:42 - search_items call: q=to
2026-02-20 10:22:22 - search_items call: q=to
2026-02-20 11:21:36 - search_items call: q=to
2026-02-20 11:27:38 - search_items call: q=on
2026-02-20 11:28:26 - search_items call: q=ob
2026-02-20 11:28:28 - search_items call: q=oni
2026-02-20 11:34:38 - search_items call: q=on
2026-02-20 12:40:40 - search_items call: q=on
2026-02-20 12:40:40 - search_items call: q=oni
2026-02-20 13:32:55 - search_items call: q=on

44
simulate_import.php Normal file
View File

@ -0,0 +1,44 @@
<?php
$_POST['import_items'] = true;
$_FILES['excel_file'] = [
'name' => 'test_import.csv',
'type' => 'text/csv',
'tmp_name' => __DIR__ . '/test_import.csv',
'error' => 0,
'size' => filesize(__DIR__ . '/test_import.csv')
];
// Define db() helper if not defined (it should be in db/config.php)
require_once __DIR__ . '/db/config.php';
// Include the logic from index.php
// I'll copy the logic here to avoid including the whole index.php which might have side effects
$tmpPath = $_FILES['excel_file']['tmp_name'];
$handle = fopen($tmpPath, "r");
$firstRow = fgetcsv($handle, 0, ","); // Skip header
$count = 0; $errors = 0;
while (($data = fgetcsv($handle, 0, ",")) !== FALSE) {
if (count($data) < 2) continue;
try {
$sku = substr(trim($data[0] ?? ''), 0, 100);
$name_en = $data[1] ?? '';
$name_ar = $data[2] ?? '';
$sale_price = str_replace(',', '', $data[3] ?? 0);
$purchase_price = str_replace(',', '', $data[4] ?? 0);
if (empty($sku) && empty($name_en)) continue;
$stmt = db()->prepare("INSERT INTO stock_items (sku, name_en, name_ar, sale_price, purchase_price)
VALUES (?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE name_en=VALUES(name_en), name_ar=VALUES(name_ar),
sale_price=VALUES(sale_price), purchase_price=VALUES(purchase_price)");
$stmt->execute([$sku, $name_en, $name_ar, (float)$sale_price, (float)$purchase_price]);
echo "Imported: $sku\n";
$count++;
} catch (Throwable $e) {
echo "Error: " . $e->getMessage() . "\n";
$errors++;
}
}
fclose($handle);
echo "Finished. Success: $count, Errors: $errors\n";

9
test_ai_config.php Normal file
View File

@ -0,0 +1,9 @@
<?php
$path = '/home/ubuntu/executor/.env';
$env = @parse_ini_file($path);
echo "Raw PROJECT_UUID from .env: " . ($env['PROJECT_UUID'] ?? 'MISSING') . "\n";
echo "Raw PROJECT_ID from .env: " . ($env['PROJECT_ID'] ?? 'MISSING') . "\n";
$cfg = require __DIR__ . '/ai/config.php';
echo "Final Project UUID: [" . ($cfg['project_uuid'] ?? 'MISSING') . "]\n";
echo "Final Project ID: [" . ($cfg['project_id'] ?? 'MISSING') . "]\n";

3
test_import.csv Normal file
View File

@ -0,0 +1,3 @@
SKU,English Name,Arabic Name,Sale Price,Cost Price
ITEM1,Product 1,منتج 1,10.00,5.00
ITEM2,Product 2,,15.00,7.00
1 SKU English Name Arabic Name Sale Price Cost Price
2 ITEM1 Product 1 منتج 1 10.00 5.00
3 ITEM2 Product 2 15.00 7.00

11
test_translate_action.php Normal file
View File

@ -0,0 +1,11 @@
<?php
$_POST['action'] = 'translate';
$_POST['text'] = 'Laptop';
$_POST['target'] = 'ar';
// Capture output
ob_start();
include __DIR__ . '/index.php';
$output = ob_get_clean();
echo $output;