def downgrade_confirm(request): target_tier_name = request.POST.get('target_tier_name', None) # validate if target_tier_name in dict(tiers.CHOICES): target_tier_obj = tiers.Tier(target_tier_name) would_lose = tiers.user_warnings_for_downgrade(target_tier_name) data = {} data['tier_name'] = target_tier_name data['paypal_sandbox'] = getattr(settings, 'PAYPAL_TEST', False) data['can_modify'] = _generate_can_modify()[target_tier_name] data['paypal_url'] = get_paypal_form_submission_url() data['paypal_email'] = tiers.get_paypal_email_address() data['paypal_email_acct'] = tiers.get_paypal_email_address() data['target_tier_obj'] = target_tier_obj data['would_lose_admin_usernames'] = tiers.push_number_of_admins_down( target_tier_obj.admins_limit()) data['customtheme_nag'] = ('customtheme' in would_lose) data['advertising_nag'] = ('advertising' in would_lose) data['customdomain_nag'] = ('customdomain' in would_lose) data['css_nag'] = ('css' in would_lose) data['videos_nag'] = ('videos' in would_lose) data['videos_over_limit'] = tiers.hide_videos_above_limit( target_tier_obj) data['new_theme_name'] = tiers.switch_to_a_bundled_theme_if_necessary( target_tier_obj) data['payment_secret'] = SiteLocation.objects.get_current( ).tierinfo.get_payment_secret() return render_to_response('localtv/admin/downgrade_confirm.html', data, context_instance=RequestContext(request)) # In some weird error case, redirect back to tiers page return HttpResponseRedirect(reverse('localtv_admin_tier'))
def downgrade_confirm(request): target_tier_name = request.POST.get('target_tier_name', None) # validate if target_tier_name in dict(tiers.CHOICES): target_tier_obj = tiers.Tier(target_tier_name) would_lose = tiers.user_warnings_for_downgrade(target_tier_name) data = {} data['tier_name'] = target_tier_name data['paypal_sandbox'] = getattr(settings, 'PAYPAL_TEST', False) data['can_modify'] = _generate_can_modify()[target_tier_name] data['paypal_url'] = get_paypal_form_submission_url() data['paypal_email'] = tiers.get_paypal_email_address() data['paypal_email_acct'] = tiers.get_paypal_email_address() data['target_tier_obj'] = target_tier_obj data['would_lose_admin_usernames'] = tiers.push_number_of_admins_down(target_tier_obj.admins_limit()) data['customtheme_nag'] = ('customtheme' in would_lose) data['advertising_nag'] = ('advertising' in would_lose) data['customdomain_nag'] = ('customdomain' in would_lose) data['css_nag'] = ('css' in would_lose) data['videos_nag'] = ('videos' in would_lose) data['videos_over_limit'] = tiers.hide_videos_above_limit(target_tier_obj) data['new_theme_name'] = tiers.switch_to_a_bundled_theme_if_necessary(target_tier_obj) data['payment_secret'] = SiteLocation.objects.get_current().tierinfo.get_payment_secret() return render_to_response('localtv/admin/downgrade_confirm.html', data, context_instance=RequestContext(request)) # In some weird error case, redirect back to tiers page return HttpResponseRedirect(reverse('localtv_admin_tier'))
def handle_recurring_profile_modify(sender, **kwargs): ipn_obj = sender # If the thing is invalid, do not process any further. if ipn_obj.flag: return sitelocation = SiteLocation.objects.get_current() tier_info = TierInfo.objects.get_current() if (tier_info.current_paypal_profile_id != sender.subscr_id) and (tier_info.use_zendesk()): # then we had better notify staff indicating that the old one # should be cancelled. message_body = render_to_string( 'localtv/admin/tiers_emails/disable_old_recurring_payment.txt', { 'paypal_email_address': tiers.get_paypal_email_address(), 'profile_on_file': tier_info.current_paypal_profile_id, 'site_domain': sitelocation.site.domain, 'surprising_profile': ipn_obj.subscr_id }) zendesk.create_ticket("Eek, you should check on this MC site", message_body, use_configured_assignee=False) return # Okay, well at this point, we need to adjust the site tier to match. amount = float(ipn_obj.amount3) if sitelocation.get_tier().dollar_cost() == amount: pass else: # Find the right tier to move to try: target_tier_name = tiers.Tier.get_by_cost(amount) except ValueError: # then we had better notify staff indicating that the # amount is bizarre. if tier_info.use_zendesk(): message_body = render_to_string( 'localtv/admin/tiers_emails/confused_modify_wrong_amount.txt', { 'paypal_email_address': tiers.get_paypal_email_address(), 'profile_on_file': tier_info.current_paypal_profile_id, 'site_domain': sitelocation.site.domain, 'surprising_profile': ipn_obj.subscr_id }) zendesk.create_ticket("Eek, you should check on this MC site", message_body, use_configured_assignee=False) return _actually_switch_tier(target_tier_name)
def handle_recurring_profile_modify(sender, **kwargs): ipn_obj = sender # If the thing is invalid, do not process any further. if ipn_obj.flag: return sitelocation = SiteLocation.objects.get_current() tier_info = TierInfo.objects.get_current() if (tier_info.current_paypal_profile_id != sender.subscr_id) and (tier_info.use_zendesk()): # then we had better notify staff indicating that the old one # should be cancelled. message_body = render_to_string('localtv/admin/tiers_emails/disable_old_recurring_payment.txt', {'paypal_email_address': tiers.get_paypal_email_address(), 'profile_on_file': tier_info.current_paypal_profile_id, 'site_domain': sitelocation.site.domain, 'surprising_profile': ipn_obj.subscr_id}) zendesk.create_ticket("Eek, you should check on this MC site", message_body, use_configured_assignee=False) return # Okay, well at this point, we need to adjust the site tier to match. amount = float(ipn_obj.amount3) if sitelocation.get_tier().dollar_cost() == amount: pass else: # Find the right tier to move to try: target_tier_name = tiers.Tier.get_by_cost(amount) except ValueError: # then we had better notify staff indicating that the # amount is bizarre. if tier_info.use_zendesk(): message_body = render_to_string('localtv/admin/tiers_emails/confused_modify_wrong_amount.txt', {'paypal_email_address': tiers.get_paypal_email_address(), 'profile_on_file': tier_info.current_paypal_profile_id, 'site_domain': sitelocation.site.domain, 'surprising_profile': ipn_obj.subscr_id}) zendesk.create_ticket("Eek, you should check on this MC site", message_body, use_configured_assignee=False) return _actually_switch_tier(target_tier_name)
def upgrade(request): SWITCH_TO = 'Switch to this' UPGRADE = 'Upgrade Your Account' switch_messages = {} sitelocation = SiteLocation.objects.get_current() if sitelocation.tier_name in ('premium', 'max'): switch_messages['plus'] = SWITCH_TO else: switch_messages['plus'] = UPGRADE if sitelocation.tier_name == 'max': switch_messages['premium'] = SWITCH_TO else: switch_messages['premium'] = UPGRADE # Would you lose anything? would_lose = {} for tier_name in ['basic', 'plus', 'premium', 'max']: if tier_name == sitelocation.tier_name: would_lose[tier_name] = False else: would_lose[tier_name] = tiers.user_warnings_for_downgrade( tier_name) upgrade_extra_payments = {} for target_tier_name in ['basic', 'plus', 'premium', 'max']: if (sitelocation.tierinfo.in_free_trial or (tiers.Tier(target_tier_name).dollar_cost() <= sitelocation.get_tier().dollar_cost()) or not sitelocation.tierinfo.payment_due_date): upgrade_extra_payments[target_tier_name] = None continue upgrade_extra_payments[ target_tier_name] = generate_payment_amount_for_upgrade( sitelocation.tier_name, target_tier_name, sitelocation.tierinfo.payment_due_date) data = {} data['upgrade_extra_payments'] = upgrade_extra_payments data['can_modify_mapping'] = _generate_can_modify() data['site_location'] = sitelocation data['would_lose_for_tier'] = would_lose data['switch_messages'] = switch_messages data['payment_secret'] = sitelocation.tierinfo.get_payment_secret() data['offer_free_trial'] = sitelocation.tierinfo.free_trial_available data['skip_paypal'] = getattr(settings, 'LOCALTV_SKIP_PAYPAL', False) data['paypal_email_acct'] = tiers.get_paypal_email_address() data['tier_to_price'] = tiers.Tier.NAME_TO_COST() if not data['skip_paypal']: data['paypal_url'] = get_paypal_form_submission_url() return render_to_response('localtv/admin/upgrade.html', data, context_instance=RequestContext(request))
def upgrade(request): SWITCH_TO = 'Switch to this' UPGRADE = 'Upgrade Your Account' switch_messages = {} sitelocation = SiteLocation.objects.get_current() if sitelocation.tier_name in ('premium', 'max'): switch_messages['plus'] = SWITCH_TO else: switch_messages['plus'] = UPGRADE if sitelocation.tier_name == 'max': switch_messages['premium'] = SWITCH_TO else: switch_messages['premium'] = UPGRADE # Would you lose anything? would_lose = {} for tier_name in ['basic', 'plus', 'premium', 'max']: if tier_name == sitelocation.tier_name: would_lose[tier_name] = False else: would_lose[tier_name] = tiers.user_warnings_for_downgrade(tier_name) upgrade_extra_payments = {} for target_tier_name in ['basic', 'plus', 'premium', 'max']: if (sitelocation.tierinfo.in_free_trial or (tiers.Tier(target_tier_name).dollar_cost() <= sitelocation.get_tier().dollar_cost()) or not sitelocation.tierinfo.payment_due_date): upgrade_extra_payments[target_tier_name] = None continue upgrade_extra_payments[target_tier_name] = generate_payment_amount_for_upgrade( sitelocation.tier_name, target_tier_name, sitelocation.tierinfo.payment_due_date) data = {} data['upgrade_extra_payments'] = upgrade_extra_payments data['can_modify_mapping'] = _generate_can_modify() data['site_location'] = sitelocation data['would_lose_for_tier'] = would_lose data['switch_messages'] = switch_messages data['payment_secret'] = sitelocation.tierinfo.get_payment_secret() data['offer_free_trial'] = sitelocation.tierinfo.free_trial_available data['skip_paypal'] = getattr(settings, 'LOCALTV_SKIP_PAYPAL', False) data['paypal_email_acct'] = tiers.get_paypal_email_address() data['tier_to_price'] = tiers.Tier.NAME_TO_COST() if not data['skip_paypal']: data['paypal_url'] = get_paypal_form_submission_url() return render_to_response('localtv/admin/upgrade.html', data, context_instance=RequestContext(request))
def handle_recurring_profile_start(sender, **kwargs): ipn_obj = sender # If the thing is invalid, do not process any further. if ipn_obj.flag: return sitelocation = SiteLocation.objects.get_current() tier_info = TierInfo.objects.get_current() current_confirmed_tier_obj = sitelocation.get_fully_confirmed_tier() if current_confirmed_tier_obj: current_tier_obj = current_confirmed_tier_obj else: current_tier_obj = sitelocation.get_tier() if tier_info.current_paypal_profile_id: # then we had better notify staff that the old one should be # cancelled. message_body = render_to_string('localtv/admin/tiers_emails/disable_old_recurring_payment.txt', {'paypal_email_address': tiers.get_paypal_email_address(), 'old_profile': tier_info.current_paypal_profile_id, 'site_domain': sitelocation.site.domain, 'new_profile': ipn_obj.subscr_id}) if tier_info.use_zendesk(): zendesk.create_ticket("Eek, you should cancel a recurring payment profile", message_body, use_configured_assignee=True) expected_due_date = None # Okay. Now it's save to overwrite the subscription ID that is the current one. if tier_info.free_trial_available: tier_info.free_trial_available = False # Is this an upgrade that required an initial payment period? elif (tier_info.current_paypal_profile_id and float(ipn_obj.amount3) != current_tier_obj.dollar_cost() and ipn_obj.amount1 and float(ipn_obj.amount1)): # Validate the IPN: time period num, format = ipn_obj.period1.split(' ') num = int(num) if format.upper() != 'D': raise ValueError expected_due_date = ipn_obj.subscr_date + datetime.timedelta(days=num) if abs( (expected_due_date - tier_info.payment_due_date).days) > 2: raise ValueError, "There is something weird going on with the due date of the new subscription." # Validate the IPN: payment amount total_diff = float(ipn_obj.amount3) - current_tier_obj.dollar_cost() prorated_diff = (num / 30.0) * total_diff if int(ipn_obj.amount1) < int(prorated_diff): raise ValueError, "Monkey business." else: # Validate that there isn't a "trial" for no reason. if not tier_info.in_free_trial: # sanity-check that there is no period1 or period2 value paypal_event_contains_free_trial = ipn_obj.period1 or ipn_obj.period2 if paypal_event_contains_free_trial and tier_info.use_zendesk(): zendesk.create_ticket( "Eek, the user tried to create a free trial incorrectly", "Check on the state of the " + sitelocation.site.domain + "" " site", use_configured_assignee=False) return tier_info.current_paypal_profile_id = ipn_obj.subscr_id tier_info.user_has_successfully_performed_a_paypal_transaction = True if expected_due_date: tier_info.payment_due_date = expected_due_date else: tier_info.payment_due_date = datetime.timedelta(days=30) + ipn_obj.subscr_date tier_info.save() # If we get the IPN, and we have not yet adjusted the tier name # to be at that level, now is a *good* time to do so. amount = float(ipn_obj.amount3) if current_tier_obj.dollar_cost() == amount: pass else: # Find the right tier to move to target_tier_name = tiers.Tier.get_by_cost(amount) _actually_switch_tier(target_tier_name)
def handle_recurring_profile_start(sender, **kwargs): ipn_obj = sender # If the thing is invalid, do not process any further. if ipn_obj.flag: return sitelocation = SiteLocation.objects.get_current() tier_info = TierInfo.objects.get_current() current_confirmed_tier_obj = sitelocation.get_fully_confirmed_tier() if current_confirmed_tier_obj: current_tier_obj = current_confirmed_tier_obj else: current_tier_obj = sitelocation.get_tier() if tier_info.current_paypal_profile_id: # then we had better notify staff that the old one should be # cancelled. message_body = render_to_string( 'localtv/admin/tiers_emails/disable_old_recurring_payment.txt', { 'paypal_email_address': tiers.get_paypal_email_address(), 'old_profile': tier_info.current_paypal_profile_id, 'site_domain': sitelocation.site.domain, 'new_profile': ipn_obj.subscr_id }) if tier_info.use_zendesk(): zendesk.create_ticket( "Eek, you should cancel a recurring payment profile", message_body, use_configured_assignee=True) expected_due_date = None # Okay. Now it's save to overwrite the subscription ID that is the current one. if tier_info.free_trial_available: tier_info.free_trial_available = False # Is this an upgrade that required an initial payment period? elif (tier_info.current_paypal_profile_id and float(ipn_obj.amount3) != current_tier_obj.dollar_cost() and ipn_obj.amount1 and float(ipn_obj.amount1)): # Validate the IPN: time period num, format = ipn_obj.period1.split(' ') num = int(num) if format.upper() != 'D': raise ValueError expected_due_date = ipn_obj.subscr_date + datetime.timedelta(days=num) if abs((expected_due_date - tier_info.payment_due_date).days) > 2: raise ValueError, "There is something weird going on with the due date of the new subscription." # Validate the IPN: payment amount total_diff = float(ipn_obj.amount3) - current_tier_obj.dollar_cost() prorated_diff = (num / 30.0) * total_diff if int(ipn_obj.amount1) < int(prorated_diff): raise ValueError, "Monkey business." else: # Validate that there isn't a "trial" for no reason. if not tier_info.in_free_trial: # sanity-check that there is no period1 or period2 value paypal_event_contains_free_trial = ipn_obj.period1 or ipn_obj.period2 if paypal_event_contains_free_trial and tier_info.use_zendesk(): zendesk.create_ticket( "Eek, the user tried to create a free trial incorrectly", "Check on the state of the " + sitelocation.site.domain + "" " site", use_configured_assignee=False) return tier_info.current_paypal_profile_id = ipn_obj.subscr_id tier_info.user_has_successfully_performed_a_paypal_transaction = True if expected_due_date: tier_info.payment_due_date = expected_due_date else: tier_info.payment_due_date = datetime.timedelta( days=30) + ipn_obj.subscr_date tier_info.save() # If we get the IPN, and we have not yet adjusted the tier name # to be at that level, now is a *good* time to do so. amount = float(ipn_obj.amount3) if current_tier_obj.dollar_cost() == amount: pass else: # Find the right tier to move to target_tier_name = tiers.Tier.get_by_cost(amount) _actually_switch_tier(target_tier_name)