انتقل إلى المحتوى

الحجز

السابقالتالي

احجز وادفع أونلاين — سعر واضح مسبقاً، وتوفر القاعات لحظياً، وتأكيد فوري أو دفع عبر بنكك، وصفحة تأكيد.

يختار الضيف ماذا ومتى وكم

تعرض بطاقة كل منتج سعرها الإلكتروني من إعدادات الاستقبال: سعر تذكرة اليوم لتذاكر اليوم وأيام العمل المشترك، والسعر بالساعة لكل قاعة. وفي القاعات تظهر أوقات البدء المتعارضة مع حجز قائم معطّلةً. ولا يُعرض إلا ما يمكن حجزه فعلاً: ينتهي حجز القاعة قبل الإغلاق (١٠ مساءً)، فتُعطَّل المدد التي تتجاوزه؛ وتراعي أوقات اليوم مهلة الإشعار لكل قاعة؛ وحين لا يعود اليوم قابلاً للحجز (بعد الإغلاق أو داخل مهلة الإشعار) ينتقل أقرب تاريخ إلى الغد — فتذكرة اليوم المشتراة بعد الإغلاق تكون للغد. ويفحص الخادم القواعد نفسها.

يُحفظ الطلب مع سعره

يُحفظ BookingRequest بحالة PENDING ورمز مرجعي مثل SP-7K3Q9M، ومعه المبلغ amount ورمز خاص publicToken. وفي القاعات يعيد الخادم فحص الموعد تحت قفل خاص بكل قاعة، فلا يأخذ ضيفان الساعة نفسها. وتحتفظ القاعة المسعّرة غير المدفوعة بموعدها طوال مدة الحجز المؤقت (١٢٠ دقيقة افتراضياً).

الحجوزات المعتادة تتأكد وحدها

حين يكون تأكيد الحجوزات فوراً مفعّلاً (الاستقبال ← الإعدادات، وهو مفعّل افتراضياً)، تُحفظ تذكرة اليوم ويوم العمل المشترك وأي من القاعات الثلاث بحالة CONFIRMED لحظة إرسالها. لا يحتاج الحجز موافقة أحد: فُحص تعارض مواعيد القاعات مسبقاً، ويدفع الضيف في الاستقبال عند وصوله. ينتقل الضيف مباشرة إلى «تم تأكيد حجزك» مع المبلغ المطلوب. ويصل الفريقَ بريد «حجز تأكد تلقائياً»، ويظهر الحجز في وصول اليوم وفي الاستقبال. وتحت التأكيد تعرض صفحة الضيف ادفع الآن أونلاين — بلا انتظار عند الاستقبال: تحويل بنكك نفسه الموضّح أدناه، وهو اختياري. إن أرسل رقم عملية بقي الحجز مؤكداً وانتظر التحويل مراجعة الفريق كأي تحويل آخر؛ وبعد المطابقة يصله «تم استلام الدفع» ولا شيء عليه عند الاستقبال. وإن لم يجده الفريق يبقى الحجز قائماً — ويُبلَّغ الضيف بالسبب، فيرسل الرقم الصحيح أو يدفع عند الاستقبال. ويستطيع الضيف إلغاءه من صفحته إلى أن ينتهي موعده (ما لم يرسل تحويلاً)، ويُبلَّغ الفريق بذلك. المكاتب الخاصة والمخصصة تنتظر الفريق دائماً. أوقف الإعداد لتأكيد كل حجز يدوياً، فتسري عندها الخطوات التالية.

يدفع الضيف من صفحته

تعرض صفحة /booking/<token> المبلغ وطريقة حسابه (مثلاً 10,000 ج.س. / الساعة · ساعتان)، وحساب سبيس في بنكك، والرمز المرجعي لكتابته في ملاحظة التحويل. يرسل الضيف رقم العملية، ولا يمكن استخدامه مرتين. أما المنتجات غير المسعّرة (المكاتب المخصصة، والمكاتب الخاصة، وأي منتج بلا سعر) فتعرض بدلاً من ذلك «سنؤكد معك السعر». وما دام الطلب بانتظار الفريق تتحدّث الصفحة وحدها كل ٣٠ ثانية، فيظهر السعر أو التأكيد دون إعادة تحميل.

يراجع الفريق التحويل

يعرف الفريق بالطلب بثلاث طرق: يُظهر بند الحجوزات في قائمة الإدارة عدد الطلبات التي تحتاج إجراءً، وتتحدّث قائمة المهام وحدها كل دقيقة، وحين يُضبط RESEND_API_KEY يصل بريد إلى كل مدير وكاشير نشط عن كل طلب جديد وكل تحويل للمراجعة، مع رابط الحجز. يظهر التحويل في الاستقبال تحت مدفوعات إلكترونية للمراجعة، وفي صفحة الحجز. زر وصل المبلغ — أكّد يجعل الحجز CONFIRMED ويكتب الرسم ودفعة بنكك في الدفتر في معاملة واحدة. أما زر لم يصل فيرفض التحويل مع سبب يراه الضيف — يُلغى الطلب المعلّق، ويبقى الحجز المؤكد فوراً مؤكداً. وتعرض صفحة الحجز في الإدارة كل دفعة تحت المدفوعات (بنكك أو نقداً، رقم العملية، من استلمها، ومتى)، والسعر مع حسابه (السعر × المدة)؛ والحجز غير المسعّر يعرض ما ستكلّفه أسعار اليوم.

