Просмотр исходного кода

rename price attributes to price_in_cents or price_in_unit

GitOrigin-RevId: 8045472c96862078583fcb522099ad78926281dc
Tim Alby 4 лет назад
Родитель
Сommit
3e70546e18

+ 1 - 1
services/web/app/src/Features/Subscription/GroupPlansData.js

@@ -43,7 +43,7 @@ for (const [usage, planData] of Object.entries(groups)) {
           planCode
         )} - Group Account (${size} licenses) - ${capitalize(usage)}`,
         hideFromUsers: true,
-        price: groups[usage][planCode].USD[size],
+        price_in_cents: groups[usage][planCode].USD[size].price_in_unit * 100,
         annual: true,
         features: Settings.features[planCode],
         groupPlan: true,

+ 8 - 1
services/web/app/src/Features/Subscription/PlansLocator.js

@@ -3,10 +3,17 @@ const logger = require('@overleaf/logger')
 
 function ensurePlansAreSetupCorrectly() {
   Settings.plans.forEach(plan => {
-    if (typeof plan.price !== 'number') {
+    if (
+      typeof plan.price_in_unit !== 'number' &&
+      typeof plan.price_in_cents !== 'number'
+    ) {
       logger.fatal({ plan }, 'missing price on plan')
       process.exit(1)
     }
+    if (plan.price) {
+      logger.fatal({ plan }, 'unclear price attribute on plan')
+      process.exit(1)
+    }
   })
 }
 

+ 5 - 5
services/web/app/src/Features/Subscription/SubscriptionHelper.js

@@ -3,17 +3,17 @@
  * This is to avoid unintended/artifical credits on users Recurly accounts.
  */
 function shouldPlanChangeAtTermEnd(oldPlan, newPlan) {
-  return getPlanPrice(oldPlan) > getPlanPrice(newPlan)
+  return getPlanPriceInCents(oldPlan) > getPlanPriceInCents(newPlan)
 }
 
 /**
  * Group plans have their price in dollars, but individual plans store the price in cents
  */
-function getPlanPrice(plan) {
-  if (plan.groupPlan) {
-    return plan.price * 100
+function getPlanPriceInCents(plan) {
+  if (plan.price_in_unit) {
+    return plan.price_in_unit * 100
   }
-  return plan.price
+  return plan.price_in_cents
 }
 
 module.exports = {

+ 924 - 308
services/web/app/templates/plans/groups.json

@@ -2,408 +2,1024 @@
   "educational": {
     "professional": {
       "AUD": {
-        "2": 604,
-        "3": 906,
-        "4": 1208,
-        "5": 1510,
-        "10": 1685,
-        "20": 3110,
-        "50": 7130
+        "2": {
+          "price_in_unit": 604
+        },
+        "3": {
+          "price_in_unit": 906
+        },
+        "4": {
+          "price_in_unit": 1208
+        },
+        "5": {
+          "price_in_unit": 1510
+        },
+        "10": {
+          "price_in_unit": 1685
+        },
+        "20": {
+          "price_in_unit": 3110
+        },
+        "50": {
+          "price_in_unit": 7130
+        }
       },
       "CAD": {
-        "2": 570,
-        "3": 854,
-        "4": 1138,
-        "5": 1420,
-        "10": 1590,
-        "20": 2940,
-        "50": 6730
+        "2": {
+          "price_in_unit": 570
+        },
+        "3": {
+          "price_in_unit": 854
+        },
+        "4": {
+          "price_in_unit": 1138
+        },
+        "5": {
+          "price_in_unit": 1420
+        },
+        "10": {
+          "price_in_unit": 1590
+        },
+        "20": {
+          "price_in_unit": 2940
+        },
+        "50": {
+          "price_in_unit": 6730
+        }
       },
       "CHF": {
-        "2": 504,
-        "3": 756,
-        "4": 1008,
-        "5": 1260,
-        "10": 1405,
-        "20": 2590,
-        "50": 5940
+        "2": {
+          "price_in_unit": 504
+        },
+        "3": {
+          "price_in_unit": 756
+        },
+        "4": {
+          "price_in_unit": 1008
+        },
+        "5": {
+          "price_in_unit": 1260
+        },
+        "10": {
+          "price_in_unit": 1405
+        },
+        "20": {
+          "price_in_unit": 2590
+        },
+        "50": {
+          "price_in_unit": 5940
+        }
       },
       "DKK": {
-        "2": 3024,
-        "3": 4536,
-        "4": 6048,
-        "5": 7560,
-        "10": 8425,
-        "20": 15550,
-        "50": 35640
+        "2": {
+          "price_in_unit": 3024
+        },
+        "3": {
+          "price_in_unit": 4536
+        },
+        "4": {
+          "price_in_unit": 6048
+        },
+        "5": {
+          "price_in_unit": 7560
+        },
+        "10": {
+          "price_in_unit": 8425
+        },
+        "20": {
+          "price_in_unit": 15550
+        },
+        "50": {
+          "price_in_unit": 35640
+        }
       },
       "EUR": {
-        "2": 470,
-        "3": 704,
-        "4": 936,
-        "5": 1168,
-        "10": 1310,
-        "20": 2420,
-        "50": 5545
+        "2": {
+          "price_in_unit": 470
+        },
+        "3": {
+          "price_in_unit": 704
+        },
+        "4": {
+          "price_in_unit": 936
+        },
+        "5": {
+          "price_in_unit": 1168
+        },
+        "10": {
+          "price_in_unit": 1310
+        },
+        "20": {
+          "price_in_unit": 2420
+        },
+        "50": {
+          "price_in_unit": 5545
+        }
       },
       "GBP": {
-        "2": 396,
-        "3": 592,
-        "4": 788,
-        "5": 984,
-        "10": 1125,
-        "20": 2075,
-        "50": 4750
+        "2": {
+          "price_in_unit": 396
+        },
+        "3": {
+          "price_in_unit": 592
+        },
+        "4": {
+          "price_in_unit": 788
+        },
+        "5": {
+          "price_in_unit": 984
+        },
+        "10": {
+          "price_in_unit": 1125
+        },
+        "20": {
+          "price_in_unit": 2075
+        },
+        "50": {
+          "price_in_unit": 4750
+        }
       },
       "NOK": {
-        "2": 3696,
-        "3": 5544,
-        "4": 7392,
-        "5": 9240,
-        "10": 10295,
-        "20": 19010,
-        "50": 43560
+        "2": {
+          "price_in_unit": 3696
+        },
+        "3": {
+          "price_in_unit": 5544
+        },
+        "4": {
+          "price_in_unit": 7392
+        },
+        "5": {
+          "price_in_unit": 9240
+        },
+        "10": {
+          "price_in_unit": 10295
+        },
+        "20": {
+          "price_in_unit": 19010
+        },
+        "50": {
+          "price_in_unit": 43560
+        }
       },
       "NZD": {
-        "2": 604,
-        "3": 906,
-        "4": 1208,
-        "5": 1510,
-        "10": 1685,
-        "20": 3110,
-        "50": 7130
+        "2": {
+          "price_in_unit": 604
+        },
+        "3": {
+          "price_in_unit": 906
+        },
+        "4": {
+          "price_in_unit": 1208
+        },
+        "5": {
+          "price_in_unit": 1510
+        },
+        "10": {
+          "price_in_unit": 1685
+        },
+        "20": {
+          "price_in_unit": 3110
+        },
+        "50": {
+          "price_in_unit": 7130
+        }
       },
       "SEK": {
-        "2": 3696,
-        "3": 5544,
-        "4": 7392,
-        "5": 9240,
-        "10": 10295,
-        "20": 19010,
-        "50": 43560
+        "2": {
+          "price_in_unit": 3696
+        },
+        "3": {
+          "price_in_unit": 5544
+        },
+        "4": {
+          "price_in_unit": 7392
+        },
+        "5": {
+          "price_in_unit": 9240
+        },
+        "10": {
+          "price_in_unit": 10295
+        },
+        "20": {
+          "price_in_unit": 19010
+        },
+        "50": {
+          "price_in_unit": 43560
+        }
       },
       "SGD": {
-        "2": 672,
-        "3": 1008,
-        "4": 1344,
-        "5": 1680,
-        "10": 1870,
-        "20": 3455,
-        "50": 7920
+        "2": {
+          "price_in_unit": 672
+        },
+        "3": {
+          "price_in_unit": 1008
+        },
+        "4": {
+          "price_in_unit": 1344
+        },
+        "5": {
+          "price_in_unit": 1680
+        },
+        "10": {
+          "price_in_unit": 1870
+        },
+        "20": {
+          "price_in_unit": 3455
+        },
+        "50": {
+          "price_in_unit": 7920
+        }
       },
       "USD": {
-        "2": 504,
-        "3": 752,
-        "4": 990,
-        "5": 1230,
-        "10": 1390,
-        "20": 2590,
-        "50": 5940
+        "2": {
+          "price_in_unit": 504
+        },
+        "3": {
+          "price_in_unit": 752
+        },
+        "4": {
+          "price_in_unit": 990
+        },
+        "5": {
+          "price_in_unit": 1230
+        },
+        "10": {
+          "price_in_unit": 1390
+        },
+        "20": {
+          "price_in_unit": 2590
+        },
+        "50": {
+          "price_in_unit": 5940
+        }
       }
     },
     "collaborator": {
       "AUD": {
-        "2": 302,
-        "3": 453,
-        "4": 604,
-        "5": 755,
-        "10": 840,
-        "20": 1555,
-        "50": 3565
+        "2": {
+          "price_in_unit": 302
+        },
+        "3": {
+          "price_in_unit": 453
+        },
+        "4": {
+          "price_in_unit": 604
+        },
+        "5": {
+          "price_in_unit": 755
+        },
+        "10": {
+          "price_in_unit": 840
+        },
+        "20": {
+          "price_in_unit": 1555
+        },
+        "50": {
+          "price_in_unit": 3565
+        }
       },
       "CAD": {
-        "2": 285,
-        "3": 427,
-        "4": 569,
-        "5": 710,
-        "10": 795,
-        "20": 1470,
-        "50": 3365
+        "2": {
+          "price_in_unit": 285
+        },
+        "3": {
+          "price_in_unit": 427
+        },
+        "4": {
+          "price_in_unit": 569
+        },
+        "5": {
+          "price_in_unit": 710
+        },
+        "10": {
+          "price_in_unit": 795
+        },
+        "20": {
+          "price_in_unit": 1470
+        },
+        "50": {
+          "price_in_unit": 3365
+        }
       },
       "CHF": {
-        "2": 252,
-        "3": 378,
-        "4": 504,
-        "5": 630,
-        "10": 700,
-        "20": 1295,
-        "50": 2970
+        "2": {
+          "price_in_unit": 252
+        },
+        "3": {
+          "price_in_unit": 378
+        },
+        "4": {
+          "price_in_unit": 504
+        },
+        "5": {
+          "price_in_unit": 630
+        },
+        "10": {
+          "price_in_unit": 700
+        },
+        "20": {
+          "price_in_unit": 1295
+        },
+        "50": {
+          "price_in_unit": 2970
+        }
       },
       "DKK": {
-        "2": 1512,
-        "3": 2268,
-        "4": 3024,
-        "5": 3780,
-        "10": 4210,
-        "20": 7775,
-        "50": 17820
+        "2": {
+          "price_in_unit": 1512
+        },
+        "3": {
+          "price_in_unit": 2268
+        },
+        "4": {
+          "price_in_unit": 3024
+        },
+        "5": {
+          "price_in_unit": 3780
+        },
+        "10": {
+          "price_in_unit": 4210
+        },
+        "20": {
+          "price_in_unit": 7775
+        },
+        "50": {
+          "price_in_unit": 17820
+        }
       },
       "EUR": {
-        "2": 235,
-        "3": 352,
-        "4": 468,
-        "5": 584,
-        "10": 655,
-        "20": 1210,
-        "50": 2770
+        "2": {
+          "price_in_unit": 235
+        },
+        "3": {
+          "price_in_unit": 352
+        },
+        "4": {
+          "price_in_unit": 468
+        },
+        "5": {
+          "price_in_unit": 584
+        },
+        "10": {
+          "price_in_unit": 655
+        },
+        "20": {
+          "price_in_unit": 1210
+        },
+        "50": {
+          "price_in_unit": 2770
+        }
       },
       "GBP": {
-        "2": 198,
-        "3": 296,
-        "4": 394,
-        "5": 492,
-        "10": 560,
-        "20": 1035,
-        "50": 2375
+        "2": {
+          "price_in_unit": 198
+        },
+        "3": {
+          "price_in_unit": 296
+        },
+        "4": {
+          "price_in_unit": 394
+        },
+        "5": {
+          "price_in_unit": 492
+        },
+        "10": {
+          "price_in_unit": 560
+        },
+        "20": {
+          "price_in_unit": 1035
+        },
+        "50": {
+          "price_in_unit": 2375
+        }
       },
       "NOK": {
-        "2": 1848,
-        "3": 2772,
-        "4": 3696,
-        "5": 4620,
-        "10": 5150,
-        "20": 9505,
-        "50": 21780
+        "2": {
+          "price_in_unit": 1848
+        },
+        "3": {
+          "price_in_unit": 2772
+        },
+        "4": {
+          "price_in_unit": 3696
+        },
+        "5": {
+          "price_in_unit": 4620
+        },
+        "10": {
+          "price_in_unit": 5150
+        },
+        "20": {
+          "price_in_unit": 9505
+        },
+        "50": {
+          "price_in_unit": 21780
+        }
       },
       "NZD": {
-        "2": 302,
-        "3": 453,
-        "4": 604,
-        "5": 755,
-        "10": 840,
-        "20": 1555,
-        "50": 3565
+        "2": {
+          "price_in_unit": 302
+        },
+        "3": {
+          "price_in_unit": 453
+        },
+        "4": {
+          "price_in_unit": 604
+        },
+        "5": {
+          "price_in_unit": 755
+        },
+        "10": {
+          "price_in_unit": 840
+        },
+        "20": {
+          "price_in_unit": 1555
+        },
+        "50": {
+          "price_in_unit": 3565
+        }
       },
       "SEK": {
-        "2": 1848,
-        "3": 2772,
-        "4": 3696,
-        "5": 4620,
-        "10": 5150,
-        "20": 9505,
-        "50": 21780
+        "2": {
+          "price_in_unit": 1848
+        },
+        "3": {
+          "price_in_unit": 2772
+        },
+        "4": {
+          "price_in_unit": 3696
+        },
+        "5": {
+          "price_in_unit": 4620
+        },
+        "10": {
+          "price_in_unit": 5150
+        },
+        "20": {
+          "price_in_unit": 9505
+        },
+        "50": {
+          "price_in_unit": 21780
+        }
       },
       "SGD": {
-        "2": 336,
-        "3": 504,
-        "4": 672,
-        "5": 840,
-        "10": 935,
-        "20": 1730,
-        "50": 3960
+        "2": {
+          "price_in_unit": 336
+        },
+        "3": {
+          "price_in_unit": 504
+        },
+        "4": {
+          "price_in_unit": 672
+        },
+        "5": {
+          "price_in_unit": 840
+        },
+        "10": {
+          "price_in_unit": 935
+        },
+        "20": {
+          "price_in_unit": 1730
+        },
+        "50": {
+          "price_in_unit": 3960
+        }
       },
       "USD": {
-        "2": 252,
-        "3": 376,
-        "4": 495,
-        "5": 615,
-        "10": 695,
-        "20": 1295,
-        "50": 2970
+        "2": {
+          "price_in_unit": 252
+        },
+        "3": {
+          "price_in_unit": 376
+        },
+        "4": {
+          "price_in_unit": 495
+        },
+        "5": {
+          "price_in_unit": 615
+        },
+        "10": {
+          "price_in_unit": 695
+        },
+        "20": {
+          "price_in_unit": 1295
+        },
+        "50": {
+          "price_in_unit": 2970
+        }
       }
     }
   },
   "enterprise": {
     "professional": {
       "AUD": {
-        "2": 604,
-        "3": 906,
-        "4": 1208,
-        "5": 1510,
-        "10": 2810,
-        "20": 5185,
-        "50": 11880
+        "2": {
+          "price_in_unit": 604
+        },
+        "3": {
+          "price_in_unit": 906
+        },
+        "4": {
+          "price_in_unit": 1208
+        },
+        "5": {
+          "price_in_unit": 1510
+        },
+        "10": {
+          "price_in_unit": 2810
+        },
+        "20": {
+          "price_in_unit": 5185
+        },
+        "50": {
+          "price_in_unit": 11880
+        }
       },
       "CAD": {
-        "2": 570,
-        "3": 854,
-        "4": 1138,
-        "5": 1420,
-        "10": 2650,
-        "20": 4895,
-        "50": 11220
+        "2": {
+          "price_in_unit": 570
+        },
+        "3": {
+          "price_in_unit": 854
+        },
+        "4": {
+          "price_in_unit": 1138
+        },
+        "5": {
+          "price_in_unit": 1420
+        },
+        "10": {
+          "price_in_unit": 2650
+        },
+        "20": {
+          "price_in_unit": 4895
+        },
+        "50": {
+          "price_in_unit": 11220
+        }
       },
       "CHF": {
-        "2": 504,
-        "3": 756,
-        "4": 1008,
-        "5": 1260,
-        "10": 2340,
-        "20": 4320,
-        "50": 9900
+        "2": {
+          "price_in_unit": 504
+        },
+        "3": {
+          "price_in_unit": 756
+        },
+        "4": {
+          "price_in_unit": 1008
+        },
+        "5": {
+          "price_in_unit": 1260
+        },
+        "10": {
+          "price_in_unit": 2340
+        },
+        "20": {
+          "price_in_unit": 4320
+        },
+        "50": {
+          "price_in_unit": 9900
+        }
       },
       "DKK": {
-        "2": 3024,
-        "3": 4536,
-        "4": 6048,
-        "5": 7560,
-        "10": 14040,
-        "20": 25920,
-        "50": 59400
+        "2": {
+          "price_in_unit": 3024
+        },
+        "3": {
+          "price_in_unit": 4536
+        },
+        "4": {
+          "price_in_unit": 6048
+        },
+        "5": {
+          "price_in_unit": 7560
+        },
+        "10": {
+          "price_in_unit": 14040
+        },
+        "20": {
+          "price_in_unit": 25920
+        },
+        "50": {
+          "price_in_unit": 59400
+        }
       },
       "EUR": {
-        "2": 470,
-        "3": 704,
-        "4": 936,
-        "5": 1168,
-        "10": 2185,
-        "20": 4030,
-        "50": 9240
+        "2": {
+          "price_in_unit": 470
+        },
+        "3": {
+          "price_in_unit": 704
+        },
+        "4": {
+          "price_in_unit": 936
+        },
+        "5": {
+          "price_in_unit": 1168
+        },
+        "10": {
+          "price_in_unit": 2185
+        },
+        "20": {
+          "price_in_unit": 4030
+        },
+        "50": {
+          "price_in_unit": 9240
+        }
       },
       "GBP": {
-        "2": 396,
-        "3": 592,
-        "4": 788,
-        "5": 984,
-        "10": 1870,
-        "20": 3455,
-        "50": 7920
+        "2": {
+          "price_in_unit": 396
+        },
+        "3": {
+          "price_in_unit": 592
+        },
+        "4": {
+          "price_in_unit": 788
+        },
+        "5": {
+          "price_in_unit": 984
+        },
+        "10": {
+          "price_in_unit": 1870
+        },
+        "20": {
+          "price_in_unit": 3455
+        },
+        "50": {
+          "price_in_unit": 7920
+        }
       },
       "NOK": {
-        "2": 3696,
-        "3": 5544,
-        "4": 7392,
-        "5": 9240,
-        "10": 17160,
-        "20": 31680,
-        "50": 72600
+        "2": {
+          "price_in_unit": 3696
+        },
+        "3": {
+          "price_in_unit": 5544
+        },
+        "4": {
+          "price_in_unit": 7392
+        },
+        "5": {
+          "price_in_unit": 9240
+        },
+        "10": {
+          "price_in_unit": 17160
+        },
+        "20": {
+          "price_in_unit": 31680
+        },
+        "50": {
+          "price_in_unit": 72600
+        }
       },
       "NZD": {
-        "2": 604,
-        "3": 906,
-        "4": 1208,
-        "5": 1510,
-        "10": 2810,
-        "20": 5185,
-        "50": 11880
+        "2": {
+          "price_in_unit": 604
+        },
+        "3": {
+          "price_in_unit": 906
+        },
+        "4": {
+          "price_in_unit": 1208
+        },
+        "5": {
+          "price_in_unit": 1510
+        },
+        "10": {
+          "price_in_unit": 2810
+        },
+        "20": {
+          "price_in_unit": 5185
+        },
+        "50": {
+          "price_in_unit": 11880
+        }
       },
       "SEK": {
-        "2": 3696,
-        "3": 5544,
-        "4": 7392,
-        "5": 9240,
-        "10": 17160,
-        "20": 31680,
-        "50": 72600
+        "2": {
+          "price_in_unit": 3696
+        },
+        "3": {
+          "price_in_unit": 5544
+        },
+        "4": {
+          "price_in_unit": 7392
+        },
+        "5": {
+          "price_in_unit": 9240
+        },
+        "10": {
+          "price_in_unit": 17160
+        },
+        "20": {
+          "price_in_unit": 31680
+        },
+        "50": {
+          "price_in_unit": 72600
+        }
       },
       "SGD": {
-        "2": 672,
-        "3": 1008,
-        "4": 1344,
-        "5": 1680,
-        "10": 3120,
-        "20": 5760,
-        "50": 13200
+        "2": {
+          "price_in_unit": 672
+        },
+        "3": {
+          "price_in_unit": 1008
+        },
+        "4": {
+          "price_in_unit": 1344
+        },
+        "5": {
+          "price_in_unit": 1680
+        },
+        "10": {
+          "price_in_unit": 3120
+        },
+        "20": {
+          "price_in_unit": 5760
+        },
+        "50": {
+          "price_in_unit": 13200
+        }
       },
       "USD": {
-        "2": 504,
-        "3": 752,
-        "4": 990,
-        "5": 1230,
-        "10": 2340,
-        "20": 4320,
-        "50": 9900
+        "2": {
+          "price_in_unit": 504
+        },
+        "3": {
+          "price_in_unit": 752
+        },
+        "4": {
+          "price_in_unit": 990
+        },
+        "5": {
+          "price_in_unit": 1230
+        },
+        "10": {
+          "price_in_unit": 2340
+        },
+        "20": {
+          "price_in_unit": 4320
+        },
+        "50": {
+          "price_in_unit": 9900
+        }
       }
     },
     "collaborator": {
       "AUD": {
-        "2": 302,
-        "3": 453,
-        "4": 604,
-        "5": 755,
-        "10": 1405,
-        "20": 2590,
-        "50": 5940
+        "2": {
+          "price_in_unit": 302
+        },
+        "3": {
+          "price_in_unit": 453
+        },
+        "4": {
+          "price_in_unit": 604
+        },
+        "5": {
+          "price_in_unit": 755
+        },
+        "10": {
+          "price_in_unit": 1405
+        },
+        "20": {
+          "price_in_unit": 2590
+        },
+        "50": {
+          "price_in_unit": 5940
+        }
       },
       "CAD": {
-        "2": 285,
-        "3": 427,
-        "4": 569,
-        "5": 710,
-        "10": 1325,
-        "20": 2450,
-        "50": 5610
+        "2": {
+          "price_in_unit": 285
+        },
+        "3": {
+          "price_in_unit": 427
+        },
+        "4": {
+          "price_in_unit": 569
+        },
+        "5": {
+          "price_in_unit": 710
+        },
+        "10": {
+          "price_in_unit": 1325
+        },
+        "20": {
+          "price_in_unit": 2450
+        },
+        "50": {
+          "price_in_unit": 5610
+        }
       },
       "CHF": {
-        "2": 252,
-        "3": 378,
-        "4": 504,
-        "5": 630,
-        "10": 1170,
-        "20": 2160,
-        "50": 4950
+        "2": {
+          "price_in_unit": 252
+        },
+        "3": {
+          "price_in_unit": 378
+        },
+        "4": {
+          "price_in_unit": 504
+        },
+        "5": {
+          "price_in_unit": 630
+        },
+        "10": {
+          "price_in_unit": 1170
+        },
+        "20": {
+          "price_in_unit": 2160
+        },
+        "50": {
+          "price_in_unit": 4950
+        }
       },
       "DKK": {
-        "2": 1512,
-        "3": 2268,
-        "4": 3024,
-        "5": 3780,
-        "10": 7020,
-        "20": 12960,
-        "50": 29700
+        "2": {
+          "price_in_unit": 1512
+        },
+        "3": {
+          "price_in_unit": 2268
+        },
+        "4": {
+          "price_in_unit": 3024
+        },
+        "5": {
+          "price_in_unit": 3780
+        },
+        "10": {
+          "price_in_unit": 7020
+        },
+        "20": {
+          "price_in_unit": 12960
+        },
+        "50": {
+          "price_in_unit": 29700
+        }
       },
       "EUR": {
-        "2": 235,
-        "3": 352,
-        "4": 468,
-        "5": 584,
-        "10": 1090,
-        "20": 2015,
-        "50": 4620
+        "2": {
+          "price_in_unit": 235
+        },
+        "3": {
+          "price_in_unit": 352
+        },
+        "4": {
+          "price_in_unit": 468
+        },
+        "5": {
+          "price_in_unit": 584
+        },
+        "10": {
+          "price_in_unit": 1090
+        },
+        "20": {
+          "price_in_unit": 2015
+        },
+        "50": {
+          "price_in_unit": 4620
+        }
       },
       "GBP": {
-        "2": 198,
-        "3": 296,
-        "4": 394,
-        "5": 492,
-        "10": 935,
-        "20": 1730,
-        "50": 3960
+        "2": {
+          "price_in_unit": 198
+        },
+        "3": {
+          "price_in_unit": 296
+        },
+        "4": {
+          "price_in_unit": 394
+        },
+        "5": {
+          "price_in_unit": 492
+        },
+        "10": {
+          "price_in_unit": 935
+        },
+        "20": {
+          "price_in_unit": 1730
+        },
+        "50": {
+          "price_in_unit": 3960
+        }
       },
       "NOK": {
-        "2": 1848,
-        "3": 2772,
-        "4": 3696,
-        "5": 4620,
-        "10": 8580,
-        "20": 15840,
-        "50": 36300
+        "2": {
+          "price_in_unit": 1848
+        },
+        "3": {
+          "price_in_unit": 2772
+        },
+        "4": {
+          "price_in_unit": 3696
+        },
+        "5": {
+          "price_in_unit": 4620
+        },
+        "10": {
+          "price_in_unit": 8580
+        },
+        "20": {
+          "price_in_unit": 15840
+        },
+        "50": {
+          "price_in_unit": 36300
+        }
       },
       "NZD": {
-        "2": 302,
-        "3": 453,
-        "4": 604,
-        "5": 755,
-        "10": 1405,
-        "20": 2590,
-        "50": 5940
+        "2": {
+          "price_in_unit": 302
+        },
+        "3": {
+          "price_in_unit": 453
+        },
+        "4": {
+          "price_in_unit": 604
+        },
+        "5": {
+          "price_in_unit": 755
+        },
+        "10": {
+          "price_in_unit": 1405
+        },
+        "20": {
+          "price_in_unit": 2590
+        },
+        "50": {
+          "price_in_unit": 5940
+        }
       },
       "SEK": {
-        "2": 1848,
-        "3": 2772,
-        "4": 3696,
-        "5": 4620,
-        "10": 8580,
-        "20": 15840,
-        "50": 36300
+        "2": {
+          "price_in_unit": 1848
+        },
+        "3": {
+          "price_in_unit": 2772
+        },
+        "4": {
+          "price_in_unit": 3696
+        },
+        "5": {
+          "price_in_unit": 4620
+        },
+        "10": {
+          "price_in_unit": 8580
+        },
+        "20": {
+          "price_in_unit": 15840
+        },
+        "50": {
+          "price_in_unit": 36300
+        }
       },
       "SGD": {
-        "2": 336,
-        "3": 504,
-        "4": 672,
-        "5": 840,
-        "10": 1560,
-        "20": 2880,
-        "50": 6600
+        "2": {
+          "price_in_unit": 336
+        },
+        "3": {
+          "price_in_unit": 504
+        },
+        "4": {
+          "price_in_unit": 672
+        },
+        "5": {
+          "price_in_unit": 840
+        },
+        "10": {
+          "price_in_unit": 1560
+        },
+        "20": {
+          "price_in_unit": 2880
+        },
+        "50": {
+          "price_in_unit": 6600
+        }
       },
       "USD": {
-        "2": 252,
-        "3": 376,
-        "4": 495,
-        "5": 615,
-        "10": 1170,
-        "20": 2160,
-        "50": 4950
+        "2": {
+          "price_in_unit": 252
+        },
+        "3": {
+          "price_in_unit": 376
+        },
+        "4": {
+          "price_in_unit": 495
+        },
+        "5": {
+          "price_in_unit": 615
+        },
+        "10": {
+          "price_in_unit": 1170
+        },
+        "20": {
+          "price_in_unit": 2160
+        },
+        "50": {
+          "price_in_unit": 4950
+        }
       }
     }
   }

+ 1 - 1
services/web/config/settings.defaults.js

@@ -319,7 +319,7 @@ module.exports = {
     {
       planCode: 'personal',
       name: 'Personal',
-      price: 0,
+      price_in_cents: 0,
       features: defaultFeatures,
     },
   ],

+ 4 - 4
services/web/frontend/js/features/plans/group-plan-modal/index.js

@@ -16,16 +16,16 @@ function getFormValues() {
 }
 
 function updateGroupPlanView() {
-  const prices = getMeta('ol-groupPlans')
+  const groupPlans = getMeta('ol-groupPlans')
   const currencySymbols = getMeta('ol-currencySymbols')
 
   const modalEl = document.querySelector('[data-ol-group-plan-modal]')
   const { planCode, size, currency, usage } = getFormValues()
 
-  const price = prices[usage][planCode][currency][size]
+  const priceInUnit = groupPlans[usage][planCode][currency][size].price_in_unit
   const currencySymbol = currencySymbols[currency]
-  const displayPrice = `${currencySymbol}${price}`
-  const perUserPrice = parseFloat((price / size).toFixed(2))
+  const displayPrice = `${currencySymbol}${priceInUnit}`
+  const perUserPrice = parseFloat((priceInUnit / size).toFixed(2))
 
   modalEl.querySelectorAll('[data-ol-group-plan-plan-code]').forEach(el => {
     el.hidden = el.getAttribute('data-ol-group-plan-plan-code') !== planCode

+ 4 - 3
services/web/frontend/js/main/subscription-dashboard.js

@@ -161,10 +161,11 @@ App.controller(
       let perUserDisplayPricePlaceholder = '...'
       const currencySymbol = $scope.options.currencySymbols[currency]
       if (taxRate === 0) {
-        const basePrice = $scope.groupPlans[usage][plan_code][currency][size]
-        recurlyPricePlaceholder.total = `${currencySymbol}${basePrice}`
+        const basePriceInUnit =
+          $scope.groupPlans[usage][plan_code][currency][size].price_in_unit
+        recurlyPricePlaceholder.total = `${currencySymbol}${basePriceInUnit}`
         perUserDisplayPricePlaceholder = getPricePerUser(
-          basePrice,
+          basePriceInUnit,
           currencySymbol,
           size
         )

+ 1 - 1
services/web/scripts/recurly/get_recurly_group_prices.js

@@ -23,7 +23,7 @@ async function getRecurlyGroupPrices() {
         prices[usage] = prices[usage] || {}
         prices[usage][type] = prices[usage][type] || {}
         prices[usage][type][currency] = prices[usage][type][currency] || {}
-        prices[usage][type][currency][size] = unitAmount
+        prices[usage][type][currency][size] = { price_in_unit: unitAmount }
       })
     }
   }

+ 4 - 4
services/web/test/acceptance/config/settings.test.defaults.js

@@ -121,25 +121,25 @@ module.exports = {
     {
       planCode: 'v1_free',
       name: 'V1 Free',
-      price: 0,
+      price_in_cents: 0,
       features: features.v1_free,
     },
     {
       planCode: 'personal',
       name: 'Personal',
-      price: 0,
+      price_in_cents: 0,
       features: features.personal,
     },
     {
       planCode: 'collaborator',
       name: 'Collaborator',
-      price: 1500,
+      price_in_cents: 1500,
       features: features.collaborator,
     },
     {
       planCode: 'professional',
       name: 'Professional',
-      price: 3000,
+      price_in_cents: 3000,
       features: features.professional,
     },
   ],

+ 4 - 4
services/web/test/unit/src/Subscription/PlansLocatorTests.js

@@ -6,21 +6,21 @@ const plans = [
   {
     planCode: 'first',
     name: '1st',
-    price: 800,
+    price_in_cents: 800,
     features: {},
     featureDescription: {},
   },
   {
     planCode: 'second',
     name: '2nd',
-    price: 1500,
+    price_in_cents: 1500,
     features: {},
     featureDescription: {},
   },
   {
     planCode: 'third',
     name: '3rd',
-    price: 3000,
+    price_in_cents: 3000,
     features: {},
     featureDescription: {},
   },
@@ -41,7 +41,7 @@ describe('PlansLocator', function () {
     it('should return the found plan', function () {
       const plan = this.PlansLocator.findLocalPlanInSettings('second')
       expect(plan).to.have.property('name', '2nd')
-      expect(plan).to.have.property('price', 1500)
+      expect(plan).to.have.property('price_in_cents', 1500)
     })
     it('should return null if no matching plan is found', function () {
       const plan = this.PlansLocator.findLocalPlanInSettings('gibberish')

+ 5 - 5
services/web/test/unit/src/Subscription/SubscriptionHelperTests.js

@@ -6,24 +6,24 @@ const modulePath =
 const plans = {
   expensive: {
     planCode: 'expensive',
-    price: 1500,
+    price_in_cents: 1500,
   },
   cheaper: {
     planCode: 'cheaper',
-    price: 500,
+    price_in_cents: 500,
   },
   alsoCheap: {
     plancode: 'also-cheap',
-    price: 500,
+    price_in_cents: 500,
   },
   expensiveGroup: {
     plancode: 'group_expensive',
-    price: 495,
+    price_in_unit: 495,
     groupPlan: true,
   },
   cheapGroup: {
     plancode: 'group_cheap',
-    price: 10,
+    price_in_unit: 10,
     groupPlan: true,
   },
   bad: {},