Exemple #1
0
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})
Exemple #2
0
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)
Exemple #3
0
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)
Exemple #4
0
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)
Exemple #5
0
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)
Exemple #6
0
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)
Exemple #7
0
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)
Exemple #8
0
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)
Exemple #9
0
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)
Exemple #10
0
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)
Exemple #11
0
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)
Exemple #12
0
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)
Exemple #13
0
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)
Exemple #14
0
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)