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)
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)
def test_form_valid(self): data = {'email': '*****@*****.**', 'subscribe': False} form = GuestForm(data=data) self.assertTrue(form.is_valid())
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)