/**
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU General Public License as published by the Free Software Foundation,
* either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program.
* If not, see https://www.gnu.org/licenses/.
*/
jQuery(document).ready(function () {
var customerTable;
var customerToBeRemoved;
var row;
// Ocultamos contenedores de conectado
jQuery('.connected').hide();
validateCorreosUser();
// ---- VALIDACIONES CORREOS -------------------------------------------------------------
jQuery('#CorreosCustomerDataForm').validate({
rules: {
CorreosContract: {
required: true,
minlength: 8,
maxlength: 8,
},
CorreosCustomer: {
required: true,
minlength: 8,
maxlength: 8,
},
CorreosKey: {
required: true,
},
CorreosUser: {
required: true,
minlength: 3,
maxlength: 20,
},
CorreosPassword: {
required: true,
maxlength: 20,
},
CorreosOv2Code: {
required: true,
email: true,
minlength: 3,
maxlength: 150,
},
},
messages: {
CorreosContract: {
required: requiredCustomMessage,
minlength: minLengthMessage + ' 8 ' + characters,
maxlength: maxLengthMessage + ' 8 ' + characters,
},
CorreosCustomer: {
required: requiredCustomMessage,
minlength: minLengthMessage + ' 8 ' + characters,
maxlength: maxLengthMessage + ' 8 ' + characters,
},
CorreosKey: {
required: requiredCustomMessage,
},
CorreosUser: {
required: requiredCustomMessage,
minlength: minLengthMessage + ' 3 ' + characters,
maxlength: maxLengthMessage + ' 20 ' + characters,
},
CorreosPassword: {
required: requiredCustomMessage,
maxlength: maxLengthMessage + ' 20 ' + characters,
},
CorreosOv2Code: {
required: requiredCustomMessage,
minlength: minLengthMessage + ' 3 ' + characters,
maxlength: maxLengthMessage + ' 150 ' + characters,
email: invalidEmail,
},
},
submitHandler: function () {
let formElement = document.getElementById('CorreosCustomerDataForm');
let sourceForm = new FormData(formElement);
let destinyForm = new FormData();
// Agregar los campos adicionales requeridos al objeto FormData
destinyForm.append('action', 'correosOficialDispacher');
destinyForm.append('_nonce', varsAjax.nonce);
destinyForm.append('dispatcher[controller]', 'AdminCorreosOficialCustomerDataProcess');
destinyForm.append('dispatcher[operation]', 'CorreosCustomerDataForm');
sourceForm.forEach((value, key) => {
destinyForm.append('dispatcher[' + key + ']', value);
});
jQuery.ajax({
type: 'post',
url: varsAjax.ajaxUrl,
data: destinyForm,
contentType: false,
cache: false,
processData: false,
success: function (data) {
let obj = JSON.parse(data);
if (obj.error == 'ERROR 100501') {
showModalErrorWindow(obj.desc);
} else {
jQuery('#idCorreos').val(data);
jQuery('#CustomerDataDataTable').DataTable().ajax.reload();
jQuery('#SendersDataTable').DataTable().ajax.reload();
reloadSenderContractsSelects();
if (jQuery('#CorreosContract').prop('disabled') == false) {
signUpCorreosCustomer(false, data).then(isConnected => {
if (isConnected) {
disableCorreosForm();
}else{
jQuery('#CorreosCustomerDataSaveButton').val(editButton.toUpperCase());
customerStatus('Correos', 'off');
}
}).catch(error => {
showModalErrorWindow(error);
});
} else {
enableCorreosForm(data ? editButton.toUpperCase() : false);
}
}
},
error: function (e) {
showModalErrorWindow('ERROR 10502: ' + customer_technical_error);
},
});
},
}); // Fin Validaciones Correos
// ---- VALIDACIONES CEX -----------------------------------------------------------------
jQuery('#CEXCustomerDataForm').validate({
rules: {
CEXCustomer: {
required: true,
minlength: 9,
maxlength: 9,
},
CEXUser: {
required: true,
minlength: 3,
maxlength: 20,
},
CEXPassword: {
required: true,
minlength: 3,
maxlength: 20,
},
},
messages: {
CEXCustomer: {
required: requiredCustomMessage,
minlength: minLengthMessage + ' 9 ' + characters,
maxlength: maxLengthMessage + ' 9 ' + characters,
},
CEXUser: {
required: requiredCustomMessage,
minlength: minLengthMessage + ' 3 ' + characters,
maxlength: maxLengthMessage + ' 20 ' + characters,
},
CEXPassword: {
required: requiredCustomMessage,
minlength: minLengthMessage + ' 3 ' + characters,
maxlength: maxLengthMessage + ' 20 ' + characters,
},
},
submitHandler: function () {
let formElement = document.getElementById('CEXCustomerDataForm');
let sourceForm = new FormData(formElement);
let destinyForm = new FormData();
// Agregar los campos adicionales requeridos al objeto FormData
destinyForm.append('action', 'correosOficialDispacher');
destinyForm.append('_nonce', varsAjax.nonce);
destinyForm.append('dispatcher[controller]', 'AdminCorreosOficialCustomerDataProcess');
destinyForm.append('dispatcher[operation]', 'CEXCustomerDataForm');
sourceForm.forEach((value, key) => {
destinyForm.append('dispatcher[' + key + ']', value);
});
jQuery.ajax({
type: 'post',
url: varsAjax.ajaxUrl,
data: destinyForm,
contentType: false,
cache: false,
processData: false,
success: function (data) {
let obj = JSON.parse(data);
if (obj.error == 'ERROR 100501') {
showModalErrorWindow(obj.desc);
} else {
jQuery('#idCEX').val(data);
jQuery('#CustomerDataDataTable').DataTable().ajax.reload();
jQuery('#SendersDataTable').DataTable().ajax.reload();
reloadSenderContractsSelects();
if (jQuery('#CEXCustomer').prop('disabled') == false) {
signUpCexCustomer(false, data).then(isConnected => {
if (isConnected) {
disableCEXForm();
}else{
jQuery('#CEXCustomerDataSaveButton').val(editButton.toUpperCase());
customerStatus('CEX', 'off');
}
}).catch(error => {
showModalErrorWindow(error);
});
} else {
enableCEXForm(data ? editButton.toUpperCase() : false);
}
}
},
error: function (e) {
showModalErrorWindow('ERROR 10503: ' + customer_technical_error);
},
});
},
}); // Fin Validaciones CEX
/** Muestra estado del cliente del conectado/no conectado */
function customerStatus(customer, status) {
if (status == 'on') {
jQuery('#' + customer + ' .connected').show();
jQuery('#' + customer + ' .connected').css('display', 'inline');
jQuery('#' + customer + ' .noconnected').hide();
} else {
jQuery('#' + customer + ' .connected').hide();
jQuery('#' + customer + ' .noconnected').show();
}
}
/* *******************************************************************************************************
* DATA TABLE
**********************************************************************************************************/
// Datatable Clientes
jQuery('#CustomerDataDataTable').DataTable({
searching: false,
paging: false,
ordering: false,
info: false,
ajax: {
type: 'post',
url: varsAjax.ajaxUrl,
data: {
action: 'correosOficialDispacher',
_nonce: varsAjax.nonce,
dispatcher: {
controller: 'AdminCorreosOficialCustomerDataProcess',
action: 'getDataTableCustomerList'
}
},
dataSrc: ''
},
language: {
'url:': co_path_to_module + '/views/js/datatables/Spanish.json',
emptyTable: noCustomersActive
},
columns: [
{ data: 'id' },
{
data: null,
"render": function ( data, type, row ) {
if(row.status == true){
return '
'+statusConnected+'
';
}else{
return ''+statusNotConnected+'
';
}
},
orderable: false
},
{ data: 'customer_code' },
{ data: 'company' },
{
data: null,
className: 'dt-center editor-edit',
defaultContent: '',
orderable: false
},
{
data: null,
className: 'dt-center editor-delete',
defaultContent: '',
orderable: false
}
],
columnDefs: [
{
targets: [0],
visible: false
}
]
});
// Añadir
jQuery('#add-new-contract').on('click', function (e) {
e.preventDefault();
e.stopPropagation();
const position = jQuery('#customer_data').offset().top;
animateScroll(position, 500);
disableCorreosForm(false);
disableCEXForm(false);
});
// Modificar
jQuery('#CustomerDataDataTable').on('click', 'td.editor-edit', function (e) {
e.preventDefault();
const position = jQuery('#customer_data').offset().top;
animateScroll(position, 500);
// obtenemos la fila del datatable
customerTable = jQuery('#CustomerDataDataTable').DataTable();
row = customerTable.row(jQuery(this).parent('tr'));
var id = customerTable.row(row).data().id;
// Obtenemos datos a editar
new Promise(function(resolve, reject) {
jQuery.ajax({
type: 'post',
url: varsAjax.ajaxUrl,
data: {
action: 'correosOficialDispacher',
_nonce: varsAjax.nonce,
dispatcher: {
controller: 'AdminCorreosOficialCustomerDataProcess',
action: 'getCustomerCode',
id: id
}
},
success: function (data) {
resolve(data);
},
error: function (error) {
reject(error);
}
});
}).then(function(data) {
var obj = JSON.parse(data);
if (obj.company == 'Correos') {
signUpCorreosCustomer(false, obj.id).then(isConnected => {
if (isConnected) {
customerStatus('Correos', 'on');
}else{
customerStatus('Correos', 'off');
}
})
enableCorreosForm();
disableCEXForm();
jQuery('#CorreosCompany').val(obj.company);
jQuery('#idCorreos').val(obj.id);
jQuery('#CorreosContract').val(obj.CorreosContract);
jQuery('#CorreosCustomer').val(obj.CorreosCustomer);
jQuery('#CorreosKey').val(obj.CorreosKey);
jQuery('#CorreosOv2Code').val(obj.CorreosOv2Code);
} else if (obj.company == 'CEX') {
signUpCexCustomer(false, obj.id).then(isConnected => {
if (isConnected) {
customerStatus('CEX', 'on');
}else{
customerStatus('CEX', 'off');
}
})
enableCEXForm();
disableCorreosForm();
jQuery('#CEXCompany').val(obj.company);
jQuery('#idCEX').val(obj.id);
jQuery('#CEXCustomer').val(obj.CEXCustomer);
jQuery('#CEXUser').val(obj.CEXUser);
} else {
alert('ERROR CORREOS OFICIAL 10014: No se ha seleccionado ningún cliente');
}
}).catch(function(error) {
console.error(error);
});
});
// Eliminar
jQuery('#CustomerDataDataTable').on('click', 'td.editor-delete', function (e) {
e.preventDefault();
e.stopPropagation();
let deleteAllowed = true;
customerTable = jQuery('#CustomerDataDataTable').DataTable();
row = customerTable.row(jQuery(this).parent('tr'));
var id = customerTable.row(row).data().id;
customerToBeRemoved = jQuery(this).prev().prev().html();
// Comprobamos remitentes asociados
let sendersTableData = jQuery('#SendersDataTable').DataTable().ajax.json();
sendersTableData.forEach(function(sender) {
if(sender.correos_code == id || sender.cex_code == id){
deleteAllowed = false;
return;
}
});
// Limpiamos formularios si hemos borrado.
if (customerToBeRemoved == 'Correos') {
disableCorreosForm();
} else if (customerToBeRemoved == 'CEX') {
disableCEXForm();
}
jQuery('#myModal').data('id', id).modal('show');
if(deleteAllowed){
jQuery('#myModalTitle').html(confirmationTitle);
jQuery('#myModalDescription p').html(wantDeleteCustomer);
jQuery('#myModalActionButtonCustomerData').html(deleteButton);
jQuery('#myModal').find('.myModalActionButton').hide();
jQuery('#myModalCancelButton').show();
jQuery('#myModalActionButtonCustomerData').show();
}else{
jQuery('#myModalTitle').html(errorTitle);
jQuery('#myModalDescription p').html(customerHaveSender);
jQuery('#myModal').find('.myModalActionButton').hide();
jQuery('#myModalCancelButton').show();
}
// Cancelar
/* En back.js */
});
// Aceptar
jQuery('body').on('click', '#myModalActionButtonCustomerData', function (ev) {
ev.preventDefault();
ev.stopPropagation();
var id = jQuery('#myModal').data('id');
customerTable.row(row).remove().draw();
jQuery('#myModal').modal('hide');
jQuery.ajax({
type: 'post',
url: varsAjax.ajaxUrl,
data: {
action: 'correosOficialDispacher',
_nonce: varsAjax.nonce,
dispatcher: {
controller: 'AdminCorreosOficialCustomerDataProcess',
action: 'DeleteCustomerCode',
CorreosOficialCustomerCode: id
}
},
success: function (response) {
if (customerToBeRemoved == 'CEX') {
enableCEXForm();
disableProducts('CEX');
jQuery('#CEXCustomerDataSaveButton').val(addButton);
customerStatus('CEX', 'off');
jQuery('#CEXCustomerDataForm').find('input[type=text], textarea').val('');
reloadSenderContractsSelects();
} else if (customerToBeRemoved == 'Correos') {
enableCorreosForm();
disableProducts('Correos');
jQuery('#CorreosCustomerDataSaveButton').val(addButton);
customerStatus('Correos', 'off');
jQuery('#CorreosCustomerDataForm').find('input[type=number], textarea').val('');
jQuery('#CorreosCustomerDataForm').find('input[type=text], textarea').val('');
jQuery('#CorreosCustomerDataForm').find('input[type=email], textarea').val('');
reloadSenderContractsSelects();
} else {
alert('ERROR CORREOS OFICIAL 10015: No se ha seleccionado ningún cliente');
}
}
});
});
// Table Draw
jQuery('#CustomerDataDataTable').on('draw.dt', function () {
let customerTableData = jQuery('#CustomerDataDataTable').DataTable().ajax.json();
// Comprobamos productos de correos
let findCorreos = customerTableData.find(function(code) {
return code.company === "Correos";
});
if (findCorreos) {
activeProducts("Correos");
} else {
disableProducts("Correos");
}
// Comprobamos productos de cex
let findCEX = customerTableData.find(function(code) {
return code.company === "CEX";
});
if (findCEX) {
activeProducts("CEX");
} else {
disableProducts("CEX");
}
// Show hiden Aviso
if(!findCorreos && !findCEX){
jQuery("#products_container_general").addClass('hidden-block');
jQuery("#advice_no_products").removeClass('hidden-block');
}else{
jQuery("#advice_no_products").addClass('hidden-block');
jQuery("#products_container_general").removeClass('hidden-block');
}
});
});
//--------------------------------------------------------------------------------------//
// //
// FUERA DE AMBITO //
// //
//--------------------------------------------------------------------------------------//
//--------------------------------------------------------------------------------------//
// //
// LOGIN USUARIOS //
// //
//--------------------------------------------------------------------------------------//
// ---- LOGEAR USUARIO CORREOS -----------------------------------------------------------
function signUpCorreosCustomer(pageReady, id_code = null) {
return new Promise((resolve, reject) => {
jQuery.ajax({
type: 'post',
url: varsAjax.ajaxUrl,
data: {
action: 'correosOficialDispacher',
_nonce: varsAjax.nonce,
dispatcher: {
controller: 'AdminCorreosSOAPRequest',
action: 'alta_cliente_Correos',
codes_id: id_code,
}
},
success: function (response) {
var obj = JSON.parse(response);
if (obj.message.type == 'success') {
if (pageReady == false) {
showResponseMessage(obj.message.error_code);
}
resolve(true);
} else {
showResponseMessage(obj.message.error_code);
resolve(false);
}
},
error: function () {
// Manejar errores de la llamada AJAX
reject("Error en la llamada AJAX");
}
});
});
}
// ---- LOGEAR USUARIO CEX ---------------------------------------------------------------
function signUpCexCustomer(pageReady, id_code = null) {
return new Promise((resolve, reject) => {
jQuery.ajax({
type: 'post',
url: varsAjax.ajaxUrl,
data: {
action: 'correosOficialDispacher',
_nonce: varsAjax.nonce,
dispatcher: {
controller: 'AdminCEXRestRequest',
action: 'alta_cliente_CEX',
codes_id: id_code,
}
},
success: function (response) {
var obj = JSON.parse(response);
if (obj.message.type == 'success') {
if (pageReady == false) {
showResponseMessage(obj.message.error_code);
}
resolve(true);
} else {
showResponseMessage(obj.message.error_code);
resolve(false);
}
},
error: function () {
// Manejar errores de la llamada AJAX
reject("Error en la llamada AJAX");
}
});
});
}
// ---- MENSAJE DE RESPUESTA -------------------------------------------------------------
function showResponseMessage(errorCode) {
switch (errorCode) {
case '200':
var title = title200;
var description = description200;
showModalInfoWindow(title + ' ' + description);
// location.reload();
break;
case '404':
var title = title404;
var description = description404;
showModalErrorWindow(title + ' ' + description);
break;
case '401':
var title = title401;
var description = description401;
showModalErrorWindow(title + ' ' + description);
break;
case '999':
var title = title999;
var description = description999;
showModalErrorWindow(title + ' ' + description);
break;
default:
alert(errorCode);
}
}
// ---- Muestra estado del cliente del conectado/no conectado ----------------------------
function customerStatus(customer, status) {
if (status == 'on') {
jQuery('#' + customer + ' .connected').show();
jQuery('#' + customer + ' .connected').css('display', 'inline');
jQuery('#' + customer + ' .noconnected').hide();
} else {
jQuery('#' + customer + ' .connected').hide();
jQuery('#' + customer + ' .noconnected').show();
}
}
// ---- DESHABILITAR FORMULARIO CORREOS --------------------------------------------------
function disableCorreosForm(disabled = true) {
// Limpiar validaciones
jQuery('#CorreosCustomerDataForm').validate().resetForm();
jQuery('#idCorreos').val('');
jQuery('#CorreosContract').prop('disabled', disabled).val('');
jQuery('#CorreosCustomer').prop('disabled', disabled).val('');
jQuery('#CorreosKey').prop('disabled', disabled).val('');
jQuery('#CorreosUser').prop('disabled', disabled).val('');
jQuery('#CorreosPassword').prop('disabled', disabled).val('');
jQuery('#CorreosUser').prop('disabled', disabled).val('');
jQuery('#CorreosPassword').prop('disabled', disabled).val('');
jQuery('#CorreosOv2Code').prop('disabled', disabled).val('');
if(disabled){
jQuery('#CorreosCustomerDataSaveButton').attr('disabled');
jQuery('#CorreosCustomerDataSaveButton').addClass('disabled');
}else{
jQuery('#CorreosCustomerDataSaveButton').removeClass('disabled');
}
jQuery('#CorreosCustomerDataSaveButton').val(addButton);
customerStatus('Correos', 'off');
}
// ---- HABILITAR FORMULARIO CORREOS -----------------------------------------------------
function enableCorreosForm() {
// Limpiar validaciones
jQuery('#CorreosCustomerDataForm').validate().resetForm();
jQuery('#CorreosContract').prop('disabled', false);
jQuery('#CorreosCustomer').prop('disabled', false);
jQuery('#CorreosKey').prop('disabled', false);
jQuery('#CorreosUser').prop('disabled', false);
jQuery('#CorreosPassword').prop('disabled', false);
jQuery('#CorreosUser').val('');
jQuery('#CorreosPassword').val('');
jQuery('#CorreosOv2Code').prop('disabled', false);
jQuery('#CorreosCustomerDataSaveButton').removeClass('disabled');
jQuery('#CorreosCustomerDataSaveButton').val(editButton.toUpperCase());
}
// ---- DESHABILITAR FORMULARIO CEX ------------------------------------------------------
function disableCEXForm(disabled = true) {
// Limpiar validaciones
jQuery('#CEXCustomerDataForm').validate().resetForm();
jQuery('#idCEX').val('');
jQuery('#CEXCustomer').prop('disabled', disabled).val('');
jQuery('#CEXUser').prop('disabled', disabled).val('');
jQuery('#CEXPassword').prop('disabled', disabled).val('');
jQuery('#CEXUser').prop('disabled', disabled).val('');
jQuery('#CEXPassword').prop('disabled', disabled).val('');
if(disabled){
jQuery('#CEXCustomerDataSaveButton').attr('disabled');
jQuery('#CEXCustomerDataSaveButton').addClass('disabled');
}else{
jQuery('#CEXCustomerDataSaveButton').removeClass('disabled');
}
jQuery('#CEXCustomerDataSaveButton').val(addButton);
customerStatus('CEX', 'off');
}
// ---- HABILITAR FORMULARIO CEX ---------------------------------------------------------
function enableCEXForm() {
// Limpiar validaciones
jQuery('#CEXCustomerDataForm').validate().resetForm();
jQuery('#CEXCustomer').prop('disabled', false);
jQuery('#CEXUser').prop('disabled', false);
jQuery('#CEXPassword').prop('disabled', false);
jQuery('#CEXUser').val('');
jQuery('#CEXPassword').val('');
jQuery('#CEXCustomerDataSaveButton').removeClass('disabled');
jQuery('#CEXCustomerDataSaveButton').val(editButton.toUpperCase());
}
// ---- PRODUCTOS ACTIVOS ----------------------------------------------------------------
function activeProducts(jQuerycompany) {
if (jQuerycompany == 'Correos') {
jQuery('#products_container_correos').removeClass('hidden-block');
} else if (jQuerycompany == 'CEX') {
jQuery('#products_container_cex').removeClass('hidden-block');
}
}
// ---- DESHABILITAR PRODUCTOS -----------------------------------------------------------
function disableProducts(jQuerycompany) {
if (jQuerycompany == 'Correos') {
jQuery('#products_container_correos').addClass('hidden-block');
} else if (jQuerycompany == 'CEX') {
jQuery('#products_container_cex').addClass('hidden-block');
}
}
// ---- UTILIDADES -----------------------------------------------------------------------
function animateScroll(position, timeSeq) {
jQuery('html, body').animate({
scrollTop: position,
}, timeSeq);
}
function reloadSenderContractsSelects() {
return new Promise((resolve, reject) => {
jQuery.ajax({
type: 'post',
url: varsAjax.ajaxUrl,
data: {
action: 'correosOficialDispacher',
_nonce: varsAjax.nonce,
dispatcher: {
controller: 'AdminCorreosOficialCustomerDataProcess',
action: 'getCustomerCodes'
}
},
success: function (data) {
resolve(data);
},
error: function (error) {
reject(error);
}
});
}).then(function(data) {
let res = JSON.parse(data);
// Eliminamos las optiones para actualizar las nuevas
let selectCorreosCode = jQuery('#correos_code');
selectCorreosCode.find('option[value!=""]').remove();
res.correos.forEach(function(element) {
selectCorreosCode.append('');
});
// si tenemos resultaos seleciconado el id más pequeño
if (res.correos.length > 0) {
selectCorreosCode.val(res.correos[0].id);
}
let selectCEXCode = jQuery('#cex_code');
selectCEXCode.find('option[value!=""]').remove();
// Añadimos las opciones
res.cex.forEach(function(element) {
selectCEXCode.append('');
});
// si tenemos resultaos seleciconado el id más pequeño
if (res.cex.length > 0) {
selectCEXCode.val(res.cex[0].id);
}
}).catch(function(error) {
console.error(error);
});
}