Esempio n. 1
0
		.then(function(ownedDeals, followedDeals, orderedDeals) {
			var deals = [];

			logger.debugLog('getDeals log. ownedDeals: ' + JSON.stringify(ownedDeals));
			logger.debugLog('getDeals log. followedDeals: ' + JSON.stringify(followedDeals));
			logger.debugLog('getDeals log. orderedDeals: ' + JSON.stringify(orderedDeals));
			
			ownedDeals.forEach(function(ownedDeal) {
				var deal = dealModel.convertToDealModel(ownedDeal, 'own');
				logger.debugLog('getDeals log. ownedDeals: Convert parseDeal to: ' + JSON.stringify(deal));
				deals.push(deal);
			});

			followedDeals.forEach(function(followedDeal) {
				var deal = dealModel.convertToDealModel(followedDeal, 'follow');
				logger.debugLog('getDeals log. ownedDeals: Convert parseDeal to: ' + JSON.stringify(deal));
				deals.push(deal);
			});

			orderedDeals.forEach(function(orderedDeal) {
				var deal = dealModel.convertToDealModel(orderedDeal, 'order');
				logger.debugLog('getDeals log. ownedDeals: Convert parseDeal to: ' + JSON.stringify(deal));
				deals.push(deal);
			});

			return deals;
		})
Esempio n. 2
0
		.then(function() {
			logger.debugLog('getfollowdDeals log. arguments: ' + arguments);
			var followedDeals = [];
			for(var i=0; i<arguments.length; i++) {
				var followedDeal = arguments[i];
				logger.debugLog('getfollowdDeals log. argument followed deal: ' + JSON.stringify(followedDeal));
				followedDeals.push(followedDeal);
			}
			logger.debugLog('getfollowdDeals log. Return followed deals: ' + JSON.stringify(followedDeals));
			return followedDeals;
		});
Esempio n. 3
0
module.exports.withinTotalQuantityLimit = function(dealModel, quantity) {
	logger.debugLog('withinTotalQuantityLimit log. dealModel: ' + JSON.stringify(dealModel));
	logger.debugLog('withinTotalQuantityLimit log. quantity: ' + quantity);
	var total = dealModel.orderQuantity + quantity;
	logger.debugLog('withinTotalQuantityLimit log. total: ' + total);
	if (!dealModel.totalQuantityLimit) {
		return true;
	}
	if (total > dealModel.totalQuantityLimit) {
		return false;
	}
	return true;
};
Esempio n. 4
0
			parseFollowDeals.forEach(function(parseFollowDeal) {
				var dealId = parseFollowDeal.get('dealId');
				logger.debugLog('getfollowdDeals log. Fetching dealId: ' + dealId);
				var followedDeal = new ParseDeal();
				followedDeal.id = dealId;
				promises.push(followedDeal.fetch());
			});
