def profile(request): next_lang = strip_language(request.path) if not request.user.is_authenticated and not request.user.is_active: return redirect('accounts:login') return render(request, 'accounts/accounts_profile.html', {'next': next_lang})
def all_produit(request, category_slug=None): next_lang = strip_language(request.path) categorie = None categories = Categorie.objects.filter() produits = Produit.objects.filter( disponible=True).prefetch_related('categorie') pub = Pub.objects.all().prefetch_related('categorie') form = EmailSubscribeForm() if category_slug: categorie = get_object_or_404(Categorie, slug=category_slug) produits = produits.filter(categorie=categorie) context = { 'categories': categories, 'produits': produits, 'form': form, 'pub': pub, 'next': next_lang } template = 'shop/produit/shop_listing.html' return render(request, template, context)
def payment_done(request): next_lang = strip_language(request.path) page_title_succes = _('payement succes') context = {'next': next_lang, 'page_title': page_title_succes} template = 'payment/payment_done.html' return render(request, template, context)
def payment_canceled(request): next_lang = strip_language(request.path) page_title_error = _('payement error') context = {'next': next_lang, 'page_title': page_title_error} template = 'payment/payment_cancel.html' return render(request, template, context)
def all_marques(request): next_lang = strip_language(request.path) page_title = 'marques' marques = Marque.objects.filter() produits = Produit.objects.filter( disponible=True).prefetch_related('marque') context = { 'marques': marques, 'produits': produits, 'page_title': page_title, 'next': next_lang } template = 'shop/produit/shop_category_product.html' return render(request, template, context)
def liste_marques(request, marque_slug=None): next_lang = strip_language(request.path) marque = None marques = Marque.objects.filter() produits = Produit.objects.filter( disponible=True).prefetch_related('marque') if marque_slug: marque = get_object_or_404(Marque, slug=marque_slug) produits = produits.filter(marque=marque) page_title = marque.name context = { 'marques': marques, 'produits': produits, 'page_title': page_title, 'next': next_lang } template = 'shop/produit/shop_category_product.html' return render(request, template, context)
def creer_commande(request): next_lang = strip_language(request.path) panier = Panier(request) page_title = 'finish your order' if request.method == 'POST': formulaire = FormCreationCommande(request.POST) if formulaire.is_valid(): commande = formulaire.save(commit=False) if panier.coupon: commande.coupon = panier.coupon commande.discount = panier.coupon.discount commande.save() for item in panier: ItemCommande.objects.create(commande=commande, produit=item['produit'], prix=item['prix'], quantite=item['quantite']) # effacer les elements du panier panier.clear_session() # On demarre la tache task_commande.delay(commande.id) # on fixe l'ordre dans la session request.session['id_commande'] = commande.id # et redirige vers l'espace de paiment return redirect(reverse("payment:process")) else: formulaire = FormCreationCommande() context = { 'page_title': page_title, 'panier': panier, 'formulaire': formulaire, 'next': next_lang } template = 'commandes/commande/commandes_create.html' return render(request, template, context)
def login_request(request): next_lang = strip_language(request.path) if request.method == 'POST': form = AuthenticationForm(request, request.POST) if form.is_valid(): username = form.cleaned_data.get('username') password = form.cleaned_data.get('password') user = authenticate(request, email=username, password=password) if user is not None and user.is_active: login(request, user) messages.success(request, f"You are now logged in as { user.pseudo }") # redirect to profile compte: return redirect('accounts:profile') else: form = AuthenticationForm() context = {'form': form, 'next_lang': next_lang} template = 'accounts/accounts_login.html' return render(request, template, context)
def liste_categorie(request, category_slug=None): next_lang = strip_language(request.path) categorie = None categories = Categorie.objects.all() produits = Produit.objects.filter( disponible=True).prefetch_related('categorie') if category_slug: categorie = get_object_or_404(Categorie, slug=category_slug) produits = produits.filter(categorie=categorie) page_title = categorie.name meta_keywords = categorie.meta_keywords meta_description = categorie.meta_description context = { 'produits': produits, 'page_title': page_title, 'meta_keywords': meta_keywords, 'meta_description': meta_description, 'next': next_lang } template = 'shop/produit/shop_category_product.html' return render(request, template, context)
def register_request(request): next_lang = strip_language(request.path) if request.method == 'POST': form = RegisterForm(request.POST) if form.is_valid(): user = form.save() raw_password = form.cleaned_data.get('password1') user = authenticate(request, email=user.email, password=raw_password) if user.is_active: messages.success(request, f"New account created: { user.pseudo }") login(request, user) # redirect to profile compte: return redirect('accounts:profile') else: form = RegisterForm() context = {'form': form, 'next': next_lang} template = 'accounts/accounts_register.html' return render(request, template, context)
def detail_produit(request, id, slug): next_lang = strip_language(request.path) produit = get_object_or_404(Produit, id=id, slug=slug, disponible=True) categories = produit.categorie.all() page_title = produit.name meta_keywords = produit.meta_keywords meta_description = produit.meta_description # Similar products product_cat_ids = produit.categorie.values_list('id') similar_products = Produit.objects.filter( categorie__in=product_cat_ids).exclude(id=produit.id).annotate( Count("categorie", distinct=True)).prefetch_related('categorie').order_by()[:6] # form = ReviewAdminForm() formulaire_panier_produit = AjouterProduitPanierForm(auto_id='id_%s') # r = Recommender() # recommended_produits = r.suggest_produits_for([produit], 4) template = 'shop/produit/shop_detail.html' context = { 'produit': produit, 'categories': categories, 'formulaire_panier_produit': formulaire_panier_produit, 'form': form, 'similar_products': similar_products, 'page_title': page_title, 'meta_keywords': meta_keywords, 'meta_description': meta_description, 'next': next_lang } return render(request, template, context)
def search(request): next_lang = strip_language(request.path) categories = Categorie.objects.all() produits = Produit.objects.filter(disponible=True) try: q = request.GET.get('q') except: q = None if q: produits = produits.filter( Q(name__icontains=q) | Q(meta_keywords__icontains=q)).distinct() else: return redirect('shop:search') context = { 'query': q, 'produits': produits, 'categories': categories, 'next': next_lang } template = 'shop/produit/shop_category_product.html' return render(request, template, context)
def detail_panier(request): panier = Panier(request) next_lang = strip_language(request.path) if not request.user.is_authenticated: return redirect('accounts:login') for item in panier: item['form_update_quantite'] = AjouterProduitPanierForm( initial={ 'quantite': item['quantite'], 'update': True }) # On ajout le coupon au panier appliquer_le_coupon = CouponForm() context = { 'panier': panier, 'appliquer_le_coupon': appliquer_le_coupon, 'next': next_lang } template = 'panier/panier_detail.html' return render(request, template, context)
def payment_process(request): next_lang = strip_language(request.path) id_commande = request.session.get('id_commande') commande = get_object_or_404(Commande, id=id_commande) page_title_error = _('payement error') page_title_succes = _('payement') if request.method == 'POST': # recuperation de la variable nonce : nombre arbitraire en cryptographie nonce = request.POST.get('payment_method_nonce', None) # On créer et on soumet la transaction result = gateway.transaction.sale({ 'amount': '{:.2f}'.format(commande.get_depense_total()), 'payment_method_nonce': nonce, 'options': { 'submit_for_settlement': True } }) if result.is_success: # Si le resultat est valide, on marque # la commande comme payée commande.payer = True # On stocke l'identifiant unique de la transaction commande.id_braintree = result.transaction.id commande.save() # envoi de mail apres paiement subject = "e-market - commande N°{}".format(commande.id) message = 'Bonjour "{}\n\n", Merci de votre commande sur notre Boutique en ligne e-market.\n Nous\ avons le plaisir de confirmer que nous l\'avons prise en compte et qu\'elle est déjà prête à\ être expédiée.\n Nous vous adressons ci-dessous un récapitulatif ainsi que le numéro de\ commande et le numéro de suivi de votre colis.\n\n\n Toute l\'équipe des Conseilliers et Conseillières\ e-market est là pour vous accompagner : contactez-nous par téléphone au +225 00 000 000 du Lundi au Vendredi\ entre 08 heures et 19 heures et le Samedi entre 09 heures et 18 heures. Vous pouvez\ aussi nous adressez un e-mail : [email protected] et nous vous répondons très vite.\n\n\n\ Merci pour votre fidélité et à très vite sur votre Boutique en ligne e-market.\n\ L\'équipe e-market.'.formart(commande.first_name) email = EmailMessage(subject, message, '*****@*****.**', [commande.email]) # genere un pdf html = render_to_string('commandes/commande/pdf.html', {'commande': commande}) output = BytesIO() stylesheets = [ weasyprint.CSS(settings.STATIC_ROOT + 'css/admin.pdf') ] weasyprint.HTML(string=html).write_pdf(output, stylesheets=stylesheets) # on attache le pdf au mail email.attach('commande_{}.pdf'.format(commande.id), output.getvalue(), 'application/pdf') # On envoi le tout au mail email.send() return redirect('payment:valider') else: return redirect('payment:annuler') else: # generation de token client_token = gateway.client_token.generate() context = { 'commande': commande, 'client_token': client_token, 'page_title': page_title_succes, 'next': next_lang } template = 'payment/payement_process.html' return render(request, template, context)