var callBookProcessingDialog = null; var inCallbookProcessing = false; var inCallbookItemProcessing = false; $('#band').change(function () { var band = $("#band option:selected").text(); if (band != "SAT") { $(".sats_dropdown").attr("hidden", true); } else { $(".sats_dropdown").removeAttr("hidden"); } }); $('#selectPropagation').change(function () { var prop_mode = $("#selectPropagation option:selected").text(); if (prop_mode != "Satellite") { $(".sats_dropdown").attr("hidden", true); } else { $(".sats_dropdown").removeAttr("hidden"); } }); function updateRow(qso) { let row = $('#qsoID-' + qso.qsoID); let cells = row.find('td'); let c = 1; cells.eq(c++).text(qso.qsoDateTime); cells.eq(c++).text(qso.de); cells.eq(c++).html(''+qso.dx+'' + (qso.callsign == '' ? '' : ' L') + ' Lookup ' + qso.dx + ' on QRZ.com Lookup ' + qso.dx + ' on HamQTH'); cells.eq(c++).text(qso.mode); cells.eq(c++).text(qso.rstS); cells.eq(c++).text(qso.rstR); cells.eq(c++).text(qso.band); cells.eq(c++).text(qso.deRefs); cells.eq(c++).html(qso.dxRefs); cells.eq(c++).text(qso.name); cells.eq(c++).text(qso.qslVia); cells.eq(c++).html(qso.qsl); if ($(".eqslconfirmation")[0]){ cells.eq(c++).html(qso.eqsl); } if ($(".lotwconfirmation")[0]){ cells.eq(c++).html(qso.lotw); } cells.eq(c++).text(qso.qslMessage); cells.eq(c++).html(qso.dxcc); cells.eq(c++).text(qso.state); cells.eq(c++).html(qso.cqzone); cells.eq(c++).html(qso.iota); $('[data-toggle="tooltip"]').tooltip(); return row; } function loadQSOTable(rows) { var uninitialized = $('#qsoList').filter(function() { return !$.fn.DataTable.fnIsDataTable(this); }); uninitialized.each(function() { $.fn.dataTable.moment(custom_date_format + ' HH:mm'); $(this).DataTable({ searching: false, responsive: false, ordering: true, "scrollY": window.innerHeight - $('#searchForm').innerHeight() - 250, "scrollCollapse": true, "paging": false, "scrollX": true, }); }); var table = $('#qsoList').DataTable(); table.clear(); for (i = 0; i < rows.length; i++) { let qso = rows[i]; var data = []; data.push('
'); data.push(qso.qsoDateTime); data.push(qso.de); data.push(''+qso.dx+'' + (qso.callsign == '' ? '' : ' L') + ' Lookup ' + qso.dx + ' on QRZ.com Lookup ' + qso.dx + ' on HamQTH'); data.push(qso.mode); data.push(qso.rstS); data.push(qso.rstR); data.push(qso.band); data.push(qso.deRefs); data.push(qso.dxRefs); data.push(qso.name); data.push(qso.qslVia); data.push(qso.qsl); if ($(".eqslconfirmation")[0]){ data.push(qso.eqsl); } if ($(".lotwconfirmation")[0]){ data.push(qso.lotw); } data.push(qso.qslMessage); data.push(qso.dxcc+(qso.end == null ? '' : ' Deleted DXCC')); data.push(qso.state); data.push(qso.cqzone); data.push(qso.iota); let createdRow = table.row.add(data).index(); table.rows(createdRow).nodes().to$().data('qsoID', qso.qsoID); table.row(createdRow).node().id = 'qsoID-' + qso.qsoID; } table.draw(); $('[data-toggle="tooltip"]').tooltip(); } function processNextCallbookItem() { if (!inCallbookProcessing) return; var elements = $('#qsoList tbody input:checked'); var nElements = elements.length; if (nElements == 0) { inCallbookProcessing = false; callBookProcessingDialog.close(); return; } callBookProcessingDialog.setMessage("Retrieving callbook data : " + nElements + " remaining"); unselectQsoID(elements.first().closest('tr').data('qsoID')); $.ajax({ url: site_url + '/logbookadvanced/updateFromCallbook', type: 'post', data: { qsoID: elements.first().closest('tr').data('qsoID') }, dataType: 'json', success: function (data) { if (data !== []) { updateRow(data); } setTimeout("processNextCallbookItem()", 50); }, error: function (data) { setTimeout("processNextCallbookItem()", 50); }, }); } function selectQsoID(qsoID) { var element = $("#qsoID-" + qsoID); element.find("input[type=checkbox]").prop("checked", true); element.addClass('activeRow'); } function unselectQsoID(qsoID) { var element = $("#qsoID-" + qsoID); element.find("input[type=checkbox]").prop("checked", false); element.removeClass('activeRow'); $('#checkBoxAll').prop("checked", false); } $(document).ready(function () { $('#dateFrom').datetimepicker({ format: 'DD/MM/YYYY', }); $('#dateTo').datetimepicker({ format: 'DD/MM/YYYY', }); $('#searchForm').submit(function (e) { $('#searchButton').prop("disabled", true); $.ajax({ url: this.action, type: 'post', data: { dateFrom: this.dateFrom.value, dateTo: this.dateTo.value, de: this.de.value, dx: this.dx.value, mode: this.mode.value, band: this.band.value, qslSent: this.qslSent.value, qslReceived: this.qslReceived.value, iota: this.iota.value, dxcc: this.dxcc.value, propmode: this.selectPropagation.value, gridsquare: this.gridsquare.value, state: this.state.value, qsoresults: this.qsoResults.value, sats: this.sats.value, cqzone: this.cqzone.value, lotwSent: this.lotwSent.value, lotwReceived: this.lotwReceived.value, eqslSent: this.eqslSent.value, eqslReceived: this.eqslReceived.value, qslvia: $('[name="qslviainput"]').val(), sota: this.sota.value, pota: this.pota.value, wwff: this.wwff.value, qslimages: this.qslimages.value, }, dataType: 'json', success: function (data) { $('#searchButton').prop("disabled", false); loadQSOTable(data); }, error: function (data) { $('#searchButton').prop("disabled", false); BootstrapDialog.alert({ title: 'ERROR', message: 'An error ocurred while making the request', type: BootstrapDialog.TYPE_DANGER, closable: false, draggable: false, callback: function (result) { } }); }, }); return false; }); $('#qsoList').on('click', 'input[type="checkbox"]', function() { if ($(this).is(":checked")) { $(this).closest('tr').addClass('activeRow'); } else { $(this).closest('tr').removeClass('activeRow'); } }); $('#btnUpdateFromCallbook').click(function (event) { var elements = $('#qsoList tbody input:checked'); var nElements = elements.length; if (nElements == 0) { return; } inCallbookProcessing = true; callBookProcessingDialog = BootstrapDialog.show({ title: "Retrieving callbook data for " + nElements + " QSOs", message: "Retrieving callbook data for " + nElements + " QSOs", type: BootstrapDialog.TYPE_DANGER, closable: false, draggable: false, buttons: [{ label: 'Cancel', action: function(dialog) { inCallbookProcessing = false; dialog.close(); } }] }); processNextCallbookItem(); }); $('#deleteQsos').click(function (event) { var elements = $('#qsoList tbody input:checked'); var nElements = elements.length; if (nElements == 0) { return; } $('#deleteQsos').prop("disabled", true); var table = $('#qsoList').DataTable(); BootstrapDialog.confirm({ title: 'DANGER', message: 'Warning! Are you sure you want to delete the marked QSO(s)?' , type: BootstrapDialog.TYPE_DANGER, closable: true, draggable: true, btnOKClass: 'btn-danger', callback: function(result) { if(result) { elements.each(function() { let id = $(this).first().closest('tr').data('qsoID') $.ajax({ url: base_url + 'index.php/qso/delete_ajax', type: 'post', data: {'id': id }, success: function(data) { var row = $("#qsoID-" + id); table.row(row).remove().draw(false); } }); $('#deleteQsos').prop("disabled", false); }) } }, onhide: function(dialogRef){ $('#deleteQsos').prop("disabled", false); }, }); }); $('#exportAdif').click(function (event) { var elements = $('#qsoList tbody input:checked'); var nElements = elements.length; if (nElements == 0) { return; } $('#exportAdif').prop("disabled", true); var id_list=[]; elements.each(function() { let id = $(this).first().closest('tr').data('qsoID') id_list.push(id); unselectQsoID(id); }); xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { var a; if (xhttp.readyState === 4 && xhttp.status === 200) { // Trick for making downloadable link a = document.createElement('a'); a.href = window.URL.createObjectURL(xhttp.response); // Give filename you wish to download a.download = "logbook_export.adi"; a.style.display = 'none'; document.body.appendChild(a); a.click(); } }; // Post data to URL which handles post request xhttp.open("POST", site_url+'/logbookadvanced/export_to_adif', true); xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); // You should set responseType as blob for binary responses xhttp.responseType = 'blob'; xhttp.send("id=" + JSON.stringify(id_list, null, 2)+"&sortorder=" +$('.table').DataTable().order()); $('#exportAdif').prop("disabled", false); }); $('#queueBureau').click(function (event) { handleQsl('Q','B', 'queueBureau'); }); $('#queueDirect').click(function (event) { handleQsl('Q','D', 'queueDirect'); }); $('#queueElectronic').click(function (event) { handleQsl('Q','E', 'queueElectronic'); }); $('#sentBureau').click(function (event) { handleQsl('Y','B', 'sentBureau'); }); $('#sentDirect').click(function (event) { handleQsl('Y','D', 'sentDirect'); }); $('#sentElectronic').click(function (event) { handleQsl('Y','E', 'sentElectronic'); }); $('#dontSend').click(function (event) { handleQsl('N','', 'dontSend'); }); $('#notRequired').click(function (event) { handleQsl('I','', 'notRequired'); }); $('#receivedBureau').click(function (event) { handleQslReceived('Y','B', 'receivedBureau'); }); $('#receivedDirect').click(function (event) { handleQslReceived('Y','D', 'receivedDirect'); }); $('#searchGridsquare').click(function (event) { quickSearch('gridsquare'); }); $('#searchState').click(function (event) { quickSearch('state'); }); $('#searchIota').click(function (event) { quickSearch('iota'); }); $('#searchDxcc').click(function (event) { quickSearch('dxcc'); }); $('#searchCallsign').click(function (event) { quickSearch('dx'); }); $('#searchCqZone').click(function (event) { quickSearch('cqzone'); }); $('#searchMode').click(function (event) { quickSearch('mode'); }); $('#searchBand').click(function (event) { quickSearch('band'); }); $('#searchSota').click(function (event) { quickSearch('sota'); }); $('#searchWwff').click(function (event) { quickSearch('wwff'); }); $('#searchPota').click(function (event) { quickSearch('pota'); }); $('#qslSlideshow').click(function (event) { var elements = $('#qsoList tbody input:checked'); var nElements = elements.length; if (nElements == 0) { return; } $('#qslSlideshow').prop("disabled", true); var id_list=[]; elements.each(function() { let id = $(this).first().closest('tr').data('qsoID') id_list.push(id); }); $.ajax({ url: base_url + 'index.php/logbookadvanced/qslSlideshow', type: 'post', data: { ids: id_list, }, success: function (html) { BootstrapDialog.show({ title: 'QSL Card', size: BootstrapDialog.SIZE_WIDE, cssClass: 'lookup-dialog', nl2br: false, message: html, onshown: function(dialog) { }, buttons: [{ label: 'Close', action: function (dialogItself) { $('#qslSlideshow').prop("disabled", false); dialogItself.close(); } }], onhide: function(dialogRef){ $('#qslSlideshow').prop("disabled", false); }, }); } }); }); function quickSearch(type) { var elements = $('#qsoList tbody input:checked'); var nElements = elements.length; if (nElements == 0) { return; } if (nElements > 1) { BootstrapDialog.alert({ title: 'WARNING', message: 'Only 1 row can be selected for Quickfilter!', type: BootstrapDialog.TYPE_WARNING, closable: false, draggable: false, callback: function (result) { } }); } var offset = 0; if (!$(".eqslconfirmation")[0]){ offset--; } if (!$(".lotwconfirmation")[0]){ offset--; } elements.each(function() { var currentRow = $(this).first().closest('tr'); var col1 = ''; switch (type) { case 'dxcc': var tdoffset = (offset + 16); col1 = currentRow.find("td:eq("+tdoffset+")").html(); col1 = col1.match(/\d/g); col1 = col1.join(""); break; case 'cqzone': var tdoffset = (offset + 18); col1 = currentRow.find("td:eq("+tdoffset+")").text(); break; case 'iota': var tdoffset = (offset + 19); col1 = currentRow.find("td:eq("+tdoffset+")").text(); col1 = col1.trim(); break; case 'state': var tdoffset = (offset + 17); col1 = currentRow.find("td:eq("+tdoffset+")").text(); break; case 'dx': col1 = currentRow.find("td:eq(3)").text(); col1 = col1.match(/^([^\s]+)/gm); break; case 'gridsquare': col1 = $(currentRow).find('#dxgrid').text(); col1 = col1.substring(0, 4); break; case 'sota': col1 = $(currentRow).find('#dxsota').text(); break; case 'wwff': col1 = $(currentRow).find('#dxwwff').text(); break; case 'pota': col1 = $(currentRow).find('#dxpota').text(); break; case 'mode': col1 = currentRow.find("td:eq(4)").text(); break; case 'band': col1 = currentRow.find("td:eq(7)").text(); col1 = col1.match(/\S\w*/); break; } if (col1.length == 0) return; $('#searchForm').trigger("reset"); $("#"+type).val(col1); $('#searchForm').submit(); }); } $('#printLabel').click(function (event) { var elements = $('#qsoList tbody input:checked'); var nElements = elements.length; if (nElements == 0) { return; } $('#printLabel').prop("disabled", true); $.ajax({ url: base_url + 'index.php/logbookadvanced/startAtLabel', type: 'post', success: function (html) { BootstrapDialog.show({ title: 'Start printing at which label?', size: BootstrapDialog.SIZE_NORMAL, cssClass: 'qso-dialog', nl2br: false, message: html, onshown: function(dialog) { }, buttons: [{ label: 'Close', action: function (dialogItself) { $('#printLabel').prop("disabled", false); dialogItself.close(); } }], onhide: function(dialogRef){ $('#printLabel').prop("disabled", false); }, }); } }); }); $('#searchForm').on('reset', function(e) { setTimeout(function() { $('#searchForm').submit(); }); }); function handleQsl(sent, method, tag) { var elements = $('#qsoList tbody input:checked'); var nElements = elements.length; if (nElements == 0) { return; } $('#'+tag).prop("disabled", true); var id_list=[]; elements.each(function() { let id = $(this).first().closest('tr').data('qsoID') id_list.push(id); }); $.ajax({ url: base_url + 'index.php/logbookadvanced/update_qsl', type: 'post', data: {'id': JSON.stringify(id_list, null, 2), 'sent' : sent, 'method' : method }, success: function(data) { if (data !== []) { $.each(data, function(k, v) { updateRow(this); unselectQsoID(this.qsoID); }); } $('#'+tag).prop("disabled", false); } }); } function handleQslReceived(sent, method, tag) { var elements = $('#qsoList tbody input:checked'); var nElements = elements.length; if (nElements == 0) { return; } $('#'+tag).prop("disabled", true); var id_list=[]; elements.each(function() { let id = $(this).first().closest('tr').data('qsoID') id_list.push(id); }); $.ajax({ url: base_url + 'index.php/logbookadvanced/update_qsl_received', type: 'post', data: {'id': JSON.stringify(id_list, null, 2), 'sent' : sent, 'method' : method }, success: function(data) { if (data !== []) { $.each(data, function(k, v) { updateRow(this); unselectQsoID(this.qsoID); }); } $('#'+tag).prop("disabled", false); } }); } $('#checkBoxAll').change(function (event) { if (this.checked) { $('#qsoList tbody tr').each(function (i) { selectQsoID($(this).data('qsoID')) }); } else { $('#qsoList tbody tr').each(function (i) { unselectQsoID($(this).data('qsoID')) }); } }); $('#searchForm').submit(); }); function printlabel() { var id_list=[]; var elements = $('#qsoList tbody input:checked'); var nElements = elements.length; elements.each(function() { let id = $(this).first().closest('tr').data('qsoID') id_list.push(id); }); $.ajax({ url: base_url + 'index.php/labels/printids', type: 'post', data: {'id': JSON.stringify(id_list, null, 2), 'startat': $('#startat').val(), 'grid': $('#gridlabel')[0].checked, }, xhr:function(){ var xhr = new XMLHttpRequest(); xhr.responseType= 'blob' return xhr; }, success: function(data) { $.each(BootstrapDialog.dialogs, function(id, dialog){ dialog.close(); }); if(data){ var file = new Blob([data], {type: 'application/pdf'}); var fileURL = URL.createObjectURL(file); window.open(fileURL); } $.each(id_list, function(k, v) { unselectQsoID(this); }); $('#printLabel').prop("disabled", false); }, error: function (data) { BootstrapDialog.alert({ title: 'ERROR', message: 'Something went wrong with label print. Go to labels and check if you have defined a label, and that it is set for print!', type: BootstrapDialog.TYPE_DANGER, closable: false, draggable: false, callback: function (result) { } }); $.each(id_list, function(k, v) { unselectQsoID(this); }); $('#printLabel').prop("disabled", false); }, }); }