قوافل الحرمين قوافل الحرمينإدارة البرامج والرحلات
← لوحة الشركة

دخول الإدارة

هذه الصفحة مخصصة لفريق إدارة قوافل الحرمين.

إجمالي البرامج0
المنشورة0
إجمالي المقاعد0
المقاعد المتاحة0

البرامج

إدارة رحلات العمرة والحج
البرنامجالتاريخالسكنالأسعارالمقاعدالحالةإجراء

إضافة برنامج

يفضل صورة أفقية واضحة لمكة أو المدينة — JPG / PNG حتى 6MB.
لا توجد صورة مرفوعة
💰 الإدارة المالية
`); w.document.close(); } $('tripReportTrip')?.addEventListener('click',openTripReport); $('tripVisaTrip')?.addEventListener('click',()=>{$('visaPanel').classList.toggle('hidden'); if(!$('visaPanel').classList.contains('hidden')) renderVisaPanel();}); $('tripModal')?.addEventListener('click',e=>{if(e.target.id==='tripModal')closeTripModal()}); $('image_file')?.addEventListener('change',e=>{const f=e.target.files?.[0];if(!f){return}if(!f.type.startsWith('image/')){e.target.value='';alert('اختر ملف صورة فقط.');return}if(f.size>6*1024*1024){e.target.value='';alert('حجم الصورة يجب ألا يتجاوز 6MB.');return}const u=URL.createObjectURL(f);$('imagePreview').innerHTML='معاينة الصورة'}); $('programForm').onsubmit=async e=>{e.preventDefault();msg($('formMsg'),'جاري الحفظ...');let id=$('id').value||crypto.randomUUID();const file=$('image_file').files?.[0];let image_url=$('image_url').value||null;if(file){const ext=(file.name.split('.').pop()||'jpg').toLowerCase().replace(/[^a-z0-9]/g,'')||'jpg';const path=`programs/${id}.${ext}`;const up=await db.storage.from('program-images').upload(path,file,{cacheControl:'86400',upsert:true,contentType:file.type||'image/jpeg'});if(up.error)return msg($('formMsg'),'تعذر رفع صورة البرنامج: '+up.error.message,'err');const pub=db.storage.from('program-images').getPublicUrl(path);image_url=pub.data?.publicUrl||null}const payload={id,title:$('title').value.trim(),departure_date:$('departure_date').value||null,return_date:$('return_date').value||null,city_hotel:$('city_hotel').value.trim()||null,makkah_hotel:$('makkah_hotel').value.trim()||null,travel_type:$('travel_type').value,price:Number($('price').value||0),installment_price:Number($('installment_price').value||0),purchase_cost:Number($('purchase_cost').value||0),purchase_cost_currency:$('purchase_cost_currency').value,currency:$('currency').value,seats_total:Number($('seats_total').value||0),seats_available:Number($('seats_available').value||0),services:$('services').value.trim()||null,description:$('description').value.trim()||null,image_url,bus_number:$('bus_number').value.trim()||null,bus_company:$('bus_company').value.trim()||null,driver_name:$('driver_name').value.trim()||null,driver_phone:$('driver_phone').value.trim()||null,supervisor_name:$('supervisor_name').value.trim()||null,supervisor_phone:$('supervisor_phone').value.trim()||null,status:$('status').value};const r=$('id').value?await db.from('programs').update(payload).eq('id',id):await db.from('programs').insert(payload);if(r.error)return msg($('formMsg'),r.error.message,'err');msg($('formMsg'),'تم حفظ البرنامج بنجاح');resetForm();loadPrograms()}async function removeProgram(id){if(!confirm('حذف هذا البرنامج؟'))return;const{error}=await db.from('programs').delete().eq('id',id);if(error)return msg($('listMsg'),error.message,'err');loadPrograms()} db.auth.onAuthStateChange((_e,session)=>session?showAdmin():showLogin()); (async()=>{const{data}=await db.auth.getSession();data.session?showAdmin():showLogin()})();