fix(plans): various bug fixes

This commit is contained in:
Tyler Renelle
2014-12-03 16:43:27 -07:00
parent e1492809fd
commit d2e230db1f
6 changed files with 37 additions and 29 deletions
+4 -4
View File
@@ -29,12 +29,12 @@ exports.createSubscription = function(data, cb) {
var recipient = data.gift ? data.gift.member : data.user;
//if (!recipient.purchased.plan) recipient.purchased.plan = {}; // FIXME double-check, this should never be the case
var p = recipient.purchased.plan;
var months = data.gift ? data.gift.subscription.months : data.sub.months;
var months = +(data.gift ? data.gift.subscription.months : data.sub.months);
var block = shared.content.subscriptionBlocks[months];
if (data.gift) {
if (p.customerId && !p.dateTerminated) { // User has active plan
p.extraMonths += +months;
p.extraMonths += months;
} else {
p.dateTerminated = moment(p.dateTerminated).add({months: months}).toDate();
}
@@ -65,7 +65,7 @@ exports.createSubscription = function(data, cb) {
}
revealMysteryItems(recipient);
if(isProduction) {
data.gift && utils.txnEmail(data.user, 'subscription-begins');
if (!data.gift) utils.txnEmail(data.user, 'subscription-begins');
utils.ga.event('subscribe', data.paymentMethod).send();
utils.ga.transaction(data.user._id, block.price).item(block.price, 1, data.paymentMethod.toLowerCase() + '-subscription', data.paymentMethod).send();
}
@@ -102,7 +102,7 @@ exports.buyGems = function(data, cb) {
(data.gift ? data.gift.member : data.user).balance += amt;
data.user.purchased.txnCount++;
if(isProduction) {
utils.txnEmail(data.user, 'donation');
if (!data.gift) utils.txnEmail(data.user, 'donation');
utils.ga.event('checkout', data.paymentMethod).send();
//TODO ga.transaction to reflect whether this is gift or self-purchase
utils.ga.transaction(data.user._id, amt).item(amt, 1, data.paymentMethod.toLowerCase() + "-checkout", "Gems > " + data.paymentMethod).send();
+25 -18
View File
@@ -24,12 +24,14 @@ paypal.configure({
});
var parseErr = function(res, err){
var error = err.response ? err.response.message || err.response.details[0].issue : err;
//var error = err.response ? err.response.message || err.response.details[0].issue : err;
var error = JSON.stringify(err);
return res.json(400,{err:error});
}
exports.createBillingAgreement = function(req,res,next){
var block = req.session.paypalBlock = shared.content.subscriptionBlocks[req.query.sub];
req.session.paypalBlock = req.query.sub;
var block = shared.content.subscriptionBlocks[req.query.sub];
var billingPlanTitle = "HabitRPG Subscription" + ' ($'+block.price+' every '+block.months+' months, recurring)';
var billingAgreementAttributes = {
"name": billingPlanTitle,
@@ -51,29 +53,33 @@ exports.createBillingAgreement = function(req,res,next){
}
exports.executeBillingAgreement = function(req,res,next){
async.waterfall([
function(cb){
var block = shared.content.subscriptionBlocks[req.session.paypalBlock];
delete req.session.paypalBlock;
async.auto({
exec: function (cb) {
paypal.billingAgreement.execute(req.query.token, {}, cb);
},
function(billingAgreement, cb){
User.findById(req.session.userId, function(err, user){
if (err) return cb(err);
cb(null, {billingAgreement:billingAgreement, user:user});
});
get_user: function (cb) {
User.findById(req.session.userId, cb);
},
function(data, cb){
payments.createSubscription({user:data.user, customerId: data.billingAgreement.id, paymentMethod: 'Paypal', sub:req.session.paypalBlock});
data.user.save(cb);
}
],function(err){
create_sub: ['exec', 'get_user', function (cb, results) {
payments.createSubscription({
user: results.get_user,
customerId: results.exec.id,
paymentMethod: 'Paypal',
sub: block
}, cb);
}]
},function(err){
if (err) return parseErr(res, err);
res.redirect('/');
})
}
exports.createPayment = function(req, res, next) {
exports.createPayment = function(req, res) {
// if we're gifting to a user, put it in session for the `execute()`
var gift = req.session.gift = req.query.gift ? JSON.parse(req.query.gift) : undefined;
req.session.gift = req.query.gift || undefined;
var gift = req.query.gift ? JSON.parse(req.query.gift) : undefined;
var price = !gift ? 5.00
: gift.type=='gems' ? Number(gift.gems.amount/4).toFixed(2)
: Number(shared.content.subscriptionBlocks[gift.subscription.months].price).toFixed(2);
@@ -113,10 +119,11 @@ exports.createPayment = function(req, res, next) {
});
}
exports.executePayment = function(req, res, next) {
exports.executePayment = function(req, res) {
var paymentId = req.query.paymentId,
PayerID = req.query.PayerID,
gift = req.session.gift;
gift = req.session.gift ? JSON.parse(req.session.gift) : undefined;
delete req.session.gift;
async.waterfall([
function(cb){
paypal.payment.execute(paymentId, {payer_id: PayerID}, cb);