Ejemplo n.º 1
0
def guestLoginView(request):
    form = GuestForm(request.POST or None)
    context = {
        'form': form,
    }
    content_type = None
    next_ = request.GET.get('next')
    next_post = request.POST.get('next')
    redirect_path = next_ or next_post or None
    if form.is_valid():
        username = form.cleaned_data.get('username')
        password = form.cleaned_data.get('password')
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            if is_safe_url(redirect_path, request.get_host()):
                return redirect(redirect_path)
            else:
                return redirect('/')
        else:
            pass
    return render(request, 'accounts/login.html', context, content_type)
Ejemplo n.º 2
0
def checkout_home(request):
    cart_obj, cart_created = Cart.objects.new_or_get(request)
    order_obj = None
    if cart_created or cart_obj.products.count() == 0:
        return redirect("carts:home")

    login_form = LoginForm(request=request)
    guest_form = GuestForm(request=request)
    address_form = AddressForm()
    billing_address_id = request.session.get("billing_address_id", None)
    shipping_address_id = request.session.get("shipping_address_id", None)
    shipping_address_required = not cart_obj.is_digital
    billing_profile, billing_profile_created = BillingProfile.objects.new_or_get(
        request)
    address_qs = None
    has_card = None
    if billing_profile is not None:
        if request.user.is_authenticated:
            address_qs = Address.objects.filter(
                billing_profile=billing_profile)
        order_obj, order_obj_created = Order.objects.new_or_get(
            billing_profile, cart_obj)
        if shipping_address_id:
            order_obj.shipping_address = Address.objects.get(
                id=shipping_address_id)
            del request.session["shipping_address_id"]

        if billing_address_id:
            order_obj.billing_address = Address.objects.get(
                id=billing_address_id)
            del request.session["billing_address_id"]

        if billing_address_id or shipping_address_id:
            order_obj.save()

        has_card = billing_profile.has_card

    if request.method == "POST":
        print("Check that order is done")
        is_prepared = order_obj.check_done()
        if is_prepared:
            did_charge, charge_msg = billing_profile.charge(order_obj)
            order_obj.mark_paid()
            if did_charge:

                to_email = [
                    "*****@*****.**",
                ]
                if request.user.is_authenticated:

                    to_email.append(request.user.email)

                elif guest_form.is_valid():
                    guest_address_data = guest_form.cleaned_data
                    guest_address_email = guest_address_data.get("email")

                    to_email.append(guest_address_email)

                from_email = settings.EMAIL_HOST_USER

                context_dict = {"models_instance": order_obj}
                context_dict["billing_profile"] = billing_profile
                order_pdf = render_to_pdf("carts/order_pdf.html", context_dict)
                format_filename = """{jour}_{mois}_{annee}_{heure}_{minute}_{seconde}""".format(
                    seconde=strftime("%S"),
                    minute=strftime("%M"),
                    heure=strftime("%H"),
                    mois=strftime("%m"),
                    annee=strftime("%Y"),
                    jour=strftime("%d"))
                order_obj.order_pdf.save(format_filename,
                                         BytesIO(order_pdf.content))

                subject = """SyliMarket, M ou Mme voici votre reçu de payement que vous venez d'effectuer chez nous"""

                with open(
                        settings.BASE_DIR +
                        "/carts/templates/carts/order_email_message.txt") as f:
                    order_email_message = f.read()

                order_email_pdf = EmailMessage(
                    subject=subject,
                    body=order_email_message,
                    from_email=from_email,
                    to=to_email,
                )

                instance_attach = MIMEBase('application', "octet-stream")
                instance_attach.set_payload(order_obj.order_pdf.read())

                encoders.encode_base64(instance_attach)
                instance_attach.add_header(
                    "Content-Disposition",
                    "attachment",
                    filename="SM_{format_filename}.pdf".format(
                        format_filename=format_filename))
                order_email_pdf.attach(instance_attach)

                order_email_pdf.send()

                request.session["cart_items"] = 0
                del request.session["cart_id"]
                if not billing_profile.user:
                    billing_profile.set_cards_inactive()
                return redirect("carts:success")

            else:
                print(charge_msg)
                return redirect("carts:checkout")

    context = {
        "object": order_obj,
        "billing_profile": billing_profile,
        "login_form": login_form,
        "guest_form": guest_form,
        "address_form": address_form,
        "address_qs": address_qs,
        "has_card": has_card,
        "publish_key": STRIPE_PUB_KEY,
        "shipping_address_required": shipping_address_required,
    }
    return render(request, "carts/checkout.html", context)
Ejemplo n.º 3
0
 def test_form_valid(self):
     data = {'email': '*****@*****.**', 'subscribe': False}
     form = GuestForm(data=data)
     self.assertTrue(form.is_valid())
Ejemplo n.º 4
0
def checkout_home(request):
    cart_obj, cart_created = Cart.objects.new_or_get(request)
    if cart_created or cart_obj.products.count() == 0:
        return redirect('carts:home')
    else:
        order_obj = Order.objects.filter(cart=cart_obj)
        if order_obj.count() == 0:
            order_obj = Order(cart=cart_obj)
            order_obj.save()
        else:
            order_obj = order_obj.first()
    user = request.user

    if user.is_authenticated:
        billing_profile = user.billing_profile
        order_obj.billing = billing_profile
        order_obj.save()
    elif 'billing_profile' in request.session.keys():
        if list(request.session.values()):
            billing_profile = BillingProfile.objects.get(
                pk=list(request.session.values())[2])
            order_obj.billing = billing_profile
            order_obj.save()
        else:
            billing_profile = None
    else:
        guest_form = GuestForm(request.POST)
        billing_profile = None
        if guest_form.is_valid():
            email = guest_form.cleaned_data['email']
            billing_profile = BillingProfile(email=email)
            billing_profile.save()

            request.session['billing_profile'] = billing_profile.id
            order_obj.billing = billing_profile
            order_obj.save()

    if billing_profile:
        if billing_profile.address:
            address = billing_profile.address
        else:
            address_form = AddressForm(request.POST)
            if address_form.is_valid():
                address = address_form.save()
                billing_profile.address = address
                billing_profile.save()
            else:
                address = None
    else:
        address = None

    if request.method == 'POST':
        if 'success' in request.POST:
            order_obj.status = 'paid'
            order_obj.save()
            return redirect('carts:success')

    form = LoginForm()
    guest_form = GuestForm()
    address_form = AddressForm()

    context = {
        "order": order_obj,
        "billing_profile": billing_profile,
        'form': form,
        'guest_form': guest_form,
        'address_form': address_form,
        'address': address
    }
    return render(request, 'carts/checkout.html', context)