Merge pull request #2310 from AndreasK79/fix_qsolist_qsl_queue

[QSL Queue] Fix the "Add QSO" feature
This commit is contained in:
Andreas Kristiansen
2025-09-15 09:21:05 +02:00
committed by GitHub
4 changed files with 37 additions and 23 deletions

View File

@@ -70,7 +70,7 @@ class Qslprint_model extends CI_Model {
function get_qsos_for_print($station_id = 'All') {
$binding=[];
$binding[]=$this->session->userdata('user_id');
$sql="SELECT count(distinct oldlog.col_primary_key) as previous_qsl, log.COL_QSL_SENT, log.COL_PRIMARY_KEY, log.COL_DXCC, log.COL_CALL, log.COL_SAT_NAME, log.COL_SAT_MODE, log.COL_BAND_RX, COALESCE(log.COL_FREQ_RX, log.COL_FREQ) as frequency, log.COL_TIME_ON, log.COL_MODE, log.COL_RST_SENT, log.COL_RST_RCVD, log.COL_QSL_VIA, log.COL_QSL_SENT_VIA, log.COL_SUBMODE, log.COL_BAND, sp.station_id, sp.station_callsign, sp.station_profile_name, o.qsoid
$sql="SELECT count(distinct oldlog.col_primary_key) as previous_qsl, log.COL_QSL_SENT, log.COL_PRIMARY_KEY, log.COL_DXCC, log.COL_CALL, log.COL_SAT_NAME, log.COL_SAT_MODE, log.COL_BAND_RX, log.COL_FREQ as frequency, log.COL_FREQ_RX as frequency_rx, log.COL_TIME_ON, log.COL_MODE, log.COL_RST_SENT, log.COL_RST_RCVD, log.COL_QSL_VIA, log.COL_QSL_SENT_VIA, log.COL_SUBMODE, log.COL_BAND, sp.station_id, sp.station_callsign, sp.station_profile_name, o.qsoid
FROM ".$this->config->item('table_name')." log
INNER JOIN station_profile sp ON sp.`station_id` = log.`station_id`
LEFT OUTER JOIN oqrs o ON o.`qsoid` = log.`COL_PRIMARY_KEY`

View File

@@ -54,8 +54,8 @@ if ($qsos->result() != NULL) {
echo '<td style=\'text-align: center\'>'; $timestamp = strtotime($qsl->COL_TIME_ON); echo date($custom_date_format, $timestamp); echo '</td>';
echo '<td style=\'text-align: center\'>'; $timestamp = strtotime($qsl->COL_TIME_ON); echo date('H:i', $timestamp); echo '</td>';
echo '<td style=\'text-align: center\'>'; echo $qsl->COL_SUBMODE==null?$qsl->COL_MODE:$qsl->COL_SUBMODE; echo '</td>';
echo '<td class=\'col-band\' style=\'text-align: center\'>'; if($qsl->COL_SAT_NAME != null) { echo $qsl->COL_SAT_NAME; } else { echo strtolower($qsl->COL_BAND); }; echo '</td>';
echo '<td class=\'col-freq\' style=\'text-align: center;display:none;\'>'; if($qsl->COL_SAT_NAME != null) { echo $qsl->COL_SAT_NAME; } else { echo $ci->frequency->qrg_conversion($qsl->frequency); }; echo '</td>';
echo '<td class=\'col-band\' style=\'text-align: center\'>'; if($qsl->COL_SAT_NAME != null) { echo __("SAT") . ' ' . $qsl->COL_SAT_NAME . ' '. strtolower($qsl->COL_BAND) . '/' . strtolower($qsl->COL_BAND_RX); } else { echo strtolower($qsl->COL_BAND); }; echo '</td>';
echo '<td class=\'col-freq\' style=\'text-align: center;display:none;\'>'; if($qsl->COL_SAT_NAME != null) { echo __("SAT") . ' ' . $qsl->COL_SAT_NAME . ' ' . $ci->frequency->qrg_conversion($qsl->frequency) . '/' . $ci->frequency->qrg_conversion($qsl->frequency_rx); } else { echo $ci->frequency->qrg_conversion($qsl->frequency); }; echo '</td>';
echo '<td style=\'text-align: center\'>' . $qsl->COL_RST_SENT . '</td>';
echo '<td style=\'text-align: center\'>' . $qsl->COL_RST_RCVD . '</td>';
echo '<td style=\'text-align: center\'>' . $qsl->COL_QSL_VIA . '</td>';

View File

@@ -8,6 +8,7 @@ if ($qsos->result() != NULL) {
<th style=\'text-align: center\'>'. __("Time") .'</th>
<th style=\'text-align: center\'>' . __("Mode") . '</th>
<th style=\'text-align: center\'>' . __("Band") . '</th>
<th style=\'text-align: center\'>' . __("Frequency") . '</th>
<th style=\'text-align: center\'>' . __("RST (S)") . '</th>
<th style=\'text-align: center\'>' . __("RST (R)") . '</th>
<th style=\'text-align: center\'>' . __("Station") . '</th>
@@ -40,7 +41,8 @@ if ($qsos->result() != NULL) {
echo '<td style=\'text-align: center\'>'; $timestamp = strtotime($qsl->COL_TIME_ON); echo date($custom_date_format, $timestamp); echo '</td>';
echo '<td style=\'text-align: center\'>'; $timestamp = strtotime($qsl->COL_TIME_ON); echo date('H:i', $timestamp); echo '</td>';
echo '<td style=\'text-align: center\'>'; echo $qsl->COL_SUBMODE==null?$qsl->COL_MODE:$qsl->COL_SUBMODE; echo '</td>';
echo '<td style=\'text-align: center\'>'; if($qsl->COL_SAT_NAME != null) { echo $qsl->COL_SAT_NAME; } else { echo strtolower($qsl->COL_BAND ?? ""); }; echo '</td>';
echo '<td style=\'text-align: center\'>'; if($qsl->COL_SAT_NAME != null) { echo __("SAT") . ' ' . $qsl->COL_SAT_NAME . ' '. strtolower($qsl->COL_BAND) . '/' . strtolower($qsl->COL_BAND_RX); } else { echo strtolower($qsl->COL_BAND); }; echo '</td>';
echo '<td style=\'text-align: center\'>'; if($qsl->COL_SAT_NAME != null) { echo __("SAT") . ' ' . $qsl->COL_SAT_NAME . ' ' . $this->frequency->qrg_conversion($qsl->COL_FREQ) . '/' . $this->frequency->qrg_conversion($qsl->COL_FREQ_RX); } else { echo $this->frequency->qrg_conversion($qsl->COL_FREQ); }; echo '</td>';
echo '<td style=\'text-align: center\'>' . $qsl->COL_RST_SENT . '</td>';
echo '<td style=\'text-align: center\'>' . $qsl->COL_RST_RCVD . '</td>';
echo '<td style=\'text-align: center\'><span class="badge text-bg-light">' . $qsl->station_callsign . '</span></td>';

View File

@@ -70,9 +70,11 @@ function addQsoToPrintQueue(id) {
if (qsoDialogInstance) {
qsoDialogInstance.close();
}
var callSign = $("#qsolist_"+id).find("td:eq(0)").text();
var formattedCallSign = callSign.replace(/0/g, "Ø").toUpperCase();
var line = '<tr id="qslprint_'+id+'">';
let callSign = $("#qsolist_"+id).find("td:eq(0)").text();
let formattedCallSign = callSign.replace(/0/g, "Ø").toUpperCase();
let line = '<tr id="qslprint_'+id+'">';
let freq_or_band = $('#frequency_or_band').val();
line += '<td style=\'text-align: center\'><div class="form-check"><input class="form-check-input" type="checkbox" /></div></td>';
line += '<td style="text-align: center">';
line += '<span class="qso_call">';
@@ -94,13 +96,23 @@ function addQsoToPrintQueue(id) {
line += '<td style=\'text-align: center\'>'+$("#qsolist_"+id).find("td:eq(1)").text()+'</td>';
line += '<td style=\'text-align: center\'>'+$("#qsolist_"+id).find("td:eq(2)").text()+'</td>';
line += '<td style=\'text-align: center\'>'+$("#qsolist_"+id).find("td:eq(3)").text()+'</td>';
line += '<td style=\'text-align: center\'>'+$("#qsolist_"+id).find("td:eq(4)").text()+'</td>';
line += '<td style=\'text-align: center\'>'+$("#qsolist_"+id).find("td:eq(5)").text()+'</td>';
if (freq_or_band === 'band') {
line += '<td class=\'col-band\' style=\'text-align: center\'>'+$("#qsolist_"+id).find("td:eq(4)").text()+'</td>';
line += '<td class=\'col-freq\' style=\'text-align: center; display:none;\'>'+$("#qsolist_"+id).find("td:eq(5)").text()+'</td>';
} else if (freq_or_band === 'frequency') {
line += '<td class=\'col-band\' style=\'text-align: center; display:none;\'>'+$("#qsolist_"+id).find("td:eq(4)").text()+'</td>';
line += '<td class=\'col-freq\' style=\'text-align: center\'>'+$("#qsolist_"+id).find("td:eq(5)").text()+'</td>';
} else {
line += '<td class=\'col-band\' style=\'text-align: center\'>'+$("#qsolist_"+id).find("td:eq(4)").text()+'</td>';
line += '<td class=\'col-freq\' style=\'text-align: center\'>'+$("#qsolist_"+id).find("td:eq(5)").text()+'</td>';
}
line += '<td style=\'text-align: center\'>'+$("#qsolist_"+id).find("td:eq(6)").text()+'</td>';
line += '<td style=\'text-align: center\'>'+$("#qsolist_"+id).find("td:eq(9)").text()+'</td>';
line += '<td style=\'text-align: center\'><span class="badge text-bg-light">'+$("#qsolist_"+id).find("td:eq(7)").text()+'</span></td>';
line += '<td style=\'text-align: center\'>'+$("#qsolist_"+id).find("td:eq(8)").text()+'</td>';
line += '<td style=\'text-align: center\'>'+$("#qsolist_"+id).find("td:eq(7)").text()+'</td>';
line += '<td style=\'text-align: center\'>'+$("#qsolist_"+id).find("td:eq(10)").text()+'</td>';
line += '<td style=\'text-align: center\'><span class="badge text-bg-light">'+$("#qsolist_"+id).find("td:eq(8)").text()+'</span></td>';
line += '<td style=\'text-align: center\'>'+$("#qsolist_"+id).find("td:eq(9)").text()+'</td>';
line += '<td style=\'text-align: center\'>'+$("#qsolist_"+id).find("td:eq(11)").text()+'</td>';
line += '<td style="text-align: center">'+prev_qsl_html+'</td>';
line += '<td style=\'text-align: center\'><button onclick="mark_qsl_sent('+id+', \'B\')" class="btn btn-sm btn-success"><i class="fa fa-check"></i></button></td>';
line += '<td style=\'text-align: center\'><button onclick="deleteFromQslQueue('+id+')" class="btn btn-sm btn-danger"><i class="fas fa-trash-alt"></i></button></td></td>';
@@ -334,12 +346,12 @@ function exportSelectedQsos() {
}
function markMethod(){
//grab the dropdown
const select = document.getElementById('markqslmethod');
//grab the selected method
const methodkey = select.value;
const methodkey = select.value;
const method = select.options[select.selectedIndex].text;
//perform function
@@ -350,22 +362,22 @@ function markMethodQSOs(method) {
//unmark any QSO that is already marked for cleanup purposes
unmarkallQSOs();
//grab the table
const table = document.getElementById('qslprint_table');
//loop through each row except the header
Array.from(table.tBodies[0].rows).forEach(row => {
//get the send-method column
const sendMethodCell = row.querySelector('td.send-method');
//check if it contains the right method (or skip check if method is empty)
if (sendMethodCell && (method === "" || sendMethodCell.textContent.trim() === method)) {
//find the checkbox in the first cell
const checkbox = row.querySelector('td:first-child input[type="checkbox"]');
//check that box
if (checkbox) {
checkbox.checked = true;
@@ -375,16 +387,16 @@ function markMethodQSOs(method) {
}
function unmarkallQSOs(){
//grab the table
const table = document.getElementById('qslprint_table');
//loop through each row except the header
Array.from(table.tBodies[0].rows).forEach(row => {
//find the checkbox in the first cell
const checkbox = row.querySelector('td:first-child input[type="checkbox"]');
//check that box
if (checkbox) {
checkbox.checked = false;
@@ -393,7 +405,7 @@ function unmarkallQSOs(){
}
function switchbandandfrequencydisplay(mode){
//switch state according to selected value. Default case = band
switch(mode) {
case 'band':
@@ -426,4 +438,4 @@ function switchbandandfrequencydisplay(mode){
document.getElementById('frequency_or_band').addEventListener('change', function (event) {
//switch display options
switchbandandfrequencydisplay(event.target.value);
});
});