Skip to content

.info-box h4 margin-top: 0; color: #667eea;

.form-group label display: block; margin-bottom: 8px; font-weight: 600; color: #333;

const handleSubmit = async (e) => e.preventDefault(); setLoading(true); setMessage(null); try // Generate visa letter const response = await fetch('/api/generate-visa-letter', method: 'POST', headers: 'Content-Type': 'application/json' , body: JSON.stringify(formData) ); const data = await response.json(); if (data.success) // Send to email await fetch(`/api/send-visa-letter/$data.request_id`, method: 'POST', headers: 'Content-Type': 'application/json' , body: JSON.stringify( email: formData.guest_email ) ); setMessage( type: 'success', text: 'Visa support letter generated and sent to guest email!' ); // Reset form setFormData( hotel_id: '', guest_name: '', passport_number: '', nationality: '', check_in_date: '', check_out_date: '', room_type: '', guest_email: '' ); catch (error) setMessage( type: 'error', text: 'Failed to generate visa letter. Please try again.' ); finally setLoading(false); ;

.visa-header text-align: center; color: white; margin-bottom: 30px;

if (!hotel) return res.status(404).json( error: 'Hotel not found' );

const handleChange = (e) => setFormData( ...formData, [e.target.name]: e.target.value ); ;

// Generate PDF letter const pdfPath = await generateVisaLetter( hotel: hotel[0], guest: name: guest_name, passport: passport_number, nationality: nationality , dates: check_in: check_in_date, check_out: check_out_date , room_type: room_type );