mirror of
https://github.com/ae-utbm/sith.git
synced 2024-11-22 06:03:20 +00:00
Add product type management views
This commit is contained in:
parent
f230fbc135
commit
80f72df1de
@ -1,7 +1,7 @@
|
|||||||
{% extends "core/base.jinja" %}
|
{% extends "core/base.jinja" %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h2>{% trans %}Create{% endtrans %}</h2>
|
<h2>{% trans name=form.instance.__class__._meta.verbose_name %}Create {{ name }}{% endtrans %}</h2>
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form.as_p() }}
|
{{ form.as_p() }}
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
{% else %}
|
{% else %}
|
||||||
<li><a href="{{ url('core:page_rev', page_name=page.get_full_name(), rev=r['id']) }}">{{ r.revision }}</a> -
|
<li><a href="{{ url('core:page_rev', page_name=page.get_full_name(), rev=r['id']) }}">{{ r.revision }}</a> -
|
||||||
{{ user_profile_link(r.author) }} -
|
{{ user_profile_link(r.author) }} -
|
||||||
{{ page.revisions.last().date|localtime|date(DATETIME_FORMAT) }} {{ page.revisions.last().date|localtime|time(DATETIME_FORMAT) }}</a></li>
|
{{ r.date|localtime|date(DATETIME_FORMAT) }} {{ r.date|localtime|time(DATETIME_FORMAT) }}</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -23,7 +23,8 @@
|
|||||||
<ul>
|
<ul>
|
||||||
{% if user.is_in_group(settings.SITH_GROUPS['counter-admin']['name']) or user.is_in_group(settings.SITH_GROUPS['root']['name']) %}
|
{% if user.is_in_group(settings.SITH_GROUPS['counter-admin']['name']) or user.is_in_group(settings.SITH_GROUPS['root']['name']) %}
|
||||||
<li><a href="{{ url('counter:admin_list') }}">{% trans %}General counters management{% endtrans %}</a></li>
|
<li><a href="{{ url('counter:admin_list') }}">{% trans %}General counters management{% endtrans %}</a></li>
|
||||||
<li><a href="{{ url('counter:product_list') }}">{% trans %}General products management{% endtrans %}</a></li>
|
<li><a href="{{ url('counter:product_list') }}">{% trans %}Products management{% endtrans %}</a></li>
|
||||||
|
<li><a href="{{ url('counter:producttype_list') }}">{% trans %}Products type management{% endtrans %}</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% for b in settings.SITH_COUNTER_BARS %}
|
{% for b in settings.SITH_COUNTER_BARS %}
|
||||||
{% if user.is_in_group(b[1]+" admin") %}
|
{% if user.is_in_group(b[1]+" admin") %}
|
||||||
|
@ -39,6 +39,9 @@ class ProductType(models.Model):
|
|||||||
description = models.TextField(_('description'), null=True, blank=True)
|
description = models.TextField(_('description'), null=True, blank=True)
|
||||||
icon = models.ImageField(upload_to='products', null=True, blank=True)
|
icon = models.ImageField(upload_to='products', null=True, blank=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = _('product type')
|
||||||
|
|
||||||
def is_owned_by(self, user):
|
def is_owned_by(self, user):
|
||||||
"""
|
"""
|
||||||
Method to see if that object can be edited by the given user
|
Method to see if that object can be edited by the given user
|
||||||
@ -50,6 +53,9 @@ class ProductType(models.Model):
|
|||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
def get_absolute_url(self):
|
||||||
|
return reverse('counter:producttype_list')
|
||||||
|
|
||||||
class Product(models.Model):
|
class Product(models.Model):
|
||||||
"""
|
"""
|
||||||
This describes a product, with all its related informations
|
This describes a product, with all its related informations
|
||||||
@ -64,6 +70,9 @@ class Product(models.Model):
|
|||||||
icon = models.ImageField(upload_to='products', null=True, blank=True)
|
icon = models.ImageField(upload_to='products', null=True, blank=True)
|
||||||
club = models.ForeignKey(Club, related_name="products")
|
club = models.ForeignKey(Club, related_name="products")
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = _('product')
|
||||||
|
|
||||||
def is_owned_by(self, user):
|
def is_owned_by(self, user):
|
||||||
"""
|
"""
|
||||||
Method to see if that object can be edited by the given user
|
Method to see if that object can be edited by the given user
|
||||||
@ -89,6 +98,9 @@ class Counter(models.Model):
|
|||||||
view_groups = models.ManyToManyField(Group, related_name="viewable_counters", blank=True)
|
view_groups = models.ManyToManyField(Group, related_name="viewable_counters", blank=True)
|
||||||
barmen_session = {}
|
barmen_session = {}
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = _('counter')
|
||||||
|
|
||||||
def __getattribute__(self, name):
|
def __getattribute__(self, name):
|
||||||
if name == "owner_group":
|
if name == "owner_group":
|
||||||
return Group.objects.filter(name=self.club.unix_name+settings.SITH_BOARD_SUFFIX).first()
|
return Group.objects.filter(name=self.club.unix_name+settings.SITH_BOARD_SUFFIX).first()
|
||||||
@ -173,6 +185,9 @@ class Refilling(models.Model):
|
|||||||
bank = models.CharField(_('bank'), max_length=255,
|
bank = models.CharField(_('bank'), max_length=255,
|
||||||
choices=settings.SITH_COUNTER_BANK, default='other')
|
choices=settings.SITH_COUNTER_BANK, default='other')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = _("refilling")
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "Refilling: %.2f for %s" % (self.amount, self.customer.user.get_display_name())
|
return "Refilling: %.2f for %s" % (self.amount, self.customer.user.get_display_name())
|
||||||
|
|
||||||
@ -197,6 +212,9 @@ class Selling(models.Model):
|
|||||||
customer = models.ForeignKey(Customer, related_name="buyings", blank=False)
|
customer = models.ForeignKey(Customer, related_name="buyings", blank=False)
|
||||||
date = models.DateTimeField(_('date'), auto_now=True)
|
date = models.DateTimeField(_('date'), auto_now=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = _("selling")
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "Selling: %d x %s (%f) for %s" % (self.quantity, self.product.name,
|
return "Selling: %d x %s (%f) for %s" % (self.quantity, self.product.name,
|
||||||
self.quantity*self.unit_price, self.customer.user.get_display_name())
|
self.quantity*self.unit_price, self.customer.user.get_display_name())
|
||||||
@ -219,14 +237,11 @@ class Permanency(models.Model):
|
|||||||
start = models.DateTimeField(_('start date'))
|
start = models.DateTimeField(_('start date'))
|
||||||
end = models.DateTimeField(_('end date'))
|
end = models.DateTimeField(_('end date'))
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = _("permanency")
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "%s in %s from %s to %s" % (self.user, self.counter,
|
return "%s in %s from %s to %s" % (self.user, self.counter,
|
||||||
self.start.strftime("%Y-%m-%d %H:%M:%S"), self.end.strftime("%Y-%m-%d %H:%M:%S"))
|
self.start.strftime("%Y-%m-%d %H:%M:%S"), self.end.strftime("%Y-%m-%d %H:%M:%S"))
|
||||||
|
|
||||||
|
|
||||||
# TODO:
|
|
||||||
# une classe Vente
|
|
||||||
# foreign key vers comptoir, vendeur, client, produit, mais stocker le prix du produit, pour gerer les maj de prix
|
|
||||||
# une classe Rechargement
|
|
||||||
# foreign key vers comptoir, vendeur, client, plus montant
|
|
||||||
|
|
||||||
|
24
counter/templates/counter/producttype_list.jinja
Normal file
24
counter/templates/counter/producttype_list.jinja
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
{% extends "core/base.jinja" %}
|
||||||
|
|
||||||
|
{% block title %}
|
||||||
|
{% trans %}Product type list{% endtrans %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<p><a href="{{ url('counter:new_producttype') }}">{% trans %}New product type{% endtrans %}</a></p>
|
||||||
|
{% if producttype_list %}
|
||||||
|
<h3>{% trans %}Product type list{% endtrans %}</h3>
|
||||||
|
<ul>
|
||||||
|
{% for t in producttype_list %}
|
||||||
|
<li><a href="{{ url('counter:producttype_edit', type_id=t.id) }}">{{ t }}</a></li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% else %}
|
||||||
|
{% trans %}There is no product types in this website.{% endtrans %}
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -14,6 +14,9 @@ urlpatterns = [
|
|||||||
url(r'^admin/product/list$', ProductListView.as_view(), name='product_list'),
|
url(r'^admin/product/list$', ProductListView.as_view(), name='product_list'),
|
||||||
url(r'^admin/product/create$', ProductCreateView.as_view(), name='new_product'),
|
url(r'^admin/product/create$', ProductCreateView.as_view(), name='new_product'),
|
||||||
url(r'^admin/product/(?P<product_id>[0-9]+)$', ProductEditView.as_view(), name='product_edit'),
|
url(r'^admin/product/(?P<product_id>[0-9]+)$', ProductEditView.as_view(), name='product_edit'),
|
||||||
|
url(r'^admin/producttype/list$', ProductTypeListView.as_view(), name='producttype_list'),
|
||||||
|
url(r'^admin/producttype/create$', ProductTypeCreateView.as_view(), name='new_producttype'),
|
||||||
|
url(r'^admin/producttype/(?P<type_id>[0-9]+)$', ProductTypeEditView.as_view(), name='producttype_edit'),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ import re
|
|||||||
|
|
||||||
from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin
|
from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin
|
||||||
from subscription.models import Subscriber
|
from subscription.models import Subscriber
|
||||||
from counter.models import Counter, Customer, Product, Selling, Refilling
|
from counter.models import Counter, Customer, Product, Selling, Refilling, ProductType
|
||||||
|
|
||||||
class GetUserForm(forms.Form):
|
class GetUserForm(forms.Form):
|
||||||
"""
|
"""
|
||||||
@ -42,7 +42,7 @@ class GetUserForm(forms.Form):
|
|||||||
elif cleaned_data['id'] is not None:
|
elif cleaned_data['id'] is not None:
|
||||||
user = Customer.objects.filter(user=cleaned_data['id']).first()
|
user = Customer.objects.filter(user=cleaned_data['id']).first()
|
||||||
if user is None:
|
if user is None:
|
||||||
raise forms.ValidationError("User not found")
|
raise forms.ValidationError(_("User not found"))
|
||||||
cleaned_data['user_id'] = user.user.id
|
cleaned_data['user_id'] = user.user.id
|
||||||
return cleaned_data
|
return cleaned_data
|
||||||
|
|
||||||
@ -69,7 +69,6 @@ class CounterMain(DetailView, ProcessFormView, FormMixin):
|
|||||||
if self.request.method == 'POST':
|
if self.request.method == 'POST':
|
||||||
self.object = self.get_object()
|
self.object = self.get_object()
|
||||||
kwargs = super(CounterMain, self).get_context_data(**kwargs)
|
kwargs = super(CounterMain, self).get_context_data(**kwargs)
|
||||||
# TODO: make some checks on the counter type, in order not to make the AuthenticationForm if there is no need to
|
|
||||||
kwargs['login_form'] = AuthenticationForm()
|
kwargs['login_form'] = AuthenticationForm()
|
||||||
kwargs['login_form'].fields['username'].widget.attrs['autofocus'] = True
|
kwargs['login_form'].fields['username'].widget.attrs['autofocus'] = True
|
||||||
kwargs['form'] = self.get_form()
|
kwargs['form'] = self.get_form()
|
||||||
@ -353,6 +352,30 @@ class CounterDeleteView(CanEditMixin, DeleteView):
|
|||||||
|
|
||||||
# Product management
|
# Product management
|
||||||
|
|
||||||
|
class ProductTypeListView(ListView):
|
||||||
|
"""
|
||||||
|
A list view for the admins
|
||||||
|
"""
|
||||||
|
model = ProductType
|
||||||
|
template_name = 'counter/producttype_list.jinja'
|
||||||
|
|
||||||
|
class ProductTypeCreateView(CreateView):
|
||||||
|
"""
|
||||||
|
A create view for the admins
|
||||||
|
"""
|
||||||
|
model = ProductType
|
||||||
|
fields = ['name', 'description', 'icon']
|
||||||
|
template_name = 'core/create.jinja'
|
||||||
|
|
||||||
|
class ProductTypeEditView(UpdateView):
|
||||||
|
"""
|
||||||
|
An edit view for the admins
|
||||||
|
"""
|
||||||
|
model = ProductType
|
||||||
|
template_name = 'core/edit.jinja'
|
||||||
|
fields = ['name', 'description', 'icon']
|
||||||
|
pk_url_kwarg = "type_id"
|
||||||
|
|
||||||
class ProductListView(ListView):
|
class ProductListView(ListView):
|
||||||
"""
|
"""
|
||||||
A list view for the admins
|
A list view for the admins
|
||||||
@ -365,15 +388,17 @@ class ProductCreateView(CreateView):
|
|||||||
A create view for the admins
|
A create view for the admins
|
||||||
"""
|
"""
|
||||||
model = Product
|
model = Product
|
||||||
template_name = 'core/edit.jinja'
|
fields = ['name', 'description', 'product_type', 'code', 'purchase_price',
|
||||||
|
'selling_price', 'special_selling_price', 'icon', 'club']
|
||||||
|
template_name = 'core/create.jinja'
|
||||||
|
|
||||||
class ProductEditView(UpdateView):
|
class ProductEditView(UpdateView):
|
||||||
"""
|
"""
|
||||||
An edit view for the admins
|
An edit view for the admins
|
||||||
"""
|
"""
|
||||||
model = Product
|
model = Product
|
||||||
form_class = modelform_factory(Product, fields=['name', 'description', 'product_type', 'code', 'purchase_price',
|
fields = ['name', 'description', 'product_type', 'code', 'purchase_price',
|
||||||
'selling_price', 'special_selling_price', 'icon', 'club'])
|
'selling_price', 'special_selling_price', 'icon', 'club']
|
||||||
pk_url_kwarg = "product_id"
|
pk_url_kwarg = "product_id"
|
||||||
template_name = 'core/edit.jinja'
|
template_name = 'core/edit.jinja'
|
||||||
# TODO: add management of the 'counters' ForeignKey
|
# TODO: add management of the 'counters' ForeignKey
|
||||||
@ -391,8 +416,8 @@ class UserAccountView(DetailView):
|
|||||||
def dispatch(self, request, *arg, **kwargs):
|
def dispatch(self, request, *arg, **kwargs):
|
||||||
res = super(UserAccountView, self).dispatch(request, *arg, **kwargs)
|
res = super(UserAccountView, self).dispatch(request, *arg, **kwargs)
|
||||||
if (self.object.user == request.user
|
if (self.object.user == request.user
|
||||||
or request.user.is_in_group(settings.SITH_GROUPS['accounting-admin']['name'])
|
or request.user.is_in_group(settings.SITH_GROUPS['accounting-admin']['name'])
|
||||||
or request.user.is_in_group(settings.SITH_GROUPS['root']['name'])):
|
or request.user.is_in_group(settings.SITH_GROUPS['root']['name'])):
|
||||||
return res
|
return res
|
||||||
raise PermissionDenied
|
raise PermissionDenied
|
||||||
|
|
||||||
|
Binary file not shown.
@ -6,7 +6,7 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2016-07-27 00:05+0200\n"
|
"POT-Creation-Date: 2016-07-27 19:57+0200\n"
|
||||||
"PO-Revision-Date: 2016-07-18\n"
|
"PO-Revision-Date: 2016-07-18\n"
|
||||||
"Last-Translator: Skia <skia@libskia.so>\n"
|
"Last-Translator: Skia <skia@libskia.so>\n"
|
||||||
"Language-Team: AE info <ae.info@utbm.fr>\n"
|
"Language-Team: AE info <ae.info@utbm.fr>\n"
|
||||||
@ -17,8 +17,8 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
#: accounting/models.py:32 accounting/models.py:55 accounting/models.py:94
|
#: accounting/models.py:32 accounting/models.py:55 accounting/models.py:94
|
||||||
#: club/models.py:18 counter/models.py:38 counter/models.py:57
|
#: club/models.py:18 counter/models.py:38 counter/models.py:63
|
||||||
#: counter/models.py:79
|
#: counter/models.py:91
|
||||||
msgid "name"
|
msgid "name"
|
||||||
msgstr "nom"
|
msgstr "nom"
|
||||||
|
|
||||||
@ -30,11 +30,11 @@ msgstr "IBAN"
|
|||||||
msgid "account number"
|
msgid "account number"
|
||||||
msgstr "numero de compte"
|
msgstr "numero de compte"
|
||||||
|
|
||||||
#: accounting/models.py:92 club/models.py:109 counter/models.py:216
|
#: accounting/models.py:92 club/models.py:109 counter/models.py:237
|
||||||
msgid "start date"
|
msgid "start date"
|
||||||
msgstr "date de début"
|
msgstr "date de début"
|
||||||
|
|
||||||
#: accounting/models.py:93 club/models.py:110 counter/models.py:217
|
#: accounting/models.py:93 club/models.py:110 counter/models.py:238
|
||||||
msgid "end date"
|
msgid "end date"
|
||||||
msgstr "date de fin"
|
msgstr "date de fin"
|
||||||
|
|
||||||
@ -43,7 +43,7 @@ msgid "is closed"
|
|||||||
msgstr "est fermé"
|
msgstr "est fermé"
|
||||||
|
|
||||||
#: accounting/models.py:97 accounting/models.py:136 counter/models.py:21
|
#: accounting/models.py:97 accounting/models.py:136 counter/models.py:21
|
||||||
#: counter/models.py:164
|
#: counter/models.py:179
|
||||||
msgid "amount"
|
msgid "amount"
|
||||||
msgstr "montant"
|
msgstr "montant"
|
||||||
|
|
||||||
@ -55,8 +55,8 @@ msgstr "montant effectif"
|
|||||||
msgid "number"
|
msgid "number"
|
||||||
msgstr "numéro"
|
msgstr "numéro"
|
||||||
|
|
||||||
#: accounting/models.py:137 core/models.py:462 counter/models.py:167
|
#: accounting/models.py:137 core/models.py:463 counter/models.py:182
|
||||||
#: counter/models.py:195 eboutic/models.py:13 eboutic/models.py:46
|
#: counter/models.py:213 eboutic/models.py:13 eboutic/models.py:46
|
||||||
msgid "date"
|
msgid "date"
|
||||||
msgstr "date"
|
msgstr "date"
|
||||||
|
|
||||||
@ -68,7 +68,7 @@ msgstr "intitulé"
|
|||||||
msgid "remark"
|
msgid "remark"
|
||||||
msgstr "remarque"
|
msgstr "remarque"
|
||||||
|
|
||||||
#: accounting/models.py:140 counter/models.py:168 eboutic/models.py:48
|
#: accounting/models.py:140 counter/models.py:183 eboutic/models.py:48
|
||||||
#: subscription/models.py:34
|
#: subscription/models.py:34
|
||||||
msgid "payment method"
|
msgid "payment method"
|
||||||
msgstr "méthode de paiement"
|
msgstr "méthode de paiement"
|
||||||
@ -90,7 +90,7 @@ msgstr ""
|
|||||||
"La date ne peut pas être avant la date de début du journal, qui est\n"
|
"La date ne peut pas être avant la date de début du journal, qui est\n"
|
||||||
"%(start_date)s."
|
"%(start_date)s."
|
||||||
|
|
||||||
#: accounting/models.py:197 counter/models.py:60
|
#: accounting/models.py:197 counter/models.py:66
|
||||||
msgid "code"
|
msgid "code"
|
||||||
msgstr "code"
|
msgstr "code"
|
||||||
|
|
||||||
@ -114,12 +114,12 @@ msgstr "Il n'y a pas de types comptable dans ce site web."
|
|||||||
#: accounting/templates/accounting/bank_account_details.jinja:5
|
#: accounting/templates/accounting/bank_account_details.jinja:5
|
||||||
#: accounting/templates/accounting/club_account_details.jinja:5
|
#: accounting/templates/accounting/club_account_details.jinja:5
|
||||||
#: accounting/templates/accounting/journal_details.jinja:5
|
#: accounting/templates/accounting/journal_details.jinja:5
|
||||||
#: core/templates/core/user_tools.jinja:36
|
#: core/templates/core/user_tools.jinja:38
|
||||||
msgid "Accounting"
|
msgid "Accounting"
|
||||||
msgstr "Comptabilité"
|
msgstr "Comptabilité"
|
||||||
|
|
||||||
#: accounting/templates/accounting/bank_account_details.jinja:8
|
#: accounting/templates/accounting/bank_account_details.jinja:8
|
||||||
#: core/templates/core/user_tools.jinja:43
|
#: core/templates/core/user_tools.jinja:45
|
||||||
msgid "Bank account: "
|
msgid "Bank account: "
|
||||||
msgstr "Compte en banque : "
|
msgstr "Compte en banque : "
|
||||||
|
|
||||||
@ -146,7 +146,7 @@ msgstr "Nouveau compte club"
|
|||||||
#: accounting/templates/accounting/journal_details.jinja:51
|
#: accounting/templates/accounting/journal_details.jinja:51
|
||||||
#: club/templates/club/club_detail.jinja:7 core/templates/core/page.jinja:31
|
#: club/templates/club/club_detail.jinja:7 core/templates/core/page.jinja:31
|
||||||
#: core/templates/core/user_base.jinja:8
|
#: core/templates/core/user_base.jinja:8
|
||||||
#: core/templates/core/user_tools.jinja:30
|
#: core/templates/core/user_tools.jinja:32
|
||||||
#: counter/templates/counter/counter_list.jinja:15
|
#: counter/templates/counter/counter_list.jinja:15
|
||||||
#: counter/templates/counter/counter_list.jinja:18
|
#: counter/templates/counter/counter_list.jinja:18
|
||||||
msgid "Edit"
|
msgid "Edit"
|
||||||
@ -323,7 +323,7 @@ msgid "role"
|
|||||||
msgstr "rôle"
|
msgstr "rôle"
|
||||||
|
|
||||||
#: club/models.py:113 core/models.py:27 counter/models.py:39
|
#: club/models.py:113 core/models.py:27 counter/models.py:39
|
||||||
#: counter/models.py:58
|
#: counter/models.py:64
|
||||||
msgid "description"
|
msgid "description"
|
||||||
msgstr "description"
|
msgstr "description"
|
||||||
|
|
||||||
@ -396,7 +396,7 @@ msgid "Add"
|
|||||||
msgstr "Ajouter"
|
msgstr "Ajouter"
|
||||||
|
|
||||||
#: club/templates/club/club_tools.jinja:4
|
#: club/templates/club/club_tools.jinja:4
|
||||||
#: core/templates/core/user_tools.jinja:54
|
#: core/templates/core/user_tools.jinja:56
|
||||||
msgid "Club tools"
|
msgid "Club tools"
|
||||||
msgstr "Outils club"
|
msgstr "Outils club"
|
||||||
|
|
||||||
@ -507,10 +507,14 @@ msgid "Loop in page tree"
|
|||||||
msgstr "Boucle dans l'arborescence des pages"
|
msgstr "Boucle dans l'arborescence des pages"
|
||||||
|
|
||||||
#: core/models.py:460
|
#: core/models.py:460
|
||||||
|
msgid "revision"
|
||||||
|
msgstr "révision"
|
||||||
|
|
||||||
|
#: core/models.py:461
|
||||||
msgid "page title"
|
msgid "page title"
|
||||||
msgstr "titre de la page"
|
msgstr "titre de la page"
|
||||||
|
|
||||||
#: core/models.py:461
|
#: core/models.py:462
|
||||||
msgid "page content"
|
msgid "page content"
|
||||||
msgstr "contenu de la page"
|
msgstr "contenu de la page"
|
||||||
|
|
||||||
@ -563,13 +567,17 @@ msgstr "Pages"
|
|||||||
msgid "Clubs"
|
msgid "Clubs"
|
||||||
msgstr "Clubs"
|
msgstr "Clubs"
|
||||||
|
|
||||||
#: core/templates/core/base.jinja:45
|
#: core/templates/core/base.jinja:33
|
||||||
|
msgid "Services"
|
||||||
|
msgstr "Services"
|
||||||
|
|
||||||
|
#: core/templates/core/base.jinja:46
|
||||||
msgid "Site made by good people"
|
msgid "Site made by good people"
|
||||||
msgstr "Site réalisé par des gens biens"
|
msgstr "Site réalisé par des gens biens"
|
||||||
|
|
||||||
#: core/templates/core/create.jinja:4
|
#: core/templates/core/create.jinja:4
|
||||||
msgid "Create"
|
msgid "Create %(name)s"
|
||||||
msgstr "Créer"
|
msgstr "Créer %(name)s"
|
||||||
|
|
||||||
#: core/templates/core/delete_confirm.jinja:4
|
#: core/templates/core/delete_confirm.jinja:4
|
||||||
msgid "Delete confirmation"
|
msgid "Delete confirmation"
|
||||||
@ -676,15 +684,19 @@ msgstr ""
|
|||||||
"Ceci n'est peut-être pas la dernière version de la page. Vous consultez la "
|
"Ceci n'est peut-être pas la dernière version de la page. Vous consultez la "
|
||||||
"version %(rev_id)s."
|
"version %(rev_id)s."
|
||||||
|
|
||||||
#: core/templates/core/page_hist.jinja:4
|
#: core/templates/core/page_hist.jinja:6
|
||||||
msgid "Page history"
|
msgid "Page history"
|
||||||
msgstr "Historique de la page"
|
msgstr "Historique de la page"
|
||||||
|
|
||||||
#: core/templates/core/page_hist.jinja:5
|
#: core/templates/core/page_hist.jinja:7
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "You're seeing the history of page \"%(page_name)s\""
|
msgid "You're seeing the history of page \"%(page_name)s\""
|
||||||
msgstr "Vous consultez l'historique de la page \"%(page_name)s\""
|
msgstr "Vous consultez l'historique de la page \"%(page_name)s\""
|
||||||
|
|
||||||
|
#: core/templates/core/page_hist.jinja:11
|
||||||
|
msgid "last"
|
||||||
|
msgstr "actuel"
|
||||||
|
|
||||||
#: core/templates/core/page_list.jinja:16
|
#: core/templates/core/page_list.jinja:16
|
||||||
msgid "There is no page in this website."
|
msgid "There is no page in this website."
|
||||||
msgstr "Il n'y a pas de page sur ce site web."
|
msgstr "Il n'y a pas de page sur ce site web."
|
||||||
@ -874,11 +886,19 @@ msgstr "Comptoirs"
|
|||||||
msgid "General counters management"
|
msgid "General counters management"
|
||||||
msgstr "Gestion générale des comptoirs"
|
msgstr "Gestion générale des comptoirs"
|
||||||
|
|
||||||
#: core/templates/core/user_tools.jinja:39
|
#: core/templates/core/user_tools.jinja:26
|
||||||
|
msgid "Products management"
|
||||||
|
msgstr "Gestion des produits"
|
||||||
|
|
||||||
|
#: core/templates/core/user_tools.jinja:27
|
||||||
|
msgid "Products type management"
|
||||||
|
msgstr "Gestion des types de produit"
|
||||||
|
|
||||||
|
#: core/templates/core/user_tools.jinja:41
|
||||||
msgid "General accounting"
|
msgid "General accounting"
|
||||||
msgstr "Comptabilité générale"
|
msgstr "Comptabilité générale"
|
||||||
|
|
||||||
#: core/templates/core/user_tools.jinja:47
|
#: core/templates/core/user_tools.jinja:49
|
||||||
msgid "Club account: "
|
msgid "Club account: "
|
||||||
msgstr "Compte club : "
|
msgstr "Compte club : "
|
||||||
|
|
||||||
@ -894,48 +914,72 @@ msgstr "client"
|
|||||||
msgid "customers"
|
msgid "customers"
|
||||||
msgstr "clients"
|
msgstr "clients"
|
||||||
|
|
||||||
#: counter/models.py:61
|
#: counter/models.py:43 eboutic/models.py:77
|
||||||
|
msgid "product type"
|
||||||
|
msgstr "type du produit"
|
||||||
|
|
||||||
|
#: counter/models.py:67
|
||||||
msgid "purchase price"
|
msgid "purchase price"
|
||||||
msgstr "prix d'achat"
|
msgstr "prix d'achat"
|
||||||
|
|
||||||
#: counter/models.py:62
|
#: counter/models.py:68
|
||||||
msgid "selling price"
|
msgid "selling price"
|
||||||
msgstr "prix de vente"
|
msgstr "prix de vente"
|
||||||
|
|
||||||
#: counter/models.py:63
|
#: counter/models.py:69
|
||||||
msgid "special selling price"
|
msgid "special selling price"
|
||||||
msgstr "prix de vente spécial"
|
msgstr "prix de vente spécial"
|
||||||
|
|
||||||
#: counter/models.py:82 subscription/models.py:29
|
#: counter/models.py:74
|
||||||
|
msgid "product"
|
||||||
|
msgstr "produit"
|
||||||
|
|
||||||
|
#: counter/models.py:94 subscription/models.py:29
|
||||||
msgid "subscription type"
|
msgid "subscription type"
|
||||||
msgstr "type d'inscription"
|
msgstr "type d'inscription"
|
||||||
|
|
||||||
#: counter/models.py:84
|
#: counter/models.py:96
|
||||||
msgid "Bar"
|
msgid "Bar"
|
||||||
msgstr "Bar"
|
msgstr "Bar"
|
||||||
|
|
||||||
#: counter/models.py:84
|
#: counter/models.py:96
|
||||||
msgid "Office"
|
msgid "Office"
|
||||||
msgstr "Bureau"
|
msgstr "Bureau"
|
||||||
|
|
||||||
#: counter/models.py:84 eboutic/templates/eboutic/eboutic_main.jinja:20
|
#: counter/models.py:96 eboutic/templates/eboutic/eboutic_main.jinja:20
|
||||||
#: eboutic/templates/eboutic/eboutic_makecommand.jinja:4
|
#: eboutic/templates/eboutic/eboutic_makecommand.jinja:4
|
||||||
#: eboutic/templates/eboutic/eboutic_payment_result.jinja:4
|
#: eboutic/templates/eboutic/eboutic_payment_result.jinja:4
|
||||||
msgid "Eboutic"
|
msgid "Eboutic"
|
||||||
msgstr "Eboutic"
|
msgstr "Eboutic"
|
||||||
|
|
||||||
#: counter/models.py:170
|
#: counter/models.py:102
|
||||||
|
msgid "counter"
|
||||||
|
msgstr "comptoir"
|
||||||
|
|
||||||
|
#: counter/models.py:185
|
||||||
msgid "bank"
|
msgid "bank"
|
||||||
msgstr "banque"
|
msgstr "banque"
|
||||||
|
|
||||||
#: counter/models.py:191 eboutic/models.py:78
|
#: counter/models.py:189
|
||||||
|
msgid "refilling"
|
||||||
|
msgstr "rechargement"
|
||||||
|
|
||||||
|
#: counter/models.py:209 eboutic/models.py:78
|
||||||
msgid "unit price"
|
msgid "unit price"
|
||||||
msgstr "prix unitaire"
|
msgstr "prix unitaire"
|
||||||
|
|
||||||
#: counter/models.py:192 eboutic/models.py:79
|
#: counter/models.py:210 eboutic/models.py:79
|
||||||
msgid "quantity"
|
msgid "quantity"
|
||||||
msgstr "quantité"
|
msgstr "quantité"
|
||||||
|
|
||||||
|
#: counter/models.py:216
|
||||||
|
msgid "selling"
|
||||||
|
msgstr "vente"
|
||||||
|
|
||||||
|
#: counter/models.py:241
|
||||||
|
msgid "permanency"
|
||||||
|
msgstr "permanence"
|
||||||
|
|
||||||
#: counter/templates/counter/counter_click.jinja:20
|
#: counter/templates/counter/counter_click.jinja:20
|
||||||
msgid "Counter"
|
msgid "Counter"
|
||||||
msgstr "Comptoir"
|
msgstr "Comptoir"
|
||||||
@ -1040,6 +1084,32 @@ msgstr "Merci de vous identifier"
|
|||||||
msgid "Barman: "
|
msgid "Barman: "
|
||||||
msgstr "Barman : "
|
msgstr "Barman : "
|
||||||
|
|
||||||
|
#: counter/templates/counter/product_list.jinja:4
|
||||||
|
#: counter/templates/counter/product_list.jinja:10
|
||||||
|
msgid "Product list"
|
||||||
|
msgstr "Liste des produits"
|
||||||
|
|
||||||
|
#: counter/templates/counter/product_list.jinja:8
|
||||||
|
msgid "New product"
|
||||||
|
msgstr "Nouveau produit"
|
||||||
|
|
||||||
|
#: counter/templates/counter/product_list.jinja:17
|
||||||
|
msgid "There is no products in this website."
|
||||||
|
msgstr "Il n'y a pas de produits dans ce site web."
|
||||||
|
|
||||||
|
#: counter/templates/counter/producttype_list.jinja:4
|
||||||
|
#: counter/templates/counter/producttype_list.jinja:10
|
||||||
|
msgid "Product type list"
|
||||||
|
msgstr "Liste des types de produit"
|
||||||
|
|
||||||
|
#: counter/templates/counter/producttype_list.jinja:8
|
||||||
|
msgid "New product type"
|
||||||
|
msgstr "Nouveau type de produit"
|
||||||
|
|
||||||
|
#: counter/templates/counter/producttype_list.jinja:17
|
||||||
|
msgid "There is no product types in this website."
|
||||||
|
msgstr "Il n'y a pas de types de produit dans ce site web."
|
||||||
|
|
||||||
#: counter/templates/counter/user_account.jinja:4
|
#: counter/templates/counter/user_account.jinja:4
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "%(user_name)s's account"
|
msgid "%(user_name)s's account"
|
||||||
@ -1082,15 +1152,19 @@ msgstr "Factures"
|
|||||||
msgid "Items"
|
msgid "Items"
|
||||||
msgstr "Articles"
|
msgstr "Articles"
|
||||||
|
|
||||||
#: counter/views.py:208
|
#: counter/views.py:45
|
||||||
|
msgid "User not found"
|
||||||
|
msgstr "Utilisateur non trouvé"
|
||||||
|
|
||||||
|
#: counter/views.py:207
|
||||||
msgid "END"
|
msgid "END"
|
||||||
msgstr "FIN"
|
msgstr "FIN"
|
||||||
|
|
||||||
#: counter/views.py:210
|
#: counter/views.py:209
|
||||||
msgid "CAN"
|
msgid "CAN"
|
||||||
msgstr "ANN"
|
msgstr "ANN"
|
||||||
|
|
||||||
#: counter/views.py:240
|
#: counter/views.py:239
|
||||||
msgid "You have not enough money to buy all the basket"
|
msgid "You have not enough money to buy all the basket"
|
||||||
msgstr "Vous n'avez pas assez d'argent pour acheter le panier"
|
msgstr "Vous n'avez pas assez d'argent pour acheter le panier"
|
||||||
|
|
||||||
@ -1118,10 +1192,6 @@ msgstr "ID du produit"
|
|||||||
msgid "product name"
|
msgid "product name"
|
||||||
msgstr "nom du produit"
|
msgstr "nom du produit"
|
||||||
|
|
||||||
#: eboutic/models.py:77
|
|
||||||
msgid "product type"
|
|
||||||
msgstr "type du produit"
|
|
||||||
|
|
||||||
#: eboutic/models.py:88
|
#: eboutic/models.py:88
|
||||||
msgid "basket"
|
msgid "basket"
|
||||||
msgstr "panier"
|
msgstr "panier"
|
||||||
@ -1141,7 +1211,9 @@ msgstr "Payer avec une carte banquaire"
|
|||||||
#: eboutic/templates/eboutic/eboutic_makecommand.jinja:34
|
#: eboutic/templates/eboutic/eboutic_makecommand.jinja:34
|
||||||
msgid ""
|
msgid ""
|
||||||
"AE account payment disabled because your basket contains refilling items."
|
"AE account payment disabled because your basket contains refilling items."
|
||||||
msgstr "Paiement par compte AE désactivé parce que votre panier contient des bons de rechargement."
|
msgstr ""
|
||||||
|
"Paiement par compte AE désactivé parce que votre panier contient des bons de "
|
||||||
|
"rechargement."
|
||||||
|
|
||||||
#: eboutic/templates/eboutic/eboutic_makecommand.jinja:39
|
#: eboutic/templates/eboutic/eboutic_makecommand.jinja:39
|
||||||
msgid "Pay with Sith account"
|
msgid "Pay with Sith account"
|
||||||
@ -1268,6 +1340,9 @@ msgid "You must either choose an existing user or create a new one properly"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Vous devez soit choisir un utilisateur existant, ou en créer un proprement."
|
"Vous devez soit choisir un utilisateur existant, ou en créer un proprement."
|
||||||
|
|
||||||
|
#~ msgid "Create"
|
||||||
|
#~ msgstr "Créer"
|
||||||
|
|
||||||
#~ msgid "%(c)s counter"
|
#~ msgid "%(c)s counter"
|
||||||
#~ msgstr "Comptoir %(c)s"
|
#~ msgstr "Comptoir %(c)s"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user