['en' => 'Dashboard', 'ar' => 'لوحة القيادة'], 'my_profile' => ['en' => 'My Profile', 'ar' => 'ملفي الشخصي'], 'pos' => ['en' => 'Point of Sale', 'ar' => 'نقطة البيع'], 'quotations' => ['en' => 'Quotations', 'ar' => 'العروض'], 'customers' => ['en' => 'Customers', 'ar' => 'العملاء'], 'suppliers' => ['en' => 'Suppliers', 'ar' => 'الموردون'], 'categories' => ['en' => 'Stock Categories', 'ar' => 'فئات المخزون'], 'units' => ['en' => 'Stock Units', 'ar' => 'وحدات المخزون'], 'items' => ['en' => 'Stock Items', 'ar' => 'أصناف المخزون'], 'payment_methods' => ['en' => 'Payment Methods', 'ar' => 'طرق الدفع'], 'sales' => ['en' => 'Sales Tax Invoices', 'ar' => 'فواتير المبيعات الضريبية'], 'purchases' => ['en' => 'Purchase Tax Invoices', 'ar' => 'فواتير المشتريات الضريبية'], 'sales_returns' => ['en' => 'Sales Returns', 'ar' => 'مرتجع المبيعات'], 'customer_statement' => ['en' => 'Customer Statement', 'ar' => 'كشف حساب عميل'], 'supplier_statement' => ['en' => 'Supplier Statement', 'ar' => 'كشف حساب مورد'], 'expiry_report' => ['en' => 'Expiry Report', 'ar' => 'تقرير انتهاء الصلاحية'], 'low_stock_report' => ['en' => 'Low Stock Report', 'ar' => 'تقرير نواقص المخزون'], 'settings' => ['en' => 'Company Profile', 'ar' => 'ملف الشركة'], 'devices' => ['en' => 'Biometric Devices', 'ar' => 'أجهزة البصمة'], 'hr_departments' => ['en' => 'HR Departments', 'ar' => 'أقسام الموارد البشرية'], 'hr_employees' => ['en' => 'HR Employees', 'ar' => 'موظفي الموارد البشرية'], 'hr_attendance' => ['en' => 'HR Attendance', 'ar' => 'حضور الموارد البشرية'], 'hr_payroll' => ['en' => 'HR Payroll', 'ar' => 'رواتب الموارد البشرية'], 'cashflow_report' => ['en' => 'Cashflow Statement', 'ar' => 'قائمة التدفقات النقدية'], 'loyalty_history' => ['en' => 'Loyalty History', 'ar' => 'سجل الولاء'], 'users' => ['en' => 'User Management', 'ar' => 'إدارة المستخدمين'], 'backups' => ['en' => 'Database Backups', 'ar' => 'نسخ قاعدة البيانات'], 'role_groups' => ['en' => 'Role Groups', 'ar' => 'مجموعات الأدوار'], 'scale_devices' => ['en' => 'POS Devices', 'ar' => 'أجهزة نقاط البيع'], 'cash_registers' => ['en' => 'Cash Registers', 'ar' => 'خزائن الكاشير'], 'register_sessions' => ['en' => 'Register Sessions', 'ar' => 'جلسات الكاشير'], ]; $currTitle = $titles[$page] ?? $titles['dashboard']; ?>

0 || $data['stats']['near_expiry_items'] > 0 || $data['stats']['low_stock_items_count'] > 0): ?>
Inventory Alert: 0): ?> items have expired. 0): ?> items are expiring soon (within 30 days). 0): ?> items are below minimum level.
Total Sales
OMR
Total Received
OMR
Customer Due
OMR
Total Purchases
OMR
Total Paid
OMR
Supplier Due
OMR
Total Customers
Total Items
Sales Performance
Recent Customers
View All
Name Phone Balance
OMR
Quick Links
Sales Tax Invoices Purchase Tax Invoices
Management
Export
Name Tax ID Email Phone Balance Actions
OMR
Stock Categories
ID Name (EN) Name (AR)
Stock Units
Name (EN) Short (EN) Name (AR) Short (AR)
Stock Items
Promo Catalog
Export
Image SKU Name Category Supplier Stock Level Expiry VAT Actions
item
Promo
Min:
Low Stock
%
Expiry Report
SKU Item Name Category Stock Level Expiry Date Status
No items found.
Expired Near Expiry Good
Low Stock Report
SKU Item Name Category Supplier Min Level Current Stock Shortage
All items are above minimum levels.
Loyalty Transaction History
Date Customer Tier Type Points Description
No transactions found.
Current Balance: pts
0 ? '+' : '' ?>
query($sql)->fetchAll(PDO::FETCH_ASSOC); $products = []; foreach ($products_raw as $p) { $p['original_price'] = (float)$p['sale_price']; $p['sale_price'] = getPromotionalPrice($p); $products[] = $p; } $customers = db()->query("SELECT * FROM customers WHERE type = 'customer' ORDER BY name ASC")->fetchAll(PDO::FETCH_ASSOC); ?>
<?= htmlspecialchars($p['name_en']) ?>
OMR OMR
left
Cart

Cart is empty