Esempio n. 5
0
var getFollowedDeals = function(currentUser) {
	logger.debugLog('getfollowdDeals log.');
	var query = new Parse.Query(ParseFollowDeal);
	query.equalTo('followerId', currentUser.id);
	return query.find()
		.then(function(parseFollowDeals) {
			var promises = [];
			parseFollowDeals.forEach(function(parseFollowDeal) {
				var dealId = parseFollowDeal.get('dealId');
				logger.debugLog('getfollowdDeals log. Fetching dealId: ' + dealId);
				var followedDeal = new ParseDeal();
				followedDeal.id = dealId;
				promises.push(followedDeal.fetch());
			});
			return Parse.Promise.when(promises);
		})
		.then(function() {
			logger.debugLog('getfollowdDeals log. arguments: ' + arguments);
			var followedDeals = [];
			for(var i=0; i<arguments.length; i++) {
				var followedDeal = arguments[i];
				logger.debugLog('getfollowdDeals log. argument followed deal: ' + JSON.stringify(followedDeal));
				followedDeals.push(followedDeal);
			}
			logger.debugLog('getfollowdDeals log. Return followed deals: ' + JSON.stringify(followedDeals));
			return followedDeals;
		});
};
Esempio n. 6
0
module.exports.exportDealToExcel = function (dealData) {
	// TODO: convert to xlsx later. For now, use csv for simplicity
	var result = '';
	
	// Header section
	result += 'Deal Summary: \n';
	result += 'Name' + separator 
		+ 'Description' + separator
		+ 'Price' + separator
		+ 'Package\n';
	result +=  escapeStr(dealData.name) + separator 
		+ escapeStr(dealData.description) + separator 
		+ '$' + dealData.unitPrice + separator
		+ dealData.unitsPerPackage + ' ' + escapeStr(dealData.unitName) + '\n';

	logger.debugLog('exportDealToExcel log. unitPrice: ' + dealData.unitPrice + ' escapeStr: ' + escapeStr(dealData.unitPrice));

	result += '\n';
	result += '\n';

	if (dealData.orders && dealData.orders.forEach && dealData.orders.length > 0) {
		// Orders section
		result += 'Orders Summary: \n';
		result += 'Order time' + separator
			+ 'Order Id' + separator
			+ 'Name' + separator 
			+ 'PhoneNumber' + separator
			+ 'Email' + separator
			+ 'Pickup contact' + separator
			+ 'Pickup address' + separator
			+ 'Pickup phone' + separator
			+ 'Quantity' + separator
			+ 'Price' + separator
			+ 'Order status\n';

		dealData.orders.forEach(function(order) {
			var buyer = order.buyer;
			var pickupOption = order.pickupOption;
			var dateString = getDateString(order.orderTime);
			result += escapeStr(dateString) + separator
				+ order.id + separator
				+ escapeStr(buyer.nickname) + separator
				+ buyer.phoneNumber + separator
				+ escapeStr(buyer.email) + separator
				+ escapeStr(pickupOption.contactName) + separator
				+ escapeStr(pickupOption.address) + separator
				+ escapeStr(pickupOption.phoneNumber) + separator
				+ escapeStr(order.quantity.toString()) + separator
				+ escapeStr(order.price.toString()) + separator
				+ escapeStr(order.status) + '\n';
		});
	}
	else {
		result += 'No order for this deal yet!\n';
	}

	return result;
}
Esempio n. 7
0
module.exports.getDeals = function(req, res) {
	var correlationId = logger.newCorrelationId();
	var responseError = {correlationId: correlationId};

	var currentUser = Parse.User.current();
	logger.debugLog('getDeals log. currentUser: '******'error', 'getDeals error (401): user logged in.');
		return res.status(401).send(responseError);
	}

	var promises = [
		getOwnedDeals(currentUser),
		getFollowedDeals(currentUser),
		getOrderedDeals(currentUser)
	];

	return Parse.Promise.when(promises)
		.then(function(ownedDeals, followedDeals, orderedDeals) {
			var deals = [];

			logger.debugLog('getDeals log. ownedDeals: ' + JSON.stringify(ownedDeals));
			logger.debugLog('getDeals log. followedDeals: ' + JSON.stringify(followedDeals));
			logger.debugLog('getDeals log. orderedDeals: ' + JSON.stringify(orderedDeals));
			
			ownedDeals.forEach(function(ownedDeal) {
				var deal = dealModel.convertToDealModel(ownedDeal, 'own');
				logger.debugLog('getDeals log. ownedDeals: Convert parseDeal to: ' + JSON.stringify(deal));
				deals.push(deal);
			});

			followedDeals.forEach(function(followedDeal) {
				var deal = dealModel.convertToDealModel(followedDeal, 'follow');
				logger.debugLog('getDeals log. ownedDeals: Convert parseDeal to: ' + JSON.stringify(deal));
				deals.push(deal);
			});

			orderedDeals.forEach(function(orderedDeal) {
				var deal = dealModel.convertToDealModel(orderedDeal, 'order');
				logger.debugLog('getDeals log. ownedDeals: Convert parseDeal to: ' + JSON.stringify(deal));
				deals.push(deal);
			});

			return deals;
		})
		.then(function(allDeals) {
			var responseData = {};
			responseData.deals = allDeals;
			logger.logUsage(currentUser.id, 'getDeals', '', '');
			return res.status(200).send(JSON.stringify(responseData));
	    }, function(error) {
	    	var errorMessage = 'getDeals error: ' + JSON.stringify(error);
	    	logger.logDiagnostics(correlationId, 'error', errorMessage);
	    	return res.status(500).send(errorMessage);
	    });
};
Esempio n. 8
0
var getOwnedDeals = function(currentUser) {
	logger.debugLog('getOwnedDeals log.');
	var query = new Parse.Query(ParseDeal);
    query.equalTo('createdBy', currentUser);
    return query.find()
    	.then(function(parseDeals) {
    		logger.debugLog('getOwnedDeals log. parseDeals: ' + JSON.stringify(parseDeals));
    		return parseDeals;
    	});
};
Esempio n. 9
0
    	.then(function(parseDeals) {
    		logger.debugLog('getPublicDeals log. parseDeals: ' + JSON.stringify(parseDeals));
    		var deals = [];

    		parseDeals.forEach(function(parseDeal) {
				var deal = dealModel.convertToDealModel(parseDeal, null);
				logger.debugLog('getPublicDeals log. Convert parseDeal to: ' + JSON.stringify(deal));
				deals.push(deal);
			});

			return deals;
    	})
