credit-direct/assets/js/societes-credit-manager.js
2025-12-18 09:44:42 +01:00

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();
}
});
});