async function call(args){ if(args.showLoader || args.showLoader == true){ showLoader(); } let requestOptions = { method: args.method, redirect: 'follow', headers: [] }; let myHeaders = new Headers(); myHeaders.append("Accept-Language", "es"); if(args.bodyType == "json"){ myHeaders.append("Content-Type", "application/json"); }else if (args.bodyType !== "formdata") { // Solo agregas Content-Type si NO es FormData myHeaders.append("Content-Type", "application/x-www-form-urlencoded"); } if(args.token){ myHeaders.append("Authorization","Bearer "+ args.token); myHeaders.append("Application", _application); myHeaders.append("IdOrganizacion", _idOrganizacion); // console.log(myHeaders) } requestOptions.headers = myHeaders; if(args.method == "POST" || args.method == "PUT" || args.method == "DELETE" || args.method == "GET"){ if(args.data){ requestOptions.body = args.data; } } // Modificar el endpoint para agregar el query param let url = new URL(args.endpoint, window.location.origin); if(localStorage.getItem('codigoRastreo') !== null){ if(tipoFlujo != ""){ url.searchParams.set("codigoRastreo", localStorage.getItem('codigoRastreo')); url.searchParams.set("tipoFlujo", tipoFlujo); } } return fetch(url.toString(), requestOptions) .then((response) => { if(args.responseType && args.responseType == "blob"){ return response.blob(); }else{ return response.json(); } /*switch (args.responseType) { case 'blob': return response.blob(); case 'text': return response.text(); case 'arrayBuffer': return response.arrayBuffer(); default: return response.json(); } return response.json();*/ }).then((data) => { if(args.showLoader || args.showLoader == true){ hideLoader(); } if(!args.dismissAlert && data.code == 400){ console.log(data.message) return; } return data; }).catch(function(error) { console.log("catch error call") if(args.showLoader || args.showLoader == true){ hideLoader(); } throw error; //console.log(error); }); } function showMessage(type,title,message){ switch(type){ case 'warning': toastr.warning(message,title); break; case 'success': toastr.success(message,title); break; case 'info': toastr.info(message,title); break; case 'error': toastr.error(message,title); break; } } function showLoader(){ return; $.blockUI({ message: '
', css: { backgroundColor: 'transparent', border: '0' }, overlayCSS: { opacity: 0.5 } }); } function hideLoader(){ return; $.unblockUI(); } async function obtenerIdentificacion(){ let args = []; args["endpoint"] = api_url + `/${api_war}/v1/seguridad/tiposIdentificacion`; args["method"] = "GET"; args["showLoader"] = false; const data = await call(args); if(data.code == 200){ $.each(data.data, function(key, value){ $('#tipoIdentificacion').append(``); }) } } function getInput(idElem, type = 'input'){ let valor; switch(type){ case 'input': case 'select': valor = document.getElementById(idElem).value break; case 'radio': valor = $("input[name='"+idElem+"']:checked").val(); break; case 'fecha': valor = document.getElementById(idElem)._flatpickr.getDate(); break; case 'hora': valor = document.getElementById(idElem)._flatpickr.getDate(); break; case 'select2': //console.log(value); valor = $('#'+idElem).val(); break; case 'button': // console.log("."+idElem+".active"); $("."+idElem+".active").attr("id-rel"); break; case 'checkbox': // console.log('#'+idElem) valor = "I"; if($('#'+idElem).is(":checked")){ valor = "A"; } break; } return valor; } document.addEventListener("DOMContentLoaded", async function () { //Eliminar todos los rezagos de paquetes creados 24 horas antes StorageConExpiracion.removeExpiredByPrefix("paquete-"); jQuery('body').on('click', '.link-detalle-paquete', function(){ event.preventDefault(); let codigoPaquete = jQuery(this).attr('codigoPaquete-rel'); let detallePaquete = jQuery(this).attr('detallePaquete-rel'); // localStorage.setItem('paquete-'+codigoPaquete, detallePaquete); StorageConExpiracion.set('paquete-'+codigoPaquete, detallePaquete,86400000); setTimeout(function() { // var url = jQuery(this).attr('href'); var url = `/detalle-paquete/?id=${codigoPaquete}` window.location.href = url; }, 500); return; }) }) const StorageConExpiracion = { set: (key, value, ttl) => { const now = Date.now(); const item = { value: value, expiry: now + ttl, // ttl en milisegundos }; localStorage.setItem(key, JSON.stringify(item)); }, get: (key) => { const itemStr = localStorage.getItem(key); if (!itemStr) return null; try { const item = JSON.parse(itemStr); if (!item.expiry) return item.value; if (Date.now() > item.expiry) { localStorage.removeItem(key); return null; } return item.value; } catch (e) { return null; } }, remove: (key) => { localStorage.removeItem(key); }, removeExpiredByPrefix: (prefix) => { const now = Date.now(); const keysToRemove = []; for (let i = 0; i < localStorage.length; i++) { const key = localStorage.key(i); if (key.startsWith(prefix)) { try { const item = JSON.parse(localStorage.getItem(key)); if (item && item.expiry && now > item.expiry) { keysToRemove.push(key); } } catch (e) { // Si no es JSON válido, lo ignoramos } } } keysToRemove.forEach(key => localStorage.removeItem(key)); }, clearExpired: () => { const now = Date.now(); for (let i = 0; i < localStorage.length; i++) { const key = localStorage.key(i); try { const item = JSON.parse(localStorage.getItem(key)); if (item && item.expiry && now > item.expiry) { localStorage.removeItem(key); i--; // ajustar índice porque el storage se acorta } } catch (e) { // Ignora claves que no son objetos JSON válidos } } } };