Commit 3201817b authored by Patrick's avatar Patrick

Work in progress

parent 4021606f
......@@ -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:
......
......@@ -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',)
......@@ -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=DateWidgetExcel(), readonly=True)
date_balance = fields.Field(attribute='get_admin_date_balance', widget=CharWidget(), 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'
]
......
......@@ -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(
......
......@@ -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):
"""
......
......@@ -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 subscription, common expense : add the minimal order quantity of this product to each customer of the group')),
'Subscription')),
(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 subscription, common expense : add the minimal order quantity of this product to each customer of the group'),
'Subscription'),
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),
......
......@@ -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))
......
......@@ -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
......
......@@ -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-20 20:06+0100\n"
"POT-Creation-Date: 2017-04-21 12:32+0200\n"
"PO-Revision-Date: 2017-04-21 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:144 models/bankaccount.py:23
#: admin/admin_filter.py:133 admin/bankaccount.py:147 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:152 admin/forms.py:78
#: admin/admin_filter.py:160 admin/bankaccount.py:155 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:244
#: admin/admin_filter.py:245
msgid "not invoiced"
msgstr "Pas encore facturés"
#: admin/admin_filter.py:244 models/customer.py:96 models/customer.py:124
#: admin/admin_filter.py:246 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:244
msgid "subscriptions"
#: admin/admin_filter.py:247
msgid "membership fees"
msgstr "Cotisations"
#: admin/admin_filter.py:244
#: admin/admin_filter.py:248
msgid "losts and profits"
msgstr "Pertes et profits"
#: admin/admin_filter.py:244
#: admin/admin_filter.py:249
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:65
#: admin/bankaccount.py:68
msgid "Only a customer or a producer may be entered."
msgstr "Soit un consommateur, soit un producteur doit être renseigné."
#: admin/bankaccount.py:73 admin/bankaccount.py:80 admin/bankaccount.py:88
#: admin/bankaccount.py:95
#: admin/bankaccount.py:76 admin/bankaccount.py:83 admin/bankaccount.py:91
#: admin/bankaccount.py:98
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:158 models/bankaccount.py:37 models/bankaccount.py:59
#: admin/bankaccount.py:161 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:159 models/bankaccount.py:37 models/invoice.py:90
#: admin/bankaccount.py:162 models/bankaccount.py:37 models/invoice.py:90
#: models/invoice.py:367
msgid "payment_on_the_account"
msgstr "Virement entrant"
#: admin/bankaccount.py:162 models/bankaccount.py:41 models/bankaccount.py:69
#: admin/bankaccount.py:165 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:163 models/bankaccount.py:41 models/invoice.py:93
#: admin/bankaccount.py:166 models/bankaccount.py:41 models/invoice.py:93
#: models/invoice.py:370
msgid "payment_from_the_account"
msgstr "Virement sortant"
#: admin/bankaccount.py:178 admin/bankaccount.py:183
#: admin/bankaccount.py:181 admin/bankaccount.py:186
msgid "---------"
msgstr "---------"
#: admin/bankaccount.py:220
#: admin/bankaccount.py:223
msgid "You may not update a balance."
msgstr "Vous ne pouvez pas modifier un solde."
#: admin/bankaccount.py:223 admin/bankaccount.py:224 admin/bankaccount.py:229
#: admin/bankaccount.py:230
#: admin/bankaccount.py:226 admin/bankaccount.py:227 admin/bankaccount.py:232
#: admin/bankaccount.py:233
msgid "Either a customer or a producer must be given."
msgstr "Soit un consommateur, soit un producteur doit être renseigné."
#: admin/bankaccount.py:234
#: admin/bankaccount.py:237
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:237 admin/bankaccount.py:238
#: admin/bankaccount.py:240 admin/bankaccount.py:241
msgid "Only one customer or one producer must be given."
msgstr "Soit un consommateur, soit un producteur doit être renseigné."
#: admin/bankaccount.py:243
#: admin/bankaccount.py:246
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:239
#: admin/purchase.py:231 admin/purchase.py:276 task/task_order.py:234
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:262 email/email_order.py:33
#: admin/purchase.py:243 const.py:263 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:259 models/configuration.py:287
#: apps.py:16 const.py:260 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 "Cotisation"
msgstr "Souscription."
#: 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:115 const.py:131 const.py:149
#: const.py:116 const.py:132 const.py:150
msgid "bought per piece"
msgstr "Vendu à la pièce."
#: const.py:116 const.py:132 const.py:150
#: const.py:117 const.py:133 const.py:151
msgid "bought per piece (price /kg)"
msgstr "Vendu à la pièce (prix affiché au kg)."
#: const.py:117 const.py:133 const.py:151
#: const.py:118 const.py:134 const.py:152
msgid "bought per piece (price /l)"
msgstr "Vendu à la pièce (prix affiché au ℓ)."
#: const.py:118 const.py:134 const.py:152
#: const.py:119 const.py:135 const.py:153
msgid "bought per piece (price /pc)"
msgstr "Vendu en pack."
#: const.py:119 const.py:135 const.py:153
#: const.py:120 const.py:136 const.py:154
msgid "bought per kg"
msgstr "Vendu au poids (en kg)."
#: const.py:120 const.py:136 const.py:154
#: const.py:121 const.py:137 const.py:155
msgid "bought per piece, invoiced following the weight"
msgstr "Vendu à la pièce, facturé selon le poids réel."
#: const.py:121 const.py:137 const.py:155
#: const.py:122 const.py:138 const.py:156
msgid "bought per l"
msgstr "Vendu au volume (en ℓ)."
#: const.py:123 const.py:138 const.py:157
#: const.py:124 const.py:139 const.py:158
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:163
#: const.py:164
msgid "Sold by piece"
msgstr "Vendu à la pièce"
#: const.py:164
#: const.py:165
msgid "Sold by weight"
msgstr "Vendu au poids"
#: const.py:165
#: const.py:166
msgid "Sold by l"
msgstr "Vendu au ℓ"
#: const.py:166
#: const.py:167
msgid "Sold by piece, invoiced following the weight"
msgstr "Vendu à la pièce, facturé selon le poids réel"
#: const.py:188 const.py:203 const.py:218
#: const.py:189 const.py:204 const.py:219
msgid "none"
msgstr "Aucune"
#: const.py:189 const.py:204 const.py:219
#: const.py:190 const.py:205 const.py:220
msgid "vat 2.1%"
msgstr "2,1% de TVA"
#: const.py:190 const.py:205 const.py:220
#: const.py:191 const.py:206 const.py:221
msgid "vat 2.5%"
msgstr "2,5% de TVA"
#: const.py:191 const.py:206 const.py:221
#: const.py:192 const.py:207 const.py:222
msgid "vat 3.8%"
msgstr "3,8% de TVA"
#: const.py:192 const.py:207 const.py:222
#: const.py:193 const.py:208 const.py:223
msgid "vat 4%"
msgstr "4% de TVA"
#: const.py:193 const.py:208 const.py:223
#: const.py:194 const.py:209 const.py:224
msgid "vat 5.5%"
msgstr "5,5% de TVA"
#: const.py:194 const.py:209 const.py:224
#: const.py:195 const.py:210 const.py:225
msgid "vat 6%"
msgstr "6% de TVA"
#: const.py:195 const.py:210 const.py:225
#: const.py:196 const.py:211 const.py:226
msgid "vat 8%"
msgstr "8% de TVA"
#: const.py:196 const.py:211 const.py:226
#: const.py:197 const.py:212 const.py:227
msgid "vat 10%"
msgstr "10% de TVA"
#: const.py:197 const.py:212 const.py:227
#: const.py:198 const.py:213 const.py:228
msgid "vat 12%"
msgstr "12% de TVA"
#: const.py:198 const.py:213 const.py:228
#: const.py:199 const.py:214 const.py:229
msgid "vat 20%"
msgstr "20% de TVA"
#: const.py:199 const.py:214 const.py:229
#: const.py:200 const.py:215 const.py:230
msgid "vat 21%"
msgstr "21% de TVA"
#: const.py:242
#: const.py:243
msgid "This is not the latest total"
msgstr "Ceci n'est pas le dernier solde"
#: const.py:247
#: const.py:248
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:248
#: const.py:249
msgid "This is the latest bank total"
msgstr "Ceci est le dernier solde."
#: const.py:260 models/configuration.py:291
#: const.py:261 models/configuration.py:291
msgid "Closure"
msgstr "Clôture"
#: const.py:261 models/configuration.py:295
#: const.py:262 models/configuration.py:295
msgid "Delivery"
msgstr "Livraison"
#: const.py:263 models/configuration.py:303
#: const.py:264 models/configuration.py:303
msgid "Opening"
msgstr "Offre"
#: const.py:264 models/configuration.py:307
#: const.py:265 models/configuration.py:307
msgid "Distribution"
msgstr "Distribution"
#: const.py:293
#: const.py:294
msgid "Euro"
msgstr "€"
#: const.py:294
#: const.py:295
msgid "Franc"
msgstr "Fr."
#: const.py:295
#: const.py:296
msgid "Local"
msgstr "✿"
......@@ -1699,8 +1693,8 @@ msgstr "Factures du groupe"
msgid "/!\\ Order cancelled"
msgstr "⚠ Commande annulée"
#: management/commands/delete_pending_purchases.py:47 task/task_order.py:347
#: task/task_order.py:433
#: management/commands/delete_pending_purchases.py:47 task/task_order.py:340
#: task/task_order.py:429
msgid "Canceled order"
msgstr "Commande annulée"
......@@ -1999,7 +1993,7 @@ msgstr "Distributions"
msgid "Distribution on "
msgstr "Distribution du "
#: models/configuration.py:394
#: models/configuration.py:395 task/task_invoice.py:341
msgid "Membership fee"
msgstr "Cotisation"
......@@ -2358,7 +2352,7 @@ msgid "permanences roles"
msgstr "Tâches"
#: models/offeritem.py:30 models/offeritem.py:370 models/offeritem.py:377
#: models/product.py:279 models/product.py:357 models/staff.py:48
#: models/product.py:279 models/product.py:362 models/staff.py:48
#: views/forms.py:167 views/pre_order_create_product_ajax.py:37
#: views/pre_order_create_product_ajax.py:95 xlsx/xlsx_product.py:51
msgid "long_name"
......@@ -2456,10 +2450,6 @@ msgstr "est une composition"
msgid "is_box_content"
msgstr "Fait partie d'une composition"
#: models/offeritem.py:131 models/product.py:131
msgid "is_membership_fee"
msgstr "Cotisation"
#: models/offeritem.py:136 models/producer.py:74
msgid "manage stock"
msgstr "Gérer le réassortiment"
......@@ -2572,7 +2562,7 @@ msgstr "Produits proposés"
msgid "offer name"
msgstr "dénomination de l'offre"
#: models/permanence.py:75 models/product.py:358 views/forms.py:207
#: models/permanence.py:75 models/product.py:363 views/forms.py:207
msgid "offer_description"
msgstr "Message accompagnant l'offre"
......@@ -2733,7 +2723,7 @@ msgstr "dernière facture"
msgid "is into offer"
msgstr "En offre"
#: models/product.py:362
#: models/product.py:367
msgid "Product translation"
msgstr "Produits"
......@@ -2861,36 +2851,32 @@ msgstr "TVA à payer aux contributions"
msgid "VAT to receive from the tax authorities"
msgstr "TVA à recevoir des contributions"
#: task/task_invoice.py:342
msgid "Subscriptions"
msgstr "Cotisations"
#: task/task_invoice.py:366
#: task/task_invoice.py:365
msgid "Transport"
msgstr "Transport"
#: task/task_invoice.py:684 task/task_invoice.py:693
#: task/task_invoice.py:683 task/task_invoice.py:692
msgid "The selected invoice has been canceled."