Files

4.4 KiB
Raw Permalink Blame History

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));