You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
4.9 KiB
136 lines
4.9 KiB
var payment = (function($, window) {
|
|
return {
|
|
payButton: null,
|
|
formData: null,
|
|
|
|
/**
|
|
* API à appeler après un paiement réussi
|
|
*/
|
|
paymentSuccessfulPage: 'payment/success',
|
|
videoPage: 'cours-en-ligne-achat/',
|
|
distancePage: 'atelier-a-distance/',
|
|
|
|
/**
|
|
* Initialisation des fonctionnalités de paiement
|
|
*/
|
|
init: function() {
|
|
this.payButton = $('#payButton'); // Adaptez le sélecteur au bouton correct
|
|
|
|
// Gestion de l'événement du checkbox d'accord
|
|
$('#checkCondition').on('click', (e) => this.handleOnClickAgreementCheckboxEvent(e));
|
|
this.handleOnClickAgreementCheckboxEvent(); // Lancer à l'initialisation
|
|
|
|
// Validation champ par champ avec regex
|
|
$('#civilite').on('input', (e) => this.validateField(e, /^[a-zA-Zéèêàç\s]+$/, 'Veuillez sélectionner une civilité.'));
|
|
$('#name').on('input', (e) => this.validateField(e, /^[A-Za-z\s\-]{2,50}$/, 'Nom invalide (2-50 caractères).'));
|
|
$('#fname').on('input', (e) => this.validateField(e, /^[A-Za-z\s\-]{2,50}$/, 'Prénom invalide (2-50 caractères).'));
|
|
$('#email').on('input', (e) => this.validateField(e, /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/, 'Email invalide.'));
|
|
$('#address').on('input', (e) => this.validateField(e, /^.{5,100}$/, 'Adresse invalide (5-100 caractères).'));
|
|
$('#postal').on('input', (e) => this.validateField(e, /^\d{5}$/, 'Code postal invalide (5 chiffres).'));
|
|
$('#ville').on('input', (e) => this.validateField(e, /^[A-Za-z\s\-]{2,50}$/, 'Ville invalide (2-50 caractères).'));
|
|
$('#telephone').on('input', (e) => this.validateField(e, /^\+?\d{7,15}$/, 'Numéro de téléphone invalide.'));
|
|
|
|
// Gestion du bouton "PAYER"
|
|
this.payButton.on('click', (e) => this.handleOnClickPayButtonEvent(e));
|
|
},
|
|
|
|
/**
|
|
* Gestion de l'événement du checkbox d'accord
|
|
*/
|
|
handleOnClickAgreementCheckboxEvent: function(e) {
|
|
const isChecked = $('#checkCondition').is(':checked');
|
|
const formSection = $('.cpay-section'); // Mise à jour de la section
|
|
|
|
// if (isChecked) {
|
|
// this.payButton.prop('disabled', false); // Réactiver avec l'attribut
|
|
// this.payButton.removeClass('disabled'); // Supprimer la classe CSS
|
|
// formSection.removeClass('disabled'); // Réactiver la section
|
|
// } else {
|
|
// // this.payButton.prop('disabled', true); // Désactiver avec l'attribut
|
|
// // this.payButton.addClass('disabled'); // Ajouter la classe CSS
|
|
// formSection.addClass('disabled'); // Désactiver la section
|
|
// }
|
|
},
|
|
|
|
|
|
/**
|
|
* Validation champ par champ avec regex
|
|
*/
|
|
validateField: function(e, regex, errorMessage) {
|
|
const field = $(e.target);
|
|
const value = field.val().trim();
|
|
const errorSpan = field.closest('.form-row').find('error');
|
|
|
|
if (!regex.test(value)) {
|
|
errorSpan.text(errorMessage);
|
|
field.addClass('has-error');
|
|
} else {
|
|
errorSpan.text('');
|
|
field.removeClass('has-error');
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Gestion de l'événement du bouton "PAYER"
|
|
*/
|
|
handleOnClickPayButtonEvent: async function(e) {
|
|
|
|
// this.payButton.prop('disabled', true);
|
|
|
|
// Préparer formData
|
|
this.formData = [...new FormData($('#beneficiaryForm')[0])].reduce((obj, [key, val]) => {
|
|
obj[key] = val.trim() || null;
|
|
return obj;
|
|
}, {});
|
|
|
|
// Validation finale avant soumission
|
|
// if (!this.preValidation()) return this.payButton.prop('disabled', false);
|
|
|
|
// Soumission
|
|
try {
|
|
const response = await $.ajax({
|
|
url: 'payment/send_payment',
|
|
type: 'POST',
|
|
data: this.formData,
|
|
dataType: 'json', // Ajout pour assurer le format JSON de la réponse
|
|
success: function (data) {
|
|
if (data.status === 'success') {
|
|
// Deuxième appel AJAX pour l'authentification
|
|
window.location.href = data.redirect;
|
|
} else {
|
|
console.error("Erreur lors de la récupération des informations :", data.message);
|
|
}
|
|
},
|
|
error: function (xhr, status, error) {
|
|
console.error("Erreur lors de la requête AJAX :", error);
|
|
|
|
}
|
|
});
|
|
} catch (error) {
|
|
console.error('Erreur AJAX:', error);
|
|
}
|
|
|
|
},
|
|
|
|
/**
|
|
* Validation finale avant soumission
|
|
*/
|
|
preValidation: function() {
|
|
let isValid = true;
|
|
|
|
$('#beneficiaryForm input, #beneficiaryForm select').each((index, element) => {
|
|
const field = $(element);
|
|
if (field.hasClass('has-error') || !field.val().trim()) {
|
|
field.closest('.form-group').find('.error').text('Ce champ est obligatoire.');
|
|
isValid = false;
|
|
}
|
|
});
|
|
|
|
return isValid;
|
|
},
|
|
};
|
|
})(jQuery, window);
|
|
|
|
$(document).ready(() => {
|
|
payment.init();
|
|
});
|
|
|