Esempio n. 10
0
module.exports.followUser = function(req, res) {
    var correlationId = logger.newCorrelationId();
    var responseError = {correlationId: correlationId};

	var currentUser = Parse.User.current();
    logger.debugLog('followUser log. currentUser: '******'error', 'followUser error (401): user not logged in');
		return res.status(401).send(responseError);
	}

	var userId = req.params.userId;
	if (!userId) {
		// not found
        logger.logDiagnostics(correlationId, 'error', 'userId not provided in request');
		return res.status(400).send(responseError);
	}

	var query = new Parse.Query(ParseFollowUser);
	query.equalTo('userId', userId);
	query.equalTo('followerId', currentUser.id);
	return query.first()
		.then(function(parseFollowUser) {
			if (parseFollowUser) {
				// If there is already a followUser, we will return false and do not proceed further.
    			return false;
    		}
    		return true;
    	})
    	.then(function(proceed) {
    		if (proceed) {
    			var parseFollowUser = new ParseFollowUser();
    			parseFollowUser.set('userId', userId);
    			parseFollowUser.set('followerId', currentUser.id);
    			return parseFollowUser.save();
    		}
    		return;
    	})
    	.then(function() {
            logger.logUsage(currentUser.id, 'followUser', userId, '');
    		return res.status(200).end();
    	}, function(error) {
            var errorMessage = 'followUser error: ' + JSON.stringify(error);
            logger.logDiagnostics(correlationId, 'error', errorMessage);
    		return res.status(500).send(responseError);
    	});
};
Esempio n. 11
0
    	.then(function(parseDeal) {
    		if (!parseDeal) {
    			return;
    		}

    		var followCount = parseDeal.get('followCount');
			if (followCount || followCount == 0) {
				followCount++;
			}
			else {
				followCount = 1;
			}
			parseDeal.set('followCount', followCount);
            logger.debugLog('followDeal log. set followCount: ' + followCount);
			return parseDeal.save(null, {useMasterKey: true});
    	})
