def mutate_and_get_payload(cls, root, info, **input): menu_id = decode_id(input.pop('id')) menu = MenuModel.objects.get(pk=menu_id) for key, value in input.items(): if key == 'menu_parent': value = None if value == "" else MenuModel.objects.get( pk=decode_id(value)) setattr(menu, key, value) menu.save() return UpdateMenuInfo(menu=menu)
def change_subscription_plan(request, sub_id): real_id = decode_id(sub_id)[0] user = request.user subscription = user.subscriptions.get(id=real_id) if request.method == "POST": form = SubscriptionPlanForm(request.POST) if form.is_valid(): plan = Plan.objects.get(id=form.cleaned_data['plan']) stripe_sub = subscription.get_stripe_subscription() if not stripe_sub: messages.error(request, "You cannot update a non-billing plan.") return redirect(reverse('subscriptions')) item_id = stripe_sub['items']['data'][0].id stripe.Subscription.modify( stripe_sub.id, items=[{ "id": item_id, "plan": plan.stripe_id }] ) subscription.plan = plan subscription.save() messages.success(request, "Your plan has been updated to {}.".format(plan.name)) return redirect(reverse('subscriptions')) else: form = SubscriptionPlanForm() return render( request, "core/subscription_plan.html", {"subscription": subscription, "form": form} )
def mutate_and_get_payload(cls, root, info, **input): if 'menu_parent' in input: input['menu_parent'] = MenuModel.objects.get( pk=decode_id(input['menu_parent'])) menu = MenuModel.objects.create(**input) return CreateMenu(menu=menu)
def cancel_subscription(request, sub_id): real_id = decode_id(sub_id)[0] user = request.user subscription = user.subscriptions.get(id=real_id) if request.method == "POST": #cancel the subscription stripe_sub = subscription.get_stripe_subscription() print(stripe_sub) #delete the stripe sub stripe_sub.delete(at_period_end=True) #delete the sub in our database subscription.cancelled = True subscription.save() cancel_message = """ We’re sorry to see you go! If you have feedback for our team that could help us improve this service (and keep you enrolled!), please don’t hesitate to contact us at [email protected]. We always read our customer emails and will respond to your concerns! """ messages.success(request, cancel_message) return redirect(reverse('subscriptions')) return render(request, "core/cancel_subscription.html", { "subscription": subscription, })
def renew_corporate(request, sub_id): real_id = decode_id(sub_id)[0] user = request.user subscription = user.subscriptions.get(id=real_id) if request.method == "POST": try: code = CorporateCode.objects.get(code=request.POST['code']) if request.user.subscriptions.filter( corporate_code=code).count() == 0: subscription.corporate_code = code subscription.cancelled = False subscription.save() stripeSub = stripe.Subscription.retrieve( subscription.stripe_id) stripeSub.coupon = code.code stripeSub.cancel_at_period_end = False stripeSub.save() messages.add_message( request, messages.INFO, "Successfully renewed corporate subscription!") return redirect('/subscriptions/') else: messages.error( request, "You have already used that corporate access code.") except CorporateCode.DoesNotExist: messages.error(request, "That is not a valid corporate access code.") return render(request, "core/renew_corporate.html")
def mutate_and_get_payload(cls, root, info, **input): user_id = decode_id(input.pop('id')) updated_user = UserModel.objects.get(pk=user_id) for key, value in input.items(): setattr(updated_user, key, value) updated_user.save() return UpdateUserInfo(payload=updated_user)
def mutate_and_get_payload(cls, root, info, **input): try: uid = decode_id(input.get('id')) user = UserModel.objects.get(pk=uid) except (TypeError, ValueError, OverflowError, UserModel.DoesNotExist): raise Exception('无效的用户id') user.set_password(input.pop('password')) user.save() return ResetUserPassword(payload=user)
def add_credit_card(request, sub_id): real_id = decode_id(sub_id)[0] user = request.user subscription = user.subscriptions.get(id=real_id) if request.method == "POST": token = request.POST['token'] if token: plan = subscription.plan if not user.stripe_id: user.create_stripe_customer() sub_kwargs = { "customer": user.stripe_id, "source": token, "items": [{ "plan": plan.stripe_id }], "trial_end": int(subscription.one_year_from_start().timestamp()), } try: stripe_subscription = stripe.Subscription.create(**sub_kwargs) subscription.update_from_stripe_sub(stripe_subscription) messages.success( request, "Your credit card was added to your subscription successfully." ) return redirect(reverse('subscriptions')) except stripe.error.CardError as ex: error = ex.json_body.get('error') messages.error( request, "We had a problem processing your card. {}".format( error['message'])) rollbar.report_exc_info(sys.exc_info(), request) except Exception as ex: if settings.DEBUG: raise ex messages.error(request, ( "We had a problem on our end processing your order. " "You have not been charged. Our administrators have been notified." )) rollbar.report_exc_info(sys.exc_info(), request) plan = { 'stripe_id': subscription.plan.stripe_id, 'amount': subscription.plan.amount, 'display_price': subscription.plan.display_price(), 'name': subscription.plan.name, } return render( request, "core/add_credit_card.html", { "subscription": subscription, "plan": plan, "plan_json": json.dumps(plan, cls=DjangoJSONEncoder), "email": request.user.email, "stripe_key": settings.STRIPE_PUBLISHABLE_KEY, "rebill_date": subscription.one_year_from_start().date(), })
def mutate_and_get_payload(cls, root, info, **input): menu = MenuModel.objects.get(pk=decode_id(input.get('id'))) menu.delete() return DeleteMenu(menu=menu)
def qs(self): menu_parent = self.data.get('menu_parent', None) if menu_parent and not is_number(menu_parent): self.data['menu_parent'] = decode_id(menu_parent) return super().qs
def get_from_hashed_id(cls, hashed_id): real_id = decode_id(hashed_id)[0] return cls.objects.get(id=real_id)