|
|
@@ -0,0 +1,100 @@
|
|
|
+const RecurlyWrapper = require('../../app/src/Features/Subscription/RecurlyWrapper')
|
|
|
+const async = require('async')
|
|
|
+const CSVParser = require('json2csv').Parser
|
|
|
+
|
|
|
+const NOW = new Date()
|
|
|
+
|
|
|
+const getAccountSubscription = (account, callback) =>
|
|
|
+ RecurlyWrapper.getSubscriptions(account.account_code, (error, response) => {
|
|
|
+ if (error) {
|
|
|
+ console.warn(
|
|
|
+ `Errors getting subscription for account ${account.account_code}`,
|
|
|
+ error
|
|
|
+ )
|
|
|
+ return callback()
|
|
|
+ }
|
|
|
+ callback(null, response.subscriptions[0])
|
|
|
+ })
|
|
|
+
|
|
|
+const isAccountUsingPaypal = (account, callback) =>
|
|
|
+ RecurlyWrapper.getBillingInfo(account.account_code, (error, response) => {
|
|
|
+ if (error) {
|
|
|
+ console.warn(
|
|
|
+ `Errors getting billing info for account ${account.account_code}`,
|
|
|
+ error
|
|
|
+ )
|
|
|
+ return callback(null, false)
|
|
|
+ }
|
|
|
+ if (response.billing_info.paypal_billing_agreement_id) {
|
|
|
+ return callback(null, true)
|
|
|
+ }
|
|
|
+ callback(null, false)
|
|
|
+ })
|
|
|
+
|
|
|
+const printAccountCSV = (account, callback) => {
|
|
|
+ isAccountUsingPaypal(account, (error, isPaypal) => {
|
|
|
+ if (error || !isPaypal) {
|
|
|
+ return callback(error)
|
|
|
+ }
|
|
|
+ getAccountSubscription(account, (error, subscription) => {
|
|
|
+ if (error || !subscription) {
|
|
|
+ return callback(error)
|
|
|
+ }
|
|
|
+ const endAt = new Date(subscription.current_period_ends_at)
|
|
|
+ if (subscription.expires_at) {
|
|
|
+ return callback()
|
|
|
+ }
|
|
|
+ const csvData = {
|
|
|
+ email: account.email,
|
|
|
+ first_name: account.first_name,
|
|
|
+ last_name: account.last_name,
|
|
|
+ hosted_login_token: account.hosted_login_token,
|
|
|
+ billing_info_url: `https://sharelatex.recurly.com/account/billing_info/edit?ht=${
|
|
|
+ account.hosted_login_token
|
|
|
+ }`,
|
|
|
+ account_management_url: `https://sharelatex.recurly.com/account/${
|
|
|
+ account.hosted_login_token
|
|
|
+ }`,
|
|
|
+ current_period_ends_at: `${endAt.getFullYear()}-${endAt.getMonth() +
|
|
|
+ 1}-${endAt.getDate()}`,
|
|
|
+ current_period_ends_at_segment: parseInt(
|
|
|
+ ((endAt - NOW) / 1000 / 3600 / 24 / 365) * 7
|
|
|
+ )
|
|
|
+ }
|
|
|
+ callback(null, csvData)
|
|
|
+ })
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+const printAccountsCSV = callback => {
|
|
|
+ RecurlyWrapper.getAccounts({ state: 'subscriber' }, (error, accounts) => {
|
|
|
+ if (error) {
|
|
|
+ return callback(error)
|
|
|
+ }
|
|
|
+ async.mapLimit(accounts, 10, printAccountCSV, (error, csvData) => {
|
|
|
+ csvData = csvData.filter(d => !!d)
|
|
|
+ callback(error, csvData)
|
|
|
+ })
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+const csvFields = [
|
|
|
+ 'email',
|
|
|
+ 'first_name',
|
|
|
+ 'last_name',
|
|
|
+ 'hosted_login_token',
|
|
|
+ 'billing_info_url',
|
|
|
+ 'account_management_url',
|
|
|
+ 'current_period_ends_at',
|
|
|
+ 'current_period_ends_at_segment'
|
|
|
+]
|
|
|
+const csvParser = new CSVParser({ csvFields })
|
|
|
+
|
|
|
+// print each account
|
|
|
+printAccountsCSV((error, csvData) => {
|
|
|
+ if (error) {
|
|
|
+ throw error
|
|
|
+ }
|
|
|
+ console.log(csvParser.parse(csvData))
|
|
|
+ process.exit()
|
|
|
+})
|