Переглянути джерело

use totalUsage while checking for downgrade

Neeraj Gupta 3 роки тому
батько
коміт
151456953d

+ 16 - 0
lib/models/user_details.dart

@@ -1,3 +1,4 @@
+import 'package:collection/collection.dart';
 import 'package:photos/models/subscription.dart';
 
 class UserDetails {
@@ -28,6 +29,17 @@ class UserDetails {
     return currentUserMember.isAdmin;
   }
 
+  // getFamilyOrPersonalUsage will return total usage for family if user
+  // belong to family group. Otherwise, it will return storage consumed by
+  // current user
+  int getFamilyOrPersonalUsage() {
+    return isPartOfFamily() ? familyData.getTotalUsage() : usage;
+  }
+
+  int getPersonalUsage() {
+    return usage;
+  }
+
   factory UserDetails.fromMap(Map<String, dynamic> map) {
     return UserDetails(
       map['email'] as String,
@@ -82,6 +94,10 @@ class FamilyData {
 
   FamilyData(this.members, this.storage, this.expiryTime);
 
+  int getTotalUsage() {
+    return members.map((e) => e.usage).toList().sum;
+  }
+
   factory FamilyData.fromMap(Map<String, dynamic> map) {
     if (map == null) {
       return null;

+ 2 - 5
lib/ui/payment/stripe_subscription_page.dart

@@ -40,7 +40,6 @@ class _StripeSubscriptionPageState extends State<StripeSubscriptionPage> {
   Subscription _currentSubscription;
   ProgressDialog _dialog;
   UserDetails _userDetails;
-  int _usage;
 
   // indicates if user's subscription plan is still active
   bool _hasActiveSubscription;
@@ -64,7 +63,6 @@ class _StripeSubscriptionPageState extends State<StripeSubscriptionPage> {
       _showYearlyPlan = _currentSubscription.isYearlyPlan();
       _hasActiveSubscription = _currentSubscription.isValid();
       _isStripeSubscriber = _currentSubscription.paymentProvider == kStripe;
-      _usage = userDetails.usage;
       return _filterStripeForUI().then((value) {
         _hasLoadedData = true;
         setState(() {});
@@ -136,7 +134,7 @@ class _StripeSubscriptionPageState extends State<StripeSubscriptionPage> {
 
     widgets.add(SubscriptionHeaderWidget(
       isOnboarding: widget.isOnboarding,
-      currentUsage: _usage,
+      currentUsage: _userDetails.getPersonalUsage(),
     ));
 
     widgets.addAll([
@@ -365,12 +363,11 @@ class _StripeSubscriptionPageState extends State<StripeSubscriptionPage> {
                     "please cancel your existing subscription from ${_currentSubscription.paymentProvider} first");
                 return;
               }
-              if (_usage > plan.storage) {
+              if (_userDetails.getFamilyOrPersonalUsage() > plan.storage) {
                 showErrorDialog(
                     context, "sorry", "you cannot downgrade to this plan");
                 return;
               }
-              await _dialog.show();
               String stripPurChaseAction = 'buy';
               if (_isStripeSubscriber && _hasActiveSubscription) {
                 // confirm if user wants to change plan or not