EsiPeppol-Woocommerce/assets/js/admin.js
2025-12-16 09:42:04 +01:00

277 lines
11 KiB
JavaScript

(function ($) {
'use strict';
$(function () {
// Bouton de test de connexion sur la page de configuration
var $testBtn = $('#esi-peppol-test-connection');
if ($testBtn.length && typeof window.esiPeppolAdmin !== 'undefined') {
var $result = $('#esi-peppol-test-result');
$testBtn.on('click', function (e) {
e.preventDefault();
var apiKey = $('#esi_peppol_api_key').val();
var password = $('#esi_peppol_password').val();
$result.removeClass().empty();
if (!apiKey || !password) {
var msgMissing = window.esiPeppolAdmin.i18n_missing || "Veuillez renseigner l'API Key et le Password avant de tester la connexion.";
$result
.addClass('notice notice-error')
.html('<p>' + msgMissing + '</p>');
return;
}
$testBtn.prop('disabled', true).addClass('updating-message');
$.post(window.esiPeppolAdmin.ajax_url, {
action: 'esi_peppol_test_connection',
nonce: window.esiPeppolAdmin.nonce,
api_key: apiKey,
password: password
})
.done(function (response) {
if (response && response.success) {
var msg = (response.data && response.data.message)
? response.data.message
: (window.esiPeppolAdmin.i18n_success || "Connexion réussie à l'API ESIPeppol.");
$result
.addClass('notice notice-success is-dismissible')
.html('<p>' + msg + '</p>');
} else {
var errMsg = (response && response.data && response.data.message)
? response.data.message
: (window.esiPeppolAdmin.i18n_error || 'La connexion a échoué.');
$result
.addClass('notice notice-error')
.html('<p>' + errMsg + '</p>');
}
})
.fail(function () {
var msgNetwork = window.esiPeppolAdmin.i18n_network || 'Erreur de communication avec le serveur WordPress.';
$result
.addClass('notice notice-error')
.html('<p>' + msgNetwork + '</p>');
})
.always(function () {
$testBtn.prop('disabled', false).removeClass('updating-message');
});
});
}
// DataTables pour le tableau du journal des échanges (invoices / documents envoyés)
var $logsTable = $('#esi-peppol-logs-table');
if ($logsTable.length && $.fn.DataTable) {
$logsTable.DataTable({
pageLength: 25,
order: [[0, 'desc']],
language: {
url: 'https://cdn.datatables.net/plug-ins/1.13.8/i18n/fr-FR.json'
}
});
}
// Actions AJAX sur la page de logs : renvoyer / vérifier le statut
if ($logsTable.length && typeof window.esiPeppolAdmin !== 'undefined') {
var $logsResult = $('#esi-peppol-logs-result');
var showLogsNotice = function (type, title, message, detail) {
var classes = 'notice';
if (type === 'success') {
classes += ' notice-success is-dismissible';
} else if (type === 'error') {
classes += ' notice-error';
} else {
classes += ' notice-info';
}
var html = '<div class="' + classes + '">';
if (title) {
html += '<p><strong>' + title + '</strong> ' + (message || '') + '</p>';
} else if (message) {
html += '<p>' + message + '</p>';
}
if (detail) {
html += '<p><em>' + (window.esiPeppolAdmin.i18n_logs_detail_lbl || "Détail retour API") + ':</em> ' + detail + '</p>';
}
html += '</div>';
$logsResult
.empty()
.append(html);
};
$logsTable.on('click', '.esi-peppol-log-resend', function (e) {
e.preventDefault();
var $btn = $(this);
var orderId = $btn.data('order-id');
if (!orderId) {
return;
}
$btn.prop('disabled', true).addClass('updating-message');
$.post(window.esiPeppolAdmin.ajax_url, {
action: 'esi_peppol_resend_invoice',
nonce: window.esiPeppolAdmin.logs_nonce_resend,
order_id: orderId
})
.done(function (response) {
var data = response && response.data ? response.data : {};
var ok = !!(response && response.success);
var title = ok
? (window.esiPeppolAdmin.i18n_logs_ok_title || 'OK')
: (window.esiPeppolAdmin.i18n_logs_ko_title || 'Pas OK');
var message = data.message || (ok
? (window.esiPeppolAdmin.i18n_logs_resend_ok || 'Document renvoyé avec succès.')
: (window.esiPeppolAdmin.i18n_logs_resend_ko || 'L\'envoi du document a échoué.'));
var detail = data.detail || '';
showLogsNotice(ok ? 'success' : 'error', title, message, detail);
})
.fail(function () {
showLogsNotice(
'error',
window.esiPeppolAdmin.i18n_logs_ko_title || 'Pas OK',
window.esiPeppolAdmin.i18n_network || 'Erreur de communication avec le serveur WordPress.',
''
);
})
.always(function () {
$btn.prop('disabled', false).removeClass('updating-message');
});
});
$logsTable.on('click', '.esi-peppol-log-status', function (e) {
e.preventDefault();
var $btn = $(this);
var orderId = $btn.data('order-id');
if (!orderId) {
return;
}
$btn.prop('disabled', true).addClass('updating-message');
$.post(window.esiPeppolAdmin.ajax_url, {
action: 'esi_peppol_check_invoice_status',
nonce: window.esiPeppolAdmin.logs_nonce_status,
order_id: orderId
})
.done(function (response) {
var data = response && response.data ? response.data : {};
var ok = !!(response && response.success);
var title = ok
? (window.esiPeppolAdmin.i18n_logs_ok_title || 'OK')
: (window.esiPeppolAdmin.i18n_logs_ko_title || 'Pas OK');
var message = data.message || (window.esiPeppolAdmin.i18n_logs_status_lbl || 'Statut actuel du document');
var detail = data.detail || '';
showLogsNotice(ok ? 'success' : 'error', title, message, detail);
})
.fail(function () {
showLogsNotice(
'error',
window.esiPeppolAdmin.i18n_logs_ko_title || 'Pas OK',
window.esiPeppolAdmin.i18n_network || 'Erreur de communication avec le serveur WordPress.',
''
);
})
.always(function () {
$btn.prop('disabled', false).removeClass('updating-message');
});
});
}
// Toggle affichage du mot de passe sur la page de configuration
$('.esi-peppol-password-toggle').on('click', function () {
var $btn = $(this);
var targetSelector = $btn.data('target');
var $input = $(targetSelector);
if (!$input.length) {
return;
}
var isPassword = $input.attr('type') === 'password';
$input.attr('type', isPassword ? 'text' : 'password');
// Texte du bouton
$btn.text(isPassword ? 'Masquer' : 'Afficher');
});
// Gestion du logo email avec la médiathèque WordPress
var $uploadLogoBtn = $('#esi-peppol-upload-logo');
var $removeLogoBtn = $('#esi-peppol-remove-logo');
var $logoPreview = $('#esi-peppol-logo-preview');
var $logoIdInput = $('#esi_peppol_logo_email_id');
if ($uploadLogoBtn.length && typeof wp !== 'undefined' && wp.media) {
var mediaUploader;
$uploadLogoBtn.on('click', function (e) {
e.preventDefault();
// Si le sélecteur existe déjà, on le réutilise
if (mediaUploader) {
mediaUploader.open();
return;
}
// Créer le sélecteur de média
mediaUploader = wp.media({
title: 'Choisir un logo',
button: {
text: 'Utiliser ce logo'
},
multiple: false,
library: {
type: 'image'
}
});
// Quand une image est sélectionnée
mediaUploader.on('select', function () {
var attachment = mediaUploader.state().get('selection').first().toJSON();
// Mettre à jour l'input hidden avec l'ID
$logoIdInput.val(attachment.id);
// Afficher la preview
var imageUrl = attachment.sizes && attachment.sizes.medium
? attachment.sizes.medium.url
: attachment.url;
$logoPreview.html('<img src="' + imageUrl + '" alt="Logo email" />').show();
$removeLogoBtn.show();
});
// Ouvrir le sélecteur
mediaUploader.open();
});
// Bouton pour supprimer le logo
$removeLogoBtn.on('click', function (e) {
e.preventDefault();
$logoIdInput.val('');
$logoPreview.empty().hide();
$removeLogoBtn.hide();
});
}
});
})(jQuery);