diff --git a/rowers/braintreestuff.py b/rowers/braintreestuff.py index 145a766d..92a10f28 100644 --- a/rowers/braintreestuff.py +++ b/rowers/braintreestuff.py @@ -418,35 +418,72 @@ def create_subscription(rower, data): return False, 0 # pragma: no cover - def cancel_subscription(rower, id): themessages = [] errormessages = [] + + # 1. Fetch subscription first so we can read paid_through_date try: - _ = gateway.subscription.cancel(id) - themessages.append("Subscription canceled") - except: # pragma: no cover + subscription = gateway.subscription.find(id) + paid_through = subscription.paid_through_date # may be None + except Exception: errormessages.append( "We could not find the subscription record in our customer database." - " We have notified the site owner, who will contact you.") + " We have notified the site owner, who will contact you." + ) - name = '{f} {l}'.format(f=rower.user.first_name, - l=rower.user.last_name) + name = f"{rower.user.first_name} {rower.user.last_name}" - _ = myqueue(queuehigh, - handle_send_email_failed_cancel, - name, rower.user.email, rower.user.username, id) + _ = myqueue( + queuehigh, + handle_send_email_failed_cancel, + name, + rower.user.email, + rower.user.username, + id, + ) return False, themessages, errormessages + # 2. Attempt cancellation + try: + _ = gateway.subscription.cancel(id) + themessages.append("Subscription canceled") + except Exception: # pragma: no cover + errormessages.append( + "We could not find the subscription record in our customer database." + " We have notified the site owner, who will contact you." + ) + + name = f"{rower.user.first_name} {rower.user.last_name}" + + _ = myqueue( + queuehigh, + handle_send_email_failed_cancel, + name, + rower.user.email, + rower.user.username, + id, + ) + + return False, themessages, errormessages + + # 3. Update rower object (using paid_through_date) basicplans = PaidPlan.objects.filter(price=0, paymentprocessor='braintree') rower.paidplan = basicplans[0] + + # teamplanexpires stays "now" (as you had it) rower.teamplanexpires = timezone.now() - rower.planexpires = timezone.now() + + # planexpires becomes the user's real, fully paid end date + # fallback = now() if Braintree somehow returns None + rower.planexpires = paid_through or timezone.now() + rower.clubsize = 0 rower.rowerplan = 'basic' rower.subscription_id = None rower.save() + themessages.append("Your plan was reset to basic") return True, themessages, errormessages diff --git a/rowers/management/commands/processemail.py b/rowers/management/commands/processemail.py index b10dd241..b0235bfb 100644 --- a/rowers/management/commands/processemail.py +++ b/rowers/management/commands/processemail.py @@ -93,15 +93,15 @@ class Command(BaseCommand): lines = traceback.format_exception(exc_type, exc_value, exc_traceback) dologging('processemail.log', ''.join('!! ' + line for line in lines)) - rowers = Rower.objects.filter(rp3_auto_import=True) - for r in rowers: # pragma: no cover - try: - rp3_integration = RP3Integration(r.user) - _ = rp3_integration.get_workouts() - except: # pragma: no cover - exc_type, exc_value, exc_traceback = sys.exc_info() - lines = traceback.format_exception(exc_type, exc_value, exc_traceback) - dologging('processemail.log', ''.join('!! ' + line for line in lines)) + #rowers = Rower.objects.filter(rp3_auto_import=True) + #for r in rowers: # pragma: no cover + # try: + # rp3_integration = RP3Integration(r.user) + # _ = rp3_integration.get_workouts() + # except: # pragma: no cover + # exc_type, exc_value, exc_traceback = sys.exc_info() + # lines = traceback.format_exception(exc_type, exc_value, exc_traceback) + # dologging('processemail.log', ''.join('!! ' + line for line in lines)) rowers = Rower.objects.filter(nk_auto_import=True) for r in rowers: # pragma: no cover diff --git a/rowers/models.py b/rowers/models.py index 9aa8eca5..1ec81d32 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -1263,14 +1263,6 @@ class Rower(models.Model): polaruserid = models.IntegerField(default=0, blank=True, null=True) polar_auto_import = models.BooleanField(default=False) - garmintoken = models.CharField( - default='', max_length=200, blank=True, null=True) - garminrefreshtoken = models.CharField(default='', max_length=1000, - blank=True, null=True) - - garminactivity = models.CharField(default='RUNNING', max_length=200, - verbose_name='Garmin Activity for Structured Workouts', - choices=garminsports) stravatoken = models.CharField( default='', max_length=200, blank=True, null=True) @@ -2975,8 +2967,8 @@ class PlannedSession(models.Model): steps = PlannedSessionStepField(default={}, null=True, max_length=1000, blank=True) interval_string = models.TextField(max_length=1000, default=None, blank=True, null=True, verbose_name='Interval String (optional)') - garmin_workout_id = models.BigIntegerField(default=0) - garmin_schedule_id = models.BigIntegerField(default=0) + #garmin_workout_id = models.BigIntegerField(default=0) + #garmin_schedule_id = models.BigIntegerField(default=0) tags = TaggableManager(blank=True) @@ -3837,7 +3829,7 @@ class Workout(models.Model): uploadedtostrava = models.BigIntegerField(default=0) uploadedtosporttracks = models.BigIntegerField(default=0) uploadedtotp = models.BigIntegerField(default=0) - uploadedtogarmin = models.BigIntegerField(default=0) + #uploadedtogarmin = models.BigIntegerField(default=0) uploadedtorp3 = models.BigIntegerField(default=0) uploadedtonk = models.BigIntegerField(default=0) uploadedtointervals = models.CharField(default=None,null=True, max_length=100) @@ -4754,7 +4746,7 @@ class RowerExportForm(ModelForm): model = Rower fields = [ 'stravaexportas', - 'garminactivity', +# 'garminactivity', 'polar_auto_import', 'c2_auto_export', 'c2_auto_import', @@ -4801,12 +4793,12 @@ class RowerExportFormIntervals(ModelForm): 'intervals_delete_plannedsession', ] -class RowerExportFormGarmin(ModelForm): - class Meta: - model = Rower - fields = [ - 'garminactivity', - ] +#class RowerExportFormGarmin(ModelForm): +# class Meta: +# model = Rower +# fields = [ +# 'garminactivity', +# ] class RowerExportFormPolar(ModelForm): class Meta: diff --git a/rowers/templates/frontpage.html b/rowers/templates/frontpage.html index 7b10cdc4..0b12898e 100644 --- a/rowers/templates/frontpage.html +++ b/rowers/templates/frontpage.html @@ -44,14 +44,7 @@ {% if user.is_anonymous %}