fix(hamlog): a status AND a date, like every other service

Bulk edit offered two HAMLOG fields, both dates, and the first question they
drew was the right one: which of these is the status? Collapsing the flag into
the date was neat in the storage and a riddle in the dialog, where the eight
fields above it are four status/date pairs.

So four keys now — APP_OPSLOG_HAMLOG_SENT / _SENT_DATE and _QSL / _QSL_DATE —
and four fields, in the shape an operator already reads for eQSL, QRZ, Club Log
and HRDLog. The stamp written after a successful upload follows: Y in the
status, the day in the date.

Nothing else changes: the QSL Manager's backlog still asks whether the sent key
is present, and the award engine still treats any non-N value in the QSL key as
a confirmation.
This commit is contained in:
2026-08-23 13:14:05 +02:00
parent 3f82da3c18
commit f8fdfab031
6 changed files with 36 additions and 22 deletions
+4 -2
View File
@@ -31,8 +31,10 @@ func TestBandIsNotBulkEditableAlone(t *testing.T) {
// so they must be reachable through the extras path, not the column one.
func TestHamlogFieldsAreBulkEditable(t *testing.T) {
for field, want := range map[string]string{
"hamlog_sent": "APP_OPSLOG_HAMLOG_SENT",
"hamlog_rcvd": "APP_OPSLOG_HAMLOG_QSL",
"hamlog_sent": "APP_OPSLOG_HAMLOG_SENT",
"hamlog_sent_date": "APP_OPSLOG_HAMLOG_SENT_DATE",
"hamlog_rcvd": "APP_OPSLOG_HAMLOG_QSL",
"hamlog_rcvd_date": "APP_OPSLOG_HAMLOG_QSL_DATE",
} {
if got := BulkExtraKey(field); got != want {
t.Errorf("BulkExtraKey(%q) = %q, want %q", field, got, want)
+12 -6
View File
@@ -910,12 +910,18 @@ func (r *Repo) BulkSetField(ctx context.Context, ids []int64, column, value stri
var bulkEditableExtras = map[string]string{
"owner_callsign": "OWNER_CALLSIGN",
// HAMLOG.online has no promoted column — the ADIF standard defines a field
// for hamlog.EU and none for hamlog.ONLINE. Both directions are editable in
// bulk because a log uploaded to their site BY HAND has to be markable
// afterwards: without it OpsLog would offer to send every one of those
// contacts again.
"hamlog_sent": "APP_OPSLOG_HAMLOG_SENT",
"hamlog_rcvd": "APP_OPSLOG_HAMLOG_QSL",
// for hamlog.EU and none for hamlog.ONLINE. Bulk-editable because a log
// uploaded to their site BY HAND has to be markable afterwards: without it
// OpsLog would offer to send every one of those contacts again.
//
// A STATUS and a DATE in each direction, like every other service: one field
// holding a date and standing in for the flag looked clever and read as a
// riddle — "which of these two is the status?" was the first thing an
// operator asked of it.
"hamlog_sent": "APP_OPSLOG_HAMLOG_SENT",
"hamlog_sent_date": "APP_OPSLOG_HAMLOG_SENT_DATE",
"hamlog_rcvd": "APP_OPSLOG_HAMLOG_QSL",
"hamlog_rcvd_date": "APP_OPSLOG_HAMLOG_QSL_DATE",
}
// BulkExtraKey maps a frontend field id to its ADIF key in extras_json, or "".