update final1

This commit is contained in:
Flatlogic Bot 2026-04-23 16:59:54 +00:00
parent ec5e25fdd0
commit a4e592231b
12 changed files with 2263 additions and 28 deletions

View File

@ -128,7 +128,7 @@ require_once 'includes/header.php';
<div class="row">
<!-- Debts by Customer -->
<div class="col-lg-4 mb-4">
<div class="col-lg-3 mb-4">
<div class="card shadow-sm border-0 h-100">
<div class="card-header bg-white border-bottom-0 pt-4 pb-0">
<h6 class="m-0 font-weight-bold text-primary"><i class="bi bi-people"></i> <?= h(tr('الديون حسب العميل', 'Debts by Customer')) ?></h6>
@ -160,7 +160,7 @@ require_once 'includes/header.php';
</div>
<!-- Unpaid Invoices -->
<div class="col-lg-8 mb-4">
<div class="col-lg-9 mb-4">
<div class="card shadow-sm border-0 h-100">
<div class="card-header bg-white border-bottom-0 pt-4 pb-0">
<h6 class="m-0 font-weight-bold text-primary"><i class="bi bi-receipt"></i> <?= h(tr('الفواتير غير المدفوعة والجزئية', 'Unpaid & Partial Invoices')) ?></h6>

View File

@ -2,7 +2,8 @@
require_once __DIR__ . '/includes/app.php';
$saleMode = 'normal';
$orderType = 'eid';
$pageTitle = tr('إنشاء طلب عيد', 'Create Eid Order');
$pageTitle = tr("إنشاء طلب عيد", "Create Eid Order");
$activeNav = "eid_sale";
$backUrl = url_for('eid_orders.php');
$backLabel = tr('عودة لطلبات العيد', 'Back to Eid Orders');
$saveLabel = tr('حفظ طلب العيد', 'Save Eid Order');

View File

