Compare commits

..

No commits in common. "ad59b5c81ef7ca1392719ebf1ea9102ac75cd3d6" and "1fb14ea33dea5a3939fb194666dfe764a67ff434" have entirely different histories.

13 changed files with 216 additions and 382 deletions

View File

@ -216,14 +216,17 @@ class Club(models.Model):
blank=True, blank=True,
null=True, null=True,
verbose_name=_('membership start'), verbose_name=_('membership start'),
help_text=_('Date from which the members can renew their membership.'), help_text=_('How long after January 1st the members can renew '
'their membership.'),
) )
membership_end = models.DateField( membership_end = models.DateField(
blank=True, blank=True,
null=True, null=True,
verbose_name=_('membership end'), verbose_name=_('membership end'),
help_text=_('Maximal date of a membership, after which members must renew it.'), help_text=_('How long the membership can last after January 1st '
'of the next year after members can renew their '
'membership.'),
) )
def update_membership_dates(self): def update_membership_dates(self):

View File

@ -214,7 +214,7 @@ class TransactionSearchView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView
transactions = transactions.filter(created_at__lte=data["created_before"]) transactions = transactions.filter(created_at__lte=data["created_before"])
table = HistoryTable(transactions) table = HistoryTable(transactions)
table.paginate(per_page=100, page=self.request.GET.get("page", 1)) table.paginate(per_page=100)
context["table"] = table context["table"] = table
return context return context

View File

@ -2359,22 +2359,6 @@
"description": "Voir toutes les notes" "description": "Voir toutes les notes"
} }
}, },
{
"model": "permission.permission",
"pk": 151,
"fields": {
"model": [
"treasury",
"invoice"
],
"query": "{}",
"type": "delete",
"mask": 3,
"field": "",
"permanent": false,
"description": "Supprimer une facture"
}
},
{ {
"model": "permission.role", "model": "permission.role",
"pk": 1, "pk": 1,
@ -2555,8 +2539,7 @@
143, 143,
146, 146,
147, 147,
150, 150
151
] ]
} }
}, },
@ -2712,8 +2695,7 @@
147, 147,
148, 148,
149, 149,
150, 150
151
] ]
} }
}, },

@ -1 +1 @@
Subproject commit 53098f8adcf085fdb0e8ff058a3035bd2d4977a3 Subproject commit 4984159a61642a0d3668e85daf39472b59b86447

View File

@ -4,8 +4,9 @@
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit from crispy_forms.layout import Submit
from django import forms from django import forms
from django.utils import timezone
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from note_kfet.inputs import AmountInput from note_kfet.inputs import DatePickerInput, AmountInput
from .models import Invoice, Product, Remittance, SpecialTransactionProxy from .models import Invoice, Product, Remittance, SpecialTransactionProxy
@ -15,25 +16,19 @@ class InvoiceForm(forms.ModelForm):
Create and generate invoices. Create and generate invoices.
""" """
def clean(self): # Django forms don't support date fields. We have to add it manually
if self.instance and self.instance.locked: date = forms.DateField(
for field_name in self.fields: initial=timezone.now,
self.cleaned_data[field_name] = getattr(self.instance, field_name) widget=DatePickerInput(),
self.errors.clear() )
return self.cleaned_data
return super().clean()
def save(self, commit=True): def clean_date(self):
""" self.instance.date = self.data.get("date")
If the invoice is locked, don't save it return self.instance.date
"""
if not self.instance.locked:
super().save(commit)
return self.instance
class Meta: class Meta:
model = Invoice model = Invoice
exclude = ('bde', 'date', 'tex', ) exclude = ('bde', 'tex', )
class ProductForm(forms.ModelForm): class ProductForm(forms.ModelForm):

View File

