OwlCyberSecurity - MANAGER
Edit File: views.py
from django.shortcuts import render,redirect,get_object_or_404 from .models import produit, vente, ligne_commande, element, dépence_gain, product_stat, notif from django.db import models from django.contrib.auth.models import User from django.contrib.auth import authenticate,login,logout import datetime from datetime import date def home_view(request): return render(request,"app/index.html") def login_view(request): if request.method == 'POST': username = request.POST.get("username") password= request.POST.get("pass") user = authenticate(request,username=username,password=password) if user is not None: login(request,user) return redirect('/dash/') else: return render(request,'app/login.html',{'message':'erreur : réssayez'}) else: return render(request,'app/login.html') def logout_view(request): logout(request) return redirect('/') def make_notif(): products = produit.objects.all() elements = element.objects.all() for p in products : if p.quantite <= p.minimum : c = "Le Produit " + str(p.nom) + " est bientot en rupture : quantité disponible ("+str(p.quantite)+")" if notif.objects.filter(content=c): pass else: notif.objects.create(content=c) for e in elements : if e.quantite <= e.minimum : c = "Le stock " + str(e.nom) + " est bientot en rupture : quantité disponible ("+str(e.quantite)+")" if notif.objects.filter(content=c): pass else: notif.objects.create(content=c) def presentoire_view(request): active_link = 'presentoire' if not request.user.is_authenticated: return redirect("/login/") if not request.user.is_superuser: return redirect("/commercial/") make_notif() notif_count = notif.objects.filter(etat=notif.etats.NONLU).count() produits = produit.objects.all() categories = dict(produit.p_categorie.choices) if request.method =='GET': return render(request,'app/presentoire.html',{'active_link':active_link,'produits':produits,'categories':categories, "notif_count":notif_count}) else: nom=request.POST.get('nom') prix=request.POST.get('prix') categorie=request.POST.get('categorie') quantite=request.POST.get('quantite') min=request.POST.get('min') if produit.objects.filter(nom=nom): message = "Il existe déja un produit qui a le même nom !" return render(request,'app/presentoire.html',{'active_link':active_link,'produits':produits,'categories':categories, "notif_count":notif_count,"message":message}) else: produit.objects.create(nom=nom,prix=prix,categorie=categorie,quantite=quantite,minimum=min) return redirect('/presentoire') def single_produit_view(request,current_id): active_link = 'presentoire' if not request.user.is_authenticated: return redirect("/login/") if not request.user.is_superuser: return redirect("/commercial/") make_notif() notif_count = notif.objects.filter(etat=notif.etats.NONLU).count() if request.method == 'GET': if 'ajout' in request.GET.get('action'): if request.GET.get('ajout_q'): plus = request.GET.get('ajout_q') else: plus=0 id = current_id o = produit.objects.get(id=current_id) o.quantite += float(plus) o.save() product_stat.objects.create(product=produit.objects.get(pk=id),quantity=produit.objects.get(pk=id).quantite) return redirect('/presentoire') elif 'details' in request.GET.get('action') : o = produit.objects.get(id=current_id) categories = dict(produit.p_categorie.choices) return render(request,'app/single_produit.html',{'active_link':active_link,'produit': o,'categories':categories, "notif_count":notif_count}) else: if 'Sauvegarder' in request.POST: id=request.POST.get('id') nom = request.POST.get('nom') prix = request.POST.get('prix') categorie = request.POST.get('categorie') quantite = request.POST.get('quantite') min = request.POST.get('min') o = produit.objects.get(id=current_id) categories = dict(produit.p_categorie.choices) if produit.objects.filter(nom=nom) and nom != o.nom: message = "Il existe déja un produit qui a le même nom !" return render(request,'app/single_produit.html',{'active_link':active_link,'produit': o,'categories':categories, "notif_count":notif_count,"message":message}) else: produit.objects.filter(id=id).update(nom=nom,prix=prix,categorie=categorie,quantite=quantite,minimum=min) return redirect('/presentoire') else : id=request.POST.get('id') i=produit.objects.get(id=id) i.delete() return redirect('/presentoire') def commercial_view(request): active_link = 'commercial' if not request.user.is_authenticated: return redirect("/login/") make_notif() notif_count = notif.objects.filter(etat=notif.etats.NONLU).count() produits = produit.objects.all() categories = dict(produit.p_categorie.choices) if request.method =='GET': return render(request,'app/commercial.html',{'active_link':active_link,'produits':produits,'categories':categories, "notif_count":notif_count}) else: if (request.POST.getlist('p_id')): p_id_list = request.POST.getlist('p_id') p_quantite_list = request.POST.getlist('p_quantite') l=len(p_id_list) for i in range(l): pr=p_id_list[i] qt=int(p_quantite_list[i]) pp = get_object_or_404(produit,pk=int(pr)) e=None message = "Quantité inssufisante dans le presentoire" if (qt > 0 ) and (pp.quantite < int(qt)) : return render(request,'app/commercial.html',{'active_link':active_link,'produits':produits,'categories':categories, "notif_count":notif_count,"message":message}) n=vente.objects.create() n.save() id_vente=n.id for i in range(l): pr=p_id_list[i] qt=int(p_quantite_list[i]) pp = get_object_or_404(produit,pk=int(pr)) e=None if (qt > 0 ) and (pp.quantite >= int(qt)) : lc=ligne_commande.objects.create(produit=produit.objects.get(pk=int(pr)),quantite=qt) lc.save() lc_id=lc.id prix_lc=ligne_commande.objects.get(pk=lc_id).price() e=vente.objects.get(pk=id_vente) e.commandes.add(ligne_commande.objects.get(pk=lc_id)) e.save() pr_qt=pp.quantite-int(qt) produit.objects.filter(pk=int(pr)).update(quantite=pr_qt) e.tt_prix+=prix_lc e.save() product_stat.objects.create(product=produit.objects.get(pk=int(pr)),quantity=produit.objects.get(pk=int(pr)).quantite) if e: montant=e.tt_prix motif=str(" Vente Numero (" + str(e.id) + ")") tpg= dépence_gain.types.GAIN dépence_gain.objects.create(type=tpg,motif=motif,montant=montant) return redirect('/commercial') def labo_view(request): active_link = 'labo' if not request.user.is_authenticated: return redirect("/login/") if not request.user.is_superuser: return redirect("/commercial/") make_notif() notif_count = notif.objects.filter(etat=notif.etats.NONLU).count() elements = element.objects.all() if request.method == "GET": return render (request,'app/labo.html',{'active_link':active_link,"elements": elements, "notif_count":notif_count}) else : nom = request.POST.get('nom') prix_u = request.POST.get('prix') prix_tt = request.POST.get('prix_tt') quantite = request.POST.get('quantite') min= request.POST.get('min') if element.objects.filter(nom=nom): message="Il existe déja un produit qui a le même nom !" return render (request,'app/labo.html',{'active_link':active_link,"elements": elements, "notif_count":notif_count,"message":message}) else: element.objects.create(nom=nom,prix_u=prix_u,prix_tt=prix_tt,quantite=quantite,minimum=min) tpg= dépence_gain.types.DEPENCE motif = "Approvisionement (" + nom + ") * (" + str(quantite) + ")" p= float(prix_u)*float(quantite) if float(prix_tt)>0 : dépence_gain.objects.create(type=tpg,motif=motif,montant=float(prix_tt)) else: dépence_gain.objects.create(type=tpg,motif=motif,montant=p) return redirect("/labo") def single_labo_view(request,current_id): active_link = 'labo' if not request.user.is_authenticated: return redirect("/login/") if not request.user.is_superuser: return redirect("/commercial/") make_notif() notif_count = notif.objects.filter(etat=notif.etats.NONLU).count() o = element.objects.get(id=current_id) if request.method == 'GET': if 'ajout' in request.GET.get('action') and request.GET.get('ajout_q'): quantite = request.GET.get('ajout_q') id = current_id o = element.objects.get(id=current_id) o.quantite += float(quantite) o.save() tpg= dépence_gain.types.DEPENCE motif = "Approvisionement (" + o.nom + ") * (" + str(quantite) + ")" p= float(o.prix_u)*float(quantite) dépence_gain.objects.create(type=tpg,motif=motif,montant=p) return redirect('/labo') elif 'utiliser' in request.GET.get('action') and request.GET.get('ajout_q') : quantite = request.GET.get('ajout_q') id = current_id o = element.objects.get(id=current_id) o.quantite -= float(quantite) o.utilise += float(quantite) o.save() return redirect('/labo') elif 'details' in request.GET.get('action') : o = element.objects.get(id=current_id) return render(request,'app/single_labo.html',{'active_link':active_link,'element': o, "notif_count":notif_count}) else: return redirect('/labo/') else: if 'Sauvegarder' in request.POST: id=request.POST.get('id') nom = request.POST.get('nom') prix = request.POST.get('prix') quantite = request.POST.get('quantite') if element.objects.filter(nom=nom): message="Il existe déja un produit qui a le même nom !" return render (request,'app/single_labo.html',{'active_link':active_link,'element': o, "notif_count":notif_count,"message":message}) else: element.objects.filter(id=id).update(nom=nom,prix_u=prix,quantite=quantite) return redirect('/labo') else : id=request.POST.get('id') i=element.objects.get(id=id) i.delete() return redirect('/labo') def finance_view(request): active_link = 'finance' if not request.user.is_authenticated: return redirect("/login/") if not request.user.is_superuser: return redirect("/commercial/") make_notif() notif_count = notif.objects.filter(etat=notif.etats.NONLU).count() gain_taux=0 dépence_taux=0 if request.method == 'POST': if 'Dépence'in request.POST: depgain= dépence_gain.objects.filter(type='Dépence') return render(request,'app/finance.html',{'active_link':active_link,'depgain':depgain, "notif_count":notif_count}) elif 'Gain'in request.POST: depgain= dépence_gain.objects.filter(type='Gain') return render(request,'app/finance.html',{'active_link':active_link,'depgain':depgain, "notif_count":notif_count}) elif 'filtrer'in request.POST: date_de=request.POST.get('date_de') date_a=request.POST.get('date_a') depgain= dépence_gain.objects.filter(date__gte=date_de,date__lte=date_a) for dp in depgain: if dp.type == 'Dépence': dépence_taux += dp.montant elif dp.type == 'Gain': gain_taux+= dp.montant bénef=gain_taux-dépence_taux return render(request,'app/finance.html',{'active_link':active_link,'depgain':depgain,'date_de':date_de,'date_a':date_a,'bénef':bénef, "notif_count":notif_count}) elif 'ajouter' in request.POST: date = request.POST.get('date') type = request.POST.get('select_type') montant = request.POST.get('montant') motif = request.POST.get('motif') dépence_gain.objects.create(type=type,date=date,montant=montant,motif=motif) return redirect('/finance/') else: depgain= dépence_gain.objects.all() for dp in depgain: if dp.type == 'Dépence': dépence_taux+= dp.montant else: gain_taux += dp.montant types = dépence_gain.types.choices bénef=gain_taux-dépence_taux reversed_depgain = depgain.reverse() return render(request,'app/finance.html',{'active_link':active_link,'depgain':reversed_depgain,'bénef':bénef,'types':types, "notif_count":notif_count}) def single_depencegain_view(request,current_id): active_link = 'finance' if not request.user.is_authenticated: return redirect("/login/") if not request.user.is_superuser: return redirect("/commercial/") make_notif() notif_count = notif.objects.filter(etat=notif.etats.NONLU).count() if request.method == 'POST': if 'sauvegarder' in request.POST: if request.POST.get('date'): date = request.POST.get('date') type = request.POST.get('select_type') montant = request.POST.get('montant') motif = request.POST.get('motif') dépence_gain.objects.filter(pk=current_id).update(date=date,type=type,montant=montant,motif=motif) return redirect('/finance/') else: type = request.POST.get('select_type') montant = request.POST.get('montant') motif = request.POST.get('motif') dépence_gain.objects.filter(pk=current_id).update(type=type,montant=montant,motif=motif) return redirect('/finance/') elif 'supprimer' in request.POST: dépence_gain.objects.filter(pk=current_id).delete() return redirect('/finance/') else: depgain= dépence_gain.objects.filter(pk=current_id) types=dépence_gain.types.choices return render(request,'app/single_depence_gain.html',{'active_link':active_link,'depgain':depgain,'types':types, "notif_count":notif_count}) def dashboard_view(request): active_link = 'dashboard' if not request.user.is_authenticated: return redirect("/login/") if not request.user.is_superuser: return redirect("/commercial/") rd='app/dashboard.html' make_notif() notif_count = notif.objects.filter(etat=notif.etats.NONLU).count() date_aujourdhui = date.today() gain_auj=0 for c in dépence_gain.objects.filter(type=dépence_gain.types.GAIN,date=date_aujourdhui): gain_auj+=c.montant dep_auj=0 for c in dépence_gain.objects.filter(type=dépence_gain.types.DEPENCE,date=date_aujourdhui): dep_auj+=c.montant if request.method == 'POST': if 'submit_product' in request.POST: pro_id = request.POST.get('select_produit') pr_stat=product_stat.objects.filter(product=produit.objects.get(pk=int(pro_id))) pr=produit.objects.get(pk=pro_id) products=produit.objects.all() count_products=produit.objects.filter(quantite__gte=1).count() count_ventes=vente.objects.filter(date_commande=date_aujourdhui).count() return render(request,rd,{"active_link":active_link,"gain_auj":gain_auj,"dep_auj":dep_auj,'products':products,'pr_stat':pr_stat,'pr':pr,'count_products':count_products,'count_ventes':count_ventes, "notif_count":notif_count}) elif 'produits' in request.POST: pr_stat=product_stat.objects.filter(product=produit.objects.get(pk=2)) pr=produit.objects.get(pk=2) products=produit.objects.all() count_products=produit.objects.filter(quantite__gte=1).count() date_aujourdhui = date.today() count_ventes=vente.objects.filter(date_commande=date_aujourdhui).count() return render(request,rd,{"active_link":active_link,"gain_auj":gain_auj,"dep_auj":dep_auj,'products':products,'pr_stat':pr_stat,'pr':pr,'count_products':count_products,'count_ventes':count_ventes, "notif_count":notif_count}) else: products=produit.objects.all() count_products=produit.objects.filter(quantite__gte=1).count() date_aujourdhui = date.today() count_ventes=vente.objects.filter(date_commande=date_aujourdhui).count() return render(request,rd ,{"active_link":active_link,"gain_auj":gain_auj,"dep_auj":dep_auj,'products':products,'count_products':count_products,'count_ventes':count_ventes, "notif_count":notif_count}) def list_ventes_view(request): active_link = 'commercial' if not request.user.is_authenticated: return redirect("/login/") make_notif() notif_count = notif.objects.filter(etat=notif.etats.NONLU).count() ventes = vente.objects.all() if request.method == 'GET': return render(request,"app/ventes.html",{"active_link":active_link,"ventes":ventes, "notif_count":notif_count}) def single_vente_view(request,current_id): active_link = 'commercial' if not request.user.is_authenticated: return redirect("/login/") make_notif() notif_count = notif.objects.filter(etat=notif.etats.NONLU).count() id=current_id ventes = vente.objects.filter(id=id) return render (request,"app/single_vente.html",{"active_link":active_link,"vente":ventes, "notif_count":notif_count}) def notification_view(request): if not request.user.is_authenticated: return redirect("/login/") if not request.user.is_superuser: return redirect("/commercial/") make_notif() notif_count = notif.objects.filter(etat=notif.etats.NONLU).count() notifs = notif.objects.all() if request.method == 'POST': if "lu" in request.POST: notif.objects.all().update(etat=notif.etats.LU) return redirect("/notifications/") else: notif.objects.all().delete() return redirect("/notifications/") else: return render(request,"app/notifications.html",{"notifs":notifs, "notif_count":notif_count}) def users_view(request): if not request.user.is_authenticated: return redirect("/login/") if not request.user.is_superuser: return redirect("/commercial/") make_notif() notif_count = notif.objects.filter(etat=notif.etats.NONLU).count() if request.method=="POST": if "ajouter" in request.POST: nom = request.POST.get('name') prenom = request.POST.get('l_name') email = request.POST.get('email') password = request.POST.get('pass') tp = request.POST.get('type') if tp=='Admin': t=True else: t=False user = User.objects.create_user( username=email, email=email, password=password, first_name=nom, last_name=prenom, is_superuser=t, ) user.save() return redirect('/users/') else: id = request.POST.get('id') User.objects.filter(id=id).delete() return redirect('/users/') else: users = User.objects.all() return render (request,"app/users.html",{"users":users,"notif_count":notif_count})