+
+ + +
+ +

+
+
+ + + + + + + +
+
+ + + +
+
+
+ +
+
+ + + + + + + + + + 0 || $data['stats']['near_expiry_items'] > 0 || $data['stats']['low_stock_items_count'] > 0 || $purchaseAlertsCount > 0): ?> +
+
+
+ +
+ Administrative Alerts: + 0): ?> + items have expired. + + 0): ?> + items are expiring soon. + + 0): ?> + items are below minimum level. + + 0): ?> + purchase invoices are due or overdue. + +
+ +
+
+
+ + +
+
+
+
+
+
+
OMR
+
+
+ +
+
+
+
+
+
+
+
+
+
OMR
+
+
+ +
+
+
+
+
+
+
+
+
+
OMR
+
+
+ +
+
+
+
+
+
+
+
+
+
OMR
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+
+
OMR
+
+
+ +
+
+
+
+
+
+
+
+
+
OMR
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
Total Items
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
Sales Performance
+
+ + +
+
+
+ +
+
+
+
+ +
+
+
+
+
Recent Customers
+ + View All + +
+
+ + + + + + + + + + + + + + + + + + +
NamePhoneBalance
+
+
+
+
+
+
Quick Links
+
+ + + + + Sales Tax Invoices + + + Purchase Tax Invoices + +
+
+
+
+ +
+ + Company Logo + +

+
+ + +
+
+
Management
+
+ + + Export to Excel + + + + +
+
+ + +
+
+ +
+ + +
+
+ + +
+
+ + +
+
+ + + + + + + +
+ +
+
+ Limit + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
NameTax IDEmailPhoneBalanceActions
+
+ + + + +
+ + +
+ +
+ + + +
+
+ + +
+ +
+
+
Stock Categories Management
+
+ + + Export + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + +
IDName (EN)Name (AR)Actions
+
+ + + + +
+ + +
+ +
+ + + +
+
+ + +
+ + +
+
+
Stock Units Management
+
+ + + Export + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
Name (EN)Short (EN)Name (AR)Short (AR)Actions
+
+ + + + +
+ + +
+ +
+ + + +
+
+ + +
+ + +
+
+
Stock Items ()
+
+ + + Promo Catalog + +
+ +
+ + + Export to Excel + + +
+
+ + +
+
+ +
+ + +
+
+ + + + + + + +
+ +
+
+ Limit + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ImageSKUNameCategorySupplierStock LevelExpiryVATActions
+ + item + +
+ +
+ +
+
+ + + Promo + +
+
+
+
+ +
Min:
+ + Low Stock + +
+
% +
+ + + +
+ + +
+
+ + + + + + + +
+
+ + +
+ + +
+
+
Expiry Report
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SKUItem NameCategoryStock LevelExpiry DateStatus
No items found.
+
+
+
+ + Expired + + Near Expiry + + Good + +
+
+ + +
+ + +
+
+
Low Stock Report
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SKUItem NameCategorySupplierMin LevelCurrent StockShortage
All items are above minimum levels.
+
+
+
+ + + +
+
+ + +
+ + +
+
+
Loyalty Transaction History
+ +
+
+
+ +
+ + +
+
+ + +
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
DateCustomerTierTypePointsDescription
No transactions found.
+
+
Current Balance: pts
+
+ + + + + + + 0 ? '+' : '' ?> +
+
+ + +
+ + + prepare("SELECT * FROM register_sessions WHERE user_id = ? AND status = 'open'"); + $stmt->execute([$_SESSION['user_id']]); + $active_session = $stmt->fetch(PDO::FETCH_ASSOC); + $_SESSION['register_session_id'] = $active_session['id'] ?? null; + + $registers = db()->query("SELECT * FROM cash_registers WHERE status = 'active'")->fetchAll(); + + $allow_zero_stock_sell = ($data['settings']['allow_zero_stock_sell'] ?? '1') === '1'; + $sql = "SELECT * FROM stock_items ORDER BY name_en ASC"; + $products_raw = db()->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 ORDER BY name ASC")->fetchAll(PDO::FETCH_ASSOC); + ?> +
+
+
+
+ + +
+
+ + +
+ +
+
+ +
+ + <?= htmlspecialchars($p['name_en']) ?> + +
+ +
+ +
+
+
+
+ + OMR + + OMR +
+ left +
+
+ +
+
+ +
+
+
Cart
+
+ + + + + + + +
+
+ +
+
+ +
+ + +
+ +
+
+ +
+ + +
+ +
+
+ +
+ +
+ +

Cart is empty