@ -99,13 +99,13 @@ $isPublic = !empty($forcePublic) || !isset($user) || !$user;
<?php if (has_permission('sales', 'show') || has_permission('normal_sale', 'show') || has_permission('pos', 'show')): ?>
<!-- المبيعات (Sales) - Now Collapsible -->
<a class="list-group-item list-group-item-action <?= in_array($activeNav, ['sales', 'sales_orders', 'eid_orders', 'unpaid', 'normal', 'pos', 'online_orders']) ? '' : 'collapsed' ?>" data-bs-toggle="collapse" href="#collapseSales" role="button" aria-expanded="<?= in_array($activeNav, ['sales', 'sales_orders', 'eid_orders', 'unpaid', 'normal', 'pos', 'online_orders']) ? 'true' : 'false' ?>" aria-controls="collapseSales">
<a class="list-group-item list-group-item-action <?= in_array($activeNav, ['sales', 'sales_orders', 'unpaid', 'normal', 'pos', 'online_orders']) ? '' : 'collapsed' ?>" data-bs-toggle="collapse" href="#collapseSales" role="button" aria-expanded="<?= in_array($activeNav, ['sales', 'sales_orders', 'unpaid', 'normal', 'pos', 'online_orders']) ? 'true' : 'false' ?>" aria-controls="collapseSales">
<div class="d-flex justify-content-between align-items-center w-100">
<span><i class="bi bi-cart"></i> <?= h(tr('المبيعات', 'Sales')) ?></span>
<i class="bi bi-chevron-down toggle-icon" style="transition: transform 0.2s;"></i>
</div>
</a>
<div class="collapse <?= in_array($activeNav, ['sales', 'sales_orders', 'eid_orders', 'unpaid', 'normal', 'pos', 'online_orders']) ? 'show' : '' ?>" id="collapseSales" data-bs-parent="#sidebar-navigation">
<div class="collapse <?= in_array($activeNav, ['sales', 'sales_orders', 'unpaid', 'normal', 'pos', 'online_orders']) ? 'show' : '' ?>" id="collapseSales" data-bs-parent="#sidebar-navigation">
<div class="list-group list-group-flush" style="background-color: rgba(0,0,0,0.15);">
<a class="list-group-item list-group-item-action <?= $activeNav === 'sales' ? 'active' : '' ?>" href="<?= h(url_for('sales.php')) ?>" style="padding-left: 2.5rem; padding-right: 2.5rem;">
<i class="bi bi-dot"></i> <?= h(tr('قائمة الفواتير', 'Invoice list')) ?>
@ -113,12 +113,6 @@ $isPublic = !empty($forcePublic) || !isset($user) || !$user;
<a class="list-group-item list-group-item-action <?= $activeNav === 'sales_orders' ? 'active' : '' ?>" href="<?= h(url_for('sales.php', ['status' => 'order'])) ?>" style="padding-left: 2.5rem; padding-right: 2.5rem;">
<i class="bi bi-dot"></i> <?= h(tr('الطلبات', 'Orders')) ?>
</a>
<a class="list-group-item list-group-item-action <?= $activeNav === 'eid_orders' ? 'active' : '' ?>" href="<?= h(url_for('eid_orders.php')) ?>" style="padding-left: 2.5rem; padding-right: 2.5rem;">
<i class="bi bi-dot"></i> <?= h(tr('طلبات العيد', 'Eid Orders')) ?>
</a>
<a class="list-group-item list-group-item-action <?= $activeNav === 'eid_orders' ? 'active' : '' ?>" href="<?= h(url_for('eid_sale.php')) ?>" style="padding-left: 2.5rem; padding-right: 2.5rem;">
<i class="bi bi-dot"></i> <?= h(tr('طلب عيد جديد', 'New Eid Order')) ?>
</a>
<a class="list-group-item list-group-item-action <?= $activeNav === 'online_orders' ? 'active' : '' ?>" href="<?= h(url_for('online_orders.php')) ?>" style="padding-left: 2.5rem; padding-right: 2.5rem;">
<i class="bi bi-dot"></i> <?= h(tr('طلبات المتجر', 'Store Orders')) ?>
</a>
@ -131,6 +125,26 @@ $isPublic = !empty($forcePublic) || !isset($user) || !$user;
</div>
</div>
<?php endif; ?>
<?php if (has_permission('sales', 'show') || has_permission('normal_sale', 'show') || has_permission('pos', 'show')): ?>
<!-- طلبات العيد (Eid Orders) -->
<a class="list-group-item list-group-item-action <?= in_array($activeNav, ['eid_orders', 'eid_sale']) ? '' : 'collapsed' ?>" data-bs-toggle="collapse" href="#collapseEid" role="button" aria-expanded="<?= in_array($activeNav, ['eid_orders', 'eid_sale']) ? 'true' : 'false' ?>" aria-controls="collapseEid">
<div class="d-flex justify-content-between align-items-center w-100">
<span><i class="bi bi-gift"></i> <?= h(tr('طلبات العيد', 'Eid Orders')) ?></span>
<i class="bi bi-chevron-down toggle-icon" style="transition: transform 0.2s;"></i>
</div>
</a>
<div class="collapse <?= in_array($activeNav, ['eid_orders', 'eid_sale']) ? 'show' : '' ?>" id="collapseEid" data-bs-parent="#sidebar-navigation">
<div class="list-group list-group-flush" style="background-color: rgba(0,0,0,0.15);">
<a class="list-group-item list-group-item-action <?= $activeNav === 'eid_orders' ? 'active' : '' ?>" href="<?= h(url_for('eid_orders.php')) ?>" style="padding-left: 2.5rem; padding-right: 2.5rem;">
<i class="bi bi-dot"></i> <?= h(tr('طلبات العيد', 'Eid Orders')) ?>
</a>
<a class="list-group-item list-group-item-action <?= $activeNav === 'eid_sale' ? 'active' : '' ?>" href="<?= h(url_for('eid_sale.php')) ?>" style="padding-left: 2.5rem; padding-right: 2.5rem;">
<i class="bi bi-dot"></i> <?= h(tr('طلب عيد جديد', 'New Eid Order')) ?>
</a>
</div>
</div>
<?php endif; ?>
<?php if (has_permission('purchases', 'show')): ?>
<a class="list-group-item list-group-item-action <?= in_array($activeNav, ['purchases', 'new_purchase']) ? '' : 'collapsed' ?>" data-bs-toggle="collapse" href="#collapsePurchases" role="button" aria-expanded="<?= in_array($activeNav, ['purchases', 'new_purchase']) ? 'true' : 'false' ?>" aria-controls="collapsePurchases">

5
my_cookies.txt Normal file
View File

@ -0,0 +1,5 @@
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
127.0.0.1 FALSE / FALSE 0 PHPSESSID dkl8f65dp116jrva8sgf07ar29

5
new_cookies.txt Normal file
View File

@ -0,0 +1,5 @@
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
127.0.0.1 FALSE / FALSE 0 PHPSESSID i717431bue0iep7i5urn7atmi0

View File