Esempio n. 12
0
module.exports.unfollowUser = function(req, res) {
    var correlationId = logger.newCorrelationId();
    var responseError = {correlationId: correlationId};

	var currentUser = Parse.User.current();
    logger.debugLog('unfollowUser log. currentUser: '******'error', 'unfollowUser error (401): user not logged in');
		return res.status(401).send(responseError);
	}

	var userId = req.params.userId;
	if (!userId) {
		// not found
        var errorMessage = 'unfollowUser error: no userId provided from request'; 
        logger.logDiagnostics(correlationId, 'error', errorMessage);
		return res.status(400).send(responseError);
	}

	var query = new Parse.Query(ParseFollowUser);
	query.equalTo('userId', userId);
	query.equalTo('followerId', currentUser.id);

	return query.first()
		.then(function(parseFollowUser) {
			if (parseFollowUser) {
				return parseFollowUser.destroy({});
			}
			return;
		})
		.then(function() {
            logger.logUsage(currentUser.id, 'unfollowUser', userId, '');
    		return res.status(200).end();
    	}, function(error) {
            var errorMessage = 'unfollowUser error: ' + JSON.stringify(error);
            logger.logDiagnostics(correlationId, 'error', errorMessage);
    		return res.status(500).send(responseError);
    	});
};
Esempio n. 13
0
module.exports.getMyOrders = function(req, res) {
    var correlationId = logger.newCorrelationId();
    var responseError = {correlationId: correlationId};

	var currentUser = Parse.User.current();
	logger.debugLog('getMyOrders log. currentUser: '******'error', 'getMyOrders error: user not logged in');

		return res.status(401).send(responseError);
	}

	var query = new Parse.Query(ParseOrder);
	query.equalTo('creatorId', currentUser.id);
	// we are sorting the results by creation date
	query.addDescending('createdAt');
	return query.find()
    	.then(function(parseOrders) {
    		var orders = [];

    		parseOrders.forEach(function(parseOrder) {
				var order = orderModel.convertToOrderModel(parseOrder);
				orders.push(order);
			});

			return orders;
    	})
    	.then(function(orders) {
    		var responseData = {};
			responseData.orders = orders;
			logger.logUsage(currentUser.id, 'getMyOrders', '', '');
			return res.status(200).send(JSON.stringify(responseData));
	    }, function(error) {
	    	var errorMessage = 'getMyOrders error: ' + JSON.stringify(error);
	    	logger.logDiagnostics(correlationId, 'error', errorMessage);
	    	return res.status(500).send(responseError);
	    });
};
Esempio n. 14
0
module.exports = function (wechatId, publicAccountId, createTime, eventKey, res) {
    logger.debugLog('QR close order log. user='******';eventKey=' + eventKey + ';createTime=' + createTime);
    var message = messageUtils.generateTextMessage(wechatId, publicAccountId, createTime, "Order close success: " + wechatId + ";" + eventKey);
    res.send(message);
//    wechatAccessToken.getAccessToken()
//    .then( function(accessToken) {
//        return wechatUserInfo.getUserInfo(accessToken.token, wechatId);
//    })
//    .then( function(wechatUserRawData) {
//        return tgbWechatUser.activate(wechatId, wechatUserRawData);
//    })
//    .then( function(wechatUser) {
//        var message = messageUtils.generateWelcomeMessage(wechatId, publicAccountId, createTime, 
//            wechatUser.nickname, wechatUser.headimgurl, wechatUser.claimtoken);
//        // send response
//        res.contentType('application/xml');
//        logger.logUsage('wechatUser_' + wechatUser.id, 'subscribe', '', message);
//        res.send(message);
//    }, function(error) {
//        logger.debugLog('subscribe wechat user error: ' + error.message);
//        res.error();
//    });
};
Esempio n. 15
0
var getOrderedDeals = function(currentUser) {
	logger.debugLog('getOrderedDeals log.');
	var query = new Parse.Query(ParseOrder);
	query.equalTo('creatorId', currentUser.id);
	return query.find()
		.then(function(parseOrders) {
			var promises = [];
			parseOrders.forEach(function(parseOrder) {
				var dealId = parseOrder.get('dealId');
				var orderedDeal = new ParseDeal();
				orderedDeal.id = dealId;
				promises.push(orderedDeal.fetch());
			});
			return Parse.Promise.when(promises);
		})
		.then(function() {
			var orderedDeals = [];
			for(var i=0; i<arguments.length; i++) {
				var orderedDeal = arguments[i];
				orderedDeals.push(orderedDeal);
			}
			return orderedDeals;
		});
};
Esempio n. 16
0
module.exports.isValidOrder = function(dealModel, orderDate) {
	logger.debugLog('isValidOrder log. check valid order: ' + JSON.stringify(dealModel));
	logger.debugLog('isValidOrder log. deal status: ' + dealModel.status);
	logger.debugLog('isValidOrder log. order date: ' + orderDate);
	if (dealModel.status == 'closed') {
		logger.debugLog('isValidOrder log. invalid due to status');
		return false;
	}
	var endDate = dealModel.endDate;
	if (endDate) {
		logger.debugLog('isValidOrder log. orderDate: ' + orderDate.getFullYear() + '/' + orderDate.getMonth() + '/' + orderDate.getDate());
		logger.debugLog('isValidOrder log. endDate: ' + endDate.getFullYear() + '/' + endDate.getMonth() + '/' + endDate.getDate());
		if (orderDate.getFullYear() == endDate.getFullYear() 
			&& orderDate.getMonth() == endDate.getMonth()
			&& orderDate.getDate() == endDate.getDate()) {
			return true;
		}
		return orderDate <= endDate;
	}
	return true;
};
Esempio n. 17
0
 	.then(function(parseDeals) {
 		logger.debugLog('getOwnedDeals log. parseDeals: ' + JSON.stringify(parseDeals));
 		return parseDeals;
 	});
