diff --git a/award-definitions/dxcc-cw.json b/award-definitions/dxcc-cw.json index cb3e195..68e15c8 100644 --- a/award-definitions/dxcc-cw.json +++ b/award-definitions/dxcc-cw.json @@ -8,7 +8,8 @@ "baseRule": { "type": "entity", "entityType": "dxcc", - "target": 100 + "target": 100, + "displayField": "entity" }, "filters": { "operator": "AND", diff --git a/award-definitions/dxcc.json b/award-definitions/dxcc.json index 775faa7..65320dd 100644 --- a/award-definitions/dxcc.json +++ b/award-definitions/dxcc.json @@ -6,6 +6,7 @@ "rules": { "type": "entity", "entityType": "dxcc", - "target": 100 + "target": 100, + "displayField": "entity" } } diff --git a/award-definitions/sat-rs44.json b/award-definitions/sat-rs44.json index dd7f17a..ed13870 100644 --- a/award-definitions/sat-rs44.json +++ b/award-definitions/sat-rs44.json @@ -7,6 +7,7 @@ "type": "counter", "target": 44, "countBy": "qso", + "displayField": "callsign", "filters": { "operator": "AND", "filters": [ diff --git a/award-definitions/vucc-sat.json b/award-definitions/vucc-sat.json index 160d38b..27d3b39 100644 --- a/award-definitions/vucc-sat.json +++ b/award-definitions/vucc-sat.json @@ -7,6 +7,7 @@ "type": "entity", "entityType": "grid", "target": 100, + "displayField": "grid", "filters": { "operator": "AND", "filters": [ diff --git a/award-definitions/was.json b/award-definitions/was.json index 55e1d7d..b4cf3dc 100644 --- a/award-definitions/was.json +++ b/award-definitions/was.json @@ -7,6 +7,7 @@ "type": "entity", "entityType": "state", "target": 50, + "displayField": "state", "filters": { "operator": "AND", "filters": [ diff --git a/src/backend/services/awards.service.js b/src/backend/services/awards.service.js index 91b3126..6430149 100644 --- a/src/backend/services/awards.service.js +++ b/src/backend/services/awards.service.js @@ -70,6 +70,7 @@ function normalizeAwardRules(rules) { type: 'entity', entityType: rules.baseRule.entityType, target: rules.baseRule.target, + displayField: rules.baseRule.displayField, filters: rules.filters, }; } @@ -81,6 +82,7 @@ function normalizeAwardRules(rules) { type: 'entity', entityType: rules.countBy === 'qso' ? 'callsign' : 'callsign', target: rules.target, + displayField: rules.displayField, filters: rules.filters, }; } @@ -277,16 +279,27 @@ export async function getAwardEntityBreakdown(userId, awardId) { if (!entity) continue; if (!entityMap.has(entity)) { + // Determine what to display as the entity name + // Use displayField from award rules, or fallback to entity/type + let displayName = String(entity); + if (rules.displayField) { + displayName = String(qso[rules.displayField] || entity); + } else { + // Fallback: try entity, state, grid, callsign in order + displayName = qso.entity || qso.state || qso.grid || qso.callsign || String(entity); + } + entityMap.set(entity, { entity, entityId: qso.entityId, - entityName: qso.entity || qso.state || qso.grid || qso.callsign || String(entity), + entityName: displayName, worked: false, confirmed: false, qsoDate: qso.qsoDate, band: qso.band, mode: qso.mode, callsign: qso.callsign, + satName: qso.satName, }); } diff --git a/src/frontend/static/award-definitions/dxcc-cw.json b/src/frontend/static/award-definitions/dxcc-cw.json index cb3e195..68e15c8 100644 --- a/src/frontend/static/award-definitions/dxcc-cw.json +++ b/src/frontend/static/award-definitions/dxcc-cw.json @@ -8,7 +8,8 @@ "baseRule": { "type": "entity", "entityType": "dxcc", - "target": 100 + "target": 100, + "displayField": "entity" }, "filters": { "operator": "AND", diff --git a/src/frontend/static/award-definitions/dxcc.json b/src/frontend/static/award-definitions/dxcc.json index 775faa7..65320dd 100644 --- a/src/frontend/static/award-definitions/dxcc.json +++ b/src/frontend/static/award-definitions/dxcc.json @@ -6,6 +6,7 @@ "rules": { "type": "entity", "entityType": "dxcc", - "target": 100 + "target": 100, + "displayField": "entity" } } diff --git a/src/frontend/static/award-definitions/sat-rs44.json b/src/frontend/static/award-definitions/sat-rs44.json index dd7f17a..ed13870 100644 --- a/src/frontend/static/award-definitions/sat-rs44.json +++ b/src/frontend/static/award-definitions/sat-rs44.json @@ -7,6 +7,7 @@ "type": "counter", "target": 44, "countBy": "qso", + "displayField": "callsign", "filters": { "operator": "AND", "filters": [ diff --git a/src/frontend/static/award-definitions/vucc-sat.json b/src/frontend/static/award-definitions/vucc-sat.json index 160d38b..27d3b39 100644 --- a/src/frontend/static/award-definitions/vucc-sat.json +++ b/src/frontend/static/award-definitions/vucc-sat.json @@ -7,6 +7,7 @@ "type": "entity", "entityType": "grid", "target": 100, + "displayField": "grid", "filters": { "operator": "AND", "filters": [ diff --git a/src/frontend/static/award-definitions/was.json b/src/frontend/static/award-definitions/was.json index 55e1d7d..b4cf3dc 100644 --- a/src/frontend/static/award-definitions/was.json +++ b/src/frontend/static/award-definitions/was.json @@ -7,6 +7,7 @@ "type": "entity", "entityType": "state", "target": 50, + "displayField": "state", "filters": { "operator": "AND", "filters": [