Autosave: 20260501-140940

This commit is contained in:
Flatlogic Bot 2026-05-01 14:09:40 +00:00
parent 7377170520
commit 5f5205783f
5 changed files with 34 additions and 8 deletions

View File

@ -172,7 +172,20 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
}
if ($error === '') {
set_flash('success', tr('تم تحديث الفاتورة بنجاح.', 'Invoice updated successfully.'));
$flashType = 'success';
$flashMessage = tr('تم تحديث الفاتورة بنجاح.', 'Invoice updated successfully.');
if ($isEidSale && wablas_is_configured()) {
$wablasResult = wablas_notify_sale_invoice($editSaleId);
if (!empty($wablasResult['success'])) {
$flashMessage = tr('تم تحديث الفاتورة وإعادة إرسالها عبر واتساب بنجاح.', 'Invoice updated and resent via WhatsApp successfully.');
} else {
$flashType = 'warning';
$flashMessage = tr('تم تحديث الفاتورة، لكن تعذر إعادة إرسالها عبر واتساب. تحقق من رقم واتساب العميل أو إعدادات واتساب.', 'Invoice updated, but resending via WhatsApp failed. Check the customer WhatsApp number or WhatsApp settings.');
}
}
set_flash($flashType, $flashMessage);
redirect_to('sale.php', ['id' => $editSaleId]);
}
}

View File

@ -47,7 +47,7 @@ $deliveryStatus = trim((string) ($_GET['delivery_status'] ?? ''));
$dateFrom = trim((string) ($_GET['date_from'] ?? ''));
$dateTo = trim((string) ($_GET['date_to'] ?? ''));
$sort = trim((string) ($_GET['sort'] ?? 'delivery_date'));
$dir = strtolower(trim((string) ($_GET['dir'] ?? 'asc')));
$dir = strtolower(trim((string) ($_GET['dir'] ?? 'desc')));
$sortMap = [
'receipt_no' => 'receipt_no',
'customer' => 'customer_name',
@ -154,8 +154,8 @@ try {
$primarySort = $sortMap[$sort] . ' ' . strtoupper($dir);
$secondarySort = $sort === 'delivery_date'
? ', sale_date DESC'
: ', COALESCE(delivery_date, DATE(sale_date)) ASC, sale_date DESC';
? ', sale_date DESC, id DESC'
: ', COALESCE(delivery_date, DATE(sale_date)) DESC, sale_date DESC, id DESC';
$sql = "SELECT sales_orders.*, (
SELECT COUNT(*)
@ -176,6 +176,7 @@ try {
foreach ($orders as &$order) {
$order['items'] = json_decode((string) ($order['items_json'] ?? '[]'), true) ?: [];
$order['payment_summary'] = sale_payment_summary($order);
$itemPreview = [];
foreach ($order['items'] as $item) {
@ -406,6 +407,8 @@ require __DIR__ . '/includes/header.php';
<i class="bi <?= h($sortIcon('total_amount')) ?>"></i>
</a>
</th>
<th class="text-end"><?= h(tr('المدفوع', 'Paid')) ?></th>
<th class="text-end"><?= h(tr('المتبقي', 'Remaining')) ?></th>
<th><?= h(tr('الدفع', 'Payment')) ?></th>
<th class="text-end"><?= h(tr('إجراءات', 'Actions')) ?></th>
</tr>
@ -467,15 +470,17 @@ require __DIR__ . '/includes/header.php';
</span>
</td>
<td class="text-end fw-semibold"><?= h(number_format((float) ($order['total_amount'] ?? 0), 3)) ?></td>
<td class="text-end text-success fw-semibold"><?= h(number_format((float) (($order['payment_summary']['paid_amount'] ?? 0)), 3)) ?></td>
<td class="text-end fw-semibold <?= (($order['payment_summary']['due_amount'] ?? 0) > 0.0005) ? 'text-danger' : 'text-success' ?>"><?= h(number_format((float) (($order['payment_summary']['due_amount'] ?? 0)), 3)) ?></td>
<td>
<span class="badge <?= h(payment_status_badge_class((string) ($order['payment_status'] ?? 'paid'))) ?> px-2 py-1">
<?= h(payment_status_label((string) ($order['payment_status'] ?? 'paid'))) ?>
<span class="badge <?= h(payment_status_badge_class((string) (($order['payment_summary']['payment_status'] ?? ($order['payment_status'] ?? 'paid'))))) ?> px-2 py-1">
<?= h(payment_status_label((string) (($order['payment_summary']['payment_status'] ?? ($order['payment_status'] ?? 'paid'))))) ?>
</span>
</td>
<td>
<div class="d-flex justify-content-end gap-2">
<?php if (($order['payment_status'] ?? 'unpaid') !== 'paid'): ?>
<?php if ((($order['payment_summary']['payment_status'] ?? ($order['payment_status'] ?? 'unpaid'))) !== 'paid'): ?>
<form method="post" action="" class="d-inline" onsubmit="return confirm('<?= h(tr('هل أنت متأكد من تغيير حالة الدفع إلى مدفوع؟', 'Are you sure you want to mark as paid?')) ?>');">
<input type="hidden" name="action" value="mark_as_paid">
<input type="hidden" name="id" value="<?= h($order['id']) ?>">

View File

@ -7,4 +7,6 @@ $activeNav = "eid_sale";
$backUrl = url_for('eid_orders.php');
$backLabel = tr('عودة لطلبات العيد', 'Back to Eid Orders');
$saveLabel = tr('حفظ طلب العيد', 'Save Eid Order');
$saveOnlyLabel = tr('حفظ بدون طباعة', 'Save without print');
$savePrintLabel = tr('حفظ مع الطباعة', 'Save with print');
require_once __DIR__ . '/includes/sale_form.php';

View File

@ -170,6 +170,9 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
}
$redirectParams = ['id' => $saleId, 'print' => 1];
if ($isEidOrder) {
redirect_to('print_receipt.php', $redirectParams);
}
redirect_to('sale.php', $redirectParams);
}
}

View File

@ -17,6 +17,9 @@ if (!$sale) {
die("Sale not found.");
}
$paymentSummary = sale_payment_summary($sale);
$isEidSale = (($sale['order_type'] ?? 'standard') === 'eid');
$backHref = $isEidSale ? url_for('eid_orders.php') : url_for('sales.php');
$backLabel = $isEidSale ? tr('رجوع لطلبات العيد', 'Back to Eid Orders') : tr('رجوع للمبيعات', 'Back to Sales');
// Receipt Configuration
$storeName = current_lang() === 'ar' ? get_setting('company_name_ar', 'حلوى الريامي') : get_setting('company_name_en', 'Al Riyami Sweets');
@ -292,7 +295,7 @@ $registerNo = 'REG-01';
<!-- Print Actions -->
<div class="print-actions no-print">
<a href="pos.php" class="btn btn-secondary"><?= h(tr('رجوع لـ POS', 'Back to POS')) ?></a>
<a href="<?= h($backHref) ?>" class="btn btn-secondary"><?= h($backLabel) ?></a>
<button onclick="window.print()" class="btn"><?= h(tr('طباعة الآن', 'Print Now')) ?></button>
</div>