يصل الضيف

تظهر تذكرة اليوم المدفوعة تحت المتوقعون اليوم مع زر تسجيل دخول مدفوع مسبقاً بلمسة واحدة، ولا تُضاف رسوم ثانية. أما غير المدفوعة فتمر عبر تسجيل الدخول العادي الذي يحتسب الرسوم.

أين يعيش المنطق

الملفالدور
lib/desk/bookings.tsالتسعير، وفحص التعارض، والإنشاء، والتحويل، والتأكيد، والدخول
site/booking/pricing.tsحساب السعر المشترك بين النموذج والخادم
site/booking/config.tsالمنتجات، والمدد، ومهلة الإشعار، ونافذة الوقت
site/booking/rules.tsقواعد الحجز
site/booking/actions.tsالإنشاء، وتوفر القاعات، والتحويل (مع المصيدة وحدّ المعدل)
site/booking/guest-content.tsxصفحة الضيف: الدفع، والمراجعة، والتأكيد، والإلغاء
admin/desk/arrivals/المدفوعات للمراجعة، والمتوقعون اليوم، وملاحظة الأتمتة

اختبره من البداية إلى النهاية

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

  1. فوري (الإعداد مفعّل). من /book اختر قاعة اجتماعات ووقتاً وأدخل بياناتك. يقول الملخص «حجز فوري»، والزر احجز الآن. بعد الإرسال تصل إلى «تم تأكيد حجزك» مع المبلغ المطلوب دفعه في الاستقبال. وفي الإدارة يظهر الحجز مؤكداً، وسجله: تم الطلب ← تأكيد (instant).
  2. الإلغاء. من الصفحة نفسها افتح إلغاء الحجز وأكّد. تقول الصفحة إن الحجز أُلغي، ويعود وقت القاعة متاحاً في /book.
  3. التعارض. احجز القاعة نفسها في الوقت نفسه مرتين. تُرفض المحاولة الثانية عند حقل الوقت.
  4. يدوي (الإعداد موقوف). أوقف تأكيد الحجوزات فوراً من الاستقبال ← الإعدادات واحجز من جديد. تعرض الصفحة «ادفع لتأكيد الحجز» أو «سنؤكد معك السعر». اتركها مفتوحة. في متصفح آخر سجّل الدخول كموظف، وافتح الحجز (تجده في قائمة المهام، وقد زاد العدد على بند الحجوزات)، واضغط تأكيد الحجز. خلال ٣٠ ثانية تتحول صفحة الضيف إلى «تم تأكيد حجزك» وحدها.
  5. الدفع المسبق. كرر الخطوة ١، ثم أرسل أي رقم عملية من ادفع الآن أونلاين. تقول صفحة الضيف «نراجع تحويلك»؛ وفي الإدارة يبقى الحجز مؤكداً مع تحويل بانتظار المراجعة في الإجراءات. زر وصل المبلغ — أكّد ← يظهر التحويل تحت المدفوعات، وتقول الفوترة «مدفوع»، وتعرض صفحة الضيف الإيصال. كرر مع لم يصل ← يبقى مؤكداً، ويستطيع الضيف إرسال رقم آخر.
  6. الاستقبال. إذا حجزت تذكرة يوم لليوم نفسه، يظهر الحجز تحت المتوقعون اليوم في الاستقبال. زر تسجيل دخول مع الدفع يحصّل المبلغ.
  7. البريد (يحتاج RESEND_API_KEY). في الخطوتين ١ و٤ يصل الضيفَ بريد «وصلنا طلبك» أو «تم تأكيد حجزك»، ويصل الفريقَ «طلب حجز جديد» أو «حجز تأكد تلقائياً». وفي الخطوة ٢ يصل الفريقَ «ضيف ألغى حجزه».

أعد تفعيل الإعداد بعد الانتهاء.

تلقائياً كل ساعة (مهمة Cloudflare المجدولة ← cf/worker.js ← /api/cron، وsrc/lib/desk/booking-routines.ts): الحجوزات المؤكدة التي انتهى وقتها تصبح تمت الزيارة؛ والطلبات التي لم يؤكدها أحد قبل انتهاء موعدها تُلغى، ويصل الضيف إشعار «انتهت مهلة الطلب» ويُسجَّل ذلك في السجل؛ ويصل كل حجز مؤكد تذكير واحد خلال الساعات الـ24 السابقة له، بعد مرور 12 ساعة على تأكيده — ولا يُرسل بين 22:00 و07:00. وتجري روتينات الاستقبال اليومية (فواتير المكاتب، وتسجيل الخروج المنسي) مع المهمة نفسها.