Commit 78d536a2 authored by Gabriel Detraz's avatar Gabriel Detraz

Ajoute une application pour le panier

parent 12a9f7a1
from django import forms
from django.forms import ModelForm, Form
from django import forms
from django.core.validators import MinValueValidator
from .models import Panier, Paiement, Commande, Credit, Livraison
class LivraisonForm(ModelForm):
class Meta:
model = Livraison
fields = ['date']
def __init__(self, *args, **kwargs):
super(LivraisonForm, self).__init__(*args, **kwargs)
self.fields['date'].label = 'Date de livraison'
class DelLivraisonForm(ModelForm):
date = forms.ModelMultipleChoiceField(queryset=Livraison.objects.all(), label="Date de livraison", widget=forms.CheckboxSelectMultiple)
class Meta:
exclude = ['date']
model = Livraison
class PaiementForm(ModelForm):
class Meta:
model = Paiement
fields = ['moyen']
def __init__(self, *args, **kwargs):
super(PaiementForm, self).__init__(*args, **kwargs)
self.fields['moyen'].label = 'Moyen de paiement à ajouter'
class DelPaiementForm(ModelForm):
paiements = forms.ModelMultipleChoiceField(queryset=Paiement.objects.all(), label="Moyens de paiement actuels", widget=forms.CheckboxSelectMultiple)
class Meta:
exclude = ['moyen']
model = Paiement
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('panier', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='livraison',
name='date',
field=models.DateTimeField(unique=True),
),
migrations.AlterField(
model_name='paiement',
name='moyen',
field=models.CharField(unique=True, max_length=255),
),
]
...@@ -27,10 +27,13 @@ class Credit(models.Model): ...@@ -27,10 +27,13 @@ class Credit(models.Model):
return self.montant return self.montant
class Paiement(models.Model): class Paiement(models.Model):
moyen = models.CharField(max_length=255) moyen = models.CharField(max_length=255, unique=True)
def __str__(self): def __str__(self):
return self.moyen return self.moyen
class Livraison(models.Model): class Livraison(models.Model):
date = models.DateTimeField() date = models.DateTimeField(help_text='%d/%m/%y %H:%M:%S')
def __str__(self):
return str(self.date)
<table class="table table-striped">
<thead>
<tr>
<th>Date de livraison</th>
<th></th>
</tr>
</thead>
{% for livraison in livraison_list %}
<tr>
<td>{{ livraison.date }}</td>
<td><a class="btn btn-primary btn-sm" role="button" href="{% url 'panier:edit-livraison' livraison.id %}"><i class="glyphicon glyphicon-pushpin"></i> Editer</a>
<a class="btn btn-info btn-sm" role="button" href="{% url 'panier:history' 'livraison' livraison.id %}"><i class="glyphicon glyphicon-repeat"></i> Historique</a></td>
</tr>
{% endfor %}
</table>
<table class="table table-striped">
<thead>
<tr>
<th>Moyen de paiement</th>
<th></th>
</tr>
</thead>
{% for paiement in paiement_list %}
<tr>
<td>{{ paiement.moyen }}</td>
<td><a class="btn btn-primary btn-sm" role="button" href="{% url 'panier:edit-paiement' paiement.id %}"><i class="glyphicon glyphicon-pushpin"></i> Editer</a>
<a class="btn btn-info btn-sm" role="button" href="{% url 'panier:history' 'paiement' paiement.id %}"><i class="glyphicon glyphicon-repeat"></i> Historique</a></td>
</tr>
{% endfor %}
</table>
{% if paniers_list.paginator %} <h2>Commandes</h2>
{% if paniers_list.paginator %}
<ul class="pagination nav navbar-nav"> <ul class="pagination nav navbar-nav">
{% if paniers_list.has_previous %} {% if paniers_list.has_previous %}
<li><a href="?page={{ paniers_list.previous_page_number }}">Suivants</a></li> <li><a href="?page={{ paniers_list.previous_page_number }}">Suivants</a></li>
...@@ -36,3 +38,40 @@ ...@@ -36,3 +38,40 @@
{% endfor %} {% endfor %}
</table> </table>
<h2>Credits</h2>
{% if paniers_list.paginator %}
<ul class="pagination nav navbar-nav">
{% if paniers_list.has_previous %}
<li><a href="?page={{ paniers_list.previous_page_number }}">Suivants</a></li>
{% endif %}
{% for page in paniers_list.paginator.page_range %}
<li class="{% if paniers_list.number == page %}active{% endif %}"><a href="?page={{page }}">{{ page }}</a></li>
{% endfor %}
{% if paniers_list.has_next %}
<li> <a href="?page={{ paniers_list.next_page_number }}">Précédents</a></li>
{% endif %}
</ul>
{% endif %}
<table class="table table-striped">
<thead>
<tr>
<th>Nom</th>
<th>Prenom</th>
<th>Montant</th>
<th>Mode de reglement</th>
<th>Validité</th>
</tr>
</thead>
{% for credit in credit_list %}
<tr>
<td>{{ credit.user.name }}</td>
<td>{{ credit.user.surname }}</td>
<td>{{ credit.montant }}</td>
<td>{{ credit.moyen }}</td>
<td>{{ credit.validite }}</td>
</tr>
{% endfor %}
</table>
...@@ -4,8 +4,7 @@ ...@@ -4,8 +4,7 @@
{% block title %}Commandes{% endblock %} {% block title %}Commandes{% endblock %}
{% block content %} {% block content %}
<h2>Commandes</h2> {% include "panier/aff_paniers.html" %}
{% include "panier/aff_paniers.html" with paniers_list=paniers_list %}
<br /> <br />
<br /> <br />
<br /> <br />
......
{% extends "panier/sidebar.html" %}
{% load bootstrap3 %}
{% block title %}Livraison{% endblock %}
{% block content %}
<h2>Liste des dates de livraisons</h2>
<a class="btn btn-primary btn-sm" role="button" href="{% url 'panier:add-livraison' %}"><i class="glyphicon glyphicon-plus"></i> Ajouter une date de livraison</a>
<a class="btn btn-danger btn-sm" role="button" href="{% url 'panier:del-livraison' %}"><i class="glyphicon glyphicon-trash"></i> Supprimer une ou plusieurs dates de livraisons</a>
{% include "panier/aff_livraison.html" with livraison_list=livraison_list %}
<br />
<br />
<br />
{% endblock %}
{% extends "panier/sidebar.html" %}
{% load bootstrap3 %}
{% block title %}Paiements{% endblock %}
{% block content %}
<h2>Liste des types de paiements</h2>
<a class="btn btn-primary btn-sm" role="button" href="{% url 'panier:add-paiement' %}"><i class="glyphicon glyphicon-plus"></i> Ajouter un type de paiement</a>
<a class="btn btn-danger btn-sm" role="button" href="{% url 'panier:del-paiement' %}"><i class="glyphicon glyphicon-trash"></i> Supprimer un ou plusieurs types de paiements</a>
{% include "panier/aff_paiement.html" with paiement_list=paiement_list %}
<br />
<br />
<br />
{% endblock %}
...@@ -4,11 +4,11 @@ ...@@ -4,11 +4,11 @@
{% block title %}Création et modification d'utilisateur{% endblock %} {% block title %}Création et modification d'utilisateur{% endblock %}
{% block content %} {% block content %}
{% bootstrap_form_errors userform %} {% bootstrap_form_errors panierform %}
<form class="form" method="post"> <form class="form" method="post">
{% csrf_token %} {% csrf_token %}
{% bootstrap_form userform %} {% bootstrap_form panierform %}
{% bootstrap_button "Créer ou modifier" button_type="submit" icon="star" %} {% bootstrap_button "Créer ou modifier" button_type="submit" icon="star" %}
</form> </form>
<br /> <br />
......
{% extends "base.html" %} {% extends "base.html" %}
{% block sidebar %} {% block sidebar %}
{% if is_cableur %}
<p><a href="{% url "users:new-user" %}">Créer un adhérent</a></p>
<p><a href="{% url "users:index" %}">Liste des adhérents</a></p>
<p><a href="{% url "users:index-listright" %}">Liste des droits</a></p>
{% if is_bureau %} {% if is_bureau %}
<p><a href="{% url "users:del-right" %}">Retirer un droit</a></p> <p><a href="{% url "panier:index-paiement" %}">Liste des moyens de paiement</a></p>
{% endif %} <p><a href="{% url "panier:index-livraison" %}">Liste des dates de livraison</a></p>
{% endif %} {% endif %}
{% endblock %} {% endblock %}
...@@ -3,6 +3,16 @@ from django.conf.urls import url ...@@ -3,6 +3,16 @@ from django.conf.urls import url
from . import views from . import views
urlpatterns = [ urlpatterns = [
url(r'^add_paiement/$', views.add_paiement, name='add-paiement'),
url(r'^edit_paiement/(?P<paiementid>[0-9]+)$', views.edit_paiement, name='edit-paiement'),
url(r'^del_paiement/$', views.del_paiement, name='del-paiement'),
url(r'^index_paiement/$', views.index_paiement, name='index-paiement'),
url(r'^add_livraison/$', views.add_livraison, name='add-livraison'),
url(r'^edit_livraison/(?P<livraisonid>[0-9]+)$', views.edit_livraison, name='edit-livraison'),
url(r'^del_livraison/$', views.del_livraison, name='del-livraison'),
url(r'^index_livraison/$', views.index_livraison, name='index-livraison'),
url(r'^history/(?P<object>paiement)/(?P<id>[0-9]+)$', views.history, name='history'),
url(r'^history/(?P<object>livraison)/(?P<id>[0-9]+)$', views.history, name='history'),
url(r'^$', views.index, name='index'), url(r'^$', views.index, name='index'),
] ]
......
...@@ -11,7 +11,10 @@ from django.core.urlresolvers import reverse ...@@ -11,7 +11,10 @@ from django.core.urlresolvers import reverse
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.contrib.auth.decorators import login_required, permission_required from django.contrib.auth.decorators import login_required, permission_required
from django.db import transaction
from reversion import revisions as reversion
from .models import Panier, Paiement, Commande, Credit, Livraison from .models import Panier, Paiement, Commande, Credit, Livraison
from .forms import PaiementForm, DelPaiementForm, LivraisonForm, DelLivraisonForm
from amap.settings import PAGINATION_NUMBER from amap.settings import PAGINATION_NUMBER
...@@ -24,19 +27,174 @@ def form(ctx, template, request): ...@@ -24,19 +27,174 @@ def form(ctx, template, request):
context_instance=RequestContext(request) context_instance=RequestContext(request)
) )
@login_required
@permission_required('bureau')
def add_livraison(request):
livraison = LivraisonForm(request.POST or None)
if livraison.is_valid():
with transaction.atomic(), reversion.create_revision():
livraison.save()
reversion.set_user(request.user)
reversion.set_comment("Creation")
messages.success(request, "La date de livraison a ete ajoutee")
return redirect("/panier/index_livraison/")
return form({'panierform': livraison}, 'panier/panier.html', request)
@login_required
@permission_required('bureau')
def edit_livraison(request, livraisonid):
try:
livraison_instance = Livraison.objects.get(pk=livraisonid)
except Livraison.DoesNotExist:
messages.error(request, u"Entrée inexistante" )
return redirect("/panier/")
livraison = LivraisonForm(request.POST or None, instance=livraison_instance)
if livraison.is_valid():
with transaction.atomic(), reversion.create_revision():
livraison.save()
reversion.set_user(request.user)
reversion.set_comment("Champs modifié(s) : %s" % ', '.join(field for field in livraison.changed_data))
messages.success(request, "Date modifiee")
return redirect("/penier/index_livraison/")
return form({'panierform': livraison}, 'panier/panier.html', request)
@login_required
@permission_required('bureau')
def del_livraison(request):
livraison = DelLivraisonForm(request.POST or None)
if livraison.is_valid():
livraison_dels = livraison.cleaned_data['date']
for livraison_del in livraison_dels:
try:
with transaction.atomic(), reversion.create_revision():
livraison_del.delete()
reversion.set_comment("Destruction")
messages.success(request, "La date de livraison a ete supprimee")
except ProtectedError:
messages.error(
request,
"La livraison est affectee a au moins une commande, \
vous ne pouvez pas le supprimer" % livraison_del)
return redirect("/panier/index_livraison/")
return form({'panierform': livraison}, 'panier/panier.html', request)
@login_required
@permission_required('bureau')
def add_paiement(request):
paiement = PaiementForm(request.POST or None)
if paiement.is_valid():
with transaction.atomic(), reversion.create_revision():
paiement.save()
reversion.set_user(request.user)
reversion.set_comment("Creation")
messages.success(request, "Le moyen de paiement a ete ajoute")
return redirect("/panier/index_paiement/")
return form({'panierform': paiement}, 'panier/panier.html', request)
@login_required
@permission_required('bureau')
def edit_paiement(request, paiementid):
try:
paiement_instance = Paiement.objects.get(pk=paiementid)
except Paiement.DoesNotExist:
messages.error(request, "Entrée inexistante" )
return redirect("/panier/index_paiement/")
paiement = PaiementForm(request.POST or None, instance=paiement_instance)
if paiement.is_valid():
with transaction.atomic(), reversion.create_revision():
paiement.save()
reversion.set_user(request.user)
reversion.set_comment("Champs modifié(s) : %s" % ', '.join(field for field in paiement.changed_data))
messages.success(request, "Type de paiement modifié")
return redirect("/panier/index_paiement/")
return form({'panierform': paiement}, 'panier/panier.html', request)
@login_required
@permission_required('bureau')
def del_paiement(request):
paiement = DelPaiementForm(request.POST or None)
if paiement.is_valid():
paiement_dels = paiement.cleaned_data['paiements']
for paiement_del in paiement_dels:
try:
with transaction.atomic(), reversion.create_revision():
paiement_del.delete()
reversion.set_user(request.user)
reversion.set_comment("Destruction")
messages.success(request, "Le moyen de paiement a été supprimé")
except ProtectedError:
messages.error(request, "Le moyen de paiement %s est affecté à au moins une facture, vous ne pouvez pas le supprimer" % paiement_del)
return redirect("/panier/index_paiement/")
return form({'panierform': paiement}, 'panier/panier.html', request)
@login_required
def history(request, object, id):
if object == 'paiement' and request.user.has_perms(('cableur',)):
try:
object_instance = Paiement.objects.get(pk=id)
except Paiement.DoesNotExist:
messages.error(request, "Paiement inexistant")
return redirect("/panier/")
elif object == 'livraison' and request.user.has_perms(('cableur',)):
try:
object_instance = Livraison.objects.get(pk=id)
except Livraison.DoesNotExist:
messages.error(request, "Livraison inexistante")
return redirect("/panier/")
else:
messages.error(request, "Objet inconnu")
return redirect("/panier/")
reversions = reversion.get_for_object(object_instance)
paginator = Paginator(reversions, PAGINATION_NUMBER)
page = request.GET.get('page')
try:
reversions = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
reversions = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
reversions = paginator.page(paginator.num_pages)
return render(request, 'amap/history.html', {'reversions': reversions, 'object': object_instance})
@login_required @login_required
def index(request): def index(request):
paniers_list = Panier.objects.order_by('pk') paniers_list = Panier.objects.order_by('pk')
credit_list = Credit.objects.order_by('pk')
if not request.user.has_perms(('bureau',)): if not request.user.has_perms(('bureau',)):
paniers_list = paniers_list.filter(user=request.user) paniers_list = paniers_list.filter(user=request.user)
paginator = Paginator(paniers_list, PAGINATION_NUMBER) credit_list = credit_list.filter(user=request.user)
paginator_paniers = Paginator(paniers_list, PAGINATION_NUMBER)
paginator_credit = Paginator(credit_list, PAGINATION_NUMBER)
page = request.GET.get('page') page = request.GET.get('page')
try: try:
paniers_list = paginator.page(page) paniers_list = paginator_paniers.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
paniers_list = paginator_paniers.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
paniers_list = paginator_paniers.page(paginator_paniers.num_pages)
try:
credit_list = paginator_credit.page(page)
except PageNotAnInteger: except PageNotAnInteger:
# If page is not an integer, deliver first page. # If page is not an integer, deliver first page.
paniers_list = paginator.page(1) credit_list = paginator_credit.page(1)
except EmptyPage: except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results. # If page is out of range (e.g. 9999), deliver last page of results.
paniers_list = paginator.page(paginator.num_pages) credit_list = paginator_credit.page(paginator_credit.num_pages)
return render(request, 'panier/index.html', {'paniers_list': paniers_list})
return render(request, 'panier/index.html', {'paniers_list': paniers_list, 'credit_list': credit_list})
@login_required
@permission_required('cableur')
def index_paiement(request):
paiement_list = Paiement.objects.order_by('moyen')
return render(request, 'panier/index_paiement.html', {'paiement_list':paiement_list})
@login_required
@permission_required('cableur')
def index_livraison(request):
livraison_list = Livraison.objects.order_by('date')
return render(request, 'panier/index_livraison.html', {'livraison_list':livraison_list})
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment