def subscription_cancel(request, grant_id, grant_slug, subscription_id): """Handle the cancellation of a grant subscription.""" subscription = Subscription.objects.select_related('grant').get(pk=subscription_id) grant = getattr(subscription, 'grant', None) now = datetime.datetime.now() profile = get_profile(request) if not subscription.active: params = { 'active': 'grant_error', 'title': _('Grant Subscription Cancelled'), 'grant': grant } if grant.active: params['text'] = _('This Grant subscription has already been cancelled.') else: params['text'] = _('This Subscription is already cancelled as the grant is not longer active.') return TemplateResponse(request, 'grants/shared/error.html', params) if request.method == 'POST' and ( profile == subscription.contributor_profile or request.user.has_perm('grants.change_subscription') ): subscription.end_approve_tx_id = request.POST.get('sub_end_approve_tx_id', '') subscription.cancel_tx_id = request.POST.get('sub_cancel_tx_id', '') subscription.active = False subscription.save() record_subscription_activity_helper('killed_grant_contribution', subscription, profile) value_usdt = subscription.get_converted_amount() if value_usdt: grant.monthly_amount_subscribed -= subscription.get_converted_monthly_amount() grant.save() support_cancellation(grant, subscription) messages.info( request, _('Your subscription has been canceled. We hope you continue to support other open source projects!') ) return redirect(reverse('grants:details', args=(grant.pk, grant.slug))) params = { 'active': 'cancel_grant', 'title': _('Cancel Grant Subscription'), 'card_desc': _('Provide sustainable funding for Open Source with Gitcoin Grants'), 'subscription': subscription, 'grant': grant, 'now': now, 'keywords': get_keywords(), 'recommend_gas_price': recommend_min_gas_price_to_confirm_in_time(4), 'recommend_gas_price_slow': recommend_min_gas_price_to_confirm_in_time(120), 'recommend_gas_price_avg': recommend_min_gas_price_to_confirm_in_time(15), 'recommend_gas_price_fast': recommend_min_gas_price_to_confirm_in_time(1), 'eth_usd_conv_rate': eth_usd_conv_rate(), 'conf_time_spread': conf_time_spread(), 'gas_advisories': gas_advisories(), } return TemplateResponse(request, 'grants/cancel.html', params)
def subscription_cancel(request, grant_id, grant_slug, subscription_id): """Handle the cancellation of a grant subscription.""" subscription = Subscription.objects.select_related('grant').get( pk=subscription_id) grant = getattr(subscription, 'grant', None) now = datetime.datetime.now() profile = request.user.profile if request.user.is_authenticated else None if not subscription.active: params = { 'active': 'grant_error', 'title': _('Grant Subscription Cancelled'), 'grant': grant } if grant.active: params['text'] = _( 'This Grant subscription has already been cancelled.') else: params['text'] = _( 'This Subscription is already cancelled as the grant is not longer active.' ) return TemplateResponse(request, 'grants/shared/error.html', params) if request.method == 'POST' and ( profile == subscription.contributor_profile or request.user.has_perm('grants.change_subscription')): subscription.active = False subscription.save() support_cancellation(grant, subscription) messages.info( request, _('Your subscription has been canceled. We hope you continue to support other open source projects!' )) return redirect(reverse('grants:details', args=(grant.pk, grant.slug))) params = { 'active': 'cancel_grant', 'title': _('Cancel Grant Subscription'), 'card_desc': _('Provide sustainable funding for Open Source with Gitcoin Grants'), 'subscription': subscription, 'grant': grant, 'now': now, 'keywords': get_keywords(), } return TemplateResponse(request, 'grants/cancel.html', params)