277 lines
11 KiB
JavaScript
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);
|