@ -61,13 +61,6 @@ class Invoice(models.Model):
acquitted = models.BooleanField( acquitted = models.BooleanField(
verbose_name=_("Acquitted"), verbose_name=_("Acquitted"),
default=False,
)
locked = models.BooleanField(
verbose_name=_("Locked"),
help_text=_("An invoice can't be edited when it is locked."),
default=False,
) )
tex = models.TextField( tex = models.TextField(
@ -81,12 +74,6 @@ class Invoice(models.Model):
The advantage is to never change the template. The advantage is to never change the template.
Warning: editing this model regenerate the tex source, so be careful. Warning: editing this model regenerate the tex source, so be careful.
""" """
old_invoice = Invoice.objects.filter(id=self.id)
if old_invoice.exists():
if old_invoice.get().locked:
raise ValidationError(_("This invoice is locked and can no longer be edited."))
products = self.products.all() products = self.products.all()
self.place = "Gif-sur-Yvette" self.place = "Gif-sur-Yvette"
@ -116,7 +103,7 @@ class Product(models.Model):
invoice = models.ForeignKey( invoice = models.ForeignKey(
Invoice, Invoice,
on_delete=models.CASCADE, on_delete=models.PROTECT,
related_name="products", related_name="products",
verbose_name=_("invoice"), verbose_name=_("invoice"),
) )

View File

@ -14,39 +14,19 @@ class InvoiceTable(tables.Table):
""" """
List all invoices. List all invoices.
""" """
id = tables.LinkColumn( id = tables.LinkColumn("treasury:invoice_update",
"treasury:invoice_update", args=[A("pk")],
args=[A("pk")], text=lambda record: _("Invoice #{:d}").format(record.id), )
text=lambda record: _("Invoice #{:d}").format(record.id),
)
invoice = tables.LinkColumn( invoice = tables.LinkColumn("treasury:invoice_render",
"treasury:invoice_render", verbose_name=_("Invoice"),
verbose_name=_("Invoice"), args=[A("pk")],
args=[A("pk")], accessor="pk",
accessor="pk", text="",
text="", attrs={
attrs={ 'a': {'class': 'fa fa-file-pdf-o'},
'a': {'class': 'fa fa-file-pdf-o'}, 'td': {'data-turbolinks': 'false'}
'td': {'data-turbolinks': 'false'} })
}
)
delete = tables.LinkColumn(
'treasury:invoice_delete',
args=[A('pk')],
verbose_name=_("delete"),
text=_("Delete"),
attrs={
'th': {
'id': 'delete-membership-header'
},
'a': {
'class': 'btn btn-danger',
'data-type': 'delete-membership'
}
},
)
class Meta: class Meta:
attrs = { attrs = {

View File

@ -3,9 +3,9 @@
from django.urls import path from django.urls import path
from .views import InvoiceCreateView, InvoiceListView, InvoiceUpdateView, InvoiceDeleteView, InvoiceRenderView,\ from .views import InvoiceCreateView, InvoiceListView, InvoiceUpdateView, InvoiceRenderView, RemittanceListView,\
RemittanceListView, RemittanceCreateView, RemittanceUpdateView, LinkTransactionToRemittanceView,\ RemittanceCreateView, RemittanceUpdateView, LinkTransactionToRemittanceView, UnlinkTransactionToRemittanceView,\
UnlinkTransactionToRemittanceView, SogeCreditListView, SogeCreditManageView SogeCreditListView, SogeCreditManageView
app_name = 'treasury' app_name = 'treasury'
urlpatterns = [ urlpatterns = [
@ -13,7 +13,6 @@ urlpatterns = [
path('invoice/', InvoiceListView.as_view(), name='invoice_list'), path('invoice/', InvoiceListView.as_view(), name='invoice_list'),
path('invoice/create/', InvoiceCreateView.as_view(), name='invoice_create'), path('invoice/create/', InvoiceCreateView.as_view(), name='invoice_create'),
path('invoice/<int:pk>/', InvoiceUpdateView.as_view(), name='invoice_update'), path('invoice/<int:pk>/', InvoiceUpdateView.as_view(), name='invoice_update'),
path('invoice/<int:pk>/delete/', InvoiceDeleteView.as_view(), name='invoice_delete'),
path('invoice/render/<int:pk>/', InvoiceRenderView.as_view(), name='invoice_render'), path('invoice/render/<int:pk>/', InvoiceRenderView.as_view(), name='invoice_render'),
# Remittance app paths # Remittance app paths

View File

@ -18,7 +18,7 @@ from django.urls import reverse_lazy
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.views.generic import CreateView, UpdateView, DetailView from django.views.generic import CreateView, UpdateView, DetailView
from django.views.generic.base import View, TemplateView from django.views.generic.base import View, TemplateView
from django.views.generic.edit import BaseFormView, DeleteView from django.views.generic.edit import BaseFormView
from django_tables2 import SingleTableView from django_tables2 import SingleTableView
from note.models import SpecialTransaction, NoteSpecial, Alias from note.models import SpecialTransaction, NoteSpecial, Alias
from note_kfet.settings.base import BASE_DIR from note_kfet.settings.base import BASE_DIR
@ -97,20 +97,14 @@ class InvoiceUpdateView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView):
form.helper = FormHelper() form.helper = FormHelper()
# Remove form tag on the generation of the form in the template (already present on the template) # Remove form tag on the generation of the form in the template (already present on the template)
form.helper.form_tag = False form.helper.form_tag = False
# Fill the intial value for the date field, with the initial date of the model instance
form.fields['date'].initial = form.instance.date
# The formset handles the set of the products # The formset handles the set of the products
form_set = ProductFormSet(instance=self.object) form_set = ProductFormSet(instance=form.instance)
context['formset'] = form_set context['formset'] = form_set
context['helper'] = ProductFormSetHelper() context['helper'] = ProductFormSetHelper()
context['no_cache'] = True context['no_cache'] = True
if self.object.locked:
for field_name in form.fields:
form.fields[field_name].disabled = True
for f in form_set.forms:
for field_name in f.fields:
f.fields[field_name].disabled = True
return context return context
def form_valid(self, form): def form_valid(self, form):
@ -137,17 +131,6 @@ class InvoiceUpdateView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView):
return reverse_lazy('treasury:invoice_list') return reverse_lazy('treasury:invoice_list')
class InvoiceDeleteView(ProtectQuerysetMixin, LoginRequiredMixin, DeleteView):
"""
Delete a non-validated WEI registration
"""
model = Invoice
extra_context = {"title": _("Delete invoice")}
def get_success_url(self):
return reverse_lazy('treasury:invoice_list')
class InvoiceRenderView(LoginRequiredMixin, View): class InvoiceRenderView(LoginRequiredMixin, View):
""" """
Render Invoice as a generated PDF with the given information and a LaTeX template Render Invoice as a generated PDF with the given information and a LaTeX template

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-07 14:17+0200\n" "POT-Creation-Date: 2020-08-06 22:27+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -95,8 +95,8 @@ msgstr ""
msgid "type" msgid "type"
msgstr "" msgstr ""
#: apps/activity/models.py:87 apps/logs/models.py:22 apps/member/models.py:277 #: apps/activity/models.py:87 apps/logs/models.py:22 apps/member/models.py:280
#: apps/note/models/notes.py:126 apps/treasury/models.py:266 #: apps/note/models/notes.py:126 apps/treasury/models.py:253
#: apps/wei/models.py:160 templates/treasury/sogecredit_detail.html:14 #: apps/wei/models.py:160 templates/treasury/sogecredit_detail.html:14
#: templates/wei/survey.html:16 #: templates/wei/survey.html:16
msgid "user" msgid "user"
@ -194,18 +194,18 @@ msgstr ""
msgid "remove" msgid "remove"
msgstr "" msgstr ""
#: apps/activity/tables.py:79 apps/note/forms.py:76 apps/treasury/models.py:185 #: apps/activity/tables.py:79 apps/note/forms.py:76 apps/treasury/models.py:172
msgid "Type" msgid "Type"
msgstr "" msgstr ""
#: apps/activity/tables.py:81 apps/member/forms.py:106 #: apps/activity/tables.py:81 apps/member/forms.py:106
#: apps/registration/forms.py:70 apps/treasury/forms.py:135 #: apps/registration/forms.py:70 apps/treasury/forms.py:130
#: apps/wei/forms/registration.py:94 #: apps/wei/forms/registration.py:94
msgid "Last name" msgid "Last name"
msgstr "" msgstr ""
#: apps/activity/tables.py:83 apps/member/forms.py:111 #: apps/activity/tables.py:83 apps/member/forms.py:111
#: apps/registration/forms.py:75 apps/treasury/forms.py:137 #: apps/registration/forms.py:75 apps/treasury/forms.py:132
#: apps/wei/forms/registration.py:99 templates/note/transaction_form.html:131 #: apps/wei/forms/registration.py:99 templates/note/transaction_form.html:131
msgid "First name" msgid "First name"
msgstr "" msgstr ""
@ -280,8 +280,7 @@ msgid "edit"
msgstr "" msgstr ""
#: apps/logs/models.py:63 apps/note/tables.py:137 apps/note/tables.py:165 #: apps/logs/models.py:63 apps/note/tables.py:137 apps/note/tables.py:165
#: apps/permission/models.py:129 apps/treasury/tables.py:38 #: apps/permission/models.py:129 apps/wei/tables.py:73
#: apps/wei/tables.py:73
msgid "delete" msgid "delete"
msgstr "" msgstr ""
@ -315,11 +314,11 @@ msgstr ""
msgid "membership fee (unpaid students)" msgid "membership fee (unpaid students)"
msgstr "" msgstr ""
#: apps/member/admin.py:67 apps/member/models.py:288 #: apps/member/admin.py:67 apps/member/models.py:291
msgid "roles" msgid "roles"
msgstr "" msgstr ""
#: apps/member/admin.py:68 apps/member/models.py:302 #: apps/member/admin.py:68 apps/member/models.py:305
msgid "fee" msgid "fee"
msgstr "" msgstr ""
@ -368,7 +367,7 @@ msgid "Credit amount"
msgstr "" msgstr ""
#: apps/member/forms.py:116 apps/registration/forms.py:80 #: apps/member/forms.py:116 apps/registration/forms.py:80
#: apps/treasury/forms.py:139 apps/wei/forms/registration.py:104 #: apps/treasury/forms.py:134 apps/wei/forms/registration.py:104
#: templates/note/transaction_form.html:137 #: templates/note/transaction_form.html:137
msgid "Bank" msgid "Bank"
msgstr "" msgstr ""
@ -544,57 +543,59 @@ msgid "membership start"
msgstr "" msgstr ""
#: apps/member/models.py:219 #: apps/member/models.py:219
msgid "Date from which the members can renew their membership." msgid "How long after January 1st the members can renew their membership."
msgstr "" msgstr ""
#: apps/member/models.py:225 templates/member/club_info.html:28 #: apps/member/models.py:226 templates/member/club_info.html:28
msgid "membership end" msgid "membership end"
msgstr "" msgstr ""
#: apps/member/models.py:226 #: apps/member/models.py:227
msgid "Maximal date of a membership, after which members must renew it." msgid ""
"How long the membership can last after January 1st of the next year after "
"members can renew their membership."
msgstr "" msgstr ""
#: apps/member/models.py:258 apps/member/models.py:283 #: apps/member/models.py:261 apps/member/models.py:286
#: apps/note/models/notes.py:163 #: apps/note/models/notes.py:163
msgid "club" msgid "club"
msgstr "" msgstr ""
#: apps/member/models.py:259 #: apps/member/models.py:262
msgid "clubs" msgid "clubs"
msgstr "" msgstr ""
#: apps/member/models.py:293 #: apps/member/models.py:296
msgid "membership starts on" msgid "membership starts on"
msgstr "" msgstr ""
#: apps/member/models.py:297 #: apps/member/models.py:300
msgid "membership ends on" msgid "membership ends on"
msgstr "" msgstr ""
#: apps/member/models.py:348 #: apps/member/models.py:351
#, python-brace-format #, python-brace-format
msgid "The role {role} does not apply to the club {club}." msgid "The role {role} does not apply to the club {club}."
msgstr "" msgstr ""
#: apps/member/models.py:359 apps/member/views.py:592 #: apps/member/models.py:362 apps/member/views.py:592
msgid "User is already a member of the club" msgid "User is already a member of the club"
msgstr "" msgstr ""
#: apps/member/models.py:406 #: apps/member/models.py:409
msgid "User is not a member of the parent club" msgid "User is not a member of the parent club"
msgstr "" msgstr ""
#: apps/member/models.py:459 #: apps/member/models.py:462
#, python-brace-format #, python-brace-format
msgid "Membership of {user} for the club {club}" msgid "Membership of {user} for the club {club}"
msgstr "" msgstr ""
#: apps/member/models.py:462 #: apps/member/models.py:465
msgid "membership" msgid "membership"
msgstr "" msgstr ""
#: apps/member/models.py:463 #: apps/member/models.py:466
msgid "memberships" msgid "memberships"
msgstr "" msgstr ""
@ -714,7 +715,7 @@ msgstr ""
msgid "Reason" msgid "Reason"
msgstr "" msgstr ""
#: apps/note/forms.py:87 apps/treasury/tables.py:139 #: apps/note/forms.py:87 apps/treasury/tables.py:119
msgid "Valid" msgid "Valid"
msgstr "" msgstr ""
@ -959,7 +960,7 @@ msgstr ""
msgid "membership transaction" msgid "membership transaction"
msgstr "" msgstr ""
#: apps/note/models/transactions.py:344 apps/treasury/models.py:272 #: apps/note/models/transactions.py:344 apps/treasury/models.py:259
msgid "membership transactions" msgid "membership transactions"
msgstr "" msgstr ""
@ -975,10 +976,8 @@ msgstr ""
msgid "No reason specified" msgid "No reason specified"
msgstr "" msgstr ""
#: apps/note/tables.py:139 apps/note/tables.py:167 apps/treasury/tables.py:39 #: apps/note/tables.py:139 apps/note/tables.py:167 apps/wei/tables.py:74
#: apps/wei/tables.py:74 apps/wei/tables.py:100 #: apps/wei/tables.py:100 templates/treasury/sogecredit_detail.html:59
#: templates/treasury/invoice_confirm_delete.html:28
#: templates/treasury/sogecredit_detail.html:59
#: templates/wei/weiregistration_confirm_delete.html:32 #: templates/wei/weiregistration_confirm_delete.html:32
msgid "Delete" msgid "Delete"
msgstr "" msgstr ""
@ -1198,44 +1197,44 @@ msgstr ""
msgid "Treasury" msgid "Treasury"
msgstr "" msgstr ""
#: apps/treasury/forms.py:93 apps/treasury/forms.py:147 #: apps/treasury/forms.py:88 apps/treasury/forms.py:142
#: templates/activity/activity_form.html:9 #: templates/activity/activity_form.html:9
#: templates/activity/activity_invite.html:8 #: templates/activity/activity_invite.html:8
#: templates/django_filters/rest_framework/form.html:5 #: templates/django_filters/rest_framework/form.html:5
#: templates/member/add_members.html:31 templates/member/club_form.html:9 #: templates/member/add_members.html:31 templates/member/club_form.html:9
#: templates/note/transactiontemplate_form.html:15 #: templates/note/transactiontemplate_form.html:15
#: templates/treasury/invoice_form.html:64 templates/wei/bus_form.html:13 #: templates/treasury/invoice_form.html:56 templates/wei/bus_form.html:13
#: templates/wei/busteam_form.html:13 templates/wei/weiclub_form.html:15 #: templates/wei/busteam_form.html:13 templates/wei/weiclub_form.html:15
#: templates/wei/weiregistration_form.html:14 #: templates/wei/weiregistration_form.html:14
msgid "Submit" msgid "Submit"
msgstr "" msgstr ""
#: apps/treasury/forms.py:95 #: apps/treasury/forms.py:90
msgid "Close" msgid "Close"
msgstr "" msgstr ""
#: apps/treasury/forms.py:104 #: apps/treasury/forms.py:99
msgid "Remittance is already closed." msgid "Remittance is already closed."
msgstr "" msgstr ""
#: apps/treasury/forms.py:109 #: apps/treasury/forms.py:104
msgid "You can't change the type of the remittance." msgid "You can't change the type of the remittance."
msgstr "" msgstr ""
#: apps/treasury/forms.py:129 apps/treasury/models.py:251 #: apps/treasury/forms.py:124 apps/treasury/models.py:238
#: apps/treasury/tables.py:97 apps/treasury/tables.py:105 #: apps/treasury/tables.py:77 apps/treasury/tables.py:85
#: templates/treasury/invoice_list.html:13 #: templates/treasury/invoice_list.html:13
#: templates/treasury/remittance_list.html:13 #: templates/treasury/remittance_list.html:13
#: templates/treasury/sogecredit_list.html:13 #: templates/treasury/sogecredit_list.html:13
msgid "Remittance" msgid "Remittance"
msgstr "" msgstr ""
#: apps/treasury/forms.py:130 #: apps/treasury/forms.py:125
msgid "No attached remittance" msgid "No attached remittance"
msgstr "" msgstr ""
#: apps/treasury/forms.py:141 apps/treasury/tables.py:67 #: apps/treasury/forms.py:136 apps/treasury/tables.py:47
#: apps/treasury/tables.py:135 templates/note/transaction_form.html:99 #: apps/treasury/tables.py:115 templates/note/transaction_form.html:99
#: templates/treasury/remittance_form.html:18 #: templates/treasury/remittance_form.html:18
msgid "Amount" msgid "Amount"
msgstr "" msgstr ""
@ -1264,7 +1263,7 @@ msgstr ""
msgid "Address" msgid "Address"
msgstr "" msgstr ""
#: apps/treasury/models.py:59 apps/treasury/models.py:179 #: apps/treasury/models.py:59 apps/treasury/models.py:166
msgid "Date" msgid "Date"
msgstr "" msgstr ""
@ -1273,134 +1272,122 @@ msgid "Acquitted"
msgstr "" msgstr ""
#: apps/treasury/models.py:68 #: apps/treasury/models.py:68
msgid "Locked"
msgstr ""
#: apps/treasury/models.py:69
msgid "An invoice can't be edited when it is locked."
msgstr ""
#: apps/treasury/models.py:75
msgid "tex source" msgid "tex source"
msgstr "" msgstr ""
#: apps/treasury/models.py:88 templates/treasury/invoice_form.html:17 #: apps/treasury/models.py:95 apps/treasury/models.py:108
msgid "This invoice is locked and can no longer be edited."
msgstr ""
#: apps/treasury/models.py:108 apps/treasury/models.py:121
msgid "invoice" msgid "invoice"
msgstr "" msgstr ""
#: apps/treasury/models.py:109 #: apps/treasury/models.py:96
msgid "invoices" msgid "invoices"
msgstr "" msgstr ""
#: apps/treasury/models.py:126 #: apps/treasury/models.py:113
msgid "Designation" msgid "Designation"
msgstr "" msgstr ""
#: apps/treasury/models.py:130 #: apps/treasury/models.py:117
msgid "Quantity" msgid "Quantity"
msgstr "" msgstr ""
#: apps/treasury/models.py:134 #: apps/treasury/models.py:121
msgid "Unit price" msgid "Unit price"
msgstr "" msgstr ""
#: apps/treasury/models.py:150 #: apps/treasury/models.py:137
msgid "product" msgid "product"
msgstr "" msgstr ""
#: apps/treasury/models.py:151 #: apps/treasury/models.py:138
msgid "products" msgid "products"
msgstr "" msgstr ""
#: apps/treasury/models.py:168 #: apps/treasury/models.py:155
msgid "remittance type" msgid "remittance type"
msgstr "" msgstr ""
#: apps/treasury/models.py:169 #: apps/treasury/models.py:156
msgid "remittance types" msgid "remittance types"
msgstr "" msgstr ""
#: apps/treasury/models.py:190 #: apps/treasury/models.py:177
msgid "Comment" msgid "Comment"
msgstr "" msgstr ""
#: apps/treasury/models.py:195 #: apps/treasury/models.py:182
msgid "Closed" msgid "Closed"
msgstr "" msgstr ""
#: apps/treasury/models.py:199 #: apps/treasury/models.py:186
msgid "remittance" msgid "remittance"
msgstr "" msgstr ""
#: apps/treasury/models.py:200 #: apps/treasury/models.py:187
msgid "remittances" msgid "remittances"
msgstr "" msgstr ""
#: apps/treasury/models.py:232 #: apps/treasury/models.py:219
msgid "Remittance #{:d}: {}" msgid "Remittance #{:d}: {}"
msgstr "" msgstr ""
#: apps/treasury/models.py:255 #: apps/treasury/models.py:242
msgid "special transaction proxy" msgid "special transaction proxy"
msgstr "" msgstr ""
#: apps/treasury/models.py:256 #: apps/treasury/models.py:243
msgid "special transaction proxies" msgid "special transaction proxies"
msgstr "" msgstr ""
#: apps/treasury/models.py:278 #: apps/treasury/models.py:265
msgid "credit transaction" msgid "credit transaction"
msgstr "" msgstr ""
#: apps/treasury/models.py:341 #: apps/treasury/models.py:328
msgid "" msgid ""
"This user doesn't have enough money to pay the memberships with its note. " "This user doesn't have enough money to pay the memberships with its note. "
"Please ask her/him to credit the note before invalidating this credit." "Please ask her/him to credit the note before invalidating this credit."
msgstr "" msgstr ""
#: apps/treasury/models.py:353 templates/treasury/sogecredit_detail.html:10 #: apps/treasury/models.py:340 templates/treasury/sogecredit_detail.html:10
msgid "Credit from the Société générale" msgid "Credit from the Société générale"
msgstr "" msgstr ""
#: apps/treasury/models.py:354 #: apps/treasury/models.py:341
msgid "Credits from the Société générale" msgid "Credits from the Société générale"
msgstr "" msgstr ""
#: apps/treasury/tables.py:20 #: apps/treasury/tables.py:19
msgid "Invoice #{:d}" msgid "Invoice #{:d}"
msgstr "" msgstr ""
#: apps/treasury/tables.py:25 templates/treasury/invoice_list.html:10 #: apps/treasury/tables.py:22 templates/treasury/invoice_list.html:10
#: templates/treasury/remittance_list.html:10 #: templates/treasury/remittance_list.html:10
#: templates/treasury/sogecredit_list.html:10 #: templates/treasury/sogecredit_list.html:10
msgid "Invoice" msgid "Invoice"
msgstr "" msgstr ""
#: apps/treasury/tables.py:65 #: apps/treasury/tables.py:45
msgid "Transaction count" msgid "Transaction count"
msgstr "" msgstr ""
#: apps/treasury/tables.py:70 apps/treasury/tables.py:72 #: apps/treasury/tables.py:50 apps/treasury/tables.py:52
msgid "View" msgid "View"
msgstr "" msgstr ""
#: apps/treasury/tables.py:99 #: apps/treasury/tables.py:79
msgid "Add" msgid "Add"
msgstr "" msgstr ""
#: apps/treasury/tables.py:107 #: apps/treasury/tables.py:87
msgid "Remove" msgid "Remove"
msgstr "" msgstr ""
#: apps/treasury/tables.py:146 #: apps/treasury/tables.py:126
msgid "Yes" msgid "Yes"
msgstr "" msgstr ""
#: apps/treasury/tables.py:146 #: apps/treasury/tables.py:126
msgid "No" msgid "No"
msgstr "" msgstr ""
@ -1416,32 +1403,28 @@ msgstr ""
msgid "Update an invoice" msgid "Update an invoice"
msgstr "" msgstr ""
#: apps/treasury/views.py:145 templates/treasury/invoice_confirm_delete.html:8 #: apps/treasury/views.py:188
msgid "Delete invoice"
msgstr ""
#: apps/treasury/views.py:205
msgid "Create a new remittance" msgid "Create a new remittance"
msgstr "" msgstr ""
#: apps/treasury/views.py:226 templates/treasury/remittance_form.html:9 #: apps/treasury/views.py:209 templates/treasury/remittance_form.html:9
#: templates/treasury/specialtransactionproxy_form.html:7 #: templates/treasury/specialtransactionproxy_form.html:7
msgid "Remittances list" msgid "Remittances list"
msgstr "" msgstr ""
#: apps/treasury/views.py:276 #: apps/treasury/views.py:259
msgid "Update a remittance" msgid "Update a remittance"
msgstr "" msgstr ""
#: apps/treasury/views.py:299 #: apps/treasury/views.py:282
msgid "Attach a transaction to a remittance" msgid "Attach a transaction to a remittance"
msgstr "" msgstr ""
#: apps/treasury/views.py:343 #: apps/treasury/views.py:326
msgid "List of credits from the Société générale" msgid "List of credits from the Société générale"
msgstr "" msgstr ""
#: apps/treasury/views.py:377 #: apps/treasury/views.py:360
msgid "Manage credits from the Société générale" msgid "Manage credits from the Société générale"
msgstr "" msgstr ""
@ -2382,30 +2365,17 @@ msgid ""
"by following the link you received." "by following the link you received."
msgstr "" msgstr ""
#: templates/treasury/invoice_confirm_delete.html:13
msgid "This invoice is locked and can't be deleted."
msgstr ""
#: templates/treasury/invoice_confirm_delete.html:19
msgid ""
"Are you sure you want to delete this invoice? This action can't be undone."
msgstr ""
#: templates/treasury/invoice_confirm_delete.html:26
msgid "Return to invoices list"
msgstr ""
#: templates/treasury/invoice_form.html:10 #: templates/treasury/invoice_form.html:10
msgid "" msgid ""
"Warning: the LaTeX template is saved with this object. Updating the invoice " "Warning: the LaTeX template is saved with this object. Updating the invoice "
"implies regenerate it. Be careful if you manipulate old invoices." "implies regenerate it. Be careful if you manipulate old invoices."
msgstr "" msgstr ""
#: templates/treasury/invoice_form.html:58 #: templates/treasury/invoice_form.html:51
msgid "Add product" msgid "Add product"
msgstr "" msgstr ""
#: templates/treasury/invoice_form.html:59 #: templates/treasury/invoice_form.html:52
msgid "Remove product" msgid "Remove product"
msgstr "" msgstr ""

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-07 14:17+0200\n" "POT-Creation-Date: 2020-08-06 22:27+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -96,8 +96,8 @@ msgstr "lieu"
msgid "type" msgid "type"
msgstr "type" msgstr "type"
#: apps/activity/models.py:87 apps/logs/models.py:22 apps/member/models.py:277 #: apps/activity/models.py:87 apps/logs/models.py:22 apps/member/models.py:280
#: apps/note/models/notes.py:126 apps/treasury/models.py:266 #: apps/note/models/notes.py:126 apps/treasury/models.py:253
#: apps/wei/models.py:160 templates/treasury/sogecredit_detail.html:14 #: apps/wei/models.py:160 templates/treasury/sogecredit_detail.html:14
#: templates/wei/survey.html:16 #: templates/wei/survey.html:16
msgid "user" msgid "user"
@ -195,18 +195,18 @@ msgstr "Entré le "
msgid "remove" msgid "remove"
msgstr "supprimer" msgstr "supprimer"
#: apps/activity/tables.py:79 apps/note/forms.py:76 apps/treasury/models.py:185 #: apps/activity/tables.py:79 apps/note/forms.py:76 apps/treasury/models.py:172
msgid "Type" msgid "Type"
msgstr "Type" msgstr "Type"
#: apps/activity/tables.py:81 apps/member/forms.py:106 #: apps/activity/tables.py:81 apps/member/forms.py:106
#: apps/registration/forms.py:70 apps/treasury/forms.py:135 #: apps/registration/forms.py:70 apps/treasury/forms.py:130
#: apps/wei/forms/registration.py:94 #: apps/wei/forms/registration.py:94
msgid "Last name" msgid "Last name"
msgstr "Nom de famille" msgstr "Nom de famille"
#: apps/activity/tables.py:83 apps/member/forms.py:111 #: apps/activity/tables.py:83 apps/member/forms.py:111
#: apps/registration/forms.py:75 apps/treasury/forms.py:137 #: apps/registration/forms.py:75 apps/treasury/forms.py:132
#: apps/wei/forms/registration.py:99 templates/note/transaction_form.html:131 #: apps/wei/forms/registration.py:99 templates/note/transaction_form.html:131
msgid "First name" msgid "First name"
msgstr "Prénom" msgstr "Prénom"
@ -281,8 +281,7 @@ msgid "edit"
msgstr "Modifier" msgstr "Modifier"
#: apps/logs/models.py:63 apps/note/tables.py:137 apps/note/tables.py:165 #: apps/logs/models.py:63 apps/note/tables.py:137 apps/note/tables.py:165
#: apps/permission/models.py:129 apps/treasury/tables.py:38 #: apps/permission/models.py:129 apps/wei/tables.py:73
#: apps/wei/tables.py:73
msgid "delete" msgid "delete"
msgstr "Supprimer" msgstr "Supprimer"
@ -316,11 +315,11 @@ msgstr "cotisation pour adhérer (normalien élève)"
msgid "membership fee (unpaid students)" msgid "membership fee (unpaid students)"
msgstr "cotisation pour adhérer (normalien étudiant)" msgstr "cotisation pour adhérer (normalien étudiant)"
#: apps/member/admin.py:67 apps/member/models.py:288 #: apps/member/admin.py:67 apps/member/models.py:291
msgid "roles" msgid "roles"
msgstr "rôles" msgstr "rôles"
#: apps/member/admin.py:68 apps/member/models.py:302 #: apps/member/admin.py:68 apps/member/models.py:305
msgid "fee" msgid "fee"
msgstr "cotisation" msgstr "cotisation"
@ -369,7 +368,7 @@ msgid "Credit amount"
msgstr "Montant à créditer" msgstr "Montant à créditer"
#: apps/member/forms.py:116 apps/registration/forms.py:80 #: apps/member/forms.py:116 apps/registration/forms.py:80
#: apps/treasury/forms.py:139 apps/wei/forms/registration.py:104 #: apps/treasury/forms.py:134 apps/wei/forms/registration.py:104
#: templates/note/transaction_form.html:137 #: templates/note/transaction_form.html:137
msgid "Bank" msgid "Bank"
msgstr "Banque" msgstr "Banque"
@ -545,59 +544,63 @@ msgid "membership start"
msgstr "début de l'adhésion" msgstr "début de l'adhésion"
#: apps/member/models.py:219 #: apps/member/models.py:219
msgid "Date from which the members can renew their membership." msgid "How long after January 1st the members can renew their membership."
msgstr "" msgstr ""
"Date à partir de laquelle les adhérents peuvent renouveler leur " "Combien de temps après le 1er Janvier les adhérents peuvent renouveler leur "
"adhésion." "adhésion."
#: apps/member/models.py:225 templates/member/club_info.html:28 #: apps/member/models.py:226 templates/member/club_info.html:28
msgid "membership end" msgid "membership end"
msgstr "fin de l'adhésion" msgstr "fin de l'adhésion"
#: apps/member/models.py:226 #: apps/member/models.py:227
msgid "Maximal date of a membership, after which members must renew it." msgid ""
msgstr "Date maximale d'une fin d'adhésion, après laquelle les adhérents doivent la renouveler." "How long the membership can last after January 1st of the next year after "
"members can renew their membership."
msgstr ""
"Combien de temps l'adhésion peut durer après le 1er Janvier de l'année "
"suivante avant que les adhérents peuvent renouveler leur adhésion."
#: apps/member/models.py:258 apps/member/models.py:283 #: apps/member/models.py:261 apps/member/models.py:286
#: apps/note/models/notes.py:163 #: apps/note/models/notes.py:163
msgid "club" msgid "club"
msgstr "club" msgstr "club"
#: apps/member/models.py:259 #: apps/member/models.py:262
msgid "clubs" msgid "clubs"
msgstr "clubs" msgstr "clubs"
#: apps/member/models.py:293 #: apps/member/models.py:296
msgid "membership starts on" msgid "membership starts on"
msgstr "l'adhésion commence le" msgstr "l'adhésion commence le"
#: apps/member/models.py:297 #: apps/member/models.py:300
msgid "membership ends on" msgid "membership ends on"
msgstr "l'adhésion finit le" msgstr "l'adhésion finit le"
#: apps/member/models.py:348 #: apps/member/models.py:351
#, python-brace-format #, python-brace-format
msgid "The role {role} does not apply to the club {club}." msgid "The role {role} does not apply to the club {club}."
msgstr "Le rôle {role} ne s'applique pas au club {club}." msgstr "Le rôle {role} ne s'applique pas au club {club}."
#: apps/member/models.py:359 apps/member/views.py:592 #: apps/member/models.py:362 apps/member/views.py:592
msgid "User is already a member of the club" msgid "User is already a member of the club"
msgstr "L'utilisateur est déjà membre du club" msgstr "L'utilisateur est déjà membre du club"
#: apps/member/models.py:406 #: apps/member/models.py:409
msgid "User is not a member of the parent club" msgid "User is not a member of the parent club"
msgstr "L'utilisateur n'est pas membre du club parent" msgstr "L'utilisateur n'est pas membre du club parent"
#: apps/member/models.py:459 #: apps/member/models.py:462
#, python-brace-format #, python-brace-format
msgid "Membership of {user} for the club {club}" msgid "Membership of {user} for the club {club}"
msgstr "Adhésion de {user} pour le club {club}" msgstr "Adhésion de {user} pour le club {club}"
#: apps/member/models.py:462 #: apps/member/models.py:465
msgid "membership" msgid "membership"
msgstr "adhésion" msgstr "adhésion"
#: apps/member/models.py:463 #: apps/member/models.py:466
msgid "memberships" msgid "memberships"
msgstr "adhésions" msgstr "adhésions"
@ -719,7 +722,7 @@ msgstr "Destination"
msgid "Reason" msgid "Reason"
msgstr "Raison" msgstr "Raison"
#: apps/note/forms.py:87 apps/treasury/tables.py:139 #: apps/note/forms.py:87 apps/treasury/tables.py:119
msgid "Valid" msgid "Valid"
msgstr "Valide" msgstr "Valide"
@ -971,7 +974,7 @@ msgstr "Transactions de crédit/retrait"
msgid "membership transaction" msgid "membership transaction"
msgstr "Transaction d'adhésion" msgstr "Transaction d'adhésion"
#: apps/note/models/transactions.py:344 apps/treasury/models.py:272 #: apps/note/models/transactions.py:344 apps/treasury/models.py:259
msgid "membership transactions" msgid "membership transactions"
msgstr "Transactions d'adhésion" msgstr "Transactions d'adhésion"
@ -987,10 +990,8 @@ msgstr "Cliquez pour valider"
msgid "No reason specified" msgid "No reason specified"
msgstr "Pas de motif spécifié" msgstr "Pas de motif spécifié"
#: apps/note/tables.py:139 apps/note/tables.py:167 apps/treasury/tables.py:39 #: apps/note/tables.py:139 apps/note/tables.py:167 apps/wei/tables.py:74
#: apps/wei/tables.py:74 apps/wei/tables.py:100 #: apps/wei/tables.py:100 templates/treasury/sogecredit_detail.html:59
#: templates/treasury/invoice_confirm_delete.html:28
#: templates/treasury/sogecredit_detail.html:59
#: templates/wei/weiregistration_confirm_delete.html:32 #: templates/wei/weiregistration_confirm_delete.html:32
msgid "Delete" msgid "Delete"
msgstr "Supprimer" msgstr "Supprimer"
@ -1225,44 +1226,44 @@ msgstr "Invalider l'inscription"
msgid "Treasury" msgid "Treasury"
msgstr "Trésorerie" msgstr "Trésorerie"
#: apps/treasury/forms.py:93 apps/treasury/forms.py:147 #: apps/treasury/forms.py:88 apps/treasury/forms.py:142
#: templates/activity/activity_form.html:9 #: templates/activity/activity_form.html:9
#: templates/activity/activity_invite.html:8 #: templates/activity/activity_invite.html:8
#: templates/django_filters/rest_framework/form.html:5 #: templates/django_filters/rest_framework/form.html:5
#: templates/member/add_members.html:31 templates/member/club_form.html:9 #: templates/member/add_members.html:31 templates/member/club_form.html:9
#: templates/note/transactiontemplate_form.html:15 #: templates/note/transactiontemplate_form.html:15
#: templates/treasury/invoice_form.html:64 templates/wei/bus_form.html:13 #: templates/treasury/invoice_form.html:56 templates/wei/bus_form.html:13
#: templates/wei/busteam_form.html:13 templates/wei/weiclub_form.html:15 #: templates/wei/busteam_form.html:13 templates/wei/weiclub_form.html:15
#: templates/wei/weiregistration_form.html:14 #: templates/wei/weiregistration_form.html:14
msgid "Submit" msgid "Submit"
msgstr "Envoyer" msgstr "Envoyer"
#: apps/treasury/forms.py:95 #: apps/treasury/forms.py:90
msgid "Close" msgid "Close"
msgstr "Fermer" msgstr "Fermer"
#: apps/treasury/forms.py:104 #: apps/treasury/forms.py:99
msgid "Remittance is already closed." msgid "Remittance is already closed."
msgstr "La remise est déjà fermée." msgstr "La remise est déjà fermée."
#: apps/treasury/forms.py:109 #: apps/treasury/forms.py:104
msgid "You can't change the type of the remittance." msgid "You can't change the type of the remittance."
msgstr "Vous ne pouvez pas changer le type de la remise." msgstr "Vous ne pouvez pas changer le type de la remise."
#: apps/treasury/forms.py:129 apps/treasury/models.py:251 #: apps/treasury/forms.py:124 apps/treasury/models.py:238
#: apps/treasury/tables.py:97 apps/treasury/tables.py:105 #: apps/treasury/tables.py:77 apps/treasury/tables.py:85
#: templates/treasury/invoice_list.html:13 #: templates/treasury/invoice_list.html:13
#: templates/treasury/remittance_list.html:13 #: templates/treasury/remittance_list.html:13
#: templates/treasury/sogecredit_list.html:13 #: templates/treasury/sogecredit_list.html:13
msgid "Remittance" msgid "Remittance"
msgstr "Remise" msgstr "Remise"
#: apps/treasury/forms.py:130 #: apps/treasury/forms.py:125
msgid "No attached remittance" msgid "No attached remittance"
msgstr "Pas de remise associée" msgstr "Pas de remise associée"
#: apps/treasury/forms.py:141 apps/treasury/tables.py:67 #: apps/treasury/forms.py:136 apps/treasury/tables.py:47
#: apps/treasury/tables.py:135 templates/note/transaction_form.html:99 #: apps/treasury/tables.py:115 templates/note/transaction_form.html:99
#: templates/treasury/remittance_form.html:18 #: templates/treasury/remittance_form.html:18
msgid "Amount" msgid "Amount"
msgstr "Montant" msgstr "Montant"
@ -1291,7 +1292,7 @@ msgstr "Nom"
msgid "Address" msgid "Address"
msgstr "Adresse" msgstr "Adresse"
#: apps/treasury/models.py:59 apps/treasury/models.py:179 #: apps/treasury/models.py:59 apps/treasury/models.py:166
msgid "Date" msgid "Date"
msgstr "Date" msgstr "Date"
@ -1300,90 +1301,80 @@ msgid "Acquitted"
msgstr "Acquittée" msgstr "Acquittée"
#: apps/treasury/models.py:68 #: apps/treasury/models.py:68
msgid "Locked" #, fuzzy
msgstr "Verrouillée" #| msgid "source"
#: apps/treasury/models.py:69
msgid "An invoice can't be edited when it is locked."
msgstr "Une facture ne peut plus être modifiée si elle est verrouillée."
#: apps/treasury/models.py:75
msgid "tex source" msgid "tex source"
msgstr "Fichier TeX source" msgstr "source"
#: apps/treasury/models.py:88 templates/treasury/invoice_form.html:17 #: apps/treasury/models.py:95 apps/treasury/models.py:108
msgid "This invoice is locked and can no longer be edited."
msgstr "Cette facture est verrouillée et ne peut plus être éditée."
#: apps/treasury/models.py:108 apps/treasury/models.py:121
msgid "invoice" msgid "invoice"
msgstr "facture" msgstr "facture"
#: apps/treasury/models.py:109 #: apps/treasury/models.py:96
msgid "invoices" msgid "invoices"
msgstr "factures" msgstr "factures"
#: apps/treasury/models.py:126 #: apps/treasury/models.py:113
msgid "Designation" msgid "Designation"
msgstr "Désignation" msgstr "Désignation"
#: apps/treasury/models.py:130 #: apps/treasury/models.py:117
msgid "Quantity" msgid "Quantity"
msgstr "Quantité" msgstr "Quantité"
#: apps/treasury/models.py:134 #: apps/treasury/models.py:121
msgid "Unit price" msgid "Unit price"
msgstr "Prix unitaire" msgstr "Prix unitaire"
#: apps/treasury/models.py:150 #: apps/treasury/models.py:137
msgid "product" msgid "product"
msgstr "produit" msgstr "produit"
#: apps/treasury/models.py:151 #: apps/treasury/models.py:138
msgid "products" msgid "products"
msgstr "produits" msgstr "produits"
#: apps/treasury/models.py:168 #: apps/treasury/models.py:155
msgid "remittance type" msgid "remittance type"
msgstr "type de remise" msgstr "type de remise"
#: apps/treasury/models.py:169 #: apps/treasury/models.py:156
msgid "remittance types" msgid "remittance types"
msgstr "types de remises" msgstr "types de remises"
#: apps/treasury/models.py:190 #: apps/treasury/models.py:177
msgid "Comment" msgid "Comment"
msgstr "Commentaire" msgstr "Commentaire"
#: apps/treasury/models.py:195 #: apps/treasury/models.py:182
msgid "Closed" msgid "Closed"
msgstr "Fermée" msgstr "Fermée"
#: apps/treasury/models.py:199 #: apps/treasury/models.py:186
msgid "remittance" msgid "remittance"
msgstr "remise" msgstr "remise"
#: apps/treasury/models.py:200 #: apps/treasury/models.py:187
msgid "remittances" msgid "remittances"
msgstr "remises" msgstr "remises"
#: apps/treasury/models.py:232 #: apps/treasury/models.py:219
msgid "Remittance #{:d}: {}" msgid "Remittance #{:d}: {}"
msgstr "Remise n°{:d} : {}" msgstr "Remise n°{:d} : {}"
#: apps/treasury/models.py:255 #: apps/treasury/models.py:242
msgid "special transaction proxy" msgid "special transaction proxy"
msgstr "Proxy de transaction spéciale" msgstr "Proxy de transaction spéciale"
#: apps/treasury/models.py:256 #: apps/treasury/models.py:243
msgid "special transaction proxies" msgid "special transaction proxies"
msgstr "Proxys de transactions spéciales" msgstr "Proxys de transactions spéciales"
#: apps/treasury/models.py:278 #: apps/treasury/models.py:265
msgid "credit transaction" msgid "credit transaction"
msgstr "transaction de crédit" msgstr "transaction de crédit"
#: apps/treasury/models.py:341 #: apps/treasury/models.py:328
msgid "" msgid ""
"This user doesn't have enough money to pay the memberships with its note. " "This user doesn't have enough money to pay the memberships with its note. "
"Please ask her/him to credit the note before invalidating this credit." "Please ask her/him to credit the note before invalidating this credit."
@ -1391,45 +1382,45 @@ msgstr ""
"Cet utilisateur n'a pas assez d'argent pour payer les adhésions avec sa " "Cet utilisateur n'a pas assez d'argent pour payer les adhésions avec sa "
"note. Merci de lui demander de recharger sa note avant d'invalider ce crédit." "note. Merci de lui demander de recharger sa note avant d'invalider ce crédit."
#: apps/treasury/models.py:353 templates/treasury/sogecredit_detail.html:10 #: apps/treasury/models.py:340 templates/treasury/sogecredit_detail.html:10
msgid "Credit from the Société générale" msgid "Credit from the Société générale"
msgstr "Crédit de la Société générale" msgstr "Crédit de la Société générale"
#: apps/treasury/models.py:354 #: apps/treasury/models.py:341
msgid "Credits from the Société générale" msgid "Credits from the Société générale"
msgstr "Crédits de la Société générale" msgstr "Crédits de la Société générale"
#: apps/treasury/tables.py:20 #: apps/treasury/tables.py:19
msgid "Invoice #{:d}" msgid "Invoice #{:d}"
msgstr "Facture n°{:d}" msgstr "Facture n°{:d}"
#: apps/treasury/tables.py:25 templates/treasury/invoice_list.html:10 #: apps/treasury/tables.py:22 templates/treasury/invoice_list.html:10
#: templates/treasury/remittance_list.html:10 #: templates/treasury/remittance_list.html:10
#: templates/treasury/sogecredit_list.html:10 #: templates/treasury/sogecredit_list.html:10
msgid "Invoice" msgid "Invoice"
msgstr "Facture" msgstr "Facture"
#: apps/treasury/tables.py:65 #: apps/treasury/tables.py:45
msgid "Transaction count" msgid "Transaction count"
msgstr "Nombre de transactions" msgstr "Nombre de transactions"
#: apps/treasury/tables.py:70 apps/treasury/tables.py:72 #: apps/treasury/tables.py:50 apps/treasury/tables.py:52
msgid "View" msgid "View"
msgstr "Voir" msgstr "Voir"
#: apps/treasury/tables.py:99 #: apps/treasury/tables.py:79
msgid "Add" msgid "Add"
msgstr "Ajouter" msgstr "Ajouter"
#: apps/treasury/tables.py:107 #: apps/treasury/tables.py:87
msgid "Remove" msgid "Remove"
msgstr "supprimer" msgstr "supprimer"
#: apps/treasury/tables.py:146 #: apps/treasury/tables.py:126
msgid "Yes" msgid "Yes"
msgstr "Oui" msgstr "Oui"
#: apps/treasury/tables.py:146 #: apps/treasury/tables.py:126
msgid "No" msgid "No"
msgstr "Non" msgstr "Non"
@ -1445,32 +1436,28 @@ msgstr "Liste des factures"
msgid "Update an invoice" msgid "Update an invoice"
msgstr "Modifier la facture" msgstr "Modifier la facture"
#: apps/treasury/views.py:145 templates/treasury/invoice_confirm_delete.html:8 #: apps/treasury/views.py:188
msgid "Delete invoice"
msgstr "Supprimer la facture"
#: apps/treasury/views.py:205
msgid "Create a new remittance" msgid "Create a new remittance"
msgstr "Créer une nouvelle remise" msgstr "Créer une nouvelle remise"
#: apps/treasury/views.py:226 templates/treasury/remittance_form.html:9 #: apps/treasury/views.py:209 templates/treasury/remittance_form.html:9
#: templates/treasury/specialtransactionproxy_form.html:7 #: templates/treasury/specialtransactionproxy_form.html:7
msgid "Remittances list" msgid "Remittances list"
msgstr "Liste des remises" msgstr "Liste des remises"
#: apps/treasury/views.py:276 #: apps/treasury/views.py:259
msgid "Update a remittance" msgid "Update a remittance"
msgstr "Modifier la remise" msgstr "Modifier la remise"
#: apps/treasury/views.py:299 #: apps/treasury/views.py:282
msgid "Attach a transaction to a remittance" msgid "Attach a transaction to a remittance"
msgstr "Joindre une transaction à une remise" msgstr "Joindre une transaction à une remise"
#: apps/treasury/views.py:343 #: apps/treasury/views.py:326
msgid "List of credits from the Société générale" msgid "List of credits from the Société générale"
msgstr "Liste des crédits de la Société générale" msgstr "Liste des crédits de la Société générale"
#: apps/treasury/views.py:377 #: apps/treasury/views.py:360
msgid "Manage credits from the Société générale" msgid "Manage credits from the Société générale"
msgstr "Gérer les crédits de la Société générale" msgstr "Gérer les crédits de la Société générale"
@ -2482,20 +2469,6 @@ msgstr ""
"d'adhésion. Vous devez également valider votre adresse email en suivant le " "d'adhésion. Vous devez également valider votre adresse email en suivant le "
"lien que vous avez reçu." "lien que vous avez reçu."
#: templates/treasury/invoice_confirm_delete.html:13
msgid "This invoice is locked and can't be deleted."
msgstr "Cette facture est verrouillée et ne peut pas être supprimée."
#: templates/treasury/invoice_confirm_delete.html:19
msgid ""
"Are you sure you want to delete this invoice? This action can't be undone."
msgstr ""
"Êtes-vous sûr de vouloir supprimer cette facture ? Cette action ne pourra pas être annulée."
#: templates/treasury/invoice_confirm_delete.html:26
msgid "Return to invoices list"
msgstr "Retour à la liste des factures"
#: templates/treasury/invoice_form.html:10 #: templates/treasury/invoice_form.html:10
msgid "" msgid ""
"Warning: the LaTeX template is saved with this object. Updating the invoice " "Warning: the LaTeX template is saved with this object. Updating the invoice "
@ -2505,11 +2478,11 @@ msgstr ""
"facture implique la regénérer. Faites attention si vous manipulez de " "facture implique la regénérer. Faites attention si vous manipulez de "
"vieilles factures." "vieilles factures."
#: templates/treasury/invoice_form.html:58 #: templates/treasury/invoice_form.html:51
msgid "Add product" msgid "Add product"
msgstr "Ajouter produit" msgstr "Ajouter produit"
#: templates/treasury/invoice_form.html:59 #: templates/treasury/invoice_form.html:52
msgid "Remove product" msgid "Remove product"
msgstr "Retirer produit" msgstr "Retirer produit"
@ -2846,3 +2819,6 @@ msgstr "Il n'y a pas de pré-inscription en attente avec cette entrée."
#: templates/wei/weiregistration_list.html:24 #: templates/wei/weiregistration_list.html:24
msgid "View validated memberships..." msgid "View validated memberships..."
msgstr "Voir les adhésions validées ..." msgstr "Voir les adhésions validées ..."
#~ msgid "Place"
#~ msgstr "Lieu"

View File

@ -1,33 +0,0 @@
{% extends "base.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block content %}
<div class="card bg-light shadow">
<div class="card-header text-center">
<h4>{% trans "Delete invoice" %}</h4>
</div>
{% if object.locked %}
<div class="card-body">
<div class="alert alert-danger">
{% blocktrans %}This invoice is locked and can't be deleted.{% endblocktrans %}
</div>
</div>
{% else %}
<div class="card-body">
<div class="alert alert-warning">
{% blocktrans %}Are you sure you want to delete this invoice? This action can't be undone.{% endblocktrans %}
</div>
</div>
{% endif %}
<div class="card-footer text-center">
<form method="post">
{% csrf_token %}
<a class="btn btn-primary" href="{% url 'treasury:invoice_list' %}">{% trans "Return to invoices list" %}</a>
{% if not object.locked %}
<button class="btn btn-danger" type="submit">{% trans "Delete" %}</button>
{% endif %}
</form>
</div>
</div>
{% endblock %}

View File

@ -5,19 +5,13 @@
{% block content %} {% block content %}
<p><a class="btn btn-default" href="{% url 'treasury:invoice_list' %}">{% trans "Invoices list" %}</a></p> <p><a class="btn btn-default" href="{% url 'treasury:invoice_list' %}">{% trans "Invoices list" %}</a></p>
{% if object.pk and not object.locked %} {% if not object.pk %}
<div class="alert alert-info"> <div class="alert alert-info">
{% blocktrans trimmed %} {% blocktrans trimmed %}
Warning: the LaTeX template is saved with this object. Updating the invoice implies regenerate it. Warning: the LaTeX template is saved with this object. Updating the invoice implies regenerate it.
Be careful if you manipulate old invoices. Be careful if you manipulate old invoices.
{% endblocktrans %} {% endblocktrans %}
</div> </div>
{% elif object.locked %}
<div class="alert alert-info">
{% blocktrans trimmed %}
This invoice is locked and can no longer be edited.
{% endblocktrans %}
</div>
{% endif %} {% endif %}
<form method="post" action=""> <form method="post" action="">
@ -53,12 +47,10 @@
</table> </table>
{# Display buttons to add and remove products #} {# Display buttons to add and remove products #}
{% if not object.locked %} <div class="btn-group btn-block" role="group">
<div class="btn-group btn-block" role="group"> <button type="button" id="add_more" class="btn btn-primary">{% trans "Add product" %}</button>
<button type="button" id="add_more" class="btn btn-primary">{% trans "Add product" %}</button> <button type="button" id="remove_one" class="btn btn-danger">{% trans "Remove product" %}</button>
<button type="button" id="remove_one" class="btn btn-danger">{% trans "Remove product" %}</button> </div>
</div>
{% endif %}
<div class="btn-block"> <div class="btn-block">
<button type="submit" class="btn btn-block btn-primary">{% trans "Submit" %}</button> <button type="submit" class="btn btn-block btn-primary">{% trans "Submit" %}</button>
@ -86,21 +78,21 @@
{# Script that handles add and remove lines #} {# Script that handles add and remove lines #}
IDS = {}; IDS = {};
$("#id_products-TOTAL_FORMS").val($(".row-formset").length - 1); $("#id_product_set-TOTAL_FORMS").val($(".row-formset").length - 1);
$('#add_more').click(function () { $('#add_more').click(function () {
let form_idx = $('#id_products-TOTAL_FORMS').val(); var form_idx = $('#id_product_set-TOTAL_FORMS').val();
$('#form_body').append($('#for_real').html().replace(/__prefix__/g, form_idx)); $('#form_body').append($('#for_real').html().replace(/__prefix__/g, form_idx));
$('#id_products-TOTAL_FORMS').val(parseInt(form_idx) + 1); $('#id_product_set-TOTAL_FORMS').val(parseInt(form_idx) + 1);
$('#id_products-' + parseInt(form_idx) + '-id').val(IDS[parseInt(form_idx)]); $('#id_product_set-' + parseInt(form_idx) + '-id').val(IDS[parseInt(form_idx)]);
}); });
$('#remove_one').click(function () { $('#remove_one').click(function () {
let form_idx = $('#id_products-TOTAL_FORMS').val(); let form_idx = $('#id_product_set-TOTAL_FORMS').val();
if (form_idx > 0) { if (form_idx > 0) {
IDS[parseInt(form_idx) - 1] = $('#id_products-' + (parseInt(form_idx) - 1) + '-id').val(); IDS[parseInt(form_idx) - 1] = $('#id_product_set-' + (parseInt(form_idx) - 1) + '-id').val();
$('#form_body tr:last-child').remove(); $('#form_body tr:last-child').remove();
$('#id_products-TOTAL_FORMS').val(parseInt(form_idx) - 1); $('#id_product_set-TOTAL_FORMS').val(parseInt(form_idx) - 1);
} }
}); });
</script> </script>