Date/time and device type in quick report.

Fix - invalid campaign when one tried to unsubscribe from a test message before campaign was sent
This commit is contained in:
Tomas Bures 2019-09-05 15:51:17 +02:00
parent 2e4dc1bce4
commit b6ed5e56b9
4 changed files with 13 additions and 7 deletions

View file

@ -20,7 +20,7 @@ export default class List extends Component {
return (
<div>
<h2>{t('Mailtrain 2 beta')}</h2>
<div>{t('Build') + ' 2019-08-31-1200'}</div>
<div>{t('Build') + ' 2019-09-05-1547'}</div>
</div>
);
}

View file

@ -769,11 +769,9 @@ async function changeStatusByCampaignCidAndSubscriptionIdTx(tx, context, campaig
])
.first();
if (!message) {
throw new Error('Invalid campaign.');
if (message) { // If a test is send before the campaign is sent, the corresponding entry does not exists in campaign_messages. We ignore such situations as the subscriber gets unsubscribed anyway. We just don't account it to the campaign.
await _changeStatusByMessageTx(tx, context, message, campaignMessageStatus);
}
await _changeStatusByMessageTx(tx, context, message, campaignMessageStatus);
}

View file

@ -236,6 +236,8 @@ async function _getCampaignStatistics(campaign, select, joins, unionQryFn, listQ
commonFieldsMapping[`${prefix}:link`] = alias + '.link';
commonFieldsMapping[`${prefix}:country`] = alias + '.country';
commonFieldsMapping[`${prefix}:deviceType`] = alias + '.device_type';
commonFieldsMapping[`${prefix}:ip`] = alias + '.ip';
commonFieldsMapping[`${prefix}:created`] = alias + '.created';
knexJoinFns.push((qry, cpgListId) => qry.leftJoin('campaign_links AS ' + alias, getConds(alias, cpgListId)));

View file

@ -10,6 +10,7 @@ const {castToInteger} = require('../lib/helpers');
const {SubscriptionStatus} = require('../../shared/lists');
const knex = require('../lib/knex');
const {LinkId} = require('../models/links');
const moment = require('moment');
const router = require('../lib/router-async').create();
@ -23,7 +24,7 @@ router.getAsync('/open-and-click-counts/:campaignId', passport.loggedIn, async (
const results = await reports.getCampaignStatisticsStream(
campaign,
['subscription:email', 'open_tracker:count', 'click_tracker:count', 'open_tracker:country', ...Object.keys(listFields)],
['subscription:email', 'open_tracker:count', 'click_tracker:count', 'open_tracker:country', 'open_tracker:created', 'open_tracker:deviceType', ...Object.keys(listFields)],
[
{type: 'links', prefix: 'open_tracker', onConditions: {link: knex.raw('?', [LinkId.OPEN])} },
{type: 'links', prefix: 'click_tracker', onConditions: {link: knex.raw('?', [LinkId.GENERAL_CLICK])} }
@ -48,11 +49,16 @@ router.getAsync('/open-and-click-counts/:campaignId', passport.loggedIn, async (
{ key: 'open_tracker:count', header: 'Open count' },
{ key: 'click_tracker:count', header: 'Click count' },
{ key: 'open_tracker:country', header: 'Country (first open)' },
{ key: 'open_tracker:created', header: 'Date/time (first open)' },
{ key: 'open_tracker:deviceType', header: 'Device type (first open)' },
...Object.keys(listFields).map(key => ({key, header: listFields[key].key}))
],
delimiter: ','
},
async (row, encoding) => row
async (row, encoding) => ({
...row,
'open_tracker:created': moment(row['open_tracker:created']).toISOString()
})
);
});