Subtotal OMR 0.000
Total OMR 0.000
Quotations
Clear
prepare("SELECT qi.*, i.name_en, i.name_ar, i.vat_rate FROM quotation_items qi JOIN stock_items i ON qi.item_id = i.id WHERE qi.quotation_id = ?"); $items->execute([$q['id']]); $q['items'] = $items->fetchAll(PDO::FETCH_ASSOC); ?>
Quotation # Date Valid Until Customer Status Total Actions
QUO- OMR
No quotations found
prepare("SELECT ii.*, i.name_en, i.name_ar, i.vat_rate FROM invoice_items ii JOIN stock_items i ON ii.item_id = i.id WHERE ii.invoice_id = ?"); $items->execute([$inv['id']]); $inv['items'] = $items->fetchAll(PDO::FETCH_ASSOC); ?>
Invoice # Date Status Total Paid Balance Actions
INV- OMR OMR OMR

Statement of Account

|
Period: to

Date Reference Description Debit Credit Balance
0 ? number_format($debit, 3) : '' ?> 0 ? number_format($credit, 3) : '' ?>
Closing Balance OMR

Please select an entity and date range to generate the statement.

Cashflow Statement

Cashflow Statement

Period: to

0) $op_inflow += $amt; else $op_outflow += abs($amt); } elseif ($t['other_type'] === 'asset' && !in_array($t['other_account'], ['Accounts Receivable', 'Inventory'])) { // Fixed assets etc if ($amt > 0) $inv_inflow += $amt; else $inv_outflow += abs($amt); } elseif ($t['other_type'] === 'equity' || $t['other_type'] === 'liability') { if ($amt > 0) $fin_inflow += $amt; else $fin_outflow += abs($amt); } else { // Default to operating if unsure if ($amt > 0) $op_inflow += $amt; else $op_outflow += abs($amt); } } ?>
Description Amount (OMR)
Opening Cash Balance
Operating Activities
Cash Received from Customers & Others
Cash Paid to Suppliers & Expenses ()
Net Cash from Operating Activities
Investing Activities
Net Cash from Investing Activities
Financing Activities
Net Cash from Financing Activities
Net Change in Cash
Closing Cash Balance

___________________
Prepared By

___________________
Approved By

Payment Methods
ID Name (EN) Name (AR) Actions
Expense Categories
ID Name (EN) Name (AR) Actions
Accounting Module

Date Description Reference Amount Action
Code Name Type Parent Balance

VAT Summary Report

VAT Input (Purchases)
VAT Output (Sales)
Net VAT Payable / (Refundable)
This report calculates the difference between VAT collected on sales and VAT paid on purchases for the selected period.
Code Account Name Debit Credit
Total

Profit & Loss Statement

Revenue
Total Revenue
Expenses
Total Expenses
Net Profit / Loss

Balance Sheet

Assets
Total Assets
Liabilities & Equity
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; ?>
Liabilities
Equity
Retained Earnings (Current)
Total Liab. & Equity
Expenses List
Date Reference Category Description Amount Actions
OMR
Expense Report
Total Expenses

OMR

Period: to
0 ? ($row['total'] / $data['total_expenses'] * 100) : 0; ?>
Category Total Amount % of Total
No expenses found for this period.
OMR %
Sales Returns
Return # Date Invoice # Customer Total Amount Actions
RET- INV- OMR
No returns found
Purchase Returns
Return # Date Invoice # Supplier Total Amount Actions
PRET- INV- OMR
No returns found
HR Departments
ID Department Name Actions
HR Employees
Name Biometric ID Department Position Salary Status Actions
OMR
HR Attendance
Employee Department Status Clock In Clock Out Action
Not Marked
HR Payroll
Employee Basic Bonus Deductions Net Salary Status Actions
OMR + OMR - OMR OMR
Biometric Devices
Device Name IP / IO Address Port Serial Last Sync Status Actions
IP:
IO:
POS Devices
Device Name Type Connection Details Status Actions
: Baud: USB Interface
Profile Picture
Profile

Edit Profile
Company Profile
Logo
Favicon
Signature
Loyalty Configuration
Role Groups

Manage access levels and permissions

Group Name Created Date Status Actions
Active
Backup Settings
>
Requires a cron job running cron_backup.php every minute to respect the scheduled time.
Manual Backup

Create a database backup immediately.

Available Backups
Filename Size Date Actions
No backups found.
User Management

Maintain your team accounts and security

User Info Access Level Contact Status Actions
Avatar
ID: #
Active Suspended
Cash Registers Management

Define your shop counters and registers.

ID Name Status Created At Actions
#
Register Sessions

Manage daily opening and closing of cash registers.

prepare("SELECT s.*, r.name as register_name FROM register_sessions s JOIN cash_registers r ON s.register_id = r.id WHERE s.user_id = ? AND s.status = 'open'"); $active_session->execute([$_SESSION['user_id']]); $session = $active_session->fetch(); ?>
Current Open Register: | Opened At: | Opening Balance: OMR
Go to POS
Register Cashier Opened At Closed At Opening Bal. Expected Bal. Cash in Hand Difference Status Report
OMR OMR OMR 0 ? 'text-info' : 'text-danger'); ?> OMR ---
System Logs

Monitor system activity and errors

--- " . htmlspecialchars(basename($file)) . " ---
"; $lines = shell_exec("tail -n 50 " . escapeshellarg($path)); echo "
" . htmlspecialchars((string)$lines) . "
"; } } if (!$found_logs) { echo "

No accessible log files found.

"; } ?>