jQuery(document).ready(function($) { 'use strict'; let currentSocieteId = null; let societesTable = null; // Initialiser Select2 sur les éléments appropriés function initSelect2() { if (typeof $.fn.select2 === 'function') { // Select2 est disponible mais nous ne l'utilisons pas pour societe-type-credit // Le select reste un select HTML standard } else { // Si Select2 n'est pas encore disponible, réessayer dans 100ms setTimeout(initSelect2, 100); } } // Initialiser Select2 au chargement du document $(document).ready(function() { /* initSelect2(); */ }); // Initialiser DataTables if ($('#societes-table').length) { societesTable = $('#societes-table').DataTable({ ajax: { url: societesCreditAjax.ajaxurl, type: 'POST', data: function(d) { return { action: 'societes_credit_list', nonce: societesCreditAjax.nonce }; }, dataSrc: function(json) { if (json.success) { return json.data.societes; } return []; } }, columns: [ { data: 'id' }, { data: 'nom' }, { data: 'status', render: function(data, type, row) { if (data == 1) { return 'Active'; } else { return 'Inactive'; } } }, { data: null, orderable: false, render: function(data, type, row) { return ` `; } } ], language: { url: '//cdn.datatables.net/plug-ins/1.13.4/i18n/fr-FR.json' }, order: [[1, 'asc']], pageLength: 25, responsive: true, dom: '<"top"f>rt<"bottom"lip><"clear">' }); } // Afficher un message function showMessage(message, type) { // Supprimer les anciens messages $('.societe-message').remove(); let noticeClass = 'notice-' + type; if (type === 'info') { noticeClass = 'notice-info'; } const messageDiv = $('

' + message + '

'); $('.wrap h1').after(messageDiv); // Auto-suppression après 5 secondes (sauf pour les erreurs) if (type !== 'error') { setTimeout(function() { messageDiv.fadeOut(function() { messageDiv.remove(); }); }, 5000); } } // Ouvrir le modal window.openSocieteModal = function(societeId = null) { currentSocieteId = societeId; if (societeId) { loadSocieteData(societeId); } else { $('#societe-form')[0].reset(); $('#societe-status').prop('checked', true); $('.credit-modal-header h2').text('Nouvelle société'); // Réinitialiser le select multiple $('#societe-type-credit').val([]); } $('.societe-modal').addClass('show').show(); // Pas de Select2 à réinitialiser pour ce select // Le select reste un select HTML standard }; // Fermer le modal window.closeSocieteModal = function() { $('.societe-modal').addClass('closing'); setTimeout(function() { $('.societe-modal').removeClass('show closing').hide(); currentSocieteId = null; }, 300); }; // Charger les données d'une société function loadSocieteData(societeId) { $.ajax({ url: societesCreditAjax.ajaxurl, type: 'POST', data: { action: 'societes_credit_get', nonce: societesCreditAjax.nonce, societe_id: societeId }, success: function(response) { if (response.success) { const societe = response.data.societe; $('.credit-modal-header h2').text('Modifier la société'); // Remplir le formulaire $('#societe-nom').val(societe.nom || ''); $('#societe-status').prop('checked', societe.status == 1); // Remplir le select multiple des types de crédit if (societe.type_credit) { const typeCreditArray = typeof societe.type_credit === 'string' ? societe.type_credit.split(',') : societe.type_credit; $('#societe-type-credit').val(typeCreditArray); } else { $('#societe-type-credit').val([]); } } else { showMessage('Erreur: ' + response.data, 'error'); } }, error: function() { showMessage('Erreur de communication avec le serveur', 'error'); } }); } // Sauvegarder la société window.saveSociete = function() { const typeCreditVal = $('#societe-type-credit').val() || []; console.log('Type credit values:', typeCreditVal); // Créer FormData pour gérer correctement les arrays const formData = new FormData(); formData.append('action', currentSocieteId ? 'societes_credit_update' : 'societes_credit_create'); formData.append('nonce', societesCreditAjax.nonce); formData.append('nom', $('#societe-nom').val()); formData.append('status', $('#societe-status').is(':checked') ? 'true' : 'false'); // Ajouter chaque valeur de type_credit individuellement if (typeCreditVal && typeCreditVal.length > 0) { typeCreditVal.forEach(function(value) { formData.append('type_credit[]', value); }); } else { formData.append('type_credit[]', ''); } // Validation côté client const nomValue = $('#societe-nom').val(); if (!nomValue) { showMessage('Le nom est obligatoire', 'error'); return; } // Ajouter l'ID si on modifie if (currentSocieteId) { formData.append('societe_id', currentSocieteId); } // Envoyer la requête AJAX $.ajax({ url: societesCreditAjax.ajaxurl, type: 'POST', data: formData, processData: false, contentType: false, success: function(response) { if (response.success) { showMessage(response.data.message, 'success'); closeSocieteModal(); // Recharger la table if (societesTable) { societesTable.ajax.reload(null, false); } } else { showMessage('Erreur: ' + response.data, 'error'); } }, error: function() { showMessage('Erreur de communication avec le serveur', 'error'); } }); }; // Supprimer une société window.deleteSociete = function(societeId) { if (!confirm('Êtes-vous sûr de vouloir supprimer cette société de crédit ?')) { return; } $.ajax({ url: societesCreditAjax.ajaxurl, type: 'POST', data: { action: 'societes_credit_delete', nonce: societesCreditAjax.nonce, societe_id: societeId }, success: function(response) { if (response.success) { showMessage(response.data.message, 'success'); // Recharger la table if (societesTable) { societesTable.ajax.reload(null, false); } } else { showMessage('Erreur: ' + response.data, 'error'); } }, error: function() { showMessage('Erreur de communication avec le serveur', 'error'); } }); }; // Fermer le modal avec Escape $(document).on('keydown', function(e) { if (e.key === 'Escape' && $('.societe-modal').hasClass('show')) { closeSocieteModal(); } }); // Soumettre le formulaire avec Enter $('#societe-form').on('keypress', function(e) { if (e.key === 'Enter' && e.target.tagName !== 'TEXTAREA') { e.preventDefault(); saveSociete(); } }); });