Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
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}
    )
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
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,
    })
Exemplo n.º 5
0
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")
Exemplo n.º 6
0
    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)
Exemplo n.º 7
0
    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)
Exemplo n.º 8
0
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(),
        })
Exemplo n.º 9
0
 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)
Exemplo n.º 10
0
 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
Exemplo n.º 11
0
 def get_from_hashed_id(cls, hashed_id):
     real_id = decode_id(hashed_id)[0]
     return cls.objects.get(id=real_id)