示例#1
0
 def period_boundary_test(self, period_start, period_end):
     # For a given period start, test the period_end is equal to the given period_end
     s = Subscription(location=self.location,
                      user=self.user1,
                      start_date=period_start)
     ps, pe = s.get_period(target_date=period_start)
     self.assertEquals(pe, period_end)
	def test_is_period_boundary(self):
		s = Subscription(location=self.location, user=self.user1, start_date=date(2016,1,1), end_date=date(2016,5,31))
		
		self.assertFalse(s.is_period_boundary(target_date=date(2016, 2, 15)))
		self.assertFalse(s.is_period_boundary(target_date=date(2016, 2, 29)))
		self.assertFalse(s.is_period_boundary(target_date=date(2016, 3, 15)))
		self.assertFalse(s.is_period_boundary(target_date=date(2016, 3, 31)))
示例#3
0
def home():
    if current_user.is_authenticated:
        return redirect(url_for("users.account_home"))

    form = SubscriptionForm()

    if form.validate_on_submit():
        sub = Subscription(email=form.email.data)
        db.session.add(sub)
        db.session.commit()

        flash("Your email has been successfully registered!", "success")

    return render_template("homepage.html", form=form)
示例#4
0
def create_subscription(contact, subscription_type='N', payment_type='C'):
    # subscription_type is ('P', 'R', 'N', 'F')
    # F is Free
    subscription = Subscription(contact=contact)
    subscription.type = subscription_type
    subscription.payment_type = payment_type
    subscription.save()

    return Subscription.objects.get(pk=subscription.id)
示例#5
0
def subscriptionsubmit(request):
    uid = request.user.id
    appuser = AppUser.objects.get(user_id=uid)    
    post_data = request.POST

    if appuser.subscription is None:
        print("not subsribed yet")
        subscription = Subscription(
            first_name = post_data['first_name'],
            last_name = post_data['last_name'],
            phone = post_data['phone'],
            email = post_data['email'],
            address = post_data['address'],
            subscription_type = post_data['subscription_type'],
            charge = post_data['subscription_type'],
        )

        subscription.save()
        appuser.subscription = subscription
        appuser.subscription_type = post_data['subscription_type']
        appuser.save()
        return redirect("profile")
    else:
        print(post_data)
        print("subscript exists")
        appuser.subscription.first_name = post_data['first_name'],
        appuser.subscription.last_name = post_data['last_name'],
        appuser.subscription.phone = post_data['phone'],
        appuser.subscription.email = post_data['email'],
        appuser.subscription.address = post_data['address'],
        appuser.subscription.subscription_type = post_data['subscription_type'],
        appuser.subscription.charge = post_data['subscription_type'],
        appuser.subscription.save()
        appuser.subscription_type = post_data['subscription_type']
        appuser.save()

        return redirect("profile")
示例#6
0
def add_subscription(request):
    if request.method == "POST":
        form = NewSubscriptionForm(request.POST)
        if form.is_valid():
            # if customer does not have a stripe_id
            #    create a customer from token
            # if customer does have a stripe_id
            #    update source with token?
            # create a subscription with customer, plan, and token
            # on failure, let customer know

            plan_stripe_id = form.cleaned_data['plan']
            token = form.cleaned_data['token']

            plan = Plan.objects.get(stripe_id=plan_stripe_id)
            # TODO handle no plan
            user = request.user

            if not user.stripe_id:
                user.create_stripe_customer(form.cleaned_data['token'])

            try:
                stripe_subscription = stripe.Subscription.create(
                    customer=user.stripe_id, source=token, items=[{
                        "plan": plan_stripe_id
                    }]
                )
                subscription = Subscription.create_from_stripe_sub(
                    user=user,
                    plan=plan,
                    stripe_subscription=stripe_subscription,
                )
                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'])
                )
    else:
        form = NewSubscriptionForm()

    return render(
        request, "core/add_subscription.html", {
            "form": form,
            "plans": Plan.objects.available().as_dicts(),
            "email": request.user.email,
            "stripe_key": settings.STRIPE_PUBLISHABLE_KEY
        }
    )
示例#7
0
def subscription_toggle(request, sub_type, sub_id):

    if sub_type not in ['party', 'committee', 'person', 'category']:
        raise Http404

    lookup = {
        'user': request.user,
        '%s_id' % sub_type: sub_id,
    }

    subscribed = None

    try:
        Subscription.objects.get(**lookup).delete()
        subscribed = False

    except Subscription.DoesNotExist:
        Subscription(**lookup).save()
        subscribed = True

    ctx = {
        'subscribed': subscribed,
    }
    return ctx
