// Gestion du formulaire de commande document.addEventListener('DOMContentLoaded', function() { // Initialisation du formulaire de commande const deliveryMethodSelect = document.getElementById('deliveryMethod'); const pickupInfo = document.getElementById('pickupInfo'); const provinceSelect = document.getElementById('province'); const shippingCostElement = document.getElementById('shipping-cost'); const totalCostElement = document.getElementById('total-cost'); const bookPrice = 27.99; const quebecShipping = 9.99; const otherShipping = 14.99; deliveryMethodSelect.addEventListener('change', function() { const method = deliveryMethodSelect.value; if (method === 'delivery') { pickupInfo.style.display = 'none'; updateTotal(); } else if (method === 'pickup') { pickupInfo.style.display = 'block'; shippingCostElement.textContent = 'GRATUIT'; totalCostElement.textContent = bookPrice.toFixed(2) + '$'; } else { pickupInfo.style.display = 'none'; shippingCostElement.textContent = 'À calculer'; totalCostElement.textContent = bookPrice.toFixed(2) + '$'; } }); function updateTotal() { const deliveryMethod = deliveryMethodSelect.value; if (deliveryMethod === 'pickup') { shippingCostElement.textContent = 'GRATUIT'; totalCostElement.textContent = bookPrice.toFixed(2) + '$'; return; } if (deliveryMethod !== 'delivery') { shippingCostElement.textContent = 'À calculer'; totalCostElement.textContent = bookPrice.toFixed(2) + '$'; return; } const province = provinceSelect.value; let shippingCost = 0; if (province === 'QC') { shippingCost = quebecShipping; shippingCostElement.textContent = shippingCost.toFixed(2) + '$'; } else if (province && province !== '' && province !== 'OTHER') { shippingCost = otherShipping; shippingCostElement.textContent = shippingCost.toFixed(2) + '$'; } else if (province === 'OTHER') { shippingCostElement.textContent = 'Nous contacter'; totalCostElement.textContent = 'Nous contacter'; return; } else { shippingCostElement.textContent = 'À calculer'; totalCostElement.textContent = bookPrice.toFixed(2) + '$'; return; } const total = bookPrice + shippingCost; totalCostElement.textContent = total.toFixed(2) + '$'; } provinceSelect.addEventListener('change', updateTotal); document.getElementById('order-form').addEventListener('submit', function(e) { e.preventDefault(); alert('Utilisez le bouton Payer maintenant pour passer votre commande.'); }); // Vérification du bouton de paiement const paymentBtn = document.getElementById('payment-button'); if (!paymentBtn) { console.error('Erreur: Bouton paiement non trouvé'); } window.submitPaymentFirst = async function() { // Début du processus de commande const form = document.getElementById('order-form'); const formData = new FormData(form); const deliveryMethod = formData.get('deliveryMethod'); const orderData = { fullName: formData.get('fullName'), email: formData.get('email'), phone: formData.get('phone'), deliveryMethod: deliveryMethod, address: formData.get('address'), province: formData.get('province'), postalCode: formData.get('postalCode') }; // Validation des champs obligatoires if (!orderData.fullName || !orderData.email || !orderData.phone || !orderData.deliveryMethod) { alert('Tous les champs marqués (*) sont obligatoires : Nom complet, Email, Téléphone, Mode de récupération'); return; } if (!orderData.address || !orderData.province || !orderData.postalCode) { alert('Adresse complète obligatoire pour toutes les commandes : Adresse complète, Province, Code postal (Requis même pour récupération)'); return; } const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(orderData.email)) { alert('Veuillez entrer une adresse email valide.'); return; } const termsCheckbox = form.querySelector('input[type="checkbox"]'); if (!termsCheckbox || !termsCheckbox.checked) { alert('Veuillez accepter les conditions de vente.'); return; } const submitBtn = document.getElementById('payment-button'); if (!submitBtn) { alert('Erreur: Bouton de paiement non trouvé!'); return; } const originalText = submitBtn.innerHTML; submitBtn.disabled = true; submitBtn.innerHTML = 'Création de la session de paiement...'; try { const response = await fetch('/api/payment-first', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(orderData) }); if (response.ok) { const result = await response.json(); if (result.success && result.paymentUrl) { // Redirection vers Stripe window.location.href = result.paymentUrl; } else { alert('Erreur technique. Veuillez réessayer ou contacter le support.'); if (submitBtn) { submitBtn.disabled = false; submitBtn.innerHTML = originalText; } } } else { alert('Erreur serveur. Veuillez réessayer ou contacter le support.'); if (submitBtn) { submitBtn.disabled = false; submitBtn.innerHTML = originalText; } } } catch (error) { alert('Erreur de connexion. Vérifiez votre connexion internet et réessayez.'); if (submitBtn) { submitBtn.disabled = false; submitBtn.innerHTML = originalText; } } }; // Gestion des erreurs JavaScript globales window.addEventListener('error', function(e) { console.error('Erreur JavaScript:', e.message); }); });