39528-vm/stock_movements.php
2026-04-09 09:46:40 +00:00

39 lines
2.1 KiB
PHP

<?php
declare(strict_types=1);
require_once __DIR__ . '/app.php';
require_permission('stock');
$movements = fetch_records('stock_movement');
render_header('حركات المخزون', 'سجل مركزي لكل خصم وإضافة على المخزون من المبيعات والمشتريات.', 'stock');
?>
<div class="panel-card">
<div class="section-header">
<div>
<h1 class="section-title">سجل حركات المخزون</h1>
<p class="section-copy">كل حركة تعرض الكمية قبل وبعد العملية مع المرجع المرتبط بها.</p>
</div>
</div>
<?php if ($movements): ?>
<div class="table-responsive">
<table class="table align-middle app-table">
<thead><tr><th>المرجع</th><th>الصنف</th><th>نوع الحركة</th><th>التغيير</th><th>قبل / بعد</th><th>المنشئ</th></tr></thead>
<tbody>
<?php foreach ($movements as $movement): $payload = $movement['payload_data']; $delta = (float)($payload['qty_change'] ?? 0); ?>
<tr>
<td><div class="fw-semibold"><?= e($payload['reference_code'] ?? $movement['code']) ?></div><div class="small text-secondary"><?= e(substr((string)($movement['created_at'] ?? ''), 0, 16)) ?></div></td>
<td><?= e($payload['product_name'] ?? '') ?><div class="small text-secondary"><?= e($payload['sku'] ?? '') ?></div></td>
<td><?= e($payload['movement_type'] ?? '') ?></td>
<td><span class="badge <?= e(movement_badge_class($delta)) ?>"><?= e(movement_direction_label($delta)) ?></span><div class="small mt-1"><?= e((string)$delta) ?> <?= e($payload['unit'] ?? '') ?></div></td>
<td><?= e((string)($payload['qty_before'] ?? 0)) ?> → <?= e((string)($payload['qty_after'] ?? 0)) ?></td>
<td><?= e($payload['created_by'] ?? '') ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php else: ?>
<div class="empty-inline">لا توجد حركات مخزون بعد. أنشئ أمر شراء أو أمر بيع لتظهر هنا.</div>
<?php endif; ?>
</div>
<?php render_footer(); ?>