示例#8
0
	def period_boundary_test(self, period_start, period_end):
		# For a given period start, test the period_end is equal to the given period_end
		s = Subscription(location=self.location, user=self.user1, start_date=period_start)
		ps, pe = s.get_period(target_date=period_start)
		self.assertEquals(pe, period_end)
示例#9
0
def add_subscription(request, *args, **kwargs):
    corporate_code = None
    if 'code' in kwargs:
        corporate_code = get_object_or_404(CorporateCode, code=kwargs['code'])

    if request.method == "POST":
        form = NewSubscriptionForm(request.POST)
        if form.is_valid():
            # if customer does not have a stripe_id
            #    create a customer from token
            # if customer does have a stripe_id
            #    update source with token?
            # create a subscription with customer, plan, and token
            # on failure, let customer know

            plan_stripe_id = form.cleaned_data['plan']
            token = form.cleaned_data['token']

            plan = Plan.objects.get(stripe_id=plan_stripe_id)
            # TODO handle no plan
            user = request.user

            if not user.stripe_id:
                user.create_stripe_customer()

            sub_kwargs = {
                "customer": user.stripe_id,
                "source": token,
                "items": [{
                    "plan": plan_stripe_id
                }]
            }

            if corporate_code:
                sub_kwargs['coupon'] = corporate_code.code

            try:
                stripe_subscription = stripe.Subscription.create(**sub_kwargs)
                subscription = Subscription.create_from_stripe_sub(
                    user=user,
                    plan=plan,
                    stripe_subscription=stripe_subscription,
                    corporate_code=corporate_code)
                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:
                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)

    plans = [{
        'stripe_id': plan.stripe_id,
        'amount': plan.amount,
        'display_price': plan.display_price(corporate_code),
        'name': plan.name,
    } for plan in Plan.objects.available()]

    plandict = {plan['stripe_id']: plan for plan in plans}

    return render(
        request, "core/add_subscription.html", {
            "form": NewSubscriptionForm(),
            "corporate_code": corporate_code,
            "plans": plans,
            "plandict_json": json.dumps(plandict, cls=DjangoJSONEncoder),
            "email": request.user.email,
            "stripe_key": settings.STRIPE_PUBLISHABLE_KEY
        })
示例#10
0
def worker_subscription_form(request,
                             template_name='worker/subscription.html'):
    u"""
    Worker subscription.

    View para entrada de informações detalhadas e upload de documentos do
    trabalhador
    """
    if request.user.account_state == Account_States.approved:
        return redirect('core:settings')

    form = WorkerSubscriptionForm(request.POST or None, request.FILES)
    formPhone = PhoneForm(request.POST or None)

    if form.is_valid():
        # Now we have all necessary data, let's create the subscription
        user = request.user
        user.account_state = Account_States.waiting

        documents = UserDocuments()
        documents.person_id = zip_image(request.FILES['id_doc'])
        documents.residence_proof = zip_image(request.FILES['address_proof'])
        documents.cpf = zip_image(request.FILES['cpf_doc'])

        documents.save()

        user.documents = documents

        #for skill in form.cleaned_data['skills']:
        #    user.skills.add(skill)

        #user.phone_number = form.cleaned_data['phone']
        phone = formPhone.save(commit=False)
        phone.indico_user = request.user
        phone.number = request.POST['number']
        phone.save()
        user.categories.add(form.cleaned_data['category'])
        user.resume = form.cleaned_data['resume']
        user.is_terms_accepted = form.cleaned_data['accept_tc']
        user.is_application_form_filled = True
        user.account_type = 2
        user.save()

        subscription = Subscription(candidate=user)
        subscription.save()

        subject = get_new_subscription_title(user)
        message = get_new_subscription_body(user, subscription)

        # Send mail to admins
        mail_admins(subject, message, fail_silently=True)

        # Send mail to worker
        send_mail("Peça recomendações",
                  alert_subscription_message(request, user),
                  '*****@*****.**', [user.email],
                  fail_silently=True)

        messages.add_message(
            request, messages.INFO,
            "Seu perfil foi enviado com sucesso, em breve um de nossos representantes estará avaliando o seu processo."
        )
        return redirect('worker:home')

    return render(request, template_name, {
        'formPhone': formPhone,
        'form': form
    })
