forked from DGNum/gestioCOF
Gestion primitive des articles
- Gestion CRU des articles
This commit is contained in:
parent
22ccf02393
commit
5b3613b6f6
10 changed files with 183 additions and 10 deletions
|
@ -1,6 +1,6 @@
|
|||
from django import forms
|
||||
from django.contrib.auth.models import User
|
||||
from kfet.models import Account, Checkout
|
||||
from kfet.models import Account, Checkout, Article
|
||||
from gestioncof.models import CofProfile
|
||||
|
||||
# -----
|
||||
|
@ -84,8 +84,8 @@ class UserRestrictForm(UserForm):
|
|||
|
||||
class CheckoutForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Checkout
|
||||
fields = ['name', 'valid_from', 'valid_to', 'balance', 'is_protected']
|
||||
model = Checkout
|
||||
fields = ['name', 'valid_from', 'valid_to', 'balance', 'is_protected']
|
||||
widgets = {
|
||||
'valid_from': DateTimeWidget(),
|
||||
'valid_to' : DateTimeWidget(),
|
||||
|
@ -94,3 +94,16 @@ class CheckoutForm(forms.ModelForm):
|
|||
class CheckoutRestrictForm(CheckoutForm):
|
||||
class Meta(CheckoutForm.Meta):
|
||||
fields = ['name', 'valid_from', 'valid_to']
|
||||
|
||||
# -----
|
||||
# Article forms
|
||||
# -----
|
||||
|
||||
class ArticleForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Article
|
||||
fields = ['name', 'is_sold', 'price', 'stock', 'category']
|
||||
|
||||
class ArticleRestrictForm(ArticleForm):
|
||||
class Meta(ArticleForm.Meta):
|
||||
fields = ['name', 'is_sold', 'price', 'category']
|
||||
|
|
19
kfet/migrations/0007_auto_20160804_0641.py
Normal file
19
kfet/migrations/0007_auto_20160804_0641.py
Normal file
|
@ -0,0 +1,19 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('kfet', '0006_auto_20160804_0600'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='article',
|
||||
name='price',
|
||||
field=models.DecimalField(default=0, max_digits=6, decimal_places=2),
|
||||
),
|
||||
]
|
|
@ -1,7 +1,6 @@
|
|||
from django.db import models
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.core.exceptions import PermissionDenied
|
||||
from django.contrib.auth.models import User, AnonymousUser
|
||||
from django.core.validators import RegexValidator
|
||||
from gestioncof.models import CofProfile
|
||||
from django.utils.six.moves import reduce
|
||||
|
@ -215,15 +214,26 @@ class Statement(models.Model):
|
|||
class ArticleCategory(models.Model):
|
||||
name = models.CharField(max_length = 45)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
class Article(models.Model):
|
||||
name = models.CharField(max_length = 45)
|
||||
is_sold = models.BooleanField(default = True)
|
||||
price = models.DecimalField(max_digits = 6, decimal_places = 2)
|
||||
stock = models.IntegerField(default = 0)
|
||||
name = models.CharField(max_length = 45)
|
||||
is_sold = models.BooleanField(default = True)
|
||||
price = models.DecimalField(
|
||||
max_digits = 6, decimal_places = 2,
|
||||
default = 0)
|
||||
stock = models.IntegerField(default = 0)
|
||||
category = models.ForeignKey(
|
||||
ArticleCategory, on_delete = models.PROTECT,
|
||||
related_name = "articles")
|
||||
|
||||
def __str__(self):
|
||||
return '%s - %s' % (self.category.name, self.name)
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse('kfet.article.read', kwargs={'pk': self.pk})
|
||||
|
||||
class ArticleRule(models.Model):
|
||||
article_on = models.OneToOneField(
|
||||
Article, on_delete = models.PROTECT,
|
||||
|
|
17
kfet/templates/kfet/article.html
Normal file
17
kfet/templates/kfet/article.html
Normal file
|
@ -0,0 +1,17 @@
|
|||
{% extends 'kfet/base.html' %}
|
||||
|
||||
{% block title %}Liste des articles{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<p><a href="{% url 'kfet.article.create' %}">Créer un article</a></p>
|
||||
|
||||
<ul>
|
||||
{% for article in articles %}
|
||||
<li>
|
||||
<a href="{% url 'kfet.article.read' article.pk %}">{{ article }}</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
{% endblock %}
|
13
kfet/templates/kfet/article_create.html
Normal file
13
kfet/templates/kfet/article_create.html
Normal file
|
@ -0,0 +1,13 @@
|
|||
{% extends 'kfet/base.html' %}
|
||||
|
||||
{% block title %}Création d'un article{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<form submit="" method="post">
|
||||
{% csrf_token %}
|
||||
{{ form.as_p }}
|
||||
<input type="submit" value="Enregistrer">
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
15
kfet/templates/kfet/article_read.html
Normal file
15
kfet/templates/kfet/article_read.html
Normal file
|
@ -0,0 +1,15 @@
|
|||
{% extends 'kfet/base.html' %}
|
||||
|
||||
{% block title %}Informations sur l'article {{ article }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<p><a href="{% url 'kfet.article.update' article.pk %}">Editer les informations</a></p>
|
||||
|
||||
<p>Nom: {{ article.name }}</p>
|
||||
<p>Catégorie: {{ article.category }}</p>
|
||||
<p>Prix (hors réduction): {{ article.price }} €</p>
|
||||
<p>Stock: {{ article.stock }}</p>
|
||||
<p>En vente: {{ article.is_sold }}</p>
|
||||
|
||||
{% endblock %}
|
13
kfet/templates/kfet/article_update.html
Normal file
13
kfet/templates/kfet/article_update.html
Normal file
|
@ -0,0 +1,13 @@
|
|||
{% extends 'kfet/base.html' %}
|
||||
|
||||
{% block title %}Édition de l'article {{ article }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<form action="" method="post">
|
||||
{% csrf_token %}
|
||||
{{ form.as_p }}
|
||||
<input type="submit" value="Mettre à jour">
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
|
@ -15,6 +15,7 @@
|
|||
<ul>
|
||||
<li><a href="{% url "kfet.account" %}">Comptes</a></li>
|
||||
<li><a href="{% url "kfet.checkout" %}">Caisses</a></li>
|
||||
<li><a href="{% url "kfet.article" %}">Articles</a></li>
|
||||
</ul>
|
||||
{% endif %}
|
||||
</nav>
|
||||
|
|
21
kfet/urls.py
21
kfet/urls.py
|
@ -57,4 +57,25 @@ urlpatterns = [
|
|||
url('^checkout/(?P<pk>\d+)/edit$',
|
||||
permission_required('kfet.is_team')(views.CheckoutUpdate.as_view()),
|
||||
name = 'kfet.checkout.update'),
|
||||
|
||||
# -----
|
||||
# Article urls
|
||||
# -----
|
||||
|
||||
# Article - General
|
||||
url('^article/$',
|
||||
permission_required('kfet.is_team')(views.ArticleList.as_view()),
|
||||
name = 'kfet.article'),
|
||||
# Article - Create
|
||||
url('^article/new$',
|
||||
permission_required('kfet.is_team')(views.ArticleCreate.as_view()),
|
||||
name = 'kfet.article.create'),
|
||||
# Article - Read
|
||||
url('^article/(?P<pk>\d+)$',
|
||||
permission_required('kfet.is_team')(views.ArticleRead.as_view()),
|
||||
name = 'kfet.article.read'),
|
||||
# Article - Update
|
||||
url('^article/(?P<pk>\d+)/edit$',
|
||||
permission_required('kfet.is_team')(views.ArticleUpdate.as_view()),
|
||||
name = 'kfet.article.update'),
|
||||
]
|
||||
|
|
|
@ -10,7 +10,7 @@ from django.contrib.auth.models import User
|
|||
from django.http import HttpResponse, Http404
|
||||
import json
|
||||
from gestioncof.models import CofProfile, Clipper
|
||||
from kfet.models import Account, Checkout
|
||||
from kfet.models import Account, Checkout, Article
|
||||
from kfet.forms import *
|
||||
|
||||
@login_required
|
||||
|
@ -279,7 +279,7 @@ class CheckoutCreate(SuccessMessageMixin, CreateView):
|
|||
# Checkout - Read
|
||||
|
||||
class CheckoutRead(DetailView):
|
||||
model = Checkout
|
||||
model = Checkout
|
||||
template_name = 'kfet/checkout_read.html'
|
||||
context_object_name = 'checkout'
|
||||
|
||||
|
@ -298,3 +298,54 @@ class CheckoutUpdate(SuccessMessageMixin, UpdateView):
|
|||
raise PermissionDenied
|
||||
# Updating
|
||||
return super(CheckoutUpdate, self).form_valid(form)
|
||||
|
||||
# -----
|
||||
# Article views
|
||||
# -----
|
||||
|
||||
# Article - General
|
||||
|
||||
class ArticleList(ListView):
|
||||
model = Article
|
||||
queryset = Article.objects.order_by('category', '-is_sold', 'name')
|
||||
template_name = 'kfet/article.html'
|
||||
context_object_name = 'articles'
|
||||
|
||||
# Article - Create
|
||||
|
||||
class ArticleCreate(SuccessMessageMixin, CreateView):
|
||||
model = Article
|
||||
template_name = 'kfet/article_create.html'
|
||||
form_class = ArticleForm
|
||||
success_message = 'Nouvel item : %(category)s - %(name)s'
|
||||
|
||||
# Surcharge de la validation
|
||||
def form_valid(self, form):
|
||||
# Checking permission
|
||||
if not self.request.user.has_perm('add_article'):
|
||||
raise PermissionDenied
|
||||
# Creating
|
||||
return super(ArticleCreate, self).form_valid(form)
|
||||
|
||||
# Article - Read
|
||||
|
||||
class ArticleRead(DetailView):
|
||||
model = Article
|
||||
template_name = 'kfet/article_read.html'
|
||||
context_object_name = 'article'
|
||||
|
||||
# Article - Update
|
||||
|
||||
class ArticleUpdate(UpdateView):
|
||||
model = Article
|
||||
template_name = 'kfet/article_update.html'
|
||||
form_class = ArticleRestrictForm
|
||||
success_message = "Informations mises à jour pour l'article : %(name)s"
|
||||
|
||||
# Surcharge de la validation
|
||||
def form_valid(self, form):
|
||||
# Checking permission
|
||||
if not self.request.user.has_perm('change_article'):
|
||||
raise PermissionDenied
|
||||
# Updating
|
||||
return super(ArticleUpdate, self).form_valid(form)
|
||||
|
|
Loading…
Reference in a new issue