mirror of
https://github.com/ae-utbm/sith.git
synced 2024-11-25 18:44:23 +00:00
Add support for product buying groups + many cosmetics and form pimping
This commit is contained in:
parent
00f05c71c5
commit
dbf0653baf
@ -1,7 +1,8 @@
|
|||||||
from ajax_select import register, LookupChannel
|
from ajax_select import register, LookupChannel
|
||||||
|
|
||||||
from core.views.site import search_user
|
from core.views.site import search_user
|
||||||
from core.models import User
|
from core.models import User, Group
|
||||||
|
from club.models import Club
|
||||||
from counter.models import Product, Counter
|
from counter.models import Product, Counter
|
||||||
|
|
||||||
@register('users')
|
@register('users')
|
||||||
@ -17,6 +18,32 @@ class UsersLookup(LookupChannel):
|
|||||||
def format_item_display(self, item):
|
def format_item_display(self, item):
|
||||||
return item.get_display_name()
|
return item.get_display_name()
|
||||||
|
|
||||||
|
@register('groups')
|
||||||
|
class GroupsLookup(LookupChannel):
|
||||||
|
model = Group
|
||||||
|
|
||||||
|
def get_query(self, q, request):
|
||||||
|
return self.model.objects.filter(name__icontains=q)[:50]
|
||||||
|
|
||||||
|
def format_match(self, obj):
|
||||||
|
return obj.name
|
||||||
|
|
||||||
|
def format_item_display(self, item):
|
||||||
|
return item.name
|
||||||
|
|
||||||
|
@register('clubs')
|
||||||
|
class ClubLookup(LookupChannel):
|
||||||
|
model = Club
|
||||||
|
|
||||||
|
def get_query(self, q, request):
|
||||||
|
return self.model.objects.filter(name__icontains=q)[:50]
|
||||||
|
|
||||||
|
def format_match(self, obj):
|
||||||
|
return obj.name
|
||||||
|
|
||||||
|
def format_item_display(self, item):
|
||||||
|
return item.name
|
||||||
|
|
||||||
@register('counters')
|
@register('counters')
|
||||||
class CountersLookup(LookupChannel):
|
class CountersLookup(LookupChannel):
|
||||||
model = Counter
|
model = Counter
|
||||||
|
@ -368,7 +368,7 @@ class User(AbstractBaseUser):
|
|||||||
<em>%s</em>
|
<em>%s</em>
|
||||||
</a>
|
</a>
|
||||||
""" % (
|
""" % (
|
||||||
self.profile_pict.get_download_url() if self.profile_pict else staticfiles_storage.url("core/img/na.gif"),
|
self.profile_pict.get_download_url() if self.profile_pict else staticfiles_storage.url("core/img/unknown.jpg"),
|
||||||
_("Profile"),
|
_("Profile"),
|
||||||
escape(self.get_display_name()),
|
escape(self.get_display_name()),
|
||||||
)
|
)
|
||||||
|
BIN
core/static/core/img/unknown.jpg
Normal file
BIN
core/static/core/img/unknown.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 49 KiB |
BIN
core/static/core/img/yug.jpg
Normal file
BIN
core/static/core/img/yug.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 54 KiB |
@ -183,10 +183,10 @@ tbody>tr:hover {
|
|||||||
}
|
}
|
||||||
#user_profile h4 { border-bottom: 1px solid grey; max-width: 60%; }
|
#user_profile h4 { border-bottom: 1px solid grey; max-width: 60%; }
|
||||||
#user_profile #left_column {
|
#user_profile #left_column {
|
||||||
max-width: 59%;
|
width: 59%;
|
||||||
}
|
}
|
||||||
#user_profile #right_column {
|
#user_profile #right_column {
|
||||||
max-width: 40%;
|
width: 40%;
|
||||||
float: right;
|
float: right;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
<a href="{{ url('core:user_tools') }}">{% trans %}Tools{% endtrans %}</a> |
|
<a href="{{ url('core:user_tools') }}">{% trans %}Tools{% endtrans %}</a> |
|
||||||
<a href="{{ url('core:logout') }}">{% trans %}Logout{% endtrans %}</a>
|
<a href="{{ url('core:logout') }}">{% trans %}Logout{% endtrans %}</a>
|
||||||
<form action="{{ url('core:search') }}" method="GET">
|
<form action="{{ url('core:search') }}" method="GET">
|
||||||
<input type="text" placeholder="{% trans %}Search{% endtrans %}" name="query" />
|
<input type="text" placeholder="{% trans %}Search{% endtrans %}" name="query" id="search" />
|
||||||
<input type="submit" value="{% trans %}Search{% endtrans %}" style="display: none;" />
|
<input type="submit" value="{% trans %}Search{% endtrans %}" style="display: none;" />
|
||||||
</form>
|
</form>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -94,6 +94,13 @@ $('.select_date').datepicker({
|
|||||||
monthNamesShort: $.datepicker.regional[ "{{ request.LANGUAGE_CODE }}" ].monthNamesShort,
|
monthNamesShort: $.datepicker.regional[ "{{ request.LANGUAGE_CODE }}" ].monthNamesShort,
|
||||||
monthNames: $.datepicker.regional[ "{{ request.LANGUAGE_CODE }}" ].monthNames,
|
monthNames: $.datepicker.regional[ "{{ request.LANGUAGE_CODE }}" ].monthNames,
|
||||||
}).datepicker( $.datepicker.regional[ "{{ request.LANGUAGE_CODE }}"] );
|
}).datepicker( $.datepicker.regional[ "{{ request.LANGUAGE_CODE }}"] );
|
||||||
|
$(document).keydown(function (e) {
|
||||||
|
if ($(e.target).is('input')) { return }
|
||||||
|
if (e.keyCode == 83) {
|
||||||
|
$("#search").focus();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</body>
|
</body>
|
||||||
|
@ -11,7 +11,9 @@
|
|||||||
<div id="right_column">
|
<div id="right_column">
|
||||||
<div id="pictures">
|
<div id="pictures">
|
||||||
{% if profile.profile_pict %}
|
{% if profile.profile_pict %}
|
||||||
<img src="{{ profile.profile_pict.get_download_url() }}" alt="{% trans %}Profile{% endtrans %}" />
|
<img src="{{ profile.profile_pict.get_download_url() }}" alt="{% trans %}Profile{% endtrans %}" id="picture" />
|
||||||
|
{% else %}
|
||||||
|
<img src="{{ static('core/img/unknown.jpg') }}" alt="{% trans %}Profile{% endtrans %}" id="picture" />
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<p id="quote"><em>{{ profile.quote }}</em></p>
|
<p id="quote"><em>{{ profile.quote }}</em></p>
|
||||||
@ -53,4 +55,23 @@
|
|||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block script %}
|
||||||
|
{{ super() }}
|
||||||
|
<script>
|
||||||
|
$( function() {
|
||||||
|
var keys = [];
|
||||||
|
var pattern = "71,85,89,71,85,89";
|
||||||
|
$(document).keydown(function (e) {
|
||||||
|
keys.push(e.keyCode);
|
||||||
|
if (keys.toString()==pattern) {
|
||||||
|
keys = [];
|
||||||
|
$("#right_column img").attr("src", "{{ static('core/img/yug.jpg') }}");
|
||||||
|
}
|
||||||
|
if (keys.length==6) {
|
||||||
|
keys.shift();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} );
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
{% block infos %}
|
{% block infos %}
|
||||||
{% if profile.permanencies %}
|
{% if profile.permanencies %}
|
||||||
<div>
|
<div>
|
||||||
<h3>Permanencies</h3>
|
<h3>{% trans %}Permanencies{% endtrans %}</h3>
|
||||||
<p>Total: {{ total_perm_time }}</p>
|
<p>Total: {{ total_perm_time }}</p>
|
||||||
<p>Foyer: {{ total_foyer_time }}</p>
|
<p>Foyer: {{ total_foyer_time }}</p>
|
||||||
<p>MDE: {{ total_mde_time }}</p>
|
<p>MDE: {{ total_mde_time }}</p>
|
||||||
|
36
counter/migrations/0016_auto_20160820_1923.py
Normal file
36
counter/migrations/0016_auto_20160820_1923.py
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('core', '0007_auto_20160813_0522'),
|
||||||
|
('counter', '0015_auto_20160820_0158'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='product',
|
||||||
|
name='buying_group',
|
||||||
|
field=models.ForeignKey(blank=True, on_delete=django.db.models.deletion.SET_NULL, verbose_name='buying group', related_name='products', to='core.Group', null=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='product',
|
||||||
|
name='club',
|
||||||
|
field=models.ForeignKey(verbose_name='club', to='club.Club', related_name='products'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='product',
|
||||||
|
name='icon',
|
||||||
|
field=models.ImageField(blank=True, null=True, upload_to='products', verbose_name='icon'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='product',
|
||||||
|
name='product_type',
|
||||||
|
field=models.ForeignKey(blank=True, on_delete=django.db.models.deletion.SET_NULL, verbose_name='parent product', related_name='children_products', to='counter.Product', null=True),
|
||||||
|
),
|
||||||
|
]
|
25
counter/migrations/0017_auto_20160820_2047.py
Normal file
25
counter/migrations/0017_auto_20160820_2047.py
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('counter', '0016_auto_20160820_1923'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='product',
|
||||||
|
name='parent_product',
|
||||||
|
field=models.ForeignKey(to='counter.Product', null=True, related_name='children_products', on_delete=django.db.models.deletion.SET_NULL, verbose_name='parent product', blank=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='product',
|
||||||
|
name='product_type',
|
||||||
|
field=models.ForeignKey(to='counter.ProductType', null=True, related_name='products', on_delete=django.db.models.deletion.SET_NULL, verbose_name='product type', blank=True),
|
||||||
|
),
|
||||||
|
]
|
24
counter/migrations/0018_auto_20160820_2051.py
Normal file
24
counter/migrations/0018_auto_20160820_2051.py
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('core', '0007_auto_20160813_0522'),
|
||||||
|
('counter', '0017_auto_20160820_2047'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='product',
|
||||||
|
name='buying_group',
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='product',
|
||||||
|
name='buying_group',
|
||||||
|
field=models.ManyToManyField(related_name='products', to='core.Group', verbose_name='buying group'),
|
||||||
|
),
|
||||||
|
]
|
19
counter/migrations/0019_auto_20160820_2053.py
Normal file
19
counter/migrations/0019_auto_20160820_2053.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('counter', '0018_auto_20160820_2051'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RenameField(
|
||||||
|
model_name='product',
|
||||||
|
old_name='buying_group',
|
||||||
|
new_name='buying_groups',
|
||||||
|
),
|
||||||
|
]
|
@ -76,15 +76,19 @@ class Product(models.Model):
|
|||||||
"""
|
"""
|
||||||
name = models.CharField(_('name'), max_length=64)
|
name = models.CharField(_('name'), max_length=64)
|
||||||
description = models.TextField(_('description'), blank=True)
|
description = models.TextField(_('description'), blank=True)
|
||||||
product_type = models.ForeignKey(ProductType, related_name='products', null=True, blank=True)
|
product_type = models.ForeignKey(ProductType, related_name='products', verbose_name=_("product type"), null=True, blank=True,
|
||||||
|
on_delete=models.SET_NULL)
|
||||||
code = models.CharField(_('code'), max_length=16, blank=True)
|
code = models.CharField(_('code'), max_length=16, blank=True)
|
||||||
purchase_price = CurrencyField(_('purchase price'))
|
purchase_price = CurrencyField(_('purchase price'))
|
||||||
selling_price = CurrencyField(_('selling price'))
|
selling_price = CurrencyField(_('selling price'))
|
||||||
special_selling_price = CurrencyField(_('special selling price'))
|
special_selling_price = CurrencyField(_('special selling price'))
|
||||||
icon = models.ImageField(upload_to='products', null=True, blank=True)
|
icon = models.ImageField(upload_to='products', null=True, blank=True, verbose_name=_("icon"))
|
||||||
club = models.ForeignKey(Club, related_name="products")
|
club = models.ForeignKey(Club, related_name="products", verbose_name=_("club"))
|
||||||
limit_age = models.IntegerField(_('limit age'), default=0)
|
limit_age = models.IntegerField(_('limit age'), default=0)
|
||||||
tray = models.BooleanField(_('tray price'), default=False)
|
tray = models.BooleanField(_('tray price'), default=False)
|
||||||
|
parent_product = models.ForeignKey('self', related_name='children_products', verbose_name=_("parent product"), null=True,
|
||||||
|
blank=True, on_delete=models.SET_NULL)
|
||||||
|
buying_groups = models.ManyToManyField(Group, related_name='products', verbose_name=_("buying groups"))
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _('product')
|
verbose_name = _('product')
|
||||||
|
@ -46,6 +46,9 @@
|
|||||||
{% if request.session['too_young'] %}
|
{% if request.session['too_young'] %}
|
||||||
<p><strong>{% trans %}Too young for that product{% endtrans %}</strong></p>
|
<p><strong>{% trans %}Too young for that product{% endtrans %}</strong></p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% if request.session['not_allowed'] %}
|
||||||
|
<p><strong>{% trans %}Not allowed for that product{% endtrans %}</strong></p>
|
||||||
|
{% endif %}
|
||||||
{% if request.session['not_enough'] %}
|
{% if request.session['not_enough'] %}
|
||||||
<p><strong>{% trans %}Not enough money{% endtrans %}</strong></p>
|
<p><strong>{% trans %}Not enough money{% endtrans %}</strong></p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -79,11 +82,16 @@
|
|||||||
<input type="hidden" name="action" value="cancel">
|
<input type="hidden" name="action" value="cancel">
|
||||||
<input type="submit" value="{% trans %}Cancel{% endtrans %}" />
|
<input type="submit" value="{% trans %}Cancel{% endtrans %}" />
|
||||||
</form>
|
</form>
|
||||||
<p><strong>{% trans %}Products: {% endtrans %}</strong>
|
<div><strong>{% trans %}Products: {% endtrans %}</strong>
|
||||||
{% for p in counter.products.all() %}
|
{% for t in categories %}
|
||||||
{{ add_product(p.id, p.name) }}
|
{% if counter.products.filter(product_type=t).exists() %}
|
||||||
|
<h5>{{ t }}</h5>
|
||||||
|
{% for p in counter.products.filter(product_type=t).all() %}
|
||||||
|
{{ add_product(p.id, p.name) }}
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</p>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -123,6 +123,7 @@ class CounterClick(DetailView):
|
|||||||
request.session['basket_total'] = 0
|
request.session['basket_total'] = 0
|
||||||
request.session['not_enough'] = False
|
request.session['not_enough'] = False
|
||||||
request.session['too_young'] = False
|
request.session['too_young'] = False
|
||||||
|
request.session['not_allowed'] = False
|
||||||
self.refill_form = None
|
self.refill_form = None
|
||||||
ret = super(CounterClick, self).get(request, *args, **kwargs)
|
ret = super(CounterClick, self).get(request, *args, **kwargs)
|
||||||
if ((self.object.type != "BAR" and not request.user.is_authenticated()) or
|
if ((self.object.type != "BAR" and not request.user.is_authenticated()) or
|
||||||
@ -145,6 +146,7 @@ class CounterClick(DetailView):
|
|||||||
request.session['basket_total'] = 0
|
request.session['basket_total'] = 0
|
||||||
request.session['not_enough'] = False
|
request.session['not_enough'] = False
|
||||||
request.session['too_young'] = False
|
request.session['too_young'] = False
|
||||||
|
request.session['not_allowed'] = False
|
||||||
if self.object.type != "BAR":
|
if self.object.type != "BAR":
|
||||||
self.operator = request.user
|
self.operator = request.user
|
||||||
elif self.is_barman_price():
|
elif self.is_barman_price():
|
||||||
@ -208,6 +210,13 @@ class CounterClick(DetailView):
|
|||||||
price = self.get_price(pid)
|
price = self.get_price(pid)
|
||||||
total = self.sum_basket(request)
|
total = self.sum_basket(request)
|
||||||
product = self.get_product(pid)
|
product = self.get_product(pid)
|
||||||
|
can_buy = False
|
||||||
|
for g in product.buying_groups.all():
|
||||||
|
if request.user.is_in_group(g.name):
|
||||||
|
can_buy = True
|
||||||
|
if not can_buy:
|
||||||
|
request.session['not_allowed'] = True
|
||||||
|
return False
|
||||||
bq = 0 # Bonus quantity, for trays
|
bq = 0 # Bonus quantity, for trays
|
||||||
if product.tray: # Handle the tray to adjust the quantity q to add and the bonus quantity bq
|
if product.tray: # Handle the tray to adjust the quantity q to add and the bonus quantity bq
|
||||||
total_qty_mod_6 = self.get_total_quantity_for_pid(request, pid) % 6
|
total_qty_mod_6 = self.get_total_quantity_for_pid(request, pid) % 6
|
||||||
@ -224,8 +233,6 @@ class CounterClick(DetailView):
|
|||||||
request.session['basket'][pid]['bonus_qty'] += bq
|
request.session['basket'][pid]['bonus_qty'] += bq
|
||||||
else: # or create if not
|
else: # or create if not
|
||||||
request.session['basket'][pid] = {'qty': q, 'price': int(price*100), 'bonus_qty': bq}
|
request.session['basket'][pid] = {'qty': q, 'price': int(price*100), 'bonus_qty': bq}
|
||||||
request.session['not_enough'] = False # Reset not_enough to save the session
|
|
||||||
request.session['too_young'] = False
|
|
||||||
request.session.modified = True
|
request.session.modified = True
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@ -321,6 +328,7 @@ class CounterClick(DetailView):
|
|||||||
kwargs['customer'] = self.customer
|
kwargs['customer'] = self.customer
|
||||||
kwargs['basket_total'] = self.sum_basket(self.request)
|
kwargs['basket_total'] = self.sum_basket(self.request)
|
||||||
kwargs['refill_form'] = self.refill_form or RefillForm()
|
kwargs['refill_form'] = self.refill_form or RefillForm()
|
||||||
|
kwargs['categories'] = ProductType.objects.all()
|
||||||
return kwargs
|
return kwargs
|
||||||
|
|
||||||
class CounterLogin(RedirectView):
|
class CounterLogin(RedirectView):
|
||||||
@ -451,23 +459,42 @@ class ProductListView(CanEditPropMixin, ListView):
|
|||||||
model = Product
|
model = Product
|
||||||
template_name = 'counter/product_list.jinja'
|
template_name = 'counter/product_list.jinja'
|
||||||
|
|
||||||
|
class ProductEditForm(forms.ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = Product
|
||||||
|
fields = ['name', 'description', 'product_type', 'code', 'parent_product', 'buying_groups', 'purchase_price',
|
||||||
|
'selling_price', 'special_selling_price', 'icon', 'club', 'limit_age', 'tray']
|
||||||
|
parent_product = AutoCompleteSelectField('products', show_help_text=False, label=_("Parent product"), required=False)
|
||||||
|
buying_groups = AutoCompleteSelectMultipleField('groups', show_help_text=False, help_text="", label=_("Buying groups"))
|
||||||
|
club = AutoCompleteSelectField('clubs', show_help_text=False)
|
||||||
|
counters = AutoCompleteSelectMultipleField('counters', show_help_text=False, help_text="", label=_("Counters"), required=False)
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super(ProductEditForm, self).__init__(*args, **kwargs)
|
||||||
|
if self.instance.id:
|
||||||
|
self.fields['counters'].initial = [str(c.id) for c in self.instance.counters.all()]
|
||||||
|
|
||||||
|
def save(self, *args, **kwargs):
|
||||||
|
ret = super(ProductEditForm, self).save(*args, **kwargs)
|
||||||
|
if self.fields['counters'].initial:
|
||||||
|
for cid in self.fields['counters'].initial:
|
||||||
|
c = Counter.objects.filter(id=int(cid)).first()
|
||||||
|
c.products.remove(self.instance)
|
||||||
|
c.save()
|
||||||
|
for cid in self.cleaned_data['counters']:
|
||||||
|
c = Counter.objects.filter(id=int(cid)).first()
|
||||||
|
c.products.add(self.instance)
|
||||||
|
c.save()
|
||||||
|
return ret
|
||||||
|
|
||||||
class ProductCreateView(CanCreateMixin, CreateView):
|
class ProductCreateView(CanCreateMixin, CreateView):
|
||||||
"""
|
"""
|
||||||
A create view for the admins
|
A create view for the admins
|
||||||
"""
|
"""
|
||||||
model = Product
|
model = Product
|
||||||
fields = ['name', 'description', 'product_type', 'code', 'purchase_price',
|
form_class = ProductEditForm
|
||||||
'selling_price', 'special_selling_price', 'icon', 'club']
|
|
||||||
template_name = 'core/create.jinja'
|
template_name = 'core/create.jinja'
|
||||||
|
|
||||||
class ProductEditForm(forms.ModelForm):
|
|
||||||
class Meta:
|
|
||||||
model = Product
|
|
||||||
fields = ['name', 'description', 'product_type', 'code', 'purchase_price',
|
|
||||||
'selling_price', 'special_selling_price', 'icon', 'club', 'limit_age', 'tray']
|
|
||||||
counters = make_ajax_field(Product, 'counters', 'counters', show_help_text=False, label='Counters', help_text="Guy",
|
|
||||||
required=False) # TODO FIXME
|
|
||||||
|
|
||||||
class ProductEditView(CanEditPropMixin, UpdateView):
|
class ProductEditView(CanEditPropMixin, UpdateView):
|
||||||
"""
|
"""
|
||||||
An edit view for the admins
|
An edit view for the admins
|
||||||
@ -476,8 +503,6 @@ class ProductEditView(CanEditPropMixin, UpdateView):
|
|||||||
form_class = ProductEditForm
|
form_class = ProductEditForm
|
||||||
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
|
|
||||||
|
|
||||||
|
|
||||||
class RefillingDeleteView(CanEditPropMixin, DeleteView):
|
class RefillingDeleteView(CanEditPropMixin, DeleteView):
|
||||||
"""
|
"""
|
||||||
|
@ -55,9 +55,12 @@ class EbouticMain(TemplateView):
|
|||||||
""" Add a product to the basket """
|
""" Add a product to the basket """
|
||||||
try:
|
try:
|
||||||
p = Product.objects.filter(id=int(request.POST['product_id'])).first()
|
p = Product.objects.filter(id=int(request.POST['product_id'])).first()
|
||||||
self.basket.add_product(p)
|
for g in p.buying_groups.all():
|
||||||
except:
|
if request.user.is_in_group(g.name):
|
||||||
pass
|
self.basket.add_product(p)
|
||||||
|
break
|
||||||
|
except Exception as e:
|
||||||
|
print(repr(e))
|
||||||
|
|
||||||
def del_product(self, request):
|
def del_product(self, request):
|
||||||
""" Delete a product from the basket """
|
""" Delete a product from the basket """
|
||||||
|
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-08-19 23:14+0200\n"
|
"POT-Creation-Date: 2016-08-20 21:11+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"
|
||||||
@ -18,7 +18,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: accounting/models.py:33 accounting/models.py:45 accounting/models.py:68
|
#: accounting/models.py:33 accounting/models.py:45 accounting/models.py:68
|
||||||
#: accounting/models.py:111 club/models.py:18 counter/models.py:52
|
#: accounting/models.py:111 club/models.py:18 counter/models.py:52
|
||||||
#: counter/models.py:77 counter/models.py:105 launderette/models.py:15
|
#: counter/models.py:77 counter/models.py:111 launderette/models.py:15
|
||||||
#: launderette/models.py:60 launderette/models.py:85
|
#: launderette/models.py:60 launderette/models.py:85
|
||||||
msgid "name"
|
msgid "name"
|
||||||
msgstr "nom"
|
msgstr "nom"
|
||||||
@ -40,12 +40,12 @@ msgstr "numero de compte"
|
|||||||
msgid "%(club_account)s on %(bank_account)s"
|
msgid "%(club_account)s on %(bank_account)s"
|
||||||
msgstr "%(club_account)s sur %(bank_account)s"
|
msgstr "%(club_account)s sur %(bank_account)s"
|
||||||
|
|
||||||
#: accounting/models.py:109 club/models.py:147 counter/models.py:291
|
#: accounting/models.py:109 club/models.py:147 counter/models.py:297
|
||||||
#: launderette/models.py:122
|
#: launderette/models.py:122
|
||||||
msgid "start date"
|
msgid "start date"
|
||||||
msgstr "date de début"
|
msgstr "date de début"
|
||||||
|
|
||||||
#: accounting/models.py:110 club/models.py:148 counter/models.py:292
|
#: accounting/models.py:110 club/models.py:148 counter/models.py:298
|
||||||
msgid "end date"
|
msgid "end date"
|
||||||
msgstr "date de fin"
|
msgstr "date de fin"
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ msgid "is closed"
|
|||||||
msgstr "est fermé"
|
msgstr "est fermé"
|
||||||
|
|
||||||
#: accounting/models.py:114 accounting/models.py:153 counter/models.py:25
|
#: accounting/models.py:114 accounting/models.py:153 counter/models.py:25
|
||||||
#: counter/models.py:206
|
#: counter/models.py:212
|
||||||
msgid "amount"
|
msgid "amount"
|
||||||
msgstr "montant"
|
msgstr "montant"
|
||||||
|
|
||||||
@ -66,13 +66,13 @@ msgstr "montant effectif"
|
|||||||
msgid "number"
|
msgid "number"
|
||||||
msgstr "numéro"
|
msgstr "numéro"
|
||||||
|
|
||||||
#: accounting/models.py:154 core/models.py:418 core/models.py:694
|
#: accounting/models.py:154 core/models.py:426 core/models.py:702
|
||||||
#: counter/models.py:209 counter/models.py:255 eboutic/models.py:14
|
#: counter/models.py:215 counter/models.py:261 eboutic/models.py:14
|
||||||
#: eboutic/models.py:47
|
#: eboutic/models.py:47
|
||||||
msgid "date"
|
msgid "date"
|
||||||
msgstr "date"
|
msgstr "date"
|
||||||
|
|
||||||
#: accounting/models.py:155 accounting/models.py:241 counter/models.py:247
|
#: accounting/models.py:155 accounting/models.py:241 counter/models.py:253
|
||||||
msgid "label"
|
msgid "label"
|
||||||
msgstr "intitulé"
|
msgstr "intitulé"
|
||||||
|
|
||||||
@ -80,7 +80,7 @@ msgstr "intitulé"
|
|||||||
msgid "remark"
|
msgid "remark"
|
||||||
msgstr "remarque"
|
msgstr "remarque"
|
||||||
|
|
||||||
#: accounting/models.py:157 counter/models.py:210 counter/models.py:256
|
#: accounting/models.py:157 counter/models.py:216 counter/models.py:262
|
||||||
#: subscription/models.py:34
|
#: subscription/models.py:34
|
||||||
msgid "payment method"
|
msgid "payment method"
|
||||||
msgstr "méthode de paiement"
|
msgstr "méthode de paiement"
|
||||||
@ -152,7 +152,7 @@ msgid "Please add a target label if you set no existing target"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Merci d'ajouter un nom de cible si vous ne spécifiez pas de cible existante"
|
"Merci d'ajouter un nom de cible si vous ne spécifiez pas de cible existante"
|
||||||
|
|
||||||
#: accounting/models.py:240 counter/models.py:80
|
#: accounting/models.py:240 counter/models.py:81
|
||||||
msgid "code"
|
msgid "code"
|
||||||
msgstr "code"
|
msgstr "code"
|
||||||
|
|
||||||
@ -378,11 +378,11 @@ msgstr ""
|
|||||||
msgid "A club with that unix name already exists."
|
msgid "A club with that unix name already exists."
|
||||||
msgstr "Un club avec ce nom UNIX existe déjà."
|
msgstr "Un club avec ce nom UNIX existe déjà."
|
||||||
|
|
||||||
#: club/models.py:32 core/models.py:166
|
#: club/models.py:32 core/models.py:168
|
||||||
msgid "address"
|
msgid "address"
|
||||||
msgstr "Adresse"
|
msgstr "Adresse"
|
||||||
|
|
||||||
#: club/models.py:38 core/models.py:115
|
#: club/models.py:38 core/models.py:117
|
||||||
msgid "home"
|
msgid "home"
|
||||||
msgstr "home"
|
msgstr "home"
|
||||||
|
|
||||||
@ -399,15 +399,15 @@ msgstr "Un club avec ce nom UNIX existe déjà."
|
|||||||
msgid "user"
|
msgid "user"
|
||||||
msgstr "nom d'utilisateur"
|
msgstr "nom d'utilisateur"
|
||||||
|
|
||||||
#: club/models.py:146
|
#: club/models.py:146 counter/models.py:86
|
||||||
msgid "club"
|
msgid "club"
|
||||||
msgstr "club"
|
msgstr "club"
|
||||||
|
|
||||||
#: club/models.py:149 core/models.py:133
|
#: club/models.py:149 core/models.py:135
|
||||||
msgid "role"
|
msgid "role"
|
||||||
msgstr "rôle"
|
msgstr "rôle"
|
||||||
|
|
||||||
#: club/models.py:151 core/models.py:30 counter/models.py:53
|
#: club/models.py:151 core/models.py:32 counter/models.py:53
|
||||||
#: counter/models.py:78
|
#: counter/models.py:78
|
||||||
msgid "description"
|
msgid "description"
|
||||||
msgstr "description"
|
msgstr "description"
|
||||||
@ -492,30 +492,30 @@ msgstr "Comptoirs : "
|
|||||||
msgid "Manage launderettes"
|
msgid "Manage launderettes"
|
||||||
msgstr "Gestion des laveries"
|
msgstr "Gestion des laveries"
|
||||||
|
|
||||||
#: core/models.py:26
|
#: core/models.py:28
|
||||||
msgid "meta group status"
|
msgid "meta group status"
|
||||||
msgstr "status du meta-groupe"
|
msgstr "status du meta-groupe"
|
||||||
|
|
||||||
#: core/models.py:28
|
#: core/models.py:30
|
||||||
msgid "Whether a group is a meta group or not"
|
msgid "Whether a group is a meta group or not"
|
||||||
msgstr "Si un groupe est un meta-groupe ou pas"
|
msgstr "Si un groupe est un meta-groupe ou pas"
|
||||||
|
|
||||||
#: core/models.py:56
|
#: core/models.py:58
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "%(value)s is not a valid promo (between 0 and %(end)s)"
|
msgid "%(value)s is not a valid promo (between 0 and %(end)s)"
|
||||||
msgstr "%(value)s n'est pas une promo valide (doit être entre 0 et %(end)s)"
|
msgstr "%(value)s n'est pas une promo valide (doit être entre 0 et %(end)s)"
|
||||||
|
|
||||||
#: core/models.py:72
|
#: core/models.py:74
|
||||||
msgid "username"
|
msgid "username"
|
||||||
msgstr "nom d'utilisateur"
|
msgstr "nom d'utilisateur"
|
||||||
|
|
||||||
#: core/models.py:75
|
#: core/models.py:77
|
||||||
msgid "Required. 254 characters or fewer. Letters, digits and @/./+/-/_ only."
|
msgid "Required. 254 characters or fewer. Letters, digits and @/./+/-/_ only."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Requis. Pas plus de 254 caractères. Uniquement des lettres, numéros, et @/./"
|
"Requis. Pas plus de 254 caractères. Uniquement des lettres, numéros, et @/./"
|
||||||
"+/-/_"
|
"+/-/_"
|
||||||
|
|
||||||
#: core/models.py:79
|
#: core/models.py:81
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter a valid username. This value may contain only letters, numbers and @/./"
|
"Enter a valid username. This value may contain only letters, numbers and @/./"
|
||||||
"+/-/_ characters."
|
"+/-/_ characters."
|
||||||
@ -523,43 +523,43 @@ msgstr ""
|
|||||||
"Entrez un nom d'utilisateur correct. Uniquement des lettres, numéros, et @/./"
|
"Entrez un nom d'utilisateur correct. Uniquement des lettres, numéros, et @/./"
|
||||||
"+/-/_"
|
"+/-/_"
|
||||||
|
|
||||||
#: core/models.py:84
|
#: core/models.py:86
|
||||||
msgid "A user with that username already exists."
|
msgid "A user with that username already exists."
|
||||||
msgstr "Un utilisateur de ce nom existe déjà"
|
msgstr "Un utilisateur de ce nom existe déjà"
|
||||||
|
|
||||||
#: core/models.py:87
|
#: core/models.py:89
|
||||||
msgid "first name"
|
msgid "first name"
|
||||||
msgstr "Prénom"
|
msgstr "Prénom"
|
||||||
|
|
||||||
#: core/models.py:88
|
#: core/models.py:90
|
||||||
msgid "last name"
|
msgid "last name"
|
||||||
msgstr "Nom"
|
msgstr "Nom"
|
||||||
|
|
||||||
#: core/models.py:89
|
#: core/models.py:91
|
||||||
msgid "email address"
|
msgid "email address"
|
||||||
msgstr "adresse email"
|
msgstr "adresse email"
|
||||||
|
|
||||||
#: core/models.py:90
|
#: core/models.py:92
|
||||||
msgid "date of birth"
|
msgid "date of birth"
|
||||||
msgstr "date de naissance"
|
msgstr "date de naissance"
|
||||||
|
|
||||||
#: core/models.py:91
|
#: core/models.py:93
|
||||||
msgid "nick name"
|
msgid "nick name"
|
||||||
msgstr "surnom"
|
msgstr "surnom"
|
||||||
|
|
||||||
#: core/models.py:93
|
#: core/models.py:95
|
||||||
msgid "staff status"
|
msgid "staff status"
|
||||||
msgstr "status \"staff\""
|
msgstr "status \"staff\""
|
||||||
|
|
||||||
#: core/models.py:95
|
#: core/models.py:97
|
||||||
msgid "Designates whether the user can log into this admin site."
|
msgid "Designates whether the user can log into this admin site."
|
||||||
msgstr "Est-ce que l'utilisateur peut se logger à la partie admin du site."
|
msgstr "Est-ce que l'utilisateur peut se logger à la partie admin du site."
|
||||||
|
|
||||||
#: core/models.py:98
|
#: core/models.py:100
|
||||||
msgid "active"
|
msgid "active"
|
||||||
msgstr "actif"
|
msgstr "actif"
|
||||||
|
|
||||||
#: core/models.py:101
|
#: core/models.py:103
|
||||||
msgid ""
|
msgid ""
|
||||||
"Designates whether this user should be treated as active. Unselect this "
|
"Designates whether this user should be treated as active. Unselect this "
|
||||||
"instead of deleting accounts."
|
"instead of deleting accounts."
|
||||||
@ -567,320 +567,320 @@ msgstr ""
|
|||||||
"Est-ce que l'utilisateur doit être traité comme actif. Déselectionnez au "
|
"Est-ce que l'utilisateur doit être traité comme actif. Déselectionnez au "
|
||||||
"lieu de supprimer les comptes."
|
"lieu de supprimer les comptes."
|
||||||
|
|
||||||
#: core/models.py:105
|
#: core/models.py:107
|
||||||
msgid "date joined"
|
msgid "date joined"
|
||||||
msgstr "date d'inscription"
|
msgstr "date d'inscription"
|
||||||
|
|
||||||
#: core/models.py:106
|
#: core/models.py:108
|
||||||
msgid "last update"
|
msgid "last update"
|
||||||
msgstr "dernière mise à jour"
|
msgstr "dernière mise à jour"
|
||||||
|
|
||||||
#: core/models.py:108
|
#: core/models.py:110
|
||||||
msgid "superuser"
|
msgid "superuser"
|
||||||
msgstr "super-utilisateur"
|
msgstr "super-utilisateur"
|
||||||
|
|
||||||
#: core/models.py:111
|
#: core/models.py:113
|
||||||
msgid "Designates whether this user is a superuser. "
|
msgid "Designates whether this user is a superuser. "
|
||||||
msgstr "Est-ce que l'utilisateur est super-utilisateur."
|
msgstr "Est-ce que l'utilisateur est super-utilisateur."
|
||||||
|
|
||||||
#: core/models.py:116
|
#: core/models.py:118
|
||||||
msgid "profile"
|
msgid "profile"
|
||||||
msgstr "profil"
|
msgstr "profil"
|
||||||
|
|
||||||
#: core/models.py:118
|
#: core/models.py:120
|
||||||
msgid "avatar"
|
msgid "avatar"
|
||||||
msgstr "avatar"
|
msgstr "avatar"
|
||||||
|
|
||||||
#: core/models.py:120
|
#: core/models.py:122
|
||||||
msgid "scrub"
|
msgid "scrub"
|
||||||
msgstr "blouse"
|
msgstr "blouse"
|
||||||
|
|
||||||
#: core/models.py:122
|
#: core/models.py:124
|
||||||
msgid "sex"
|
msgid "sex"
|
||||||
msgstr "sexe"
|
msgstr "sexe"
|
||||||
|
|
||||||
#: core/models.py:122
|
#: core/models.py:124
|
||||||
msgid "Man"
|
msgid "Man"
|
||||||
msgstr "Homme"
|
msgstr "Homme"
|
||||||
|
|
||||||
#: core/models.py:122
|
#: core/models.py:124
|
||||||
msgid "Woman"
|
msgid "Woman"
|
||||||
msgstr "Femme"
|
msgstr "Femme"
|
||||||
|
|
||||||
#: core/models.py:123
|
#: core/models.py:125
|
||||||
msgid "tshirt size"
|
msgid "tshirt size"
|
||||||
msgstr "taille de tshirt"
|
msgstr "taille de tshirt"
|
||||||
|
|
||||||
#: core/models.py:124
|
#: core/models.py:126
|
||||||
msgid "-"
|
msgid "-"
|
||||||
msgstr "-"
|
msgstr "-"
|
||||||
|
|
||||||
#: core/models.py:125
|
#: core/models.py:127
|
||||||
msgid "XS"
|
msgid "XS"
|
||||||
msgstr "XS"
|
msgstr "XS"
|
||||||
|
|
||||||
#: core/models.py:126
|
#: core/models.py:128
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "S"
|
msgstr "S"
|
||||||
|
|
||||||
#: core/models.py:127
|
#: core/models.py:129
|
||||||
msgid "M"
|
msgid "M"
|
||||||
msgstr "M"
|
msgstr "M"
|
||||||
|
|
||||||
#: core/models.py:128
|
#: core/models.py:130
|
||||||
msgid "L"
|
msgid "L"
|
||||||
msgstr "L"
|
msgstr "L"
|
||||||
|
|
||||||
#: core/models.py:129
|
#: core/models.py:131
|
||||||
msgid "XL"
|
msgid "XL"
|
||||||
msgstr "XL"
|
msgstr "XL"
|
||||||
|
|
||||||
#: core/models.py:130
|
#: core/models.py:132
|
||||||
msgid "XXL"
|
msgid "XXL"
|
||||||
msgstr "XXL"
|
msgstr "XXL"
|
||||||
|
|
||||||
#: core/models.py:131
|
#: core/models.py:133
|
||||||
msgid "XXXL"
|
msgid "XXXL"
|
||||||
msgstr "XXXL"
|
msgstr "XXXL"
|
||||||
|
|
||||||
#: core/models.py:134
|
#: core/models.py:136
|
||||||
msgid "Student"
|
msgid "Student"
|
||||||
msgstr "Étudiant"
|
msgstr "Étudiant"
|
||||||
|
|
||||||
#: core/models.py:135
|
#: core/models.py:137
|
||||||
msgid "Administrative agent"
|
msgid "Administrative agent"
|
||||||
msgstr "Personnel administratif"
|
msgstr "Personnel administratif"
|
||||||
|
|
||||||
#: core/models.py:136
|
#: core/models.py:138
|
||||||
msgid "Teacher"
|
msgid "Teacher"
|
||||||
msgstr "Enseignant"
|
msgstr "Enseignant"
|
||||||
|
|
||||||
#: core/models.py:137
|
#: core/models.py:139
|
||||||
msgid "Agent"
|
msgid "Agent"
|
||||||
msgstr "Personnel"
|
msgstr "Personnel"
|
||||||
|
|
||||||
#: core/models.py:138
|
#: core/models.py:140
|
||||||
msgid "Doctor"
|
msgid "Doctor"
|
||||||
msgstr "Doctorant"
|
msgstr "Doctorant"
|
||||||
|
|
||||||
#: core/models.py:139
|
#: core/models.py:141
|
||||||
msgid "Former student"
|
msgid "Former student"
|
||||||
msgstr "Ancien étudiant"
|
msgstr "Ancien étudiant"
|
||||||
|
|
||||||
#: core/models.py:140
|
#: core/models.py:142
|
||||||
msgid "Service"
|
msgid "Service"
|
||||||
msgstr "Service"
|
msgstr "Service"
|
||||||
|
|
||||||
#: core/models.py:142
|
#: core/models.py:144
|
||||||
msgid "department"
|
msgid "department"
|
||||||
msgstr "département"
|
msgstr "département"
|
||||||
|
|
||||||
#: core/models.py:143
|
#: core/models.py:145
|
||||||
msgid "TC"
|
msgid "TC"
|
||||||
msgstr "TC"
|
msgstr "TC"
|
||||||
|
|
||||||
#: core/models.py:144
|
#: core/models.py:146
|
||||||
msgid "IMSI"
|
msgid "IMSI"
|
||||||
msgstr "IMSI"
|
msgstr "IMSI"
|
||||||
|
|
||||||
#: core/models.py:145
|
#: core/models.py:147
|
||||||
msgid "IMAP"
|
msgid "IMAP"
|
||||||
msgstr "IMAP"
|
msgstr "IMAP"
|
||||||
|
|
||||||
#: core/models.py:146
|
#: core/models.py:148
|
||||||
msgid "INFO"
|
msgid "INFO"
|
||||||
msgstr "INFO"
|
msgstr "INFO"
|
||||||
|
|
||||||
#: core/models.py:147
|
#: core/models.py:149
|
||||||
msgid "GI"
|
msgid "GI"
|
||||||
msgstr "GI"
|
msgstr "GI"
|
||||||
|
|
||||||
#: core/models.py:148
|
#: core/models.py:150
|
||||||
msgid "E"
|
msgid "E"
|
||||||
msgstr "E"
|
msgstr "E"
|
||||||
|
|
||||||
#: core/models.py:149
|
#: core/models.py:151
|
||||||
msgid "EE"
|
msgid "EE"
|
||||||
msgstr "EE"
|
msgstr "EE"
|
||||||
|
|
||||||
#: core/models.py:150
|
#: core/models.py:152
|
||||||
msgid "GESC"
|
msgid "GESC"
|
||||||
msgstr "GESC"
|
msgstr "GESC"
|
||||||
|
|
||||||
#: core/models.py:151
|
#: core/models.py:153
|
||||||
msgid "GMC"
|
msgid "GMC"
|
||||||
msgstr "GMC"
|
msgstr "GMC"
|
||||||
|
|
||||||
#: core/models.py:152
|
#: core/models.py:154
|
||||||
msgid "MC"
|
msgid "MC"
|
||||||
msgstr "MC"
|
msgstr "MC"
|
||||||
|
|
||||||
#: core/models.py:153
|
#: core/models.py:155
|
||||||
msgid "EDIM"
|
msgid "EDIM"
|
||||||
msgstr "EDIM"
|
msgstr "EDIM"
|
||||||
|
|
||||||
#: core/models.py:154
|
#: core/models.py:156
|
||||||
msgid "Humanities"
|
msgid "Humanities"
|
||||||
msgstr "Humanités"
|
msgstr "Humanités"
|
||||||
|
|
||||||
#: core/models.py:155
|
#: core/models.py:157
|
||||||
msgid "N/A"
|
msgid "N/A"
|
||||||
msgstr "N/A"
|
msgstr "N/A"
|
||||||
|
|
||||||
#: core/models.py:157
|
#: core/models.py:159
|
||||||
msgid "dpt option"
|
msgid "dpt option"
|
||||||
msgstr "Filière"
|
msgstr "Filière"
|
||||||
|
|
||||||
#: core/models.py:158
|
#: core/models.py:160
|
||||||
msgid "semester"
|
msgid "semester"
|
||||||
msgstr "semestre"
|
msgstr "semestre"
|
||||||
|
|
||||||
#: core/models.py:159
|
#: core/models.py:161
|
||||||
msgid "quote"
|
msgid "quote"
|
||||||
msgstr "citation"
|
msgstr "citation"
|
||||||
|
|
||||||
#: core/models.py:160
|
#: core/models.py:162
|
||||||
msgid "school"
|
msgid "school"
|
||||||
msgstr "école"
|
msgstr "école"
|
||||||
|
|
||||||
#: core/models.py:161
|
#: core/models.py:163
|
||||||
msgid "promo"
|
msgid "promo"
|
||||||
msgstr "promo"
|
msgstr "promo"
|
||||||
|
|
||||||
#: core/models.py:162
|
#: core/models.py:164
|
||||||
msgid "forum signature"
|
msgid "forum signature"
|
||||||
msgstr "signature du forum"
|
msgstr "signature du forum"
|
||||||
|
|
||||||
#: core/models.py:163
|
#: core/models.py:165
|
||||||
msgid "second email address"
|
msgid "second email address"
|
||||||
msgstr "adresse email secondaire"
|
msgstr "adresse email secondaire"
|
||||||
|
|
||||||
#: core/models.py:164
|
#: core/models.py:166
|
||||||
msgid "phone"
|
msgid "phone"
|
||||||
msgstr "téléphone"
|
msgstr "téléphone"
|
||||||
|
|
||||||
#: core/models.py:165
|
#: core/models.py:167
|
||||||
msgid "parent phone"
|
msgid "parent phone"
|
||||||
msgstr "téléphone des parents"
|
msgstr "téléphone des parents"
|
||||||
|
|
||||||
#: core/models.py:167
|
#: core/models.py:169
|
||||||
msgid "parent address"
|
msgid "parent address"
|
||||||
msgstr "adresse des parents"
|
msgstr "adresse des parents"
|
||||||
|
|
||||||
#: core/models.py:254
|
#: core/models.py:256
|
||||||
msgid "A user with that username already exists"
|
msgid "A user with that username already exists"
|
||||||
msgstr "Un utilisateur de ce nom d'utilisateur existe déjà"
|
msgstr "Un utilisateur de ce nom d'utilisateur existe déjà"
|
||||||
|
|
||||||
#: core/models.py:364 core/templates/core/macros.jinja:9
|
#: core/models.py:372 core/templates/core/macros.jinja:17
|
||||||
#: core/templates/core/macros.jinja:11 core/templates/core/macros.jinja:22
|
#: core/templates/core/user_detail.jinja:14
|
||||||
#: core/templates/core/user_detail.jinja:13
|
#: core/templates/core/user_detail.jinja:16
|
||||||
#: core/templates/core/user_edit.jinja:15
|
#: core/templates/core/user_edit.jinja:15
|
||||||
msgid "Profile"
|
msgid "Profile"
|
||||||
msgstr "Profil"
|
msgstr "Profil"
|
||||||
|
|
||||||
#: core/models.py:395
|
#: core/models.py:403
|
||||||
msgid "Visitor"
|
msgid "Visitor"
|
||||||
msgstr "Visiteur"
|
msgstr "Visiteur"
|
||||||
|
|
||||||
#: core/models.py:400
|
#: core/models.py:408
|
||||||
msgid "define if we show a users stats"
|
msgid "define if we show a users stats"
|
||||||
msgstr "Definit si l'on montre les statistiques de l'utilisateur"
|
msgstr "Definit si l'on montre les statistiques de l'utilisateur"
|
||||||
|
|
||||||
#: core/models.py:402
|
#: core/models.py:410
|
||||||
msgid "Show your account statistics to others"
|
msgid "Show your account statistics to others"
|
||||||
msgstr "Montrez vos statistiques de compte aux autres"
|
msgstr "Montrez vos statistiques de compte aux autres"
|
||||||
|
|
||||||
#: core/models.py:409
|
#: core/models.py:417
|
||||||
msgid "file name"
|
msgid "file name"
|
||||||
msgstr "nom du fichier"
|
msgstr "nom du fichier"
|
||||||
|
|
||||||
#: core/models.py:410 core/models.py:543
|
#: core/models.py:418 core/models.py:551
|
||||||
msgid "parent"
|
msgid "parent"
|
||||||
msgstr "parent"
|
msgstr "parent"
|
||||||
|
|
||||||
#: core/models.py:411 core/models.py:421
|
#: core/models.py:419 core/models.py:429
|
||||||
msgid "file"
|
msgid "file"
|
||||||
msgstr "fichier"
|
msgstr "fichier"
|
||||||
|
|
||||||
#: core/models.py:412
|
#: core/models.py:420
|
||||||
msgid "owner"
|
msgid "owner"
|
||||||
msgstr "propriétaire"
|
msgstr "propriétaire"
|
||||||
|
|
||||||
#: core/models.py:413 core/models.py:549
|
#: core/models.py:421 core/models.py:557
|
||||||
msgid "edit group"
|
msgid "edit group"
|
||||||
msgstr "groupe d'édition"
|
msgstr "groupe d'édition"
|
||||||
|
|
||||||
#: core/models.py:414 core/models.py:550
|
#: core/models.py:422 core/models.py:558
|
||||||
msgid "view group"
|
msgid "view group"
|
||||||
msgstr "groupe de vue"
|
msgstr "groupe de vue"
|
||||||
|
|
||||||
#: core/models.py:415
|
#: core/models.py:423
|
||||||
msgid "is folder"
|
msgid "is folder"
|
||||||
msgstr "est un dossier"
|
msgstr "est un dossier"
|
||||||
|
|
||||||
#: core/models.py:416
|
#: core/models.py:424
|
||||||
msgid "mime type"
|
msgid "mime type"
|
||||||
msgstr "type mime"
|
msgstr "type mime"
|
||||||
|
|
||||||
#: core/models.py:417
|
#: core/models.py:425
|
||||||
msgid "size"
|
msgid "size"
|
||||||
msgstr "taille"
|
msgstr "taille"
|
||||||
|
|
||||||
#: core/models.py:447
|
#: core/models.py:455
|
||||||
msgid "Character '/' not authorized in name"
|
msgid "Character '/' not authorized in name"
|
||||||
msgstr "Le caractère '/' n'est pas autorisé dans les noms de fichier"
|
msgstr "Le caractère '/' n'est pas autorisé dans les noms de fichier"
|
||||||
|
|
||||||
#: core/models.py:450 core/models.py:455
|
#: core/models.py:458 core/models.py:463
|
||||||
msgid "Loop in folder tree"
|
msgid "Loop in folder tree"
|
||||||
msgstr "Boucle dans l'arborescence des dossiers"
|
msgstr "Boucle dans l'arborescence des dossiers"
|
||||||
|
|
||||||
#: core/models.py:459
|
#: core/models.py:467
|
||||||
msgid "You can not make a file be a children of a non folder file"
|
msgid "You can not make a file be a children of a non folder file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Vous ne pouvez pas mettre un fichier enfant de quelque chose qui n'est pas "
|
"Vous ne pouvez pas mettre un fichier enfant de quelque chose qui n'est pas "
|
||||||
"un dossier"
|
"un dossier"
|
||||||
|
|
||||||
#: core/models.py:463
|
#: core/models.py:471
|
||||||
msgid "Duplicate file"
|
msgid "Duplicate file"
|
||||||
msgstr "Un fichier de ce nom existe déjà"
|
msgstr "Un fichier de ce nom existe déjà"
|
||||||
|
|
||||||
#: core/models.py:473
|
#: core/models.py:481
|
||||||
msgid "You must provide a file"
|
msgid "You must provide a file"
|
||||||
msgstr "Vous devez fournir un fichier"
|
msgstr "Vous devez fournir un fichier"
|
||||||
|
|
||||||
#: core/models.py:498
|
#: core/models.py:506
|
||||||
msgid "Folder: "
|
msgid "Folder: "
|
||||||
msgstr "Dossier : "
|
msgstr "Dossier : "
|
||||||
|
|
||||||
#: core/models.py:500
|
#: core/models.py:508
|
||||||
msgid "File: "
|
msgid "File: "
|
||||||
msgstr "Fichier : "
|
msgstr "Fichier : "
|
||||||
|
|
||||||
#: core/models.py:542 core/models.py:546
|
#: core/models.py:550 core/models.py:554
|
||||||
msgid "page name"
|
msgid "page name"
|
||||||
msgstr "nom de la page"
|
msgstr "nom de la page"
|
||||||
|
|
||||||
#: core/models.py:547
|
#: core/models.py:555
|
||||||
msgid "owner group"
|
msgid "owner group"
|
||||||
msgstr "groupe propriétaire"
|
msgstr "groupe propriétaire"
|
||||||
|
|
||||||
#: core/models.py:578
|
#: core/models.py:586
|
||||||
msgid "Duplicate page"
|
msgid "Duplicate page"
|
||||||
msgstr "Une page de ce nom existe déjà"
|
msgstr "Une page de ce nom existe déjà"
|
||||||
|
|
||||||
#: core/models.py:584
|
#: core/models.py:592
|
||||||
msgid "Loop in page tree"
|
msgid "Loop in page tree"
|
||||||
msgstr "Boucle dans l'arborescence des pages"
|
msgstr "Boucle dans l'arborescence des pages"
|
||||||
|
|
||||||
#: core/models.py:691
|
#: core/models.py:699
|
||||||
msgid "revision"
|
msgid "revision"
|
||||||
msgstr "révision"
|
msgstr "révision"
|
||||||
|
|
||||||
#: core/models.py:692
|
#: core/models.py:700
|
||||||
msgid "page title"
|
msgid "page title"
|
||||||
msgstr "titre de la page"
|
msgstr "titre de la page"
|
||||||
|
|
||||||
#: core/models.py:693
|
#: core/models.py:701
|
||||||
msgid "page content"
|
msgid "page content"
|
||||||
msgstr "contenu de la page"
|
msgstr "contenu de la page"
|
||||||
|
|
||||||
@ -970,7 +970,7 @@ msgstr "Confirmation"
|
|||||||
|
|
||||||
#: core/templates/core/delete_confirm.jinja:14
|
#: core/templates/core/delete_confirm.jinja:14
|
||||||
#: core/templates/core/file_delete_confirm.jinja:14
|
#: core/templates/core/file_delete_confirm.jinja:14
|
||||||
#: counter/templates/counter/counter_click.jinja:72
|
#: counter/templates/counter/counter_click.jinja:83
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Annuler"
|
msgstr "Annuler"
|
||||||
|
|
||||||
@ -1076,7 +1076,7 @@ msgid "Please login to see this page."
|
|||||||
msgstr "Merci de vous identifier pour voir cette page."
|
msgstr "Merci de vous identifier pour voir cette page."
|
||||||
|
|
||||||
#: core/templates/core/login.jinja:28
|
#: core/templates/core/login.jinja:28
|
||||||
#: counter/templates/counter/counter_main.jinja:48
|
#: counter/templates/counter/counter_main.jinja:52
|
||||||
msgid "login"
|
msgid "login"
|
||||||
msgstr "login"
|
msgstr "login"
|
||||||
|
|
||||||
@ -1084,13 +1084,13 @@ msgstr "login"
|
|||||||
msgid "Lost password?"
|
msgid "Lost password?"
|
||||||
msgstr "Mot de passe perdu ?"
|
msgstr "Mot de passe perdu ?"
|
||||||
|
|
||||||
#: core/templates/core/macros.jinja:30
|
#: core/templates/core/macros.jinja:27
|
||||||
#: core/templates/core/user_detail.jinja:22
|
#: core/templates/core/user_detail.jinja:27
|
||||||
msgid "Born: "
|
msgid "Born: "
|
||||||
msgstr "Né le : "
|
msgstr "Né le : "
|
||||||
|
|
||||||
#: core/templates/core/macros.jinja:34
|
#: core/templates/core/macros.jinja:31
|
||||||
#: core/templates/core/user_detail.jinja:33
|
#: core/templates/core/user_detail.jinja:38
|
||||||
msgid "Promo: "
|
msgid "Promo: "
|
||||||
msgstr "Promo : "
|
msgstr "Promo : "
|
||||||
|
|
||||||
@ -1316,20 +1316,20 @@ msgstr "Groupes"
|
|||||||
msgid "%(user_name)s's profile"
|
msgid "%(user_name)s's profile"
|
||||||
msgstr "Profil de %(user_name)s"
|
msgstr "Profil de %(user_name)s"
|
||||||
|
|
||||||
#: core/templates/core/user_detail.jinja:28
|
#: core/templates/core/user_detail.jinja:33
|
||||||
msgid "Option: "
|
msgid "Option: "
|
||||||
msgstr "Filière : "
|
msgstr "Filière : "
|
||||||
|
|
||||||
#: core/templates/core/user_detail.jinja:42
|
#: core/templates/core/user_detail.jinja:48
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "User is subscriber until %(subscription_end)s"
|
msgid "User is subscriber until %(subscription_end)s"
|
||||||
msgstr "L'utilisateur est cotisant jusqu'au %(subscription_end)s"
|
msgstr "L'utilisateur est cotisant jusqu'au %(subscription_end)s"
|
||||||
|
|
||||||
#: core/templates/core/user_detail.jinja:44
|
#: core/templates/core/user_detail.jinja:50
|
||||||
msgid "User is not subscribed. "
|
msgid "User is not subscribed. "
|
||||||
msgstr "L'utilisateur n'est pas cotisant."
|
msgstr "L'utilisateur n'est pas cotisant."
|
||||||
|
|
||||||
#: core/templates/core/user_detail.jinja:45
|
#: core/templates/core/user_detail.jinja:51
|
||||||
#: subscription/templates/subscription/subscription.jinja:4
|
#: subscription/templates/subscription/subscription.jinja:4
|
||||||
#: subscription/templates/subscription/subscription.jinja:8
|
#: subscription/templates/subscription/subscription.jinja:8
|
||||||
msgid "New subscription"
|
msgid "New subscription"
|
||||||
@ -1393,6 +1393,10 @@ msgstr "Liste d'utilisateurs"
|
|||||||
msgid "%(user_name)s's stats"
|
msgid "%(user_name)s's stats"
|
||||||
msgstr "Stats de %(user_name)s"
|
msgstr "Stats de %(user_name)s"
|
||||||
|
|
||||||
|
#: core/templates/core/user_stats.jinja:10
|
||||||
|
msgid "Permanencies"
|
||||||
|
msgstr "Permanences"
|
||||||
|
|
||||||
#: core/templates/core/user_tools.jinja:4
|
#: core/templates/core/user_tools.jinja:4
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "%(user_name)s's tools"
|
msgid "%(user_name)s's tools"
|
||||||
@ -1410,7 +1414,7 @@ msgstr "Gestion de Sith"
|
|||||||
msgid "Subscriptions"
|
msgid "Subscriptions"
|
||||||
msgstr "Cotisations"
|
msgstr "Cotisations"
|
||||||
|
|
||||||
#: core/templates/core/user_tools.jinja:22
|
#: core/templates/core/user_tools.jinja:22 counter/views.py:468
|
||||||
msgid "Counters"
|
msgid "Counters"
|
||||||
msgstr "Comptoirs"
|
msgstr "Comptoirs"
|
||||||
|
|
||||||
@ -1492,43 +1496,63 @@ msgstr "client"
|
|||||||
msgid "customers"
|
msgid "customers"
|
||||||
msgstr "clients"
|
msgstr "clients"
|
||||||
|
|
||||||
#: counter/models.py:44 counter/templates/counter/counter_click.jinja:47
|
#: counter/models.py:44 counter/templates/counter/counter_click.jinja:53
|
||||||
msgid "Not enough money"
|
msgid "Not enough money"
|
||||||
msgstr "Solde insuffisant"
|
msgstr "Solde insuffisant"
|
||||||
|
|
||||||
#: counter/models.py:57
|
#: counter/models.py:57 counter/models.py:79
|
||||||
msgid "product type"
|
msgid "product type"
|
||||||
msgstr "type du produit"
|
msgstr "type du produit"
|
||||||
|
|
||||||
#: counter/models.py:81
|
#: counter/models.py:82
|
||||||
msgid "purchase price"
|
msgid "purchase price"
|
||||||
msgstr "prix d'achat"
|
msgstr "prix d'achat"
|
||||||
|
|
||||||
#: counter/models.py:82
|
#: counter/models.py:83
|
||||||
msgid "selling price"
|
msgid "selling price"
|
||||||
msgstr "prix de vente"
|
msgstr "prix de vente"
|
||||||
|
|
||||||
#: counter/models.py:83
|
#: counter/models.py:84
|
||||||
msgid "special selling price"
|
msgid "special selling price"
|
||||||
msgstr "prix de vente spécial"
|
msgstr "prix de vente spécial"
|
||||||
|
|
||||||
|
#: counter/models.py:85
|
||||||
|
msgid "icon"
|
||||||
|
msgstr "icône"
|
||||||
|
|
||||||
|
#: counter/models.py:87
|
||||||
|
msgid "limit age"
|
||||||
|
msgstr "âge limite"
|
||||||
|
|
||||||
#: counter/models.py:88
|
#: counter/models.py:88
|
||||||
|
msgid "tray price"
|
||||||
|
msgstr "prix plateau"
|
||||||
|
|
||||||
|
#: counter/models.py:89
|
||||||
|
msgid "parent product"
|
||||||
|
msgstr "produit parent"
|
||||||
|
|
||||||
|
#: counter/models.py:91
|
||||||
|
msgid "buying groups"
|
||||||
|
msgstr "groupe d'achat"
|
||||||
|
|
||||||
|
#: counter/models.py:94
|
||||||
msgid "product"
|
msgid "product"
|
||||||
msgstr "produit"
|
msgstr "produit"
|
||||||
|
|
||||||
#: counter/models.py:108
|
#: counter/models.py:114
|
||||||
msgid "counter type"
|
msgid "counter type"
|
||||||
msgstr "type de comptoir"
|
msgstr "type de comptoir"
|
||||||
|
|
||||||
#: counter/models.py:110
|
#: counter/models.py:116
|
||||||
msgid "Bar"
|
msgid "Bar"
|
||||||
msgstr "Bar"
|
msgstr "Bar"
|
||||||
|
|
||||||
#: counter/models.py:110
|
#: counter/models.py:116
|
||||||
msgid "Office"
|
msgid "Office"
|
||||||
msgstr "Bureau"
|
msgstr "Bureau"
|
||||||
|
|
||||||
#: counter/models.py:110 eboutic/templates/eboutic/eboutic_main.jinja:4
|
#: counter/models.py:116 eboutic/templates/eboutic/eboutic_main.jinja:4
|
||||||
#: eboutic/templates/eboutic/eboutic_main.jinja:24
|
#: eboutic/templates/eboutic/eboutic_main.jinja:24
|
||||||
#: eboutic/templates/eboutic/eboutic_makecommand.jinja:8
|
#: eboutic/templates/eboutic/eboutic_makecommand.jinja:8
|
||||||
#: eboutic/templates/eboutic/eboutic_payment_result.jinja:4
|
#: eboutic/templates/eboutic/eboutic_payment_result.jinja:4
|
||||||
@ -1536,49 +1560,49 @@ msgstr "Bureau"
|
|||||||
msgid "Eboutic"
|
msgid "Eboutic"
|
||||||
msgstr "Eboutic"
|
msgstr "Eboutic"
|
||||||
|
|
||||||
#: counter/models.py:111
|
#: counter/models.py:117
|
||||||
msgid "sellers"
|
msgid "sellers"
|
||||||
msgstr "vendeurs"
|
msgstr "vendeurs"
|
||||||
|
|
||||||
#: counter/models.py:117 launderette/models.py:16
|
#: counter/models.py:123 launderette/models.py:16
|
||||||
msgid "counter"
|
msgid "counter"
|
||||||
msgstr "comptoir"
|
msgstr "comptoir"
|
||||||
|
|
||||||
#: counter/models.py:212
|
#: counter/models.py:218
|
||||||
msgid "bank"
|
msgid "bank"
|
||||||
msgstr "banque"
|
msgstr "banque"
|
||||||
|
|
||||||
#: counter/models.py:214 counter/models.py:258
|
#: counter/models.py:220 counter/models.py:264
|
||||||
msgid "is validated"
|
msgid "is validated"
|
||||||
msgstr "est validé"
|
msgstr "est validé"
|
||||||
|
|
||||||
#: counter/models.py:217
|
#: counter/models.py:223
|
||||||
msgid "refilling"
|
msgid "refilling"
|
||||||
msgstr "rechargement"
|
msgstr "rechargement"
|
||||||
|
|
||||||
#: counter/models.py:251 eboutic/models.py:102
|
#: counter/models.py:257 eboutic/models.py:102
|
||||||
msgid "unit price"
|
msgid "unit price"
|
||||||
msgstr "prix unitaire"
|
msgstr "prix unitaire"
|
||||||
|
|
||||||
#: counter/models.py:252 eboutic/models.py:103
|
#: counter/models.py:258 eboutic/models.py:103
|
||||||
msgid "quantity"
|
msgid "quantity"
|
||||||
msgstr "quantité"
|
msgstr "quantité"
|
||||||
|
|
||||||
#: counter/models.py:257
|
#: counter/models.py:263
|
||||||
msgid "Sith account"
|
msgid "Sith account"
|
||||||
msgstr "Compte utilisateur"
|
msgstr "Compte utilisateur"
|
||||||
|
|
||||||
#: counter/models.py:257 sith/settings.py:276 sith/settings.py:281
|
#: counter/models.py:263 sith/settings.py:276 sith/settings.py:281
|
||||||
#: sith/settings.py:302 sith/settings_sample.py:259
|
#: sith/settings.py:302 sith/settings_sample.py:259
|
||||||
#: sith/settings_sample.py:264 sith/settings_sample.py:285
|
#: sith/settings_sample.py:264 sith/settings_sample.py:285
|
||||||
msgid "Credit card"
|
msgid "Credit card"
|
||||||
msgstr "Carte banquaire"
|
msgstr "Carte banquaire"
|
||||||
|
|
||||||
#: counter/models.py:261
|
#: counter/models.py:267
|
||||||
msgid "selling"
|
msgid "selling"
|
||||||
msgstr "vente"
|
msgstr "vente"
|
||||||
|
|
||||||
#: counter/models.py:295
|
#: counter/models.py:301
|
||||||
msgid "permanency"
|
msgid "permanency"
|
||||||
msgstr "permanence"
|
msgstr "permanence"
|
||||||
|
|
||||||
@ -1591,7 +1615,7 @@ msgid "Refilling"
|
|||||||
msgstr "Rechargement"
|
msgstr "Rechargement"
|
||||||
|
|
||||||
#: counter/templates/counter/counter_click.jinja:40
|
#: counter/templates/counter/counter_click.jinja:40
|
||||||
#: counter/templates/counter/counter_click.jinja:53
|
#: counter/templates/counter/counter_click.jinja:59
|
||||||
#: launderette/templates/launderette/launderette_admin.jinja:35
|
#: launderette/templates/launderette/launderette_admin.jinja:35
|
||||||
#: launderette/templates/launderette/launderette_click.jinja:14
|
#: launderette/templates/launderette/launderette_click.jinja:14
|
||||||
msgid "Go"
|
msgid "Go"
|
||||||
@ -1602,23 +1626,31 @@ msgstr "Valider"
|
|||||||
msgid "Selling"
|
msgid "Selling"
|
||||||
msgstr "Vente"
|
msgstr "Vente"
|
||||||
|
|
||||||
#: counter/templates/counter/counter_click.jinja:55
|
#: counter/templates/counter/counter_click.jinja:47
|
||||||
|
msgid "Too young for that product"
|
||||||
|
msgstr "Trop jeune pour ce produit"
|
||||||
|
|
||||||
|
#: counter/templates/counter/counter_click.jinja:50
|
||||||
|
msgid "Not allowed for that product"
|
||||||
|
msgstr "Non autorisé pour ce produit"
|
||||||
|
|
||||||
|
#: counter/templates/counter/counter_click.jinja:61
|
||||||
#: eboutic/templates/eboutic/eboutic_main.jinja:27
|
#: eboutic/templates/eboutic/eboutic_main.jinja:27
|
||||||
#: eboutic/templates/eboutic/eboutic_makecommand.jinja:11
|
#: eboutic/templates/eboutic/eboutic_makecommand.jinja:11
|
||||||
msgid "Basket: "
|
msgid "Basket: "
|
||||||
msgstr "Panier : "
|
msgstr "Panier : "
|
||||||
|
|
||||||
#: counter/templates/counter/counter_click.jinja:63
|
#: counter/templates/counter/counter_click.jinja:74
|
||||||
#: counter/templates/counter/counter_main.jinja:24
|
#: counter/templates/counter/counter_main.jinja:28
|
||||||
#: eboutic/templates/eboutic/eboutic_main.jinja:34
|
#: eboutic/templates/eboutic/eboutic_main.jinja:34
|
||||||
msgid "Total: "
|
msgid "Total: "
|
||||||
msgstr "Total : "
|
msgstr "Total : "
|
||||||
|
|
||||||
#: counter/templates/counter/counter_click.jinja:67
|
#: counter/templates/counter/counter_click.jinja:78
|
||||||
msgid "Finish"
|
msgid "Finish"
|
||||||
msgstr "Terminer"
|
msgstr "Terminer"
|
||||||
|
|
||||||
#: counter/templates/counter/counter_click.jinja:74
|
#: counter/templates/counter/counter_click.jinja:85
|
||||||
msgid "Products: "
|
msgid "Products: "
|
||||||
msgstr "Produits : "
|
msgstr "Produits : "
|
||||||
|
|
||||||
@ -1640,40 +1672,41 @@ msgid "There is no counters in this website."
|
|||||||
msgstr "Il n'y a pas de comptoirs dans ce site web."
|
msgstr "Il n'y a pas de comptoirs dans ce site web."
|
||||||
|
|
||||||
#: counter/templates/counter/counter_main.jinja:12
|
#: counter/templates/counter/counter_main.jinja:12
|
||||||
|
#: counter/templates/counter/counter_main.jinja:16
|
||||||
#: launderette/templates/launderette/launderette_click.jinja:8
|
#: launderette/templates/launderette/launderette_click.jinja:8
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "%(counter_name)s counter"
|
msgid "%(counter_name)s counter"
|
||||||
msgstr "Comptoir %(counter_name)s"
|
msgstr "Comptoir %(counter_name)s"
|
||||||
|
|
||||||
#: counter/templates/counter/counter_main.jinja:15
|
#: counter/templates/counter/counter_main.jinja:19
|
||||||
msgid "Sellings"
|
msgid "Sellings"
|
||||||
msgstr "Ventes"
|
msgstr "Ventes"
|
||||||
|
|
||||||
#: counter/templates/counter/counter_main.jinja:17
|
#: counter/templates/counter/counter_main.jinja:21
|
||||||
msgid "Last selling: "
|
msgid "Last selling: "
|
||||||
msgstr "Dernière vente : "
|
msgstr "Dernière vente : "
|
||||||
|
|
||||||
#: counter/templates/counter/counter_main.jinja:18
|
#: counter/templates/counter/counter_main.jinja:22
|
||||||
msgid "Client: "
|
msgid "Client: "
|
||||||
msgstr "Client : "
|
msgstr "Client : "
|
||||||
|
|
||||||
#: counter/templates/counter/counter_main.jinja:18
|
#: counter/templates/counter/counter_main.jinja:22
|
||||||
msgid "New amount: "
|
msgid "New amount: "
|
||||||
msgstr "Nouveau montant : "
|
msgstr "Nouveau montant : "
|
||||||
|
|
||||||
#: counter/templates/counter/counter_main.jinja:27
|
#: counter/templates/counter/counter_main.jinja:31
|
||||||
msgid "Enter client code:"
|
msgid "Enter client code:"
|
||||||
msgstr "Entrez un code client : "
|
msgstr "Entrez un code client : "
|
||||||
|
|
||||||
#: counter/templates/counter/counter_main.jinja:31
|
#: counter/templates/counter/counter_main.jinja:35
|
||||||
msgid "validate"
|
msgid "validate"
|
||||||
msgstr "valider"
|
msgstr "valider"
|
||||||
|
|
||||||
#: counter/templates/counter/counter_main.jinja:34
|
#: counter/templates/counter/counter_main.jinja:38
|
||||||
msgid "Please, login"
|
msgid "Please, login"
|
||||||
msgstr "Merci de vous identifier"
|
msgstr "Merci de vous identifier"
|
||||||
|
|
||||||
#: counter/templates/counter/counter_main.jinja:39
|
#: counter/templates/counter/counter_main.jinja:43
|
||||||
msgid "Barman: "
|
msgid "Barman: "
|
||||||
msgstr "Barman : "
|
msgstr "Barman : "
|
||||||
|
|
||||||
@ -1711,18 +1744,34 @@ msgstr "Choisir un utilisateur"
|
|||||||
msgid "User not found"
|
msgid "User not found"
|
||||||
msgstr "Utilisateur non trouvé"
|
msgstr "Utilisateur non trouvé"
|
||||||
|
|
||||||
#: counter/views.py:214
|
#: counter/views.py:83
|
||||||
|
msgid "Bad credentials"
|
||||||
|
msgstr "Mauvais identifiants"
|
||||||
|
|
||||||
|
#: counter/views.py:85
|
||||||
|
msgid "User is not subscriber"
|
||||||
|
msgstr "L'utilisateur n'est pas cotisant."
|
||||||
|
|
||||||
|
#: counter/views.py:253
|
||||||
msgid "END"
|
msgid "END"
|
||||||
msgstr "FIN"
|
msgstr "FIN"
|
||||||
|
|
||||||
#: counter/views.py:216
|
#: counter/views.py:255
|
||||||
msgid "CAN"
|
msgid "CAN"
|
||||||
msgstr "ANN"
|
msgstr "ANN"
|
||||||
|
|
||||||
#: counter/views.py:246
|
#: counter/views.py:285
|
||||||
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"
|
||||||
|
|
||||||
|
#: counter/views.py:465
|
||||||
|
msgid "Parent product"
|
||||||
|
msgstr "Produit parent"
|
||||||
|
|
||||||
|
#: counter/views.py:466
|
||||||
|
msgid "Buying groups"
|
||||||
|
msgstr "Groupes d'achat"
|
||||||
|
|
||||||
#: eboutic/models.py:48
|
#: eboutic/models.py:48
|
||||||
msgid "validated"
|
msgid "validated"
|
||||||
msgstr "validé"
|
msgstr "validé"
|
||||||
@ -1782,7 +1831,7 @@ msgstr "Le paiement a été effectué"
|
|||||||
msgid "Return to eboutic"
|
msgid "Return to eboutic"
|
||||||
msgstr "Retourner à l'eboutic"
|
msgstr "Retourner à l'eboutic"
|
||||||
|
|
||||||
#: eboutic/views.py:135
|
#: eboutic/views.py:136
|
||||||
msgid "You do not have enough money to buy the basket"
|
msgid "You do not have enough money to buy 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"
|
||||||
|
|
||||||
|
@ -83,7 +83,6 @@ def migrate_users():
|
|||||||
}
|
}
|
||||||
|
|
||||||
def get_random_free_email():
|
def get_random_free_email():
|
||||||
id = random.randrange(4000)
|
|
||||||
email = "no_email_%s@git.an" % random.randrange(4000, 40000)
|
email = "no_email_%s@git.an" % random.randrange(4000, 40000)
|
||||||
while User.objects.filter(email=email).exists():
|
while User.objects.filter(email=email).exists():
|
||||||
email = "no_email_%s@git.an" % random.randrange(4000, 40000)
|
email = "no_email_%s@git.an" % random.randrange(4000, 40000)
|
||||||
@ -602,10 +601,10 @@ def main():
|
|||||||
migrate_products()
|
migrate_products()
|
||||||
migrate_products_to_counter()
|
migrate_products_to_counter()
|
||||||
# reset_customer_amount()
|
# reset_customer_amount()
|
||||||
migrate_invoices()
|
|
||||||
migrate_refillings()
|
migrate_refillings()
|
||||||
|
migrate_invoices()
|
||||||
migrate_sellings()
|
migrate_sellings()
|
||||||
# reset_index('core', 'counter', 'subscription')
|
reset_index('core', 'club', 'subscription', 'accounting', 'eboutic', 'launderette', 'counter')
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
Loading…
Reference in New Issue
Block a user