diff --git a/public/suite-traffic.js b/public/suite-traffic.js index f4d2ecb..e3bac73 100644 --- a/public/suite-traffic.js +++ b/public/suite-traffic.js @@ -187,7 +187,14 @@ var bought = Number(c.bought != null ? c.bought : c.impressions) || 0; var rawRem = l.remaining != null ? Number(l.remaining) : null; var servedShown, left; - if (rawRem == null) { servedShown = Number(served) || 0; left = null; } + if (c.completed || c.stopped) { + // Once a campaign is closed, trust what we recorded at the time. + // Deactivating an ad ZEROES `remaining` on the network — and for a + // banner, where that column counts UP, zero reads as "served nothing". + // Re-deriving here would wipe a finished campaign back to 0 served. + servedShown = Number(c.served != null ? c.served : bought) || 0; + left = Math.max(0, bought - servedShown); + } else if (rawRem == null) { servedShown = Number(served) || 0; left = null; } else if (c.kind === 'text') { left = Math.max(0, Math.min(rawRem, bought)); servedShown = bought - left; } else { servedShown = Math.max(0, Math.min(rawRem, bought)); left = bought - servedShown; } // "running" with 0 left reads as broken. It is not: banners have no cap on @@ -211,8 +218,8 @@ tr.innerHTML = '