Esempio n. 18
0
module.exports.unfollowDeal = function(req, res) {
    var correlationId = logger.newCorrelationId();
    var responseError = {correlationId: correlationId};

	var currentUser = Parse.User.current();
    logger.debugLog('unfollowDeal log. currentUser: '******'error', 'unfollowDeal error: user not logged in');
		return res.status(401).send(responseError);
	}

	var dealId = req.params.dealId;
	if (!dealId) {
		// not found
        logger.logDiagnostics(correlationId, 'error', 'unfollowDeal error: dealId not provided in request');
		return res.status(400).send(responseError);
	}
	var query = new Parse.Query(ParseFollowDeal);
    logger.debugLog('unfollowDeal log. dealId: ' + dealId + ' by userId: ' + currentUser.id);
    query.equalTo('dealId', dealId);
    query.equalTo('followerId', currentUser.id);
    return query.first()
    	.then(function(parseFollowDeal) {
    		if (parseFollowDeal) {
    			return parseFollowDeal.destroy({});
    		}
    		return;
    	})
    	.then(function(deletedFollowDeal) {
    		if (deletedFollowDeal) {
    			var parseDealPromise = new ParseDeal();
    			parseDealPromise.id = dealId;
    			return parseDealPromise.fetch();
    		}
    		return;
    	})
    	.then(function(parseDeal) {
    		if (!parseDeal) {
    			return;
    		}
    		var followCount = parseDeal.get('followCount');
			if (followCount) {
				followCount = 0;
			}
			else {
				followCount--;
			}
            if (followCount < 0) {
                followCount = 0;
            }
			parseDeal.set('followCount', followCount);
            logger.debugLog('unfollowDeal log. set followCount: ' + followCount);
			return parseDeal.save(null, {useMasterKey: true});
    		
    	})
    	.then(function(savedDeal) {
            logger.logUsage(currentUser.id, 'unfollowDeal', dealId, '');
    		return res.status(200).end();
    	}, function(error) {
            var errorMessage = 'unfollowDeal error: ' + JSON.stringify(error);
            logger.logDiagnostics(correlationId, 'error', errorMessage);
    		return res.status(500).send(responseError);
    	});
};
Esempio n. 19
0
			orderedDeals.forEach(function(orderedDeal) {
				var deal = dealModel.convertToDealModel(orderedDeal, 'order');
				logger.debugLog('getDeals log. ownedDeals: Convert parseDeal to: ' + JSON.stringify(deal));
				deals.push(deal);
			});