4 lines
4.4 KiB
Markdown
4 lines
4.4 KiB
Markdown
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.55*0.75*(mt.Price/mt.NumCredits), COUNT(*) * 0.55*0.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*)); |