overleaf/services/web/scripts/plan-prices/groups.js
Eric Mc Sween c9f8080769 Merge pull request #10372 from overleaf/ii-adjust-plans-prices
Adjust plans prices and automate the process of generating the prices lists

GitOrigin-RevId: 06be1f9a26837ed9bb7eca598cd88b6288244338
2022-11-15 09:05:56 +00:00

68 lines
1.6 KiB
JavaScript

// Creates data for groups.json
const xlsx = require('xlsx')
const fs = require('fs')
const path = require('path')
const [fileName, sheetName] = process.argv.slice(2)
// Pick the xlsx file
const filePath = path.resolve(__dirname, fileName)
const file = xlsx.readFile(filePath)
if (!file.SheetNames.includes(sheetName)) {
throw new Error('Sheet not found!')
}
const workSheet = Object.values(file.Sheets)[file.SheetNames.indexOf(sheetName)]
// Convert to JSON
const workSheetJSON = xlsx.utils.sheet_to_json(workSheet)
const groupPlans = workSheetJSON.filter(data =>
data.plan_code.startsWith('group')
)
const currencies = [
'AUD',
'CAD',
'CHF',
'DKK',
'EUR',
'GBP',
'NOK',
'NZD',
'SEK',
'SGD',
'USD',
]
const sizes = ['2', '3', '4', '5', '10', '20', '50']
const result = {}
for (const type1 of ['educational', 'enterprise']) {
result[type1] = {}
for (const type2 of ['professional', 'collaborator']) {
result[type1][type2] = {}
for (const currency of currencies) {
result[type1][type2][currency] = {}
for (const size of sizes) {
const planCode = `group_${type2}_${size}_${type1}`
const plan = groupPlans.find(data => data.plan_code === planCode)
if (!plan) throw new Error(`Missing plan: ${planCode}`)
result[type1][type2][currency][size] = {
price_in_cents: plan[currency] * 100,
}
}
}
}
}
const output = JSON.stringify(result, null, 2)
const dir = './output'
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir)
}
fs.writeFileSync(`${dir}/groups.json`, output)
console.log('Completed!')