Commit 8ba5667f authored by Patrick's avatar Patrick

New version in progress

parent 02f2536b
from django import forms
from django.contrib.admin.widgets import AdminDateWidget
from django.forms.formsets import formset_factory
from django.utils.translation import ugettext_lazy as _
from djangocms_text_ckeditor.widgets import TextEditorWidget
from repanier.models import Producer
from repanier.const import REPANIER_MONEY_ZERO
from repanier.fields.RepanierMoneyField import FormMoneyField
......@@ -66,6 +66,21 @@ class PermanenceInvoicedForm(forms.Form):
self.fields['payment_date'].initial = self.payment_date
class ImportXlsxForm(forms.Form):
template = 'repanier/import_xlsx.html'
file_to_import = forms.FileField(label=_('File to import'), allow_empty_file=False)
class ImportInvoiceForm(ImportXlsxForm):
template = 'repanier/import_invoice_xlsx.html'
# Important : The length of invoice_reference must be the same as of permanence.short_name
invoice_reference = forms.CharField(label=_("invoice reference"), max_length=50, required=False)
producer = forms.ModelChoiceField(label=_('producer'), queryset=Producer.objects.filter(is_active=True).all(), required=False)
def __init__(self, *args, **kwargs):
super(ImportInvoiceForm, self).__init__(*args, **kwargs)
self.fields["invoice_reference"].widget.attrs['style'] = "width:450px !important"
class ProducerInvoicedForm(forms.Form):
selected = forms.BooleanField(required=False)
......
......@@ -2,9 +2,10 @@
from __future__ import unicode_literals
from django.conf import settings
from django.conf.urls import url
from django.contrib import admin
from django.core.checks import messages
from django.db.models import Q, F
from django.db.models import F
from django.shortcuts import render
from django.utils import timezone
from django.http import HttpResponseRedirect, HttpResponse
......@@ -16,14 +17,14 @@ from parler.admin import TranslatableAdmin
import repanier.apps
from repanier.admin.fkey_choice_cache_mixin import ForeignKeyCacheMixin
from repanier.admin.forms import InvoiceOrderForm, ProducerInvoicedFormSet, PermanenceInvoicedForm
from repanier.admin.forms import InvoiceOrderForm, ProducerInvoicedFormSet, PermanenceInvoicedForm, ImportXlsxForm, ImportInvoiceForm
from repanier.const import *
from repanier.fields.RepanierMoneyField import RepanierMoney
from repanier.models import Customer, Purchase, Permanence, Producer, PermanenceBoard, LUT_PermanenceRole, BankAccount, ProducerInvoice, Configuration
from repanier.models import Customer, Purchase, PermanenceBoard, LUT_PermanenceRole, BankAccount, ProducerInvoice
from repanier.task import task_invoice
from repanier.tools import send_email_to_who, get_signature
from repanier.xlsx.views import import_xslx_view
from repanier.xlsx.xlsx_invoice import export_bank, export_invoice
from repanier.xlsx.xlsx_invoice import export_bank, export_invoice, handle_uploaded_invoice
from repanier.xlsx.xlsx_purchase import handle_uploaded_purchase, export_purchase
from repanier.xlsx.xlsx_stock import export_permanence_stock
......@@ -56,16 +57,15 @@ class PermanenceDoneAdmin(TranslatableAdmin):
inlines = [PermanenceBoardInline]
date_hierarchy = 'permanence_date'
list_display = ('get_permanence_admin_display', 'get_producers', 'get_customers', 'get_board', 'get_full_status_display')
ordering = ('status', '-permanence_date')
ordering = ('-permanence_date', 'status')
actions = [
'add_delivery',
'cancel_delivery',
'export_xlsx',
'import_xlsx',
'generate_invoices',
'cancel_invoices',
'preview_invoices',
'send_invoices',
'cancel_delivery',
'cancel_invoices',
'generate_archive',
'cancel_archive',
]
......@@ -82,18 +82,52 @@ class PermanenceDoneAdmin(TranslatableAdmin):
return True
return False
def add_delivery(self, request, permanence_qs):
pass
def get_urls(self):
urls = super(PermanenceDoneAdmin, self).get_urls()
my_urls = [
url(r'^import_invoice/$', self.add_delivery),
]
return my_urls + urls
add_delivery.short_description = _("Add delivery")
def add_delivery(self, request):
return import_xslx_view(
self, admin, request, None, _("Import an invoice"),
handle_uploaded_invoice, action='import_xlsx', form_klass=ImportInvoiceForm
)
def cancel_delivery(self, request, permanence_qs):
pass
if 'cancel' in request.POST:
user_message = _("Action canceled by the user.")
user_message_level = messages.INFO
self.message_user(request, user_message, user_message_level)
return
permanence = permanence_qs.first()
if permanence is None or permanence.status not in [
PERMANENCE_CLOSED, PERMANENCE_SEND
]:
user_message = _("Action canceled by the system.")
user_message_level = messages.ERROR
self.message_user(request, user_message, user_message_level)
return
if 'apply' in request.POST:
task_invoice.cancel_delivery(
permanence=permanence,
)
user_message = _("Action performed.")
user_message_level = messages.INFO
self.message_user(request, user_message, user_message_level)
return
return render(request, 'repanier/confirm_admin_action.html', {
'sub_title' : _("Please, confirm the action : cancel delivery"),
'action' : 'cancel_delivery',
'permanence' : permanence,
'action_checkbox_name': admin.ACTION_CHECKBOX_NAME,
})
cancel_delivery.short_description = _("Cancel delivery")
def export_xlsx(self, request, queryset):
permanence = queryset.first()
def export_xlsx(self, request, permanence_qs):
permanence = permanence_qs.first()
if permanence is None or permanence.status != PERMANENCE_SEND:
user_message = _("Action canceled by the system.")
user_message_level = messages.ERROR
......@@ -113,16 +147,16 @@ class PermanenceDoneAdmin(TranslatableAdmin):
export_xlsx.short_description = _("Export orders prepared as XSLX file")
def import_xlsx(self, request, queryset):
permanence = queryset.first()
def import_xlsx(self, request, permanence_qs):
permanence = permanence_qs.first()
if permanence is None or permanence.status != PERMANENCE_SEND:
user_message = _("Action canceled by the system.")
user_message_level = messages.ERROR
self.message_user(request, user_message, user_message_level)
return
return import_xslx_view(
self, admin, request, queryset[:1], _("Import orders prepared"),
handle_uploaded_purchase, action='import_xlsx'
self, admin, request, permanence_qs[:1], _("Import orders prepared"),
handle_uploaded_purchase, action='import_xlsx', form_klass=ImportXlsxForm
)
import_xlsx.short_description = _("Import orders prepared from a XLSX file")
......@@ -156,7 +190,7 @@ class PermanenceDoneAdmin(TranslatableAdmin):
preview_invoices.short_description = _("Preview invoices before sending them by email")
def generate_invoices(self, request, queryset):
def generate_invoices(self, request, permanence_qs):
if 'done' in request.POST:
user_message = _("Action performed.")
user_message_level = messages.INFO
......@@ -167,7 +201,7 @@ class PermanenceDoneAdmin(TranslatableAdmin):
user_message_level = messages.INFO
self.message_user(request, user_message, user_message_level)
return
permanence = queryset.first()
permanence = permanence_qs.first()
if permanence is None or permanence.status != PERMANENCE_SEND:
user_message = _("Action canceled by the system.")
user_message_level = messages.ERROR
......@@ -309,8 +343,14 @@ class PermanenceDoneAdmin(TranslatableAdmin):
generate_invoices.short_description = _('generate invoices')
def generate_archive(self, request, queryset):
permanence = queryset.first()
def generate_archive(self, request, permanence_qs):
if 'cancel' in request.POST:
user_message = _("Action canceled by the user.")
user_message_level = messages.INFO
self.message_user(request, user_message, user_message_level)
return
permanence = permanence_qs.first()
if permanence is None or permanence.status not in [
PERMANENCE_CLOSED, PERMANENCE_SEND
]:
......@@ -318,33 +358,32 @@ class PermanenceDoneAdmin(TranslatableAdmin):
user_message_level = messages.ERROR
self.message_user(request, user_message, user_message_level)
return
if permanence.status == PERMANENCE_CLOSED:
permanence.set_status(PERMANENCE_SEND)
ProducerInvoice.objects.filter(
permanence_id=permanence.id,
invoice_sort_order__isnull=True,
).order_by('?').update(to_be_paid=True)
task_invoice.generate_invoice(
permanence=permanence,
payment_date=timezone.now().date()
)
user_message = _("Action performed.")
user_message_level = messages.INFO
self.message_user(request, user_message, user_message_level)
return
if 'apply' in request.POST:
task_invoice.generate_archive(
permanence=permanence,
)
user_message = _("Action performed.")
user_message_level = messages.INFO
self.message_user(request, user_message, user_message_level)
return
return render(request, 'repanier/confirm_admin_action.html', {
'sub_title' : _("Please, confirm the action : generate archive"),
'action' : 'generate_archive',
'permanence' : permanence,
'action_checkbox_name': admin.ACTION_CHECKBOX_NAME,
})
generate_archive.short_description = _('archive')
def cancel_invoices_or_archive(self,request, queryset, action):
def cancel_invoice_or_archive_or_cancelled(self,request, permanence_qs, action):
if 'cancel' in request.POST:
user_message = _("Action canceled by the user.")
user_message_level = messages.INFO
self.message_user(request, user_message, user_message_level)
return
permanence = queryset.first()
if permanence is None or permanence.status not in [PERMANENCE_INVOICED, PERMANENCE_ARCHIVED]:
permanence = permanence_qs.first()
if permanence is None or permanence.status not in [PERMANENCE_INVOICED, PERMANENCE_ARCHIVED, PERMANENCE_CANCELLED]:
user_message = _("Action canceled by the system.")
user_message_level = messages.ERROR
self.message_user(request, user_message, user_message_level)
......@@ -357,29 +396,30 @@ class PermanenceDoneAdmin(TranslatableAdmin):
return render(request, 'repanier/confirm_admin_action.html', {
'sub_title' : _(
"Please, confirm the action : cancel the invoices") if permanence.status == PERMANENCE_INVOICED else _(
"Please, confirm the action : cancel the archiving"),
"Please, confirm the action : cancel the archiving") if permanence.status == PERMANENCE_ARCHIVED else _(
"Please, confirm the action : restore the delivery"),
'action' : action,
'permanence' : permanence,
'action_checkbox_name': admin.ACTION_CHECKBOX_NAME,
})
def cancel_invoices(self, request, queryset):
return self.cancel_invoices_or_archive(request, queryset, 'cancel_invoices')
def cancel_invoices(self, request, permanence_qs):
return self.cancel_invoice_or_archive_or_cancelled(request, permanence_qs, 'cancel_invoices')
cancel_invoices.short_description = _('cancel latest invoices')
def cancel_archive(self, request, queryset):
return self.cancel_invoices_or_archive(request, queryset, 'cancel_archive')
def cancel_archive(self, request, permanence_qs):
return self.cancel_invoice_or_archive_or_cancelled(request, permanence_qs, 'cancel_archive')
cancel_archive.short_description = _('cancel archiving')
def send_invoices(self, request, queryset):
def send_invoices(self, request, permanence_qs):
if 'cancel' in request.POST:
user_message = _("Action canceled by the user.")
user_message_level = messages.INFO
self.message_user(request, user_message, user_message_level)
return
permanence = queryset.first()
permanence = permanence_qs.first()
if permanence is None or permanence.status != PERMANENCE_INVOICED:
user_message = _("Action canceled by the system.")
user_message_level = messages.ERROR
......@@ -446,7 +486,7 @@ class PermanenceDoneAdmin(TranslatableAdmin):
form = InvoiceOrderForm(request.POST)
if form.is_valid():
user_message, user_message_level = task_invoice.admin_send(
permanence.id
permanence
)
self.message_user(request, user_message, user_message_level)
return HttpResponseRedirect(request.get_full_path())
......@@ -520,3 +560,6 @@ class PermanenceDoneAdmin(TranslatableAdmin):
permanence_date=permanence.permanence_date)
super(PermanenceDoneAdmin, self).save_model(
request, permanence, form, change)
class Media:
js = ('js/import_invoice.js',)
......@@ -18,6 +18,7 @@ from import_export.formats.base_formats import XLS
from import_export.widgets import CharWidget
import repanier.apps
from repanier.admin.forms import ImportXlsxForm
from repanier.models import BoxContent
from repanier.const import *
from repanier.models import Permanence, Product, \
......@@ -297,8 +298,9 @@ class ProducerAdmin(ImportExportMixin, admin.ModelAdmin):
export_xlsx_stock.short_description = _("Export stock to a xlsx file")
def import_xlsx_stock(self, request):
return import_xslx_view(self, admin, request, Producer.objects.all(), _("Import stock"), handle_uploaded_stock, action='import_xlsx_stock')
# return xlsx_stock.admin_import(self, admin, request, Producer.objects.all(), action='import_xlsx_stock')
return import_xslx_view(
self, admin, request, Producer.objects.all(), _("Import stock"), handle_uploaded_stock,
action='import_xlsx_stock', form_klass=ImportXlsxForm)
import_xlsx_stock.short_description = _("Import stock from a xlsx file")
......
......@@ -268,7 +268,8 @@ class ProductDataForm(TranslatableModelForm):
model = Product
fields = "__all__"
widgets = {
'order_unit' : SelectAdminOrderUnitWidget(),
'long_name' : forms.TextInput(attrs={'style': "width:450px !important"}),
'order_unit' : SelectAdminOrderUnitWidget(attrs={'style': "width:450px !important"}),
'department_for_customer': apply_select2(forms.Select),
}
......
......@@ -13,7 +13,7 @@ from django.http import HttpResponseRedirect
from django.utils import translation
from django.utils.text import slugify
from django.utils.translation import ugettext_lazy as _
from django.views.i18n import JavaScriptCatalog
# from django.views.i18n import JavaScriptCatalog
from easy_select2 import Select2
from import_export import resources, fields
from import_export.admin import ExportMixin
......
......@@ -61,6 +61,7 @@ PERMANENCE_WAIT_FOR_INVOICED = '600'
PERMANENCE_INVOICES_VALIDATION_FAILED = '700'
PERMANENCE_INVOICED = '800'
PERMANENCE_ARCHIVED = '900'
PERMANENCE_CANCELLED = '950'
LUT_PERMANENCE_STATUS = (
(PERMANENCE_DISABLED, _('disabled')),
......@@ -76,7 +77,8 @@ LUT_PERMANENCE_STATUS = (
(PERMANENCE_WAIT_FOR_INVOICED, _('wait for done')),
(PERMANENCE_INVOICES_VALIDATION_FAILED, _('invoices validation test failed')),
(PERMANENCE_INVOICED, _('invoiced')),
(PERMANENCE_ARCHIVED, _('archived'))
(PERMANENCE_ARCHIVED, _('archived')),
(PERMANENCE_CANCELLED, _('cancelled'))
)
PRODUCT_PLACEMENT_FREEZER = '100'
......
......@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Repanier\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-04-12 16:11+0200\n"
"PO-Revision-Date: 2017-04-12 16:12+0100\n"
"POT-Creation-Date: 2017-04-15 09:52+0200\n"
"PO-Revision-Date: 2017-04-15 09:55+0100\n"
"Last-Translator: Patrick Colmant <pcolmant@gmail.com>\n"
"Language-Team: Patrick Colmant <pcolmant@gmail.com>\n"
"Language: fr\n"
......@@ -19,7 +19,7 @@ msgstr ""
"X-Poedit-SourceCharset: UTF-8\n"
#: admin/admin_filter.py:20 models/offeritem.py:178 models/permanence.py:99
#: models/producer.py:293 xlsx/xlsx_order.py:213
#: models/producer.py:295 xlsx/xlsx_order.py:213
msgid "producers"
msgstr "Producteurs"
......@@ -45,16 +45,17 @@ msgstr "TVA"
#: models/bankaccount.py:110 models/customer.py:263 models/invoice.py:30
#: models/invoice.py:113 models/invoice.py:448 models/invoice.py:492
#: models/permanenceboard.py:15 models/purchase.py:44 models/purchase.py:46
#: xlsx/xlsx_order.py:352 xlsx/xlsx_purchase.py:45 xlsx/xlsx_purchase.py:551
#: xlsx/xlsx_order.py:352 xlsx/xlsx_purchase.py:44 xlsx/xlsx_purchase.py:550
msgid "customer"
msgstr "Consommateur"
#: admin/admin_filter.py:160 admin/bankaccount.py:152 models/bankaccount.py:20
#: models/bankaccount.py:86 models/invoice.py:336 models/invoice.py:451
#: models/offeritem.py:62 models/producer.py:292 models/product.py:30
#: models/purchase.py:42 templates/repanier/pre_order_form.html:32
#: xlsx/xlsx_order.py:349 xlsx/xlsx_product.py:50 xlsx/xlsx_purchase.py:43
#: xlsx/xlsx_purchase.py:545 xlsx/xlsx_purchase.py:546
#: admin/admin_filter.py:160 admin/bankaccount.py:152 admin/forms.py:77
#: models/bankaccount.py:20 models/bankaccount.py:86 models/invoice.py:336
#: models/invoice.py:451 models/offeritem.py:62 models/producer.py:294
#: models/product.py:30 models/purchase.py:42
#: templates/repanier/pre_order_form.html:32 xlsx/xlsx_order.py:349
#: xlsx/xlsx_product.py:50 xlsx/xlsx_purchase.py:42 xlsx/xlsx_purchase.py:544
#: xlsx/xlsx_purchase.py:545
msgid "producer"
msgstr "Fournisseur"
......@@ -80,8 +81,8 @@ msgstr "Pas encore facturés"
#: admin/admin_filter.py:244 models/customer.py:96 models/customer.py:124
#: models/customer.py:185 models/invoice.py:95 models/invoice.py:372
#: models/producer.py:96 models/producer.py:138 models/producer.py:224
#: models/producer.py:261
#: models/producer.py:96 models/producer.py:140 models/producer.py:226
#: models/producer.py:263
msgid "balance"
msgstr "Solde"
......@@ -172,7 +173,7 @@ msgstr "Le même produit ne peut pas être sélectionné deux fois."
msgid "is_into_offer"
msgstr "En commande"
#: admin/box.py:63 admin/box.py:122 admin/producer.py:290
#: admin/box.py:63 admin/box.py:122 admin/producer.py:291
#: models/offeritem.py:148 models/product.py:87 models/product.py:179
#: xlsx/xlsx_stock.py:326 xlsx/xlsx_stock.py:333 xlsx/xlsx_stock.py:334
#: xlsx/xlsx_stock.py:438 xlsx/xlsx_stock.py:439 xlsx/xlsx_stock.py:463
......@@ -196,8 +197,9 @@ msgstr "Consigne calculée"
msgid "flip_flop_select_for_offer_status for offer"
msgstr "✔ en commande ↔ ✘ pas en commande"
#: admin/box.py:198 admin/permanence_done.py:154 admin/permanence_done.py:339
#: admin/permanence_done.py:375 admin/permanence_in_preparation.py:242
#: admin/box.py:198 admin/permanence_done.py:100 admin/permanence_done.py:200
#: admin/permanence_done.py:348 admin/permanence_done.py:381
#: admin/permanence_done.py:418 admin/permanence_in_preparation.py:242
#: admin/permanence_in_preparation.py:302
#: admin/permanence_in_preparation.py:334
#: admin/permanence_in_preparation.py:462
......@@ -206,14 +208,14 @@ msgstr "✔ en commande ↔ ✘ pas en commande"
#: admin/permanence_in_preparation.py:759
#: admin/permanence_in_preparation.py:789
#: admin/permanence_in_preparation.py:815 admin/product.py:328
#: xlsx/views.py:53
#: xlsx/views.py:48
msgid "Action canceled by the user."
msgstr "Action annulée par l'utilisateur."
#: admin/box.py:204 admin/permanence_done.py:86 admin/permanence_done.py:107
#: admin/permanence_done.py:160 admin/permanence_done.py:314
#: admin/permanence_done.py:345 admin/permanence_done.py:381
#: admin/permanence_in_preparation.py:222
#: admin/box.py:204 admin/permanence_done.py:108 admin/permanence_done.py:132
#: admin/permanence_done.py:153 admin/permanence_done.py:206
#: admin/permanence_done.py:357 admin/permanence_done.py:387
#: admin/permanence_done.py:424 admin/permanence_in_preparation.py:222
#: admin/permanence_in_preparation.py:248
#: admin/permanence_in_preparation.py:308
#: admin/permanence_in_preparation.py:340
......@@ -242,7 +244,7 @@ msgid "Advanced descriptions"
msgstr "Descriptions avancées"
#: admin/box.py:241 admin/configuration.py:98 admin/customer.py:367
#: admin/producer.py:354 admin/product.py:499
#: admin/producer.py:356 admin/product.py:499
msgid "Advanced options"
msgstr "Paramètres avancés"
......@@ -345,7 +347,7 @@ msgstr "Ce nom de panier %s est déjà attribué à un autre utilisateur."
msgid "Invoice"
msgstr "Facture"
#: admin/customer.py:237 admin/producer.py:114
#: admin/customer.py:237 admin/producer.py:115
#, python-format
msgid "Export purchases of %s"
msgstr "Exporter la liste de produits achetés en %s"
......@@ -433,22 +435,26 @@ msgstr "Contenu du ✉"
msgid "payment date"
msgstr "Date du paiement"
#: admin/forms.py:72 models/producer.py:31
#: admin/forms.py:71
msgid "File to import"
msgstr "Fichier à importer"
#: admin/forms.py:76 admin/forms.py:91 models/invoice.py:413
msgid "invoice reference"
msgstr "Référence facture"
#: admin/forms.py:86 models/producer.py:31
msgid "short_profile_name"
msgstr "Nom abrégé"
#: admin/forms.py:74 models/invoice.py:406
#: admin/forms.py:88 models/invoice.py:406
msgid "calculated balance to be invoiced"
msgstr "Montant réclamé par le producteur calculé par Repanier"
#: admin/forms.py:76 models/invoice.py:408
#: admin/forms.py:90 models/invoice.py:408
msgid "balance to be invoiced"
msgstr "Montant réclamé par le producteur"
#: admin/forms.py:77 models/invoice.py:413
msgid "invoice reference"
msgstr "Référence facture"
#: admin/lut.py:85 admin/lut.py:88
#, python-format
msgid "The maximum level for this model is %d"
......@@ -488,40 +494,53 @@ msgstr ""
msgid "quantity invoiced by the producer"
msgstr "Quantité facturée par le producteur"
#: admin/permanence_done.py:94 xlsx/export_tools.py:44
#: admin/permanence_done.py:94
msgid "Import an invoice"
msgstr "Importer une facture"
#: admin/permanence_done.py:116 admin/permanence_done.py:195
#: admin/permanence_done.py:366
msgid "Action performed."
msgstr "Action effectuée."
#: admin/permanence_done.py:121
msgid "Please, confirm the action : cancel delivery"
msgstr "Veuillez confirmer votre demande d'annulation de la livraison."
#: admin/permanence_done.py:127
msgid "Cancel delivery"
msgstr "Annuler la livraison"
#: admin/permanence_done.py:140 xlsx/export_tools.py:44
msgid "Invoices"
msgstr "Factures"
#: admin/permanence_done.py:102
#: admin/permanence_done.py:148
msgid "Export orders prepared as XSLX file"
msgstr "1 --- Exporter la liste de préparation à facturer"
#: admin/permanence_done.py:112
#: admin/permanence_done.py:158
msgid "Import orders prepared"
msgstr "Importer, mettre à jour la liste de préparation à facturer"
#: admin/permanence_done.py:116
#: admin/permanence_done.py:162
msgid "Import orders prepared from a XLSX file"
msgstr "2 --- Importer, mettre à jour la liste de préparation à facturer"
#: admin/permanence_done.py:135
#: admin/permanence_done.py:181
msgid "Accounting report"
msgstr "Rapport comptable"
#: admin/permanence_done.py:140
#: admin/permanence_done.py:186
#, python-format
msgid "No invoice available for %(permanence)s."
msgstr "Aucune facture disponible pour %(permanence)s."
#: admin/permanence_done.py:145
#: admin/permanence_done.py:191
msgid "Preview invoices before sending them by email"
msgstr "4 --- Exporter le rapport comptable"
#: admin/permanence_done.py:149 admin/permanence_done.py:330
msgid "Action performed."
msgstr "Action effectuée."
#: admin/permanence_done.py:197
#: admin/permanence_done.py:234
#, python-format
msgid ""
"The payment date must be between %(min_payment_date)s and "
......@@ -530,66 +549,74 @@ msgstr ""
"La date de paiement doit se situer entre le %(min_payment_date)s et le "
"%(max_payment_date)s."
#: admin/permanence_done.py:247
#: admin/permanence_done.py:284
msgid ""
"Please make the following payments, whose bank movements have been generated"
msgstr ""
"Veuillez effectuer les paiements suivants. Les mouvements de compte "
"correspondants ont été générés."
#: admin/permanence_done.py:299
#: admin/permanence_done.py:336
msgid "Please, confirm the action : generate the invoices"
msgstr "Veuillez confirmer votre demande de calcul des factures."
#: admin/permanence_done.py:307
#: admin/permanence_done.py:344
msgid "generate invoices"
msgstr "3 --- Produire les factures"
#: admin/permanence_done.py:335
#: admin/permanence_done.py:371
msgid "Please, confirm the action : generate archive"
msgstr "Veuillez confirmer votre demande d'archivage."
#: admin/permanence_done.py:377
msgid "archive"
msgstr "Archiver"
#: admin/permanence_done.py:356
#: admin/permanence_done.py:398
msgid "Please, confirm the action : cancel the invoices"
msgstr "Veuillez confirmer votre demande d'annulation des factures."
#: admin/permanence_done.py:357
#: admin/permanence_done.py:399
msgid "Please, confirm the action : cancel the archiving"
msgstr "Veuillez confirmer votre demande d'archivage des factures."
#: admin/permanence_done.py:366
#: admin/permanence_done.py:400
msgid "Please, confirm the action : restore the delivery"
msgstr "Veuillez confirmer votre demande de reprise en compte de la livraison."
#: admin/permanence_done.py:409
msgid "cancel latest invoices"
msgstr "Annuler la dernière facture"
msgstr "Annuler la dernière facture / annulation de livraison"
#: admin/permanence_done.py:371
#: admin/permanence_done.py:414
msgid "cancel archiving"
msgstr "Annuler l'archivage"
#: admin/permanence_done.py:392 tools.py:631
#: admin/permanence_done.py:435 tools.py:631
#, python-format
msgid "The amount of your order is %(amount)s."
msgstr "Le montant de votre commande s'élève à %(amount)s."
#: admin/permanence_done.py:396 admin/permanence_in_preparation.py:591
#: admin/permanence_done.py:439 admin/permanence_in_preparation.py:591
#: tools.py:661
#, python-format
msgid "The balance of your account as of %(date)s is %(balance)s."
msgstr "Le solde de votre compte en date du %(date)s est de %(balance)s."
#: admin/permanence_done.py:401
#: admin/permanence_done.py:444
msgid "Please pay"
msgstr "Veuillez verser"
#: admin/permanence_done.py:403
#: admin/permanence_done.py:446
msgid "to the bank account number"
msgstr "sur le compte bancaire"
#: admin/permanence_done.py:405
#: admin/permanence_done.py:448
msgid "with communication"
msgstr "avec comme communication"
#: admin/permanence_done.py:406 admin/permanence_done.py:410
#: admin/permanence_done.py:411 admin/permanence_in_preparation.py:418
#: admin/permanence_done.py:449 admin/permanence_done.py:453
#: admin/permanence_done.py:454 admin/permanence_in_preparation.py:418
#: admin/permanence_in_preparation.py:419
#: admin/permanence_in_preparation.py:607
#: admin/permanence_in_preparation.py:609
......@@ -598,7 +625,7 @@ msgstr "avec comme communication"
msgid "short_basket_name"
msgstr "Dénomination abrégée du panier"
#: admin/permanence_done.py:408 admin/permanence_done.py:409
#: admin/permanence_done.py:451 admin/permanence_done.py:452
#: admin/permanence_in_preparation.py:416
#: admin/permanence_in_preparation.py:417
#: admin/permanence_in_preparation.py:622
......@@ -606,7 +633,7 @@ msgstr "Dénomination abrégée du panier"
msgid "long_basket_name"
msgstr "Dénomination étendue du panier"
#: admin/permanence_done.py:431 admin/permanence_done.py:432
#: admin/permanence_done.py:474 admin/permanence_done.py:475
#: admin/permanence_in_preparation.py:363
#: admin/permanence_in_preparation.py:364
#: admin/permanence_in_preparation.py:641
......@@ -614,11 +641,11 @@ msgstr "Dénomination étendue du panier"
msgid "long_profile_name"
msgstr "Nom étendu"
#: admin/permanence_done.py:460
#: admin/permanence_done.py:503
msgid "Please, confirm the action : send invoices"
msgstr "Veuillez confirmer votre demande de transmettre les factures."