Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
chris
repanier
Commits
3201817b
Commit
3201817b
authored
Apr 21, 2017
by
Patrick
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Work in progress
parent
4021606f
Changes
24
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
356 additions
and
347 deletions
+356
-347
repanier/admin/admin_filter.py
repanier/admin/admin_filter.py
+7
-2
repanier/admin/bankaccount.py
repanier/admin/bankaccount.py
+17
-0
repanier/admin/customer.py
repanier/admin/customer.py
+6
-13
repanier/admin/permanence_in_preparation.py
repanier/admin/permanence_in_preparation.py
+1
-0
repanier/admin/product.py
repanier/admin/product.py
+7
-4
repanier/const.py
repanier/const.py
+20
-5
repanier/email/email_offer.py
repanier/email/email_offer.py
+10
-0
repanier/fields/RepanierMoneyField.py
repanier/fields/RepanierMoneyField.py
+0
-1
repanier/locale/fr/LC_MESSAGES/django.mo
repanier/locale/fr/LC_MESSAGES/django.mo
+0
-0
repanier/locale/fr/LC_MESSAGES/django.po
repanier/locale/fr/LC_MESSAGES/django.po
+112
-109
repanier/locale/fr/LC_MESSAGES/djangojs.mo
repanier/locale/fr/LC_MESSAGES/djangojs.mo
+0
-0
repanier/locale/fr/LC_MESSAGES/djangojs.po
repanier/locale/fr/LC_MESSAGES/djangojs.po
+6
-2
repanier/models/configuration.py
repanier/models/configuration.py
+6
-4
repanier/models/customer.py
repanier/models/customer.py
+12
-3
repanier/models/offeritem.py
repanier/models/offeritem.py
+1
-1
repanier/models/product.py
repanier/models/product.py
+8
-3
repanier/static/js/expenses_to_be_apportioned.js
repanier/static/js/expenses_to_be_apportioned.js
+7
-0
repanier/task/task_invoice.py
repanier/task/task_invoice.py
+20
-23
repanier/task/task_order.py
repanier/task/task_order.py
+66
-111
repanier/templates/repanier/order_form.html
repanier/templates/repanier/order_form.html
+3
-6
repanier/tools.py
repanier/tools.py
+17
-18
repanier/views/order_class.py
repanier/views/order_class.py
+0
-2
repanier/views/order_init_ajax.py
repanier/views/order_init_ajax.py
+27
-37
repanier/views/pre_order_class.py
repanier/views/pre_order_class.py
+3
-3
No files found.
repanier/admin/admin_filter.py
View file @
3201817b
...
...
@@ -241,7 +241,12 @@ class BankAccountFilterByStatus(SimpleListFilter):
parameter_name
=
'is_filled_exact'
def
lookups
(
self
,
request
,
model_admin
):
return
[(
1
,
_
(
'not invoiced'
)),
(
2
,
_
(
'balance'
)),
(
3
,
_
(
'subscriptions'
)),
(
4
,
_
(
'losts and profits'
)),
(
5
,
_
(
'taxes'
))]
return
[
(
1
,
_
(
'not invoiced'
)),
(
2
,
_
(
'balance'
)),
(
3
,
_
(
'membership fees'
)),
(
4
,
_
(
'losts and profits'
)),
(
5
,
_
(
'taxes'
))]
def
queryset
(
self
,
request
,
queryset
):
value
=
self
.
value
()
...
...
@@ -254,7 +259,7 @@ class BankAccountFilterByStatus(SimpleListFilter):
elif
value
==
"2"
:
return
queryset
.
filter
(
permanence_id__isnull
=
False
,
customer_id__isnull
=
True
,
producer_id__isnull
=
True
)
elif
value
==
"3"
:
return
queryset
.
filter
(
operation_status
=
BANK_
SUBSCRIPTION
)
return
queryset
.
filter
(
operation_status
=
BANK_
MEMBERSHIP_FEE
)
elif
value
==
"4"
:
return
queryset
.
filter
(
operation_status
=
BANK_PROFIT
)
else
:
...
...
repanier/admin/bankaccount.py
View file @
3201817b
...
...
@@ -2,7 +2,10 @@
from
__future__
import
unicode_literals
from
django
import
forms
from
django.conf.urls
import
url
from
django.contrib
import
admin
from
django.core
import
urlresolvers
from
django.http
import
HttpResponseRedirect
from
django.utils.translation
import
ugettext_lazy
as
_
from
easy_select2
import
apply_select2
from
import_export
import
resources
,
fields
...
...
@@ -278,6 +281,13 @@ class BankAccountAdmin(ImportExportMixin, admin.ModelAdmin):
def
has_change_permission
(
self
,
request
,
bank_account
=
None
):
return
self
.
has_add_permission
(
request
)
# def get_urls(self):
# urls = super(BankAccountAdmin, self).get_urls()
# my_urls = [
# url(r'^expenses_to_be_apportioned/$', self.expenses_to_be_apportioned),
# ]
# return my_urls + urls
def
get_readonly_fields
(
self
,
request
,
obj
=
None
):
readonly_fields
=
[
'is_updated_on'
,
...
...
@@ -285,6 +295,10 @@ class BankAccountAdmin(ImportExportMixin, admin.ModelAdmin):
]
return
readonly_fields
# def expenses_to_be_apportioned(self, request):
# redirect_to = urlresolvers.reverse('admin:repanier_bankaccount_changelist', )
# return HttpResponseRedirect(redirect_to)
def
get_actions
(
self
,
request
):
actions
=
super
(
BankAccountAdmin
,
self
).
get_actions
(
request
)
if
'delete_selected'
in
actions
:
...
...
@@ -304,3 +318,6 @@ class BankAccountAdmin(ImportExportMixin, admin.ModelAdmin):
"""
return
[
f
for
f
in
(
XLS
,
XLSX_OPENPYXL_1_8_6
)
if
f
().
can_import
()]
# class Media:
# js = ('js/expenses_to_be_apportioned.js',)
repanier/admin/customer.py
View file @
3201817b
...
...
@@ -142,7 +142,7 @@ class CustomerResource(resources.ModelResource):
email
=
fields
.
Field
(
attribute
=
'user'
,
default
=
"ask.it@to.me"
,
widget
=
OneToOneWidget
(
User
,
'email'
),
readonly
=
False
)
phone1
=
fields
.
Field
(
attribute
=
'phone1'
,
default
=
"1234"
,
widget
=
CharWidget
(),
readonly
=
False
)
phone2
=
fields
.
Field
(
attribute
=
'phone2'
,
widget
=
CharWidget
(),
readonly
=
False
)
date_balance
=
fields
.
Field
(
attribute
=
'get_admin_date_balance'
,
widget
=
Date
Widget
Excel
(),
readonly
=
True
)
date_balance
=
fields
.
Field
(
attribute
=
'get_admin_date_balance'
,
widget
=
Char
Widget
(),
readonly
=
True
)
balance
=
fields
.
Field
(
attribute
=
'get_admin_balance'
,
widget
=
TwoMoneysWidget
(),
readonly
=
True
)
may_order
=
fields
.
Field
(
attribute
=
'may_order'
,
default
=
False
,
widget
=
DecimalBooleanWidget
(),
readonly
=
False
)
is_group
=
fields
.
Field
(
attribute
=
'is_group'
,
default
=
False
,
widget
=
DecimalBooleanWidget
(),
readonly
=
False
)
...
...
@@ -163,6 +163,7 @@ class CustomerResource(resources.ModelResource):
delivery_point
=
fields
.
Field
(
attribute
=
'delivery_point'
,
widget
=
TranslatedForeignKeyWidget
(
LUT_DeliveryPoint
,
field
=
'short_name'
))
valid_email
=
fields
.
Field
(
attribute
=
'valid_email'
,
widget
=
DecimalBooleanWidget
(),
readonly
=
True
)
date_joined
=
fields
.
Field
(
attribute
=
'get_admin_date_joined'
,
widget
=
CharWidget
(),
readonly
=
True
)
def
before_save_instance
(
self
,
instance
,
using_transactions
,
dry_run
):
"""
...
...
@@ -286,14 +287,6 @@ class CustomerWithUserDataAdmin(ImportExportMixin, admin.ModelAdmin):
get_email
.
short_description
=
_
(
"email"
)
get_email
.
admin_order_field
=
'user__email'
def
get_date_joined
(
self
,
customer
):
if
customer
.
user
is
not
None
:
return
customer
.
user
.
date_joined
.
strftime
(
settings
.
DJANGO_SETTINGS_DATE
)
else
:
return
EMPTY_STRING
get_date_joined
.
short_description
=
_
(
"date joined"
)
def
get_last_login
(
self
,
customer
):
if
customer
.
user
is
not
None
and
customer
.
user
.
last_login
is
not
None
:
return
customer
.
user
.
last_login
.
strftime
(
settings
.
DJANGO_SETTINGS_DATE
)
...
...
@@ -356,7 +349,7 @@ class CustomerWithUserDataAdmin(ImportExportMixin, admin.ModelAdmin):
'bank_account1'
,
'bank_account2'
,
'get_last_login'
,
'get_date_joined'
,
'get_
admin_
date_joined'
,
'get_last_membership_fee'
,
'get_last_membership_fee_date'
,
'get_participation'
,
...
...
@@ -374,20 +367,20 @@ class CustomerWithUserDataAdmin(ImportExportMixin, admin.ModelAdmin):
return
[
'get_admin_date_balance'
,
'get_admin_balance'
,
'represent_this_buyinggroup'
,
'get_last_login'
,
'get_date_joined'
,
'get_participation'
,
'get_purchase'
,
'get_
admin_
date_joined'
,
'get_participation'
,
'get_purchase'
,
'get_last_membership_fee'
,
'get_last_membership_fee_date'
]
else
:
return
[
'get_admin_date_balance'
,
'get_admin_balance'
,
'get_last_login'
,
'get_date_joined'
,
'get_participation'
,
'get_purchase'
,
'get_
admin_
date_joined'
,
'get_participation'
,
'get_purchase'
,
'get_last_membership_fee'
,
'get_last_membership_fee_date'
]
else
:
return
[
'represent_this_buyinggroup'
,
'get_last_login'
,
'get_date_joined'
,
'get_participation'
,
'get_purchase'
,
'get_
admin_
date_joined'
,
'get_participation'
,
'get_purchase'
,
'get_last_membership_fee'
,
'get_last_membership_fee_date'
]
...
...
repanier/admin/permanence_in_preparation.py
View file @
3201817b
...
...
@@ -404,6 +404,7 @@ class PermanenceInPreparationAdmin(TranslatableAdmin):
context
=
TemplateContext
({
'offer_description'
:
mark_safe
(
offer_description
),
'offer_detail'
:
offer_detail
,
'offer_recent_detail'
:
offer_detail
,
'offer_producer'
:
offer_producer
,
'permanence_link'
:
mark_safe
(
'<a href="#">%s</a>'
%
permanence
),
'signature'
:
mark_safe
(
...
...
repanier/admin/product.py
View file @
3201817b
...
...
@@ -521,7 +521,7 @@ class ProductAdmin(ImportExportMixin, TranslatableAdmin):
if
hasattr
(
picture_field
.
widget
,
'upload_to'
):
picture_field
.
widget
.
upload_to
=
"%s%s%d"
%
(
"product"
,
os_sep
,
producer
.
id
)
if
producer
.
represent_this_buyinggroup
:
order_unit_choices
=
LUT_PRODUCT_ORDER_UNIT
order_unit_choices
=
LUT_PRODUCT_ORDER_UNIT
_W_SUBSCRIPTION
order_unit_field
.
choices
=
order_unit_choices
if
product
is
not
None
:
...
...
@@ -570,9 +570,12 @@ class ProductAdmin(ImportExportMixin, TranslatableAdmin):
def
get_queryset
(
self
,
request
):
queryset
=
super
(
ProductAdmin
,
self
).
get_queryset
(
request
)
return
queryset
.
filter
(
is_box
=
False
,
is_membership_fee
=
False
,
producer__is_active
=
True
,
translations__language_code
=
translation
.
get_language
())
return
queryset
.
filter
(
is_box
=
False
,
# is_membership_fee=False,
producer__is_active
=
True
,
translations__language_code
=
translation
.
get_language
()
).
exclude
(
order_unit
=
PRODUCT_ORDER_UNIT_MEMBERSHIP_FEE
)
def
get_import_formats
(
self
):
"""
...
...
repanier/const.py
View file @
3201817b
...
...
@@ -108,8 +108,9 @@ PRODUCT_ORDER_UNIT_KG = '120'
PRODUCT_ORDER_UNIT_PC_KG
=
'140'
PRODUCT_ORDER_UNIT_LT
=
'150'
PRODUCT_ORDER_UNIT_DEPOSIT
=
'300'
PRODUCT_ORDER_UNIT_
SUBSCRIPTION
=
'400'
PRODUCT_ORDER_UNIT_
MEMBERSHIP_FEE
=
'400'
PRODUCT_ORDER_UNIT_TRANSPORTATION
=
'500'
PRODUCT_ORDER_UNIT_SUBSCRIPTION
=
'600'
LUT_PRODUCT_ORDER_UNIT
=
(
(
PRODUCT_ORDER_UNIT_PC
,
_
(
"bought per piece"
)),
...
...
@@ -122,7 +123,7 @@ LUT_PRODUCT_ORDER_UNIT = (
(
PRODUCT_ORDER_UNIT_DEPOSIT
,
_
(
'As a deposit, a bag : always add this product to preparation list when the customer has purchased something.'
)),
(
PRODUCT_ORDER_UNIT_SUBSCRIPTION
,
_
(
'
As a s
ubscription
, common expense : add the minimal order quantity of this product to each customer of the group
'
)),
'
S
ubscription'
)),
(
PRODUCT_ORDER_UNIT_TRANSPORTATION
,
_
(
'As a transportation cost : add the minimal order quantity of this product to the basket representing the group.'
)),
)
...
...
@@ -138,7 +139,7 @@ LUT_PRODUCT_ORDER_UNIT_REVERSE = (
(
_
(
'As a deposit, a bag : always add this product to preparation list when the customer has purchased something.'
),
PRODUCT_ORDER_UNIT_DEPOSIT
),
(
_
(
'
As a s
ubscription
, common expense : add the minimal order quantity of this product to each customer of the group
'
),
'
S
ubscription'
),
PRODUCT_ORDER_UNIT_SUBSCRIPTION
),
(
_
(
'As a transportation cost : add the minimal order quantity of this product to the basket representing the group.'
),
...
...
@@ -159,6 +160,20 @@ LUT_PRODUCT_ORDER_UNIT_WO_SUBSCRIPTION = (
'As a transportation cost : add the minimal order quantity of this product to the basket representing the group.'
)),
)
LUT_PRODUCT_ORDER_UNIT_W_SUBSCRIPTION
=
(
(
PRODUCT_ORDER_UNIT_PC
,
_
(
"bought per piece"
)),
(
PRODUCT_ORDER_UNIT_PC_PRICE_KG
,
_
(
"bought per piece (price /kg)"
)),
(
PRODUCT_ORDER_UNIT_PC_PRICE_LT
,
_
(
"bought per piece (price /l)"
)),
(
PRODUCT_ORDER_UNIT_PC_PRICE_PC
,
_
(
"bought per piece (price /pc)"
)),
(
PRODUCT_ORDER_UNIT_KG
,
_
(
"bought per kg"
)),
(
PRODUCT_ORDER_UNIT_PC_KG
,
_
(
"bought per piece, invoiced following the weight"
)),
(
PRODUCT_ORDER_UNIT_LT
,
_
(
"bought per l"
)),
(
PRODUCT_ORDER_UNIT_DEPOSIT
,
_
(
'As a deposit, a bag : always add this product to preparation list when the customer has purchased something.'
)),
(
PRODUCT_ORDER_UNIT_SUBSCRIPTION
,
_
(
'Subscription'
)),
)
LUT_PRODUCER_PRODUCT_ORDER_UNIT
=
(
(
PRODUCT_ORDER_UNIT_PC_PRICE_PC
,
_
(
"Sold by piece"
)),
(
PRODUCT_ORDER_UNIT_PC_PRICE_KG
,
_
(
"Sold by weight"
)),
...
...
@@ -230,7 +245,7 @@ LUT_ALL_VAT_REVERSE = (
)
BANK_NOT_LATEST_TOTAL
=
'100'
BANK_
SUBSCRIPTION
=
'150'
BANK_
MEMBERSHIP_FEE
=
'150'
BANK_COMPENSATION
=
'200'
# BANK_COMPENSATION may occurs in previous release of Repanier
BANK_PROFIT
=
'210'
BANK_TAX
=
'220'
...
...
@@ -240,7 +255,7 @@ BANK_LATEST_TOTAL = '400'
LUT_BANK_TOTAL
=
(
(
BANK_NOT_LATEST_TOTAL
,
_
(
'This is not the latest total'
)),
(
BANK_
SUBSCRIPTION
,
BANK_SUBSCRIPTION
),
(
BANK_
MEMBERSHIP_FEE
,
BANK_MEMBERSHIP_FEE
),
(
BANK_PROFIT
,
BANK_PROFIT
),
(
BANK_TAX
,
BANK_TAX
),
(
BANK_CALCULATED_INVOICE
,
BANK_CALCULATED_INVOICE
),
...
...
repanier/email/email_offer.py
View file @
3201817b
...
...
@@ -127,12 +127,22 @@ def send_open_order(permanence_id):
)
for
o
in
qs
),)
two_weeks_ago
=
timezone
.
now
().
date
()
-
datetime
.
timedelta
(
days
=
14
)
qs
=
qs
.
filter
(
product__is_updated_on__gte
=
two_weeks_ago
)
offer_recent_detail
=
'<ul>%s</ul>'
%
(
""
.
join
(
'<li>%s, %s, %s</li>'
%
(
o
.
get_long_name
(
box_unicode
=
EMPTY_STRING
),
o
.
producer
.
short_profile_name
,
o
.
email_offer_price_with_vat
,
)
for
o
in
qs
),)
template
=
Template
(
offer_customer_mail
)
context
=
TemplateContext
({
'permanence_link'
:
mark_safe
(
'<a href="http://%s%s">%s</a>'
%
(
settings
.
ALLOWED_HOSTS
[
0
],
reverse
(
'order_view'
,
args
=
(
permanence
.
id
,)),
permanence
)),
'offer_description'
:
mark_safe
(
offer_description
),
'offer_detail'
:
mark_safe
(
offer_detail
),
'offer_recent_detail'
:
mark_safe
(
offer_recent_detail
),
'offer_producer'
:
offer_producer
,
'signature'
:
mark_safe
(
'%s<br/>%s<br/>%s'
%
(
signature
,
sender_function
,
REPANIER_SETTINGS_GROUP_NAME
))
...
...
repanier/fields/RepanierMoneyField.py
View file @
3201817b
...
...
@@ -5,7 +5,6 @@ import sys
from
decimal
import
*
from
django.conf
import
settings
from
django.core.exceptions
import
ValidationError
from
django.db
import
models
from
django.db.models.expressions
import
BaseExpression
,
Expression
from
django.forms
import
DecimalField
,
NumberInput
...
...
repanier/locale/fr/LC_MESSAGES/django.mo
View file @
3201817b
No preview for this file type
repanier/locale/fr/LC_MESSAGES/django.po
View file @
3201817b
...
...
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Repanier\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-04-
18 18:09
+0200\n"
"PO-Revision-Date: 2017-04-2
0 20:06
+0100\n"
"POT-Creation-Date: 2017-04-
21 12:32
+0200\n"
"PO-Revision-Date: 2017-04-2
1 15:22
+0100\n"
"Last-Translator: Patrick Colmant <pcolmant@gmail.com>\n"
"Language-Team: Patrick Colmant <pcolmant@gmail.com>\n"
"Language: fr\n"
...
...
@@ -41,7 +41,7 @@ msgstr "Emplacement du produit pendant la préparation"
msgid "vat"
msgstr "TVA"
#: admin/admin_filter.py:133 admin/bankaccount.py:14
4
models/bankaccount.py:23
#: admin/admin_filter.py:133 admin/bankaccount.py:14
7
models/bankaccount.py:23
#: models/bankaccount.py:110 models/customer.py:263 models/invoice.py:30
#: models/invoice.py:33 models/invoice.py:451 models/invoice.py:495
#: models/permanenceboard.py:15 models/purchase.py:44 models/purchase.py:46
...
...
@@ -50,7 +50,7 @@ msgstr "TVA"
msgid "customer"
msgstr "Consommateur"
#: admin/admin_filter.py:160 admin/bankaccount.py:15
2
admin/forms.py:78
#: admin/admin_filter.py:160 admin/bankaccount.py:15
5
admin/forms.py:78
#: models/bankaccount.py:20 models/bankaccount.py:86 models/invoice.py:339
#: models/invoice.py:454 models/offeritem.py:63 models/producer.py:294
#: models/product.py:30 models/purchase.py:42
...
...
@@ -76,89 +76,89 @@ msgstr "Seulement facturés"
msgid "status"
msgstr "Statut"
#: admin/admin_filter.py:24
4
#: admin/admin_filter.py:24
5
msgid "not invoiced"
msgstr "Pas encore facturés"
#: admin/admin_filter.py:24
4
models/customer.py:96 models/customer.py:124
#: admin/admin_filter.py:24
6
models/customer.py:96 models/customer.py:124
#: models/customer.py:185 models/invoice.py:98 models/invoice.py:375
#: models/producer.py:96 models/producer.py:140 models/producer.py:226
#: models/producer.py:263
msgid "balance"
msgstr "Solde"
#: admin/admin_filter.py:24
4
msgid "
subscription
s"
#: admin/admin_filter.py:24
7
msgid "
membership fee
s"
msgstr "Cotisations"
#: admin/admin_filter.py:24
4
#: admin/admin_filter.py:24
8
msgid "losts and profits"
msgstr "Pertes et profits"
#: admin/admin_filter.py:24
4
#: admin/admin_filter.py:24
9
msgid "taxes"
msgstr "Taxes dues"
#: admin/bankaccount.py:
59
#: admin/bankaccount.py:
62
msgid "No producer nor customer found."
msgstr "Aucun producteur ni consommateur trouvé."
#: admin/bankaccount.py:6
5
#: admin/bankaccount.py:6
8
msgid "Only a customer or a producer may be entered."
msgstr "Soit un consommateur, soit un producteur doit être renseigné."
#: admin/bankaccount.py:7
3
admin/bankaccount.py:8
0
admin/bankaccount.py:
88
#: admin/bankaccount.py:9
5
#: admin/bankaccount.py:7
6
admin/bankaccount.py:8
3
admin/bankaccount.py:
91
#: admin/bankaccount.py:9
8
msgid "This movement already exists."
msgstr ""
"Ce mouvement existe déjà. S'il est nécessaire de l'encoder une seconde fois, "
"faites le manuellement sans passer par l'importation."
#: admin/bankaccount.py:1
58
models/bankaccount.py:37 models/bankaccount.py:59
#: admin/bankaccount.py:1
61
models/bankaccount.py:37 models/bankaccount.py:59
#: models/invoice.py:90 models/invoice.py:367 xlsx/xlsx_invoice.py:73
#: xlsx/xlsx_invoice.py:124
msgid "bank_amount_in"
msgstr "Entrée"
#: admin/bankaccount.py:1
59
models/bankaccount.py:37 models/invoice.py:90
#: admin/bankaccount.py:1
62
models/bankaccount.py:37 models/invoice.py:90
#: models/invoice.py:367
msgid "payment_on_the_account"
msgstr "Virement entrant"
#: admin/bankaccount.py:16
2
models/bankaccount.py:41 models/bankaccount.py:69
#: admin/bankaccount.py:16
5
models/bankaccount.py:41 models/bankaccount.py:69
#: models/invoice.py:93 models/invoice.py:370 xlsx/xlsx_invoice.py:74
#: xlsx/xlsx_invoice.py:125
msgid "bank_amount_out"
msgstr "Sortie"
#: admin/bankaccount.py:16
3
models/bankaccount.py:41 models/invoice.py:93
#: admin/bankaccount.py:16
6
models/bankaccount.py:41 models/invoice.py:93
#: models/invoice.py:370
msgid "payment_from_the_account"
msgstr "Virement sortant"
#: admin/bankaccount.py:1
7
8 admin/bankaccount.py:18
3
#: admin/bankaccount.py:18
1
admin/bankaccount.py:18
6
msgid "---------"
msgstr "---------"
#: admin/bankaccount.py:22
0
#: admin/bankaccount.py:22
3
msgid "You may not update a balance."
msgstr "Vous ne pouvez pas modifier un solde."
#: admin/bankaccount.py:22
3
admin/bankaccount.py:22
4
admin/bankaccount.py:22
9
#: admin/bankaccount.py:23
0
#: admin/bankaccount.py:22
6
admin/bankaccount.py:22
7
admin/bankaccount.py:2
3
2
#: admin/bankaccount.py:23
3
msgid "Either a customer or a producer must be given."
msgstr "Soit un consommateur, soit un producteur doit être renseigné."
#: admin/bankaccount.py:23
4
#: admin/bankaccount.py:23
7
msgid "You may not update a bank operation linked to an invoice."
msgstr ""
"Vous ne pouvez pas modifier un mouvement bancaire déjà liée à une facture."
#: admin/bankaccount.py:2
37
admin/bankaccount.py:2
38
#: admin/bankaccount.py:2
40
admin/bankaccount.py:2
41
msgid "Only one customer or one producer must be given."
msgstr "Soit un consommateur, soit un producteur doit être renseigné."
#: admin/bankaccount.py:24
3
#: admin/bankaccount.py:24
6
msgid ""
"The operation date must be greater or equal to the latest total operation "
"date."
...
...
@@ -228,7 +228,7 @@ msgstr "Action annulée par l'utilisateur."
#: admin/permanence_in_preparation.py:795
#: admin/permanence_in_preparation.py:823
#: admin/permanence_in_preparation.py:844 admin/product.py:335
#: admin/purchase.py:231 admin/purchase.py:276 task/task_order.py:23
9
#: admin/purchase.py:231 admin/purchase.py:276 task/task_order.py:23
4
msgid "Action canceled by the system."
msgstr "Action annulée par Repanier."
...
...
@@ -1027,7 +1027,7 @@ msgstr "La quantité doit être différente de zéro."
msgid "department_for_customer"
msgstr "Rayon"
#: admin/purchase.py:243 const.py:26
2
email/email_order.py:33
#: admin/purchase.py:243 const.py:26
3
email/email_order.py:33
#: models/configuration.py:299 views/btn_confirm_order_ajax.py:48
msgid "Order"
msgstr "Commande"
...
...
@@ -1123,7 +1123,7 @@ msgid "This flag is already set for another staff member"
msgstr ""
"Un et un seul membre de l'équipe de gestion peut assurer cette fonction"
#: apps.py:16 const.py:2
59
models/configuration.py:287
#: apps.py:16 const.py:2
60
models/configuration.py:287
#: xlsx/xlsx_invoice.py:210
msgid "Permanence"
msgstr "Permanence"
...
...
@@ -1363,9 +1363,9 @@ msgstr "Hygiène"
msgid "Deposit"
msgstr "Consigne"
#: apps.py:214
#: apps.py:214
const.py:126 const.py:142
msgid "Subscription"
msgstr "
Cotisa
tion"
msgstr "
Souscrip
tion
.
"
#: apps.py:220 views/order_select_ajax.py:134
msgid "Other qty"
...
...
@@ -1527,153 +1527,147 @@ msgstr "En dehors du panier"
msgid "into the basket"
msgstr "Panier"
#: const.py:11
5
const.py:13
1
const.py:1
49
#: const.py:11
6
const.py:13
2
const.py:1
50
msgid "bought per piece"
msgstr "Vendu à la pièce."
#: const.py:11
6
const.py:13
2
const.py:15
0
#: const.py:11
7
const.py:13
3
const.py:15
1
msgid "bought per piece (price /kg)"
msgstr "Vendu à la pièce (prix affiché au kg)."
#: const.py:11
7
const.py:13
3
const.py:15
1
#: const.py:11
8
const.py:13
4
const.py:15
2
msgid "bought per piece (price /l)"
msgstr "Vendu à la pièce (prix affiché au ℓ)."
#: const.py:11
8
const.py:13
4
const.py:15
2
#: const.py:11
9
const.py:13
5
const.py:15
3
msgid "bought per piece (price /pc)"
msgstr "Vendu en pack."
#: const.py:1
19
const.py:13
5
const.py:15
3
#: const.py:1
20
const.py:13
6
const.py:15
4
msgid "bought per kg"
msgstr "Vendu au poids (en kg)."
#: const.py:12
0
const.py:13
6
const.py:15
4
#: const.py:12
1
const.py:13
7
const.py:15
5
msgid "bought per piece, invoiced following the weight"
msgstr "Vendu à la pièce, facturé selon le poids réel."
#: const.py:12
1
const.py:13
7
const.py:15
5
#: const.py:12
2
const.py:13
8
const.py:15
6
msgid "bought per l"
msgstr "Vendu au volume (en ℓ)."
#: const.py:12
3
const.py:13
8
const.py:15
7
#: const.py:12
4
const.py:13
9
const.py:15
8
msgid ""
"As a deposit, a bag : always add this product to preparation list when the "
"customer has purchased something."
msgstr "Consigne reprise à la permanence."
#: const.py:125 const.py:141
msgid ""
"As a subscription, common expense : add the minimal order quantity of this "
"product to each customer of the group"
msgstr "Cotisation."
#: const.py:127 const.py:144 const.py:159
#: const.py:128 const.py:145 const.py:160
msgid ""
"As a transportation cost : add the minimal order quantity of this product to "
"the basket representing the group."
msgstr "Frais de livraison."
#: const.py:16
3
#: const.py:16
4
msgid "Sold by piece"
msgstr "Vendu à la pièce"
#: const.py:16
4
#: const.py:16
5
msgid "Sold by weight"
msgstr "Vendu au poids"
#: const.py:16
5
#: const.py:16
6
msgid "Sold by l"
msgstr "Vendu au ℓ"
#: const.py:16
6
#: const.py:16
7
msgid "Sold by piece, invoiced following the weight"
msgstr "Vendu à la pièce, facturé selon le poids réel"
#: const.py:18
8
const.py:20
3
const.py:21
8
#: const.py:18
9
const.py:20
4
const.py:21
9
msgid "none"
msgstr "Aucune"
#: const.py:1
8
9 const.py:20
4
const.py:2
19
#: const.py:19
0
const.py:20
5
const.py:2
20
msgid "vat 2.1%"
msgstr "2,1% de TVA"
#: const.py:19
0
const.py:20
5
const.py:22
0
#: const.py:19
1
const.py:20
6
const.py:22
1
msgid "vat 2.5%"
msgstr "2,5% de TVA"
#: const.py:19
1
const.py:20
6
const.py:22
1
#: const.py:19
2
const.py:20
7
const.py:22
2
msgid "vat 3.8%"
msgstr "3,8% de TVA"
#: const.py:19
2
const.py:20
7
const.py:22
2
#: const.py:19
3
const.py:20
8
const.py:22
3
msgid "vat 4%"
msgstr "4% de TVA"
#: const.py:19
3
const.py:20
8
const.py:22
3
#: const.py:19
4
const.py:20
9
const.py:22
4
msgid "vat 5.5%"
msgstr "5,5% de TVA"
#: const.py:19
4
const.py:20
9
const.py:22
4
#: const.py:19
5
const.py:2
1
0 const.py:22
5
msgid "vat 6%"
msgstr "6% de TVA"
#: const.py:19
5
const.py:21
0
const.py:22
5
#: const.py:19
6
const.py:21
1
const.py:22
6
msgid "vat 8%"
msgstr "8% de TVA"
#: const.py:19
6
const.py:21
1
const.py:22
6
#: const.py:19
7
const.py:21
2
const.py:22
7
msgid "vat 10%"
msgstr "10% de TVA"
#: const.py:19
7
const.py:21
2
const.py:22
7
#: const.py:19
8
const.py:21
3
const.py:22
8
msgid "vat 12%"
msgstr "12% de TVA"
#: const.py:19
8
const.py:21
3
const.py:22
8
#: const.py:19
9
const.py:21
4
const.py:22
9
msgid "vat 20%"
msgstr "20% de TVA"
#: const.py:
199
const.py:21
4
const.py:2
29
#: const.py:
200
const.py:21
5
const.py:2
30
msgid "vat 21%"
msgstr "21% de TVA"
#: const.py:24
2
#: const.py:24
3
msgid "This is not the latest total"
msgstr "Ceci n'est pas le dernier solde"
#: const.py:24
7
#: const.py:24
8
msgid "This is the next latest bank total"
msgstr "Ceci est le prochain solde. Le système est en train de le calculer."
#: const.py:24
8
#: const.py:24
9
msgid "This is the latest bank total"
msgstr "Ceci est le dernier solde."
#: const.py:26
0
models/configuration.py:291
#: const.py:26
1
models/configuration.py:291
msgid "Closure"
msgstr "Clôture"
#: const.py:26
1
models/configuration.py:295
#: const.py:26
2
models/configuration.py:295
msgid "Delivery"
msgstr "Livraison"
#: const.py:26
3
models/configuration.py:303
#: const.py:26
4
models/configuration.py:303
msgid "Opening"
msgstr "Offre"
#: const.py:26
4
models/configuration.py:307
#: const.py:26
5
models/configuration.py:307
msgid "Distribution"
msgstr "Distribution"
#: const.py:29
3
#: const.py:29
4
msgid "Euro"
msgstr "€"
#: const.py:29
4
#: const.py:29
5
msgid "Franc"
msgstr "Fr."