beginTransaction(); try { $purchaseId = create_record('purchase_order', 'أمر شراء ' . $supplier['title'], next_code('PO', 'purchase_order'), [ 'supplier_id' => (int)$supplier['id'], 'supplier_name' => $supplier['title'], 'product_id' => (int)$product['id'], 'product_name' => $product['title'], 'sku' => $sku, 'unit' => $productPayload['unit'] ?? 'وحدة', 'qty' => $qty, 'unit_cost' => $unitCost, 'subtotal' => $subtotal, 'vat' => $vat, 'grand_total' => $grand, 'notes' => $notes, 'created_date' => date('Y-m-d H:i'), 'received_at' => $status === 'received' ? date('Y-m-d H:i') : null, 'created_by' => current_user()['username'] ?? 'system', ], $status); $purchase = fetch_record('purchase_order', $purchaseId); if ($status === 'received' && $purchase) { $stock = adjust_product_stock($product, $qty, 'purchase_receive', $purchase['code'], 'purchase_order', $purchaseId, 'استلام شراء من المورد ' . $supplier['title']); $payload = $purchase['payload_data']; $payload['stock_after'] = $stock['after']; update_record_payload($purchaseId, $payload, 'received'); } db()->commit(); set_flash('success', $status === 'received' ? 'تم إنشاء أمر الشراء واستلامه وتحديث المخزون.' : 'تم حفظ أمر الشراء كمسودة.'); redirect('purchases.php?id=' . $purchaseId); } catch (Throwable $e) { db()->rollBack(); $errors[] = 'تعذر حفظ أمر الشراء، حاول مرة أخرى.'; } } } $suppliers = supplier_dataset(); $products = product_dataset(); $orders = fetch_records('purchase_order'); $detail = isset($_GET['id']) ? fetch_record('purchase_order', (int)$_GET['id']) : null; render_header('أوامر الشراء', 'إنشاء أوامر شراء وربطها بالموردين وتحديث المخزون عند الاستلام.', 'purchases'); ?>

إنشاء أمر شراء

اختر المورد والصنف ثم قرر هل هو استلام مباشر أم مسودة معلقة.

سجل أوامر الشراء

الأوامر المستلمة ترفع المخزون تلقائيًا، والمسودات تبقى دون تأثير.

الرقمالموردالصنفالإجماليالحالة
لا توجد أوامر شراء بعد.

تفاصيل أمر الشراء

رقم الأمر
الحالة
المورد
تاريخ الإنشاء
الصنف
الكمية
سعر الشراء
الإجمالي
المخزون بعد الاستلام
اختر أمر شراء من الجدول لعرض تفاصيله.