277 lines
9.6 KiB
JavaScript
277 lines
9.6 KiB
JavaScript
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 '<span class="badge-active">Active</span>';
|
|
} else {
|
|
return '<span class="badge-inactive">Inactive</span>';
|
|
}
|
|
}
|
|
},
|
|
{
|
|
data: null,
|
|
orderable: false,
|
|
render: function(data, type, row) {
|
|
return `
|
|
<button class="button button-small" onclick="openSocieteModal(${row.id})" title="Modifier">
|
|
<span class="dashicons dashicons-edit"></span> Modifier
|
|
</button>
|
|
<button class="button button-small button-link-delete" onclick="deleteSociete(${row.id})" title="Supprimer">
|
|
<span class="dashicons dashicons-trash"></span> Supprimer
|
|
</button>
|
|
`;
|
|
}
|
|
}
|
|
],
|
|
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 = $('<div class="notice ' + noticeClass + ' is-dismissible societe-message"><p>' + message + '</p></div>');
|
|
$('.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();
|
|
}
|
|
});
|
|
});
|
|
|