@ -143,8 +143,8 @@ if (!empty($items)) {
if (isset($items[$sku])) {
for ($i = 0; $i < (int)$qty; $i++) {
$itemData = $items[$sku];
$itemData['prod_date'] = $_POST['prod_date'][$sku] ?? date('Y-m');
$itemData['exp_date'] = $_POST['exp_date'][$sku] ?? date('Y-m', strtotime('+1 year'));
$itemData['prod_date'] = $_POST['prod_date'][$sku] ?? date('Y-m-d');
$itemData['exp_date'] = $_POST['exp_date'][$sku] ?? date('Y-m-d', strtotime('+1 year'));
$labelsToPrint[] = $itemData;
}
}
@ -154,8 +154,8 @@ if (!empty($items)) {
foreach ($skus as $sku) {
if (isset($items[$sku])) {
$itemData = $items[$sku];
$itemData['prod_date'] = date('Y-m');
$itemData['exp_date'] = date('Y-m', strtotime('+1 year'));
$itemData['prod_date'] = date('Y-m-d');
$itemData['exp_date'] = date('Y-m-d', strtotime('+1 year'));
$labelsToPrint[] = $itemData;
}
}
@ -217,7 +217,7 @@ $companyName = current_lang() === 'ar' ? get_setting('company_name_ar', 'حلو
.label-name { font-size: 9px; font-weight: bold; line-height: 1.1; margin-bottom: 2px; max-height: 20px; overflow: hidden; }
.label-price { font-size: 10px; font-weight: bold; margin-top: 1px; }
.label-sku { font-size: 8px; color: #555; }
.label-dates { font-size: 7.5px; font-weight: bold; margin-top: 1px; color: #111; letter-spacing: 0.2px; }
.label-dates { font-size: 6.5px; font-weight: bold; margin-top: 1px; color: #111; letter-spacing: 0.2px; }
.label-barcode { margin: 0; display: flex; align-items: center; justify-content: center; }
.label-barcode svg { width: 100%; height: 100%; max-height: 14px; }
@ -289,7 +289,9 @@ $companyName = current_lang() === 'ar' ? get_setting('company_name_ar', 'حلو
<th>SKU</th>
<th><?= h(tr('الصنف', 'Item')) ?></th>
<th><?= h(tr('السعر', 'Price')) ?></th>
<th width="150" class="text-center"><?= h(tr('عدد الملصقات', 'Labels Count')) ?></th>
<th><?= h(tr('تاريخ الإنتاج', 'Prod. Date')) ?></th>
<th><?= h(tr('تاريخ الانتهاء', 'Exp. Date')) ?></th>
<th width="120" class="text-center"><?= h(tr('الكمية', 'Qty')) ?></th>
<th width="80" class="text-center"><?= h(tr('إزالة', 'Remove')) ?></th>
</tr>
</thead>
@ -303,7 +305,13 @@ $companyName = current_lang() === 'ar' ? get_setting('company_name_ar', 'حلو
<td><?= h($item['name']) ?></td>
<td><span class="badge bg-light text-dark border"><?= h(currency($item['price'])) ?></span></td>
<td>
<input type="number" name="qty[<?= h($sku) ?>]" class="form-control text-center" value="<?= isset($_POST['qty'][$sku]) ? (int)$_POST['qty'][$sku] : 1 ?>" min="1">
<input type="date" name="prod_date[<?= h($sku) ?>]" class="form-control form-control-sm" value="<?= h($_POST['prod_date'][$sku] ?? date('Y-m-d')) ?>">
</td>
<td>
<input type="date" name="exp_date[<?= h($sku) ?>]" class="form-control form-control-sm" value="<?= h($_POST['exp_date'][$sku] ?? date('Y-m-d', strtotime('+1 year'))) ?>">
</td>
<td>
<input type="number" name="qty[<?= h($sku) ?>]" class="form-control form-control-sm text-center" value="<?= isset($_POST['qty'][$sku]) ? (int)$_POST['qty'][$sku] : 1 ?>" min="1">
</td>
<td class="text-center">
<button type="button" class="btn btn-sm btn-outline-danger rounded-circle" onclick="this.closest('tr').remove();" title="<?= h(tr('إزالة', 'Remove')) ?>">
@ -359,7 +367,7 @@ $companyName = current_lang() === 'ar' ? get_setting('company_name_ar', 'حلو
</svg>
</div>
<div class="label-dates" dir="ltr" style="display: flex; justify-content: space-around; width: 100%;">
<span>P:<?= h($label['prod_date']) ?></span><span>E:<?= h($label['exp_date']) ?></span>
<span>P:<?= !empty($label['prod_date']) ? date('d/m/Y', strtotime($label['prod_date'])) : '' ?></span><span>E:<?= !empty($label['exp_date']) ? date('d/m/Y', strtotime($label['exp_date'])) : '' ?></span>
</div>
<div class="label-price"><?= h(currency($label['price'])) ?></div>
</div>

5
sohar_cookies.txt Normal file
View File

@ -0,0 +1,5 @@
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
127.0.0.1 FALSE / FALSE 0 PHPSESSID 10595d2a14je99l2dqr2ksv6v4

View File

@ -242,7 +242,31 @@ if (empty($dbError)) {
}
}
// Pagination logic
// Sorting logic
$sortField = $_GET['sort'] ?? '';
$sortOrder = strtolower($_GET['order'] ?? 'asc') === 'desc' ? 'desc' : 'asc';
if ($sortField && !empty($filteredStock)) {
usort($filteredStock, function($a, $b) use ($sortField, $sortOrder) {
$valA = $a[$sortField] ?? '';
$valB = $b[$sortField] ?? '';
if (in_array($sortField, ['price', 'cost_price', 'base_stock', 'sold', 'available'])) {
$valA = (float)$valA;
$valB = (float)$valB;
} else {
$valA = (string)$valA;
$valB = (string)$valB;
}
if ($valA == $valB) return 0;
$cmp = ($valA < $valB) ? -1 : 1;
return $sortOrder === 'asc' ? $cmp : -$cmp;
});
}
# Pagination logic
$page = max(1, (int)($_GET['p'] ?? 1));
$limit = 10;
$total = count($filteredStock);
@ -250,6 +274,28 @@ $totalPages = max(1, ceil($total / $limit));
$offset = ($page - 1) * $limit;
$stockRows = array_slice($filteredStock, $offset, $limit, true);
function sortable_header($field, $label, $currentSortField, $currentSortOrder, $search, $catFilter, $supFilter) {
$nextOrder = ($currentSortField === $field && $currentSortOrder === 'asc') ? 'desc' : 'asc';
$icon = '';
if ($currentSortField === $field) {
$icon = $currentSortOrder === 'asc' ? '<i class="bi bi-sort-alpha-down"></i>' : '<i class="bi bi-sort-alpha-down-alt"></i>';
if (in_array($field, ['price', 'cost_price', 'base_stock', 'sold', 'available'])) {
$icon = $currentSortOrder === 'asc' ? '<i class="bi bi-sort-numeric-down"></i>' : '<i class="bi bi-sort-numeric-down-alt"></i>';
}
} else {
$icon = '<i class="bi bi-arrow-down-up text-black-50 small"></i>';
}
$url = url_for('stock.php', [
'q' => $search,
'category' => $catFilter,
'supplier' => $supFilter,
'sort' => $field,
'order' => $nextOrder
]);
return '<a href="' . h($url) . '" class="text-dark text-decoration-none d-inline-flex align-items-center gap-1">' . h($label) . ' ' . $icon . '</a>';
}
require __DIR__ . '/includes/header.php';
?>
@ -332,14 +378,14 @@ require __DIR__ . '/includes/header.php';
<th width="40">
<input class="form-check-input" type="checkbox" id="selectAllCheckbox" onclick="toggleAllCheckboxes(this)">
</th>
<th>SKU</th>
<th><?= sortable_header('sku', 'SKU', $sortField, $sortOrder, $search, $catFilter, $supFilter) ?></th>
<th width="70"><?= h(tr('صورة', 'Pic')) ?></th>
<th class="text-end pe-4"><?= h(tr('الصنف', 'Product')) ?></th>
<th><?= h(tr('السعر', 'Price')) ?></th>
<th><?= h(tr('التكلفة', 'Cost')) ?></th>
<th><?= h(tr('افتتاحي', 'Opening')) ?></th>
<th><?= h(tr('مباع', 'Sold')) ?></th>
<th><?= h(tr('متاح', 'Available')) ?></th>
<th class="text-end pe-4"><?= sortable_header('name', tr('الصنف', 'Product'), $sortField, $sortOrder, $search, $catFilter, $supFilter) ?></th>
<th><?= sortable_header('price', tr('السعر', 'Price'), $sortField, $sortOrder, $search, $catFilter, $supFilter) ?></th>
<th><?= sortable_header('cost_price', tr('التكلفة', 'Cost'), $sortField, $sortOrder, $search, $catFilter, $supFilter) ?></th>
<th><?= sortable_header('base_stock', tr('افتتاحي', 'Opening'), $sortField, $sortOrder, $search, $catFilter, $supFilter) ?></th>
<th><?= sortable_header('sold', tr('مباع', 'Sold'), $sortField, $sortOrder, $search, $catFilter, $supFilter) ?></th>
<th><?= sortable_header('available', tr('متاح', 'Available'), $sortField, $sortOrder, $search, $catFilter, $supFilter) ?></th>
<th><?= h(tr('التنبيه', 'Signal')) ?></th>
<th class="text-end pe-4"><?= h(tr('إجراءات', 'Actions')) ?></th>
</tr>
@ -401,7 +447,7 @@ require __DIR__ . '/includes/header.php';
<ul class="pagination justify-content-center mb-0">
<?php for($i=1; $i<=$totalPages; $i++): ?>
<li class="page-item <?= $i === $page ? 'active' : '' ?>">
<a class="page-link" href="<?= h(url_for('stock.php', ['p' => $i, 'q' => $search, 'category' => $catFilter, 'supplier' => $supFilter])) ?>"><?= $i ?></a>
<a class="page-link" href="<?= h(url_for('stock.php', ['p' => $i, 'q' => $search, 'category' => $catFilter, 'supplier' => $supFilter, 'sort' => $sortField, 'order' => $sortOrder])) ?>"><?= $i ?></a>
</li>
<?php endfor; ?>
</ul>

0
temp_debts.html Normal file
View File

445
temp_debts.log Normal file
View File

@ -0,0 +1,445 @@
<!doctype html>
<html lang="ar" dir="rtl">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>الديون والفواتير الآجلة · حلوى الريامي | Al Riyami Sweets</title>
<meta name="description" content='حلوى الريامي: Simplify sweets sales with multilingual POS, stock management, and detailed reports for multi-branch effic' />
<meta property="og:description" content="حلوى الريامي: Simplify sweets sales with multilingual POS, stock management, and detailed reports for multi-branch effic" />
<meta property="twitter:description" content="حلوى الريامي: Simplify sweets sales with multilingual POS, stock management, and detailed reports for multi-branch effic" />
<meta property="og:image" content="https://project-screens.s3.amazonaws.com/screenshots/39728/app-hero-20260419-014257.png" />
<meta property="twitter:image" content="https://project-screens.s3.amazonaws.com/screenshots/39728/app-hero-20260419-014257.png" />
<meta name="theme-color" content="#343a40" />
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
<link rel="stylesheet" href="assets/css/custom.css?v=202604232013">
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
</head>
<body class="">
<!-- Private Admin Layout -->
<div class="d-flex" id="wrapper">
<!-- Sidebar -->
<div class="border-end bg-dark text-white shadow-sm" id="sidebar-wrapper">
<div class="sidebar-heading text-center py-4 fs-5 fw-bold text-uppercase border-bottom border-secondary d-flex flex-column align-items-center">
<i class="bi bi-shop me-2 fs-2 mb-2"></i>
<span>حلوى الريامي</span>
</div>
<div class="p-3 text-center border-bottom border-secondary">
<div class="fw-semibold">كاشير فرع صحار</div>
<div class="text-white-50 small">كاشير · فرع صحار</div>
</div>
<div class="list-group list-group-flush my-3 pb-5" id="sidebar-navigation">
<a class="list-group-item list-group-item-action " href="index.php?lang=ar">
<i class="bi bi-speedometer2"></i> لوحة التحكم </a>
<a class="list-group-item list-group-item-action " href="suppliers.php?lang=ar">
<i class="bi bi-truck"></i> الموردون </a>
<a class="list-group-item list-group-item-action " href="customers.php?lang=ar">
<i class="bi bi-people-fill"></i> العملاء </a>
<a class="list-group-item list-group-item-action active" href="debts.php?lang=ar">
<i class="bi bi-journal-text"></i> الديون والفواتير الآجلة </a>
</div>
</div>
<!-- /#sidebar-wrapper -->
<!-- Page Content -->
<div id="page-content-wrapper" class="d-flex flex-column min-vh-100">
<nav class="navbar navbar-expand-lg navbar-light bg-white border-bottom top-navbar px-3">
<div class="d-flex align-items-center justify-content-between w-100">
<div class="d-flex align-items-center">
<button class="btn btn-outline-secondary me-2" id="menu-toggle"><i class="bi bi-list"></i></button>
<h4 class="mb-0 ms-2 fw-semibold d-none d-md-block">الديون والفواتير الآجلة</h4>
</div>
<div class="d-flex align-items-center gap-3">
<a href="shop.php" target="_blank" class="btn btn-outline-success btn-sm me-2" title="زيارة المتجر"><i class="bi bi-shop"></i> <span class="d-none d-md-inline">المتجر</span></a>
<div class="language-switcher btn-group" role="group">
<a class="btn btn-sm btn-primary" href="test_debts_cli.php?lang=ar">AR</a>
<a class="btn btn-sm btn-outline-primary" href="test_debts_cli.php?lang=en">EN</a>
</div>
<div class="dropdown">
<button class="btn btn-light dropdown-toggle border" type="button" id="userMenu" data-bs-toggle="dropdown" aria-expanded="false">
<i class="bi bi-person-circle"></i> كاشير فرع صحار </button>
<ul class="dropdown-menu dropdown-menu-end shadow" aria-labelledby="userMenu">
<li><a class="dropdown-item" href="profile.php?lang=ar"><i class="bi bi-person me-2 text-primary"></i> الملف الشخصي</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="logout.php?lang=ar"><i class="bi bi-box-arrow-right text-danger me-2"></i> تسجيل الخروج</a></li>
</ul>
</div>
</div>
</div>
</nav>
<div class="container-fluid p-4">
<!-- Flash messages integration using SweetAlert2 -->
<div class="d-flex justify-content-between align-items-center mb-4">
<h1 class="h3 mb-0 text-gray-800">الديون والفواتير الآجلة</h1>
</div>
<div class="row">
<!-- Debts by Customer -->
<div class="col-lg-4 mb-4">
<div class="card shadow-sm border-0 h-100">
<div class="card-header bg-white border-bottom-0 pt-4 pb-0">
<h6 class="m-0 font-weight-bold text-primary"><i class="bi bi-people"></i> الديون حسب العميل</h6>
</div>
<div class="card-body">
<ul class="list-group list-group-flush">
<li class="list-group-item d-flex justify-content-between align-items-center px-0">
<div>
<strong>Moosa Ali Al-Abri</strong>
<div class="small text-muted" dir="ltr">99359472</div>
<div class="small text-muted">7 فواتير مفتوحة</div>
<div class="small text-warning">3 منها دفعات جزئية</div>
</div>
<span class="badge bg-danger rounded-pill fs-6">280.410 ر.ع</span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center px-0">
<div>
<strong>عميل غير معروف</strong>
<div class="small text-muted">3 فواتير مفتوحة</div>
<div class="small text-warning">1 منها دفعات جزئية</div>
</div>
<span class="badge bg-danger rounded-pill fs-6">8.122 ر.ع</span>
</li>
</ul>
</div>
</div>
</div>
<!-- Unpaid Invoices -->
<div class="col-lg-8 mb-4">
<div class="card shadow-sm border-0 h-100">
<div class="card-header bg-white border-bottom-0 pt-4 pb-0">
<h6 class="m-0 font-weight-bold text-primary"><i class="bi bi-receipt"></i> الفواتير غير المدفوعة والجزئية</h6>
</div>
<div class="card-body p-0">
<div class="table-responsive">
<table class="table table-hover align-middle mb-0">
<thead class="table-light">
<tr>
<th>رقم الفاتورة</th>
<th>العميل</th>
<th>الهاتف</th>
<th>التاريخ</th>
<th>الإجمالي</th>
<th>المدفوع</th>
<th>المتبقي</th>
<th>الحالة</th>
<th>الإجراء</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<a href="sale.php?id=28&amp;lang=ar" class="fw-bold text-decoration-none">
6 </a>
</td>
<td>Moosa Ali Al-Abri</td>
<td dir="ltr">-</td>
<td>2026-04-22</td>
<td class="fw-semibold">3.150 ر.ع</td>
<td class="text-primary">0.000 ر.ع</td>
<td class="fw-bold text-danger">3.150 ر.ع</td>
<td>
<span class="badge bg-danger text-white">غير مدفوعة</span>
</td>
<td>
<button class="btn btn-sm btn-outline-success rounded-pill px-3" onclick="receivePayment(28, 3.15, false)">
<i class="bi bi-cash-coin"></i> استلام دفعة </button>
</td>
</tr>
<tr>
<td>
<a href="sale.php?id=27&amp;lang=ar" class="fw-bold text-decoration-none">
5 </a>
</td>
<td>Moosa Ali Al-Abri</td>
<td dir="ltr">-</td>
<td>2026-04-22</td>
<td class="fw-semibold">1,260.000 ر.ع</td>
<td class="text-primary">1,000.000 ر.ع</td>
<td class="fw-bold text-danger">260.000 ر.ع</td>
<td>
<span class="badge bg-warning text-dark">مدفوعة جزئياً</span>
</td>
<td>
<button class="btn btn-sm btn-outline-success rounded-pill px-3" onclick="receivePayment(27, 260, false)">
<i class="bi bi-cash-coin"></i> استلام دفعة </button>
</td>
</tr>
<tr>
<td>
<a href="sale.php?id=26&amp;lang=ar" class="fw-bold text-decoration-none">
4 </a>
</td>
<td>-</td>
<td dir="ltr">-</td>
<td>2026-04-22</td>
<td class="fw-semibold">2.830 ر.ع</td>
<td class="text-primary">2.828 ر.ع</td>
<td class="fw-bold text-danger">0.002 ر.ع</td>
<td>
<span class="badge bg-warning text-dark">مدفوعة جزئياً</span>
</td>
<td>
<button class="btn btn-sm btn-outline-success rounded-pill px-3" onclick="receivePayment(26, 0.002, false)">
<i class="bi bi-cash-coin"></i> استلام دفعة </button>
</td>
</tr>
<tr>
<td>
<a href="sale.php?id=23&amp;lang=ar" class="fw-bold text-decoration-none">
877100 </a>
</td>
<td>Moosa Ali Al-Abri</td>
<td dir="ltr">-</td>
<td>2026-04-22</td>
<td class="fw-semibold">5.250 ر.ع</td>
<td class="text-primary">2.000 ر.ع</td>
<td class="fw-bold text-danger">3.250 ر.ع</td>
<td>
<span class="badge bg-warning text-dark">مدفوعة جزئياً</span>
</td>
<td>
<button class="btn btn-sm btn-outline-success rounded-pill px-3" onclick="receivePayment(23, 3.25, false)">
<i class="bi bi-cash-coin"></i> استلام دفعة </button>
</td>
</tr>
<tr>
<td>
<a href="sale.php?id=22&amp;lang=ar" class="fw-bold text-decoration-none">
900748 </a>
</td>
<td>Moosa Ali Al-Abri</td>
<td dir="ltr">-</td>
<td>2026-04-21</td>
<td class="fw-semibold">2.830 ر.ع</td>
<td class="text-primary">1.000 ر.ع</td>
<td class="fw-bold text-danger">1.830 ر.ع</td>
<td>
<span class="badge bg-warning text-dark">مدفوعة جزئياً</span>
</td>
<td>
<button class="btn btn-sm btn-outline-success rounded-pill px-3" onclick="receivePayment(22, 1.83, false)">
<i class="bi bi-cash-coin"></i> استلام دفعة </button>
</td>
</tr>
<tr>
<td>
<a href="sale.php?id=19&amp;lang=ar" class="fw-bold text-decoration-none">
132196 </a>
</td>
<td>Moosa Ali Al-Abri</td>
<td dir="ltr">-</td>
<td>2026-04-20</td>
<td class="fw-semibold">5.490 ر.ع</td>
<td class="text-primary">0.000 ر.ع</td>
<td class="fw-bold text-danger">5.490 ر.ع</td>
<td>
<span class="badge bg-danger text-white">غير مدفوعة</span>
</td>
<td>
<button class="btn btn-sm btn-outline-success rounded-pill px-3" onclick="receivePayment(19, 5.49, false)">
<i class="bi bi-cash-coin"></i> استلام دفعة </button>
</td>
</tr>
<tr>
<td>
<a href="sale.php?id=18&amp;lang=ar" class="fw-bold text-decoration-none">
968774 </a>
</td>
<td>Moosa Ali Al-Abri</td>
<td dir="ltr">-</td>
<td>2026-04-20</td>
<td class="fw-semibold">3.150 ر.ع</td>
<td class="text-primary">0.000 ر.ع</td>
<td class="fw-bold text-danger">3.150 ر.ع</td>
<td>
<span class="badge bg-danger text-white">غير مدفوعة</span>
</td>
<td>
<button class="btn btn-sm btn-outline-success rounded-pill px-3" onclick="receivePayment(18, 3.15, false)">
<i class="bi bi-cash-coin"></i> استلام دفعة </button>
</td>
</tr>
<tr>
<td>
<a href="sale.php?id=17&amp;lang=ar" class="fw-bold text-decoration-none">
911033 </a>
</td>
<td>-</td>
<td dir="ltr">-</td>
<td>2026-04-20</td>
<td class="fw-semibold">5.490 ر.ع</td>
<td class="text-primary">0.000 ر.ع</td>
<td class="fw-bold text-danger">5.490 ر.ع</td>
<td>
<span class="badge bg-danger text-white">غير مدفوعة</span>
</td>
<td>
<button class="btn btn-sm btn-outline-success rounded-pill px-3" onclick="receivePayment(17, 5.49, false)">
<i class="bi bi-cash-coin"></i> استلام دفعة </button>
</td>
</tr>
<tr>
<td>
<a href="sale.php?id=16&amp;lang=ar" class="fw-bold text-decoration-none">
859389 </a>
</td>
<td>Moosa Ali Al-Abri</td>
<td dir="ltr">-</td>
<td>2026-04-20</td>
<td class="fw-semibold">3.540 ر.ع</td>
<td class="text-primary">0.000 ر.ع</td>
<td class="fw-bold text-danger">3.540 ر.ع</td>
<td>
<span class="badge bg-danger text-white">غير مدفوعة</span>
</td>
<td>
<button class="btn btn-sm btn-outline-success rounded-pill px-3" onclick="receivePayment(16, 3.54, false)">
<i class="bi bi-cash-coin"></i> استلام دفعة </button>
</td>
</tr>
<tr>
<td>
<a href="sale.php?id=14&amp;lang=ar" class="fw-bold text-decoration-none">
356570 </a>
</td>
<td>Moosa Ali Al-Abri</td>
<td dir="ltr">99359472</td>
<td>2026-04-20</td>
<td class="fw-semibold">2.630 ر.ع</td>
<td class="text-primary">0.000 ر.ع</td>
<td class="fw-bold text-danger">2.630 ر.ع</td>
<td>
<span class="badge bg-danger text-white">غير مدفوعة</span>
</td>
<td>
<button class="btn btn-sm btn-outline-success rounded-pill px-3" onclick="receivePayment(14, 2.63, false)">
<i class="bi bi-cash-coin"></i> استلام دفعة </button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<script>
async function receivePayment(id, dueAmount, completeOrder = false) {
const { value: paymentAmount } = await Swal.fire({
title: 'استلام دفعة',
text: 'أدخل المبلغ المستلم لهذه الفاتورة.',
input: 'number',
inputAttributes: { min: '0.001', step: '0.001', max: String(dueAmount) },
inputValue: Number(dueAmount).toFixed(3),
showCancelButton: true,
confirmButtonColor: '#198754',
confirmButtonText: 'حفظ الدفعة',
cancelButtonText: 'إلغاء',
inputValidator: (value) => {
const amount = parseFloat(value || '0');
if (!amount || amount <= 0) {
return 'أدخل مبلغاً صحيحاً.';
}
if (amount - dueAmount > 0.0005) {
return 'المبلغ لا يمكن أن يتجاوز المتبقي.';
}
return null;
}
});
if (!paymentAmount) {
return;
}
const formData = new FormData();
formData.append('sale_id', String(id));
formData.append('payment_amount', String(paymentAmount));
if (completeOrder) {
formData.append('complete_order', '1');
}
const response = await fetch('api/sales_payment.php', { method: 'POST', body: formData });
const data = await response.json();
if (data.success) {
await Swal.fire({ icon: 'success', text: data.message, confirmButtonText: 'OK' });
window.location.reload();
} else {
Swal.fire({ icon: 'error', text: data.error || 'تعذر تسجيل الدفعة.' });
}
}
</script>
</div> <!-- /.container-fluid -->
<!-- App Footer -->
<footer class="bg-white border-top mt-auto py-3 px-4 text-muted small">
<div class="d-flex justify-content-between align-items-center flex-wrap gap-2">
<div>
&copy; 2026 <strong>حلوى الريامي</strong>. جميع الحقوق محفوظة. </div>
<div class="d-flex align-items-center flex-wrap gap-3 mt-2 mt-md-0">
<a href="privacy-policy.php?lang=ar" class="text-decoration-none">سياسة الخصوصية</a>
<a href="terms-conditions.php?lang=ar" class="text-decoration-none">الشروط والأحكام</a>
<div>
<span class="text-secondary">تم التطوير بواسطة </span><a href="https://flatlogic.com" target="_blank" class="text-decoration-none fw-semibold">Flatlogic</a>
</div>
</div>
</div>
</footer>
<!-- /App Footer -->
</div> <!-- /#page-content-wrapper -->
</div> <!-- /#wrapper -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
<script>
// Menu Toggle Script
document.addEventListener('DOMContentLoaded', function() {
var toggleBtn = document.getElementById("menu-toggle");
if (toggleBtn) {
toggleBtn.addEventListener('click', function(e) {
e.preventDefault();
document.getElementById("wrapper").classList.toggle("toggled");
});
}
});
</script>
<script>
function confirmSwal(e, msg) {
e.preventDefault();
const form = e.target;
Swal.fire({
title: msg,
icon: 'warning',
showCancelButton: true,
confirmButtonText: 'نعم',
cancelButtonText: 'إلغاء',
confirmButtonColor: '#d33'
}).then((result) => {
if (result.isConfirmed) {
form.submit();
}
});
}
</script>
<script src="assets/js/main.js?v=202604232013"></script>
</body>
</html>

1696
temp_debts_out.html Normal file

File diff suppressed because it is too large Load Diff

10
test_debts_cli.php Normal file
View File

@ -0,0 +1,10 @@
<?php
$_SERVER['REQUEST_URI'] = '/debts.php';
require_once 'db/config.php';
$pdo = db();
$stmt = $pdo->query("SELECT * FROM users WHERE username = 'cashier_sohar'");
$user = $stmt->fetch(PDO::FETCH_ASSOC);
session_start();
$_SESSION['auth_user'] = $user;
require_once 'debts.php';