示例#11
0
def add_subscription(request, code=False, *args, **kwargs):
    user = request.user
    if not user.stripe_id:
        user.create_stripe_customer()
    corporate_code = None
    coupon_code = None
    if code:
        try:
            coupon_code = CouponCode.objects.get(code=code)
            if coupon_code.redeem_by < datetime.now().date():
                messages.error(request, "That coupon has expired")
                return redirect('/subscriptions/new/')
        except CouponCode.DoesNotExist:
            coupon_code = None
        try:
            corporate_code = CorporateCode.objects.get(code=code)
            if corporate_code.redeem_by < datetime.now().date():
                messages.error(request, "That corporate code has expired")
                return redirect('/subscriptions/new/')
        except CorporateCode.DoesNotExist:
            corporate_code = None
    if 'code' in kwargs and 'coupon_type' in kwargs:
        if kwargs['coupon_type'] == 'corporate':
            corporate_code = get_object_or_404(CorporateCode,
                                               code=kwargs['code'])
        else:
            coupon_code = get_object_or_404(CouponCode, code=kwargs['code'])

    if request.method == "POST":

        if 'couponCode' in request.POST:
            try:
                coupon = CouponCode.objects.get(code=request.POST['code'])
                #fail if the users email is not allowed by the coupon
                if coupon.emails and request.user.email not in coupon.emails:
                    raise Exception
                #fail if none of the coupons plans are available
                if coupon.plans.count() > 0 and not any(
                    [p.available for p in coupon.plans.all()]):
                    raise Exception
                #fail if there is a subscription with this coupon already attached
                #to the user
                if request.user.subscriptions.filter(
                        coupon_code=coupon).count() == 0:
                    redirURL = "/subscriptions/new/{}/".format(coupon.code)
                    return redirect(redirURL)
                else:
                    messages.error(request,
                                   "You have already used that coupon.")
            except CouponCode.DoesNotExist:
                messages.error(request, "That is not a valid coupon.")
            except Exception as ex:
                messages.error(request, "Error: That is not a valid coupon.")
                rollbar.report_exc_info(sys.exc_info(), request)

        else:
            form = NewSubscriptionForm(request.POST)
            if form.is_valid():

                plan_stripe_id = form.cleaned_data['plan']
                token = form.cleaned_data['token']

                plan = Plan.objects.get(stripe_id=plan_stripe_id)
                # TODO handle no plan
                user = request.user

                if not user.stripe_id:
                    user.create_stripe_customer()

                sub_kwargs = {
                    "customer": user.stripe_id,
                    "source": token,
                    "items": [{
                        "plan": plan_stripe_id
                    }]
                }

                if corporate_code:
                    sub_kwargs['coupon'] = corporate_code.code
                elif coupon_code:
                    sub_kwargs['coupon'] = coupon_code.code

                try:
                    if corporate_code:
                        sub_kwargs['billing'] = 'send_invoice'
                        sub_kwargs['days_until_due'] = 30
                    # sub_kwargs
                    # {'customer': 'cus_Ck3yEqbljkn0Zp', 'source': 'tok_1CszGPDR4unvi416aLuq8bR5', 'items': [{'plan': '4-boxesC9MB77'}]}
                    stripe_subscription = stripe.Subscription.create(
                        **sub_kwargs)
                    subscription = Subscription.create_from_stripe_sub(
                        user=user,
                        plan=plan,
                        stripe_subscription=stripe_subscription,
                        corporate_code=corporate_code,
                        coupon_code=coupon_code)
                    #'cancel' the subscription, so that the corporate plans do not auto renew
                    # if corporate_code:
                    #     stripe_sub = subscription.get_stripe_subscription()
                    #     stripe_sub.delete(at_period_end = True)
                    #     subscription.cancelled = True
                    #     subscription.save()
                    return redirect('/subscriptions/')
                except stripe.error.CardError as ex:
                    print(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:
                    print(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)

    available_plans = Plan.objects.available().order_by('name')
    if coupon_code and coupon_code.plans.count() > 0:
        available_plans = coupon_code.plans.all()

    plans = [{
        'stripe_id':
        plan.stripe_id,
        'amount':
        plan.amount,
        'display_price':
        plan.display_price(corporate_code=corporate_code,
                           coupon_code=coupon_code),
        'name':
        plan.name,
    } for plan in available_plans]

    plandict = {plan['stripe_id']: plan for plan in plans}

    return render(
        request, "core/add_subscription.html", {
            "form": NewSubscriptionForm(),
            "corporate_code": corporate_code,
            "coupon_code": coupon_code,
            "plans": plans,
            "plandict_json": json.dumps(plandict, cls=DjangoJSONEncoder),
            "email": request.user.email,
            "stripe_key": settings.STRIPE_PUBLISHABLE_KEY
        })