+
+
+ +
+
+ Subtotal (Excl. VAT) + 0.000 +
+
+ VAT + 0.000 +
+
+ Total + 0.000 +
+ +
+
+
+ + + + + + + + + + + + + + + + +
+
+
Quotations
+ +
+ + +
+
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + + + Clear + +
+ +
+
+ Limit + +
+
+
+
+
+ + + + + + + + + + + + + + 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 #DateValid UntilCustomerStatusTotalActions
QUO- + + + OMR +
+ + + + + + + +
+
No quotations found
+
+ +
+ + +
+
+
Local Purchase Orders (LPO)
+ +
+ + +
+
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + + + Clear + +
+ +
+
+ Limit + +
+
+
+
+
+ + + + + + + + + + + + + + prepare("SELECT li.*, i.name_en, i.name_ar, i.vat_rate + FROM lpo_items li + JOIN stock_items i ON li.item_id = i.id + WHERE li.lpo_id = ?"); + $items->execute([$q['id']]); + $q['items'] = $items->fetchAll(PDO::FETCH_ASSOC); + ?> + + + + + + + + + + + + + + +
LPO #DateDelivery DateSupplierStatusTotalActions
LPO- + + + OMR +
+ + + + + + +
+
No LPOs found
+
+ + +
+ + +
+ + + +
+
+
+ + Export to Excel + + + + +
+
+ + +
+
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + + + + Clear + +
+ +
+
+ Limit + +
+
+
+
+
+ + + + + + + + + + + + + + + + prepare("SELECT ii.*, i.name_en, i.name_ar, i.vat_rate + FROM $itemTable ii + JOIN stock_items i ON ii.item_id = i.id + WHERE ii.$fkCol = ?"); + $items->execute([$inv['id']]); + $inv['items'] = $items->fetchAll(PDO::FETCH_ASSOC); + $prefix = ($page === 'purchases') ? 'PUR' : 'INV'; + ?> + + + + + + + + + + + + + + + + + + + + + + +
Invoice #DateDue DateStatusTotalPaidBalanceActions
+ + + + + + + + + + --- + + + + + OMR OMR OMR +
+ + + + + + + +
+ + +
+
+
TotalsOMR OMR OMR
+
+ + +
+ + +
+
+ +
+ +
+ +
+
+ +
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+
+ Limit + +
+
+
+
+ + +
+
+
+

+

+
+
+

-

+

+

|
:

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + - + +
+
+ + + +
+ +

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

+ +
+ + +
+
+
Cashflow Statement
+ +
+ +
+
+ +
+ + +
+
+ + +
+
+ +
+ +
+
+ Limit + +
+
+
+
+ +
+
+
+

+

