4.4 KiB
ReportsController.getRevenuePayouts = {
validateClaims:{"Subscriptions":["Staff"]},
handler: function(req, res, next) {
var connection = mysql.createConnection(config.DATABASE.CORE_READS("bmn_users"));
connection.query(
"SELECT\
mr.VenueUserGUID,\
a.user AS User,\
DATE_ADD(DATE_ADD(mr.DatePlayed, INTERVAL mr.LocalTimeOffset MINUTE), INTERVAL -5 HOUR) AS DatePlayed,\
COUNT() as PaidPlays,\
IFNULL(IF(COUNT() >= 75, COUNT() * 0.550.75*(mt.Price/mt.NumCredits), COUNT() * 0.550.50*(mt.Price/mt.NumCredits)),0) as RevenuePayout\
FROM bmn_users.mobile_requests mr\
JOIN bmn_users.mobile_credits mc\
ON mc.MobileRequestID = mr.ID\
JOIN bmn_users.mobile_transactions mt\
ON mt.ID = mc.MobilePaymentID\
JOIN bmn_users.accounts a\
ON a.UserGUID = mr.VenueUserGUID\
AND mr.DatePlayed IS NOT NULL\
AND DatePlayed >= DATE_SUB(DATE_ADD('2015-04-01:05:00:00', INTERVAL 5 HOUR), INTERVAL mr.LocalTimeOffset MINUTE)\
AND mt.Price > 0\
GROUP BY\
mr.VenueUserGUID,\
DATE_ADD(DATE_ADD(mr.DatePlayed, INTERVAL mr.LocalTimeOffset MINUTE), INTERVAL -5 HOUR)\
ORDER BY a.user, mr.DatePlayed ASC",
function(err, results) {
connection.end();
if (err) {
return next(new restify.InternalServerError(err));
}
var quarterlyPayouts = [];
//Get the first venue guid in the list, since the results are grouped by venue guid,
// we can process each record and discard it after use to avoid traversing the account list everytime
console.log(results);
for (var venueReportRecord = results[0]; venueReportRecord ; venueReportRecord = results[0]) {
var startRange = moment("04-01-2015", "MM-DD-YYYY");
var endRange = moment(startRange).add(3, "months");
var now = moment();
var lastQuarterPayout = 0;
while (startRange.isBefore(now)) {
var quarterRecord = {};
quarterRecord.VenueUserGUID = venueReportRecord.VenueUserGUID;
quarterRecord.User = venueReportRecord.User;
var numPaidRequests = 0;
var revenuePayout = 0;
//If we made less than 50, then that carries over to the next quarter
if (lastQuarterPayout < 50) {
revenuePayout += lastQuarterPayout;
}
results.slice().forEach(function(record, index, array){
if (moment(record.DatePlayed).isSameOrAfter(startRange) && moment(record.DatePlayed).isBefore(endRange) && record.VenueUserGUID == venueReportRecord.VenueUserGUID) {
revenuePayout += record.RevenuePayout;
numPaidRequests += record.PaidPlays;
results.splice(results.indexOf(record), 1);
}
});
quarterRecord.NumPaidRequests = numPaidRequests;
quarterRecord.QuarterStart = startRange;
quarterRecord.RevenuePayout = 0;
//Only add revenue payout if they made 50 dollars or more that quarter
if (revenuePayout >= 50) {
quarterRecord.RevenuePayout = revenuePayout;
}
lastQuarterPayout = revenuePayout;
startRange = moment(endRange);
endRange.add(3,"months");
quarterlyPayouts.push(quarterRecord);
}
}
res.send(quarterlyPayouts);
return next();
});
}
};
this.server.get("/reports/:id/profitshare", lumen.illuminate(ReportsController.getProfitShare));