+
+
+

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); + } + } + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DescriptionAmount (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
+ +
+
+ + + + + + + + + + + + + + + + + + + +
IDName (EN)Name (AR)Actions
+
+ +
+ + +
+
+
+
+ + +
+ + + + +
+
+
Expense Categories
+ +
+
+ + + + + + + + + + + + + + + + + + + +
IDName (EN)Name (AR)Actions
+
+ +
+ + +
+
+ + + +
+
+ + +
+ + + + + +
+
+
Accounting Module
+
+
+ +
+ + + +
+
+ +
+
+
+

+

+
+
+

+
+
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + +
DateDescriptionReferenceAmountAction
+ +
+
+ + + +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
CodeNameTypeParentBalance
+
+ +
+
+ + + + +
+
+
+
+ + +
+ +
+
+ +
+
+ +
+
+
+
+
+

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. +
+
+
+
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
CodeAccount NameDebitCredit
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
+ +
+ +
+
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
DateReferenceCategoryDescriptionAmountActions
OMR +
+ +
+ + +
+
+ + + +
+
+ + +
+ + + + + +
+ + + +
+
Expense Report
+ +
+ +
+
+ +
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+ +
+
+
+
+
Total Expenses
+

OMR

+ For the selected period +
+
+
+
+ +
+ + + + + + + + + + + + + 0 ? ($row['total'] / $data['total_expenses'] * 100) : 0; + ?> + + + + + + + + +
CategoryTotal Amount% of Total
No expenses found for this period.
+
+
+
OMR +
+
+
+ % +
+
+ + +
+ + +
+ + +
+
Sales Returns
+
+ + Export + + +
+
+ +
+
+ +
+ +
+
+ +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Return #DateInvoice #CustomerTotal AmountActions
RET-INV-OMR +
+ +
+
No returns found
+
+
+ + +
+
+
Purchase Returns
+
+ + Export + + +
+
+ +
+
+ +
+ +
+
+ +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Return #DateInvoice #SupplierTotal AmountActions
PRET-PUR-OMR +
+ +
+
No returns found
+
+
+ + +
+
+
HR Departments
+ +
+
+ + + + + + + + + + + + + + + + + + + +
IDDepartment NameActions
+ +
+ + +
+
+
+ + +
+ + +
+
+
HR Employees
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameBiometric IDDepartmentPositionSalaryStatusActions
+
+
+
OMR + + + + + +
+ + +
+
+
+ + +
+ + +
+
+
HR Attendance
+
+
+ +
+ +
+ + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
EmployeeDepartmentStatusClock InClock OutAction
+ + + + + + Not Marked + + + +
+
+ + +
+ + + + + +
+
+
HR Payroll
+
+
+ + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
EmployeeBasicBonusDeductionsNet SalaryStatusActions
OMR + OMR - OMR OMR + + + + + +
+ + +
+ +
+ + +
+
+
+ + +
+ + + + + +
+
+
Biometric Devices
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Device NameIP / IO AddressPortSerialLast SyncStatusActions
+ + +
IP:
+ +
IO:
+ +
+ + + + +
+ + +
+ +
+ + +
+
+
+ + +
+ + + + + +
+
+
POS Devices
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Device NameTypeConnectionDetailsStatusActions
+
+
+ + + + + + : + + Baud: + + USB Interface + + + + + +
+ + +
+
+
+ + +
+ + + + + +
+
+
+
Profile Picture
+
+ + Profile + +
+ +
+ +
+
+
+

+
+
+
+
+
+
Edit Profile
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
+
+
+ + +
+
Company Profile
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + + +
+ Logo +
+ +
+
+ + + +
+ Favicon +
+ +
+
+ + + +
+ Signature +
+ +
+
+
Loyalty Configuration
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ +
+
+
+
+ + +
+
+
+
Role Groups
+

Manage access levels and permissions

+
+ +
+
+ + + + + + + + + + + + + + + + + + + +
Group NameCreated DateStatusActions
+
+
+ +
+ +
+
Active + + + + +
+
+ + +
+ + +
+
Customer Display Settings
+
+ +
+
+
Greeting Message
+
+
+ + +
+
+ + +
+ +
+
Slideshow Images
+

Upload images for the customer display slideshow (1920x1080 recommended).

+
+ +
+ + + +
+ Slide 1 +
+ +
+ +
+ + + +
+ Slide 2 +
+ +
+ +
+ + + +
+ Slide 3 +
+ +
+ +
+ +
+
+
+
+ + +
+
+
+
+
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
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
FilenameSizeDateActions
No backups found.
+
+ +
+ + +
+
+ + +
+
+
+
+
+
+ + +
+
+
+
User Management
+

Maintain your team accounts and security

+
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + +
User InfoAccess LevelContactStatusActions
+
+ + Avatar + +
+ +
+ +
+
+
ID: #
+
+
+
+ + + + +
+
+
+ + Active + + Suspended + + + + + + +
+
+ + +
+ +
+
+
+
Cash Registers Management
+

Define your shop counters and registers.

+
+ + + + License Limit: / + Registers + +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
IDNameStatusCreated AtActions
# + + + + + +
+ + +
+ + + +
+
+ + +
+ + + + + +
+
+
+
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 +
+
+ + + +
+
+
+ + + +
+ + +
+ + +
+ + +
+ +
+ + +
+ +
+
+ + + Clear + +
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + prepare("SELECT + SUM(CASE WHEN LOWER(payment_method) = 'cash' THEN amount ELSE 0 END) as cash_total, + SUM(CASE WHEN LOWER(payment_method) IN ('card', 'credit card', 'visa', 'mastercard') THEN amount ELSE 0 END) as card_total, + SUM(CASE WHEN LOWER(payment_method) = 'credit' THEN amount ELSE 0 END) as credit_total, + SUM(CASE WHEN LOWER(payment_method) LIKE '%transfer%' OR LOWER(payment_method) LIKE '%bank%' THEN amount ELSE 0 END) as transfer_total, + SUM(amount) as total_sales + FROM ( + SELECT p.payment_method, p.amount FROM pos_payments p JOIN pos_transactions t ON p.transaction_id = t.id WHERE t.register_session_id = ? AND t.status = 'completed' + UNION ALL + SELECT p.payment_method, p.amount FROM payments p JOIN invoices i ON p.invoice_id = i.id WHERE i.register_session_id = ? AND i.status = 'paid' AND i.is_pos = 1 + ) as combined_payments"); + $stats_stmt->execute([$s['id'], $s['id']]); + $st = $stats_stmt->fetch(); + $c_total = (float)($st['cash_total'] ?? 0); + $cd_total = (float)($st['card_total'] ?? 0); + $cr_total = (float)($st['credit_total'] ?? 0); + $tr_total = (float)($st['transfer_total'] ?? 0); + $t_sales = (float)($st['total_sales'] ?? 0); + $row_expected_cash = (float)$s['opening_balance'] + $c_total; + ?> + + + + + + + + + + + +
IDRegisterCashierOpened AtClosed AtOpening Bal.Cash SaleCredit CardCreditTotal SaleBalanceStatusReport
#OMR OMR 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.

"; + } + ?> +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+
+
+ Powered By Accounting • omanapp.cloud • aalabry@gmail.com • Whatsapp: +968 99359472 +
+
+
+