Merge branch 'bilanTresorerie' into 'master'

Bilan tresorerie

See merge request !36
This commit is contained in:
Skia 2016-12-21 20:24:49 +01:00
commit f79ffbee7d
8 changed files with 427 additions and 66 deletions

View File

@ -22,6 +22,7 @@
<p>{% trans %}Journal is closed, you can not create operation{% endtrans %}</p> <p>{% trans %}Journal is closed, you can not create operation{% endtrans %}</p>
{% else %} {% else %}
<p><a href="{{ url('accounting:op_new', j_id=object.id) }}">{% trans %}New operation{% endtrans %}</a></p> <p><a href="{{ url('accounting:op_new', j_id=object.id) }}">{% trans %}New operation{% endtrans %}</a></p>
</br>
{% endif %} {% endif %}
<table> <table>
<thead> <thead>

View File

@ -0,0 +1,32 @@
{% extends "core/base.jinja" %}
{% block title %}
{% trans %}General journal:{% endtrans %} {{ object.name }}
{% endblock %}
{% block content %}
<h3>{% trans %}Accounting statement: {% endtrans %} {{ object.name }}</h3>
<table>
<thead>
<tr>
<td>{% trans %}Operation type{% endtrans %}</td>
<td>{% trans %}Sum{% endtrans %}</td>
</tr>
</thead>
<tbody>
{% for k,v in statement.items() %}
<tr>
<td>{{ k }}</td>
<td>{{ v }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<p><strong>{% trans %}Amount: {% endtrans %}</strong>{{ object.amount }} €</p>
<p><strong>{% trans %}Effective amount: {% endtrans %}</strong>{{ object.effective_amount }} €</p>
{% endblock %}

View File

@ -0,0 +1,56 @@
{% extends "core/base.jinja" %}
{% block title %}
{% trans %}General journal:{% endtrans %} {{ object.name }}
{% endblock %}
{% macro display_tables(dict) %}
<h6>{% trans %}Credit{% endtrans %}</h6>
<table>
<thead>
<tr>
<td>{% trans %}Nature of operation{% endtrans %}</td>
<td>{% trans %}Sum{% endtrans %}</td>
</tr>
</thead>
<tbody>
{% for k,v in dict['CREDIT'].items() %}
<tr>
<td>{{ k }}</td>
<td>{{ v }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% trans %}Total: {% endtrans %}{{ dict['CREDIT_sum'] }}
<h6>{% trans %}Debit{% endtrans %}</h6>
<table>
<thead>
<tr>
<td>{% trans %}Nature of operation{% endtrans %}</td>
<td>{% trans %}Sum{% endtrans %}</td>
</tr>
</thead>
<tbody>
{% for k,v in dict['DEBIT'].items() %}
<tr>
<td>{{ k }}</td>
<td>{{ v }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% trans %}Total: {% endtrans %}{{ dict['DEBIT_sum'] }}
{% endmacro %}
{% block content %}
<h3>{% trans %}Statement by nature: {% endtrans %} {{ object.name }}</h3>
{% for k,v in statement.items() %}
<h4 style="background: lightblue; padding: 4px;">{{ k }} : {{ v['CREDIT_sum'] - v['DEBIT_sum'] }}</h4>
{{ display_tables(v) }}
<hr>
{% endfor %}
{% endblock %}

View File

@ -0,0 +1,67 @@
{% extends "core/base.jinja" %}
{% block title %}
{% trans %}General journal:{% endtrans %} {{ object.name }}
{% endblock %}
{% block content %}
<h3>{% trans %}Statement by person: {% endtrans %} {{ object.name }}</h3>
<h4>{% trans %}Credit{% endtrans %}</h4>
<table>
<thead>
<tr>
<td>{% trans %}Target of the operation{% endtrans %}</td>
<td>{% trans %}Sum{% endtrans %}</td>
</tr>
</thead>
<tbody>
{% for key in credit_statement.keys() %}
<tr>
{% if key.target_type == "OTHER" %}
<td>{{ o.target_label }}</td>
{% elif key %}
<td><a href="{{ key.get_absolute_url() }}">{{ key.get_display_name() }}</a></td>
{% else %}
<td></td>
{% endif %}
<td>{{ credit_statement[key] }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<p>Total : {{ total_credit }}</p>
<h4>{% trans %}Debit{% endtrans %}</h4>
<table>
<thead>
<tr>
<td>{% trans %}Target of the operation{% endtrans %}</td>
<td>{% trans %}Sum{% endtrans %}</td>
</tr>
</thead>
<tbody>
{% for key in debit_statement.keys() %}
<tr>
{% if key.target_type == "OTHER" %}
<td>{{ o.target_label }}</td>
{% elif key %}
<td><a href="{{ key.get_absolute_url() }}">{{ key.get_display_name() }}</a></td>
{% else %}
<td></td>
{% endif %}
<td>{{ debit_statement[key] }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<p>Total : {{ total_debit }}</p>
{% endblock %}

View File

@ -26,6 +26,10 @@ urlpatterns = [
url(r'^journal/create$', JournalCreateView.as_view(), name='journal_new'), url(r'^journal/create$', JournalCreateView.as_view(), name='journal_new'),
url(r'^journal/(?P<j_id>[0-9]+)$', JournalDetailView.as_view(), name='journal_details'), url(r'^journal/(?P<j_id>[0-9]+)$', JournalDetailView.as_view(), name='journal_details'),
url(r'^journal/(?P<j_id>[0-9]+)/edit$', JournalEditView.as_view(), name='journal_edit'), url(r'^journal/(?P<j_id>[0-9]+)/edit$', JournalEditView.as_view(), name='journal_edit'),
url(r'^journal/(?P<j_id>[0-9]+)/statement/nature$', JournalNatureStatementView.as_view(), name='journal_nature_statement'),
url(r'^journal/(?P<j_id>[0-9]+)/statement/person$', JournalPersonStatementView.as_view(), name='journal_person_statement'),
url(r'^journal/(?P<j_id>[0-9]+)/statement/accounting$', JournalAccountingStatementView.as_view(), name='journal_accounting_statement'),
# Operations # Operations
url(r'^operation/create/(?P<j_id>[0-9]+)$', OperationCreateView.as_view(), name='op_new'), url(r'^operation/create/(?P<j_id>[0-9]+)$', OperationCreateView.as_view(), name='op_new'),
url(r'^operation/(?P<op_id>[0-9]+)$', OperationEditView.as_view(), name='op_edit'), url(r'^operation/(?P<op_id>[0-9]+)$', OperationEditView.as_view(), name='op_edit'),

View File

@ -7,16 +7,18 @@ from django.forms.models import modelform_factory
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.forms import HiddenInput from django.forms import HiddenInput
from django.db import transaction from django.db import transaction
from django.db.models import Sum
from django.conf import settings from django.conf import settings
from django import forms from django import forms
from django.http import HttpResponseRedirect, HttpResponse from django.http import HttpResponseRedirect, HttpResponse
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.conf import settings from django.conf import settings
import collections
from ajax_select.fields import AutoCompleteSelectField, AutoCompleteSelectMultipleField from ajax_select.fields import AutoCompleteSelectField, AutoCompleteSelectMultipleField
from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, CanCreateMixin from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, CanCreateMixin, TabedViewMixin
from core.views.forms import SelectFile, SelectDate from core.views.forms import SelectFile, SelectDate
from accounting.models import BankAccount, ClubAccount, GeneralJournal, Operation, AccountingType, Company, SimplifiedAccountingType, Label from accounting.models import BankAccount, ClubAccount, GeneralJournal, Operation, AccountingType, Company, SimplifiedAccountingType, Label
from counter.models import Counter, Selling, Product from counter.models import Counter, Selling, Product
@ -165,6 +167,34 @@ class ClubAccountDeleteView(CanEditPropMixin, DeleteView): # TODO change Delete
# Journal views # Journal views
class JournalTabsMixin(TabedViewMixin):
def get_tabs_title(self):
return _("Journal")
def get_list_of_tabs(self):
tab_list = []
tab_list.append({
'url': reverse('accounting:journal_details', kwargs={'j_id': self.object.id}),
'slug': 'journal',
'name': _("Journal"),
})
tab_list.append({
'url': reverse('accounting:journal_nature_statement', kwargs={'j_id': self.object.id}),
'slug': 'nature_statement',
'name': _("Statement by nature"),
})
tab_list.append({
'url': reverse('accounting:journal_person_statement', kwargs={'j_id': self.object.id}),
'slug': 'person_statement',
'name': _("Statement by person"),
})
tab_list.append({
'url': reverse('accounting:journal_accounting_statement', kwargs={'j_id': self.object.id}),
'slug': 'accounting_statement',
'name': _("Accounting statement"),
})
return tab_list
class JournalCreateView(CanCreateMixin, CreateView): class JournalCreateView(CanCreateMixin, CreateView):
""" """
Create a general journal Create a general journal
@ -182,13 +212,14 @@ class JournalCreateView(CanCreateMixin, CreateView):
ret['club_account'] = obj.id ret['club_account'] = obj.id
return ret return ret
class JournalDetailView(CanViewMixin, DetailView): class JournalDetailView(JournalTabsMixin, CanViewMixin, DetailView):
""" """
A detail view, listing every operation A detail view, listing every operation
""" """
model = GeneralJournal model = GeneralJournal
pk_url_kwarg = "j_id" pk_url_kwarg = "j_id"
template_name = 'accounting/journal_details.jinja' template_name = 'accounting/journal_details.jinja'
current_tab = 'journal'
class JournalEditView(CanEditMixin, UpdateView): class JournalEditView(CanEditMixin, UpdateView):
""" """
@ -334,8 +365,6 @@ class OperationPDFView(CanViewMixin, DetailView):
pdfmetrics.registerFont(TTFont('DejaVu', 'DejaVuSerif.ttf')) pdfmetrics.registerFont(TTFont('DejaVu', 'DejaVuSerif.ttf'))
self.object = self.get_object() self.object = self.get_object()
amount = self.object.amount amount = self.object.amount
remark = self.object.remark remark = self.object.remark
@ -355,7 +384,6 @@ class OperationPDFView(CanViewMixin, DetailView):
else: else:
target = self.object.target.get_display_name() target = self.object.target.get_display_name()
response = HttpResponse(content_type='application/pdf') response = HttpResponse(content_type='application/pdf')
response['Content-Disposition'] = 'attachment; filename="op-%d(%s_on_%s).pdf"' %(num, ti, club_name) response['Content-Disposition'] = 'attachment; filename="op-%d(%s_on_%s).pdf"' %(num, ti, club_name)
p = canvas.Canvas(response) p = canvas.Canvas(response)
@ -435,8 +463,6 @@ class OperationPDFView(CanViewMixin, DetailView):
t.drawOn(p, 90, 350) t.drawOn(p, 90, 350)
p.drawCentredString(10.5 * cm, 2 * cm, club_name) p.drawCentredString(10.5 * cm, 2 * cm, club_name)
p.drawCentredString(10.5 * cm, 1 * cm, club_address) p.drawCentredString(10.5 * cm, 1 * cm, club_address)
@ -444,6 +470,112 @@ class OperationPDFView(CanViewMixin, DetailView):
p.save() p.save()
return response return response
class JournalNatureStatementView(JournalTabsMixin, CanViewMixin, DetailView):
"""
Display a statement sorted by labels
"""
model = GeneralJournal
pk_url_kwarg = "j_id"
template_name='accounting/journal_statement_nature.jinja'
current_tab='nature_statement'
def statement(self, queryset, movement_type):
ret = collections.OrderedDict()
statement = collections.OrderedDict()
total_sum = 0
for sat in [None] + list(SimplifiedAccountingType.objects.order_by('label').all()):
sum = queryset.filter(accounting_type__movement_type=movement_type,
simpleaccounting_type=sat).aggregate(amount_sum=Sum('amount'))['amount_sum']
if sat: sat = sat.label
else: sat = ""
if sum:
total_sum += sum
statement[sat] = sum
ret[movement_type] = statement
ret[movement_type+"_sum"] = total_sum
return ret
def big_statement(self):
label_list = self.object.operations.order_by('label').values_list('label').distinct()
labels = Label.objects.filter(id__in=label_list).all()
statement = collections.OrderedDict()
gen_statement = collections.OrderedDict()
no_label_statement = collections.OrderedDict()
gen_statement.update(self.statement(self.object.operations.all(), "CREDIT"))
gen_statement.update(self.statement(self.object.operations.all(), "DEBIT"))
statement[_("General statement")] = gen_statement
no_label_statement.update(self.statement(self.object.operations.filter(label=None).all(), "CREDIT"))
no_label_statement.update(self.statement(self.object.operations.filter(label=None).all(), "DEBIT"))
statement[_("No label operations")] = no_label_statement
for l in labels:
l_stmt = collections.OrderedDict()
l_stmt.update(self.statement(self.object.operations.filter(label=l).all(), "CREDIT"))
l_stmt.update(self.statement(self.object.operations.filter(label=l).all(), "DEBIT"))
statement[l] = l_stmt
return statement
def get_context_data(self, **kwargs):
""" Add infos to the context """
kwargs = super(JournalNatureStatementView, self).get_context_data(**kwargs)
kwargs['statement'] = self.big_statement()
return kwargs
class JournalPersonStatementView(JournalTabsMixin, CanViewMixin, DetailView):
"""
Calculate a dictionary with operation target and sum of operations
"""
model = GeneralJournal
pk_url_kwarg = "j_id"
template_name='accounting/journal_statement_person.jinja'
current_tab='person_statement'
def sum_by_target(self, target_id, target_type, movement_type):
return self.object.operations.filter(accounting_type__movement_type=movement_type,
target_id=target_id, target_type=target_type).aggregate(amount_sum=Sum('amount'))['amount_sum']
def statement(self, movement_type):
statement = collections.OrderedDict()
for op in self.object.operations.filter(accounting_type__movement_type=movement_type).order_by('target_type',
'target_id').distinct():
statement[op.target] = self.sum_by_target(op.target_id, op.target_type, movement_type)
return statement
def total(self, movement_type):
return sum(self.statement(movement_type).values())
def get_context_data(self, **kwargs):
""" Add journal to the context """
kwargs = super(JournalPersonStatementView, self).get_context_data(**kwargs)
kwargs['credit_statement'] = self.statement("CREDIT")
kwargs['debit_statement'] = self.statement("DEBIT")
kwargs['total_credit'] = self.total("CREDIT")
kwargs['total_debit'] = self.total("DEBIT")
return kwargs
class JournalAccountingStatementView(JournalTabsMixin, CanViewMixin, DetailView):
"""
Calculate a dictionary with operation type and sum of operations
"""
model = GeneralJournal
pk_url_kwarg = "j_id"
template_name='accounting/journal_statement_accounting.jinja'
current_tab = "accounting_statement"
def statement(self):
statement = collections.OrderedDict()
for at in AccountingType.objects.order_by('code').all():
sum_by_type = self.object.operations.filter(
accounting_type__code__startswith=at.code).aggregate(amount_sum=Sum('amount'))['amount_sum']
if sum_by_type:
statement[at] = sum_by_type
return statement
def get_context_data(self, **kwargs):
""" Add journal to the context """
kwargs = super(JournalAccountingStatementView, self).get_context_data(**kwargs)
kwargs['statement'] = self.statement()
return kwargs
# Company views # Company views
class CompanyListView(CanViewMixin, ListView): class CompanyListView(CanViewMixin, ListView):
@ -477,7 +609,7 @@ class LabelListView(CanViewMixin, DetailView):
pk_url_kwarg = "clubaccount_id" pk_url_kwarg = "clubaccount_id"
template_name = 'accounting/label_list.jinja' template_name = 'accounting/label_list.jinja'
class LabelCreateView(CanEditMixin, CreateView): # FIXME we need to check the rights before creating the object class LabelCreateView(CanCreateMixin, CreateView): # FIXME we need to check the rights before creating the object
model = Label model = Label
form_class = modelform_factory(Label, fields=['name', 'club_account'], widgets={ form_class = modelform_factory(Label, fields=['name', 'club_account'], widgets={
'club_account': HiddenInput, 'club_account': HiddenInput,

View File

@ -295,10 +295,17 @@ Cette page vise à documenter la syntaxe *Markdown* utilisée sur le site.
ca.save() ca.save()
gj = GeneralJournal(name="A16", start_date=date.today(), club_account=ca) gj = GeneralJournal(name="A16", start_date=date.today(), club_account=ca)
gj.save() gj.save()
credit = AccountingType(code=74, label="Someone gave us money", movement_type='CREDIT') credit = AccountingType(code='74', label="Someone gave us money", movement_type='CREDIT')
credit.save() credit.save()
debit = AccountingType(code=607, label="Had to pay a beer", movement_type='DEBIT') debit = AccountingType(code='607', label="Had to pay a beer", movement_type='DEBIT')
debit.save() debit.save()
t = AccountingType(code='602', label="Gros test de malade", movement_type='DEBIT')
t.save()
Operation(journal=gj, date=date.today(), amount=32.3, remark="...", mode="CASH", done=True, accounting_type=t, target_type="USER", target_id=skia.id).save()
t = AccountingType(code='60', label="...", movement_type='DEBIT')
t.save()
Operation(journal=gj, date=date.today(), amount=32.3, remark="...", mode="CASH", done=True, accounting_type=t, target_type="USER", target_id=skia.id).save()
Operation(journal=gj, date=date.today(), amount=46.42, remark="An answer to life...", mode="CASH", done=True, accounting_type=t, target_type="USER", target_id=skia.id).save()
Operation(journal=gj, date=date.today(), amount=666.42, Operation(journal=gj, date=date.today(), amount=666.42,
remark="An answer to life...", mode="CASH", done=True, accounting_type=credit, target_type="USER", remark="An answer to life...", mode="CASH", done=True, accounting_type=credit, target_type="USER",
target_id=skia.id).save() target_id=skia.id).save()

View File

@ -6,7 +6,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-12-21 02:37+0100\n" "POT-Creation-Date: 2016-12-21 05:22+0100\n"
"PO-Revision-Date: 2016-07-18\n" "PO-Revision-Date: 2016-07-18\n"
"Last-Translator: Skia <skia@libskia.so>\n" "Last-Translator: Skia <skia@libskia.so>\n"
"Language-Team: AE info <ae.info@utbm.fr>\n" "Language-Team: AE info <ae.info@utbm.fr>\n"
@ -161,7 +161,7 @@ msgstr "type comptable"
#: accounting/models.py:205 accounting/models.py:299 accounting/models.py:325 #: accounting/models.py:205 accounting/models.py:299 accounting/models.py:325
#: accounting/models.py:348 counter/models.py:282 #: accounting/models.py:348 counter/models.py:282
msgid "label" msgid "label"
msgstr "intitulé" msgstr "étiquette"
#: accounting/models.py:206 #: accounting/models.py:206
msgid "target type" msgid "target type"
@ -244,11 +244,17 @@ msgstr "Un code comptable ne contient que des numéros"
msgid "movement type" msgid "movement type"
msgstr "type de mouvement" msgstr "type de mouvement"
#: accounting/models.py:300 accounting/views.py:389 #: accounting/models.py:300
#: accounting/templates/accounting/journal_statement_nature.jinja:8
#: accounting/templates/accounting/journal_statement_person.jinja:11
#: accounting/views.py:417
msgid "Credit" msgid "Credit"
msgstr "Crédit" msgstr "Crédit"
#: accounting/models.py:300 accounting/views.py:389 #: accounting/models.py:300
#: accounting/templates/accounting/journal_statement_nature.jinja:27
#: accounting/templates/accounting/journal_statement_person.jinja:37
#: accounting/views.py:417
msgid "Debit" msgid "Debit"
msgstr "Débit" msgstr "Débit"
@ -340,7 +346,7 @@ msgstr "Nouveau compte club"
#: accounting/templates/accounting/bank_account_details.jinja:26 #: accounting/templates/accounting/bank_account_details.jinja:26
#: accounting/templates/accounting/bank_account_list.jinja:21 #: accounting/templates/accounting/bank_account_list.jinja:21
#: accounting/templates/accounting/club_account_details.jinja:55 #: accounting/templates/accounting/club_account_details.jinja:55
#: accounting/templates/accounting/journal_details.jinja:72 club/views.py:54 #: accounting/templates/accounting/journal_details.jinja:73 club/views.py:54
#: core/templates/core/file.jinja:38 core/templates/core/page.jinja:31 #: core/templates/core/file.jinja:38 core/templates/core/page.jinja:31
#: core/templates/core/user_tools.jinja:38 core/views/user.py:152 #: core/templates/core/user_tools.jinja:38 core/views/user.py:152
#: counter/templates/counter/cash_summary_list.jinja:53 #: counter/templates/counter/cash_summary_list.jinja:53
@ -413,7 +419,7 @@ msgid "End"
msgstr "Fin" msgstr "Fin"
#: accounting/templates/accounting/club_account_details.jinja:31 #: accounting/templates/accounting/club_account_details.jinja:31
#: accounting/templates/accounting/journal_details.jinja:32 #: accounting/templates/accounting/journal_details.jinja:33
#: core/templates/core/user_account_detail.jinja:53 #: core/templates/core/user_account_detail.jinja:53
#: core/templates/core/user_account_detail.jinja:80 #: core/templates/core/user_account_detail.jinja:80
#: counter/templates/counter/last_ops.jinja:17 #: counter/templates/counter/last_ops.jinja:17
@ -429,17 +435,17 @@ msgid "Closed"
msgstr "Fermé" msgstr "Fermé"
#: accounting/templates/accounting/club_account_details.jinja:34 #: accounting/templates/accounting/club_account_details.jinja:34
#: accounting/templates/accounting/journal_details.jinja:40 #: accounting/templates/accounting/journal_details.jinja:41
msgid "Actions" msgid "Actions"
msgstr "Actions" msgstr "Actions"
#: accounting/templates/accounting/club_account_details.jinja:50 #: accounting/templates/accounting/club_account_details.jinja:50
#: accounting/templates/accounting/journal_details.jinja:60 #: accounting/templates/accounting/journal_details.jinja:61
msgid "Yes" msgid "Yes"
msgstr "Oui" msgstr "Oui"
#: accounting/templates/accounting/club_account_details.jinja:52 #: accounting/templates/accounting/club_account_details.jinja:52
#: accounting/templates/accounting/journal_details.jinja:62 #: accounting/templates/accounting/journal_details.jinja:63
msgid "No" msgid "No"
msgstr "Non" msgstr "Non"
@ -464,10 +470,14 @@ msgstr "Entreprises"
#: accounting/templates/accounting/journal_details.jinja:4 #: accounting/templates/accounting/journal_details.jinja:4
#: accounting/templates/accounting/journal_details.jinja:15 #: accounting/templates/accounting/journal_details.jinja:15
#: accounting/templates/accounting/journal_statement_accounting.jinja:4
#: accounting/templates/accounting/journal_statement_nature.jinja:4
#: accounting/templates/accounting/journal_statement_person.jinja:4
msgid "General journal:" msgid "General journal:"
msgstr "Classeur : " msgstr "Classeur : "
#: accounting/templates/accounting/journal_details.jinja:19 #: accounting/templates/accounting/journal_details.jinja:19
#: accounting/templates/accounting/journal_statement_accounting.jinja:29
#: core/templates/core/user_account.jinja:38 #: core/templates/core/user_account.jinja:38
#: core/templates/core/user_account_detail.jinja:10 #: core/templates/core/user_account_detail.jinja:10
#: counter/templates/counter/counter_click.jinja:32 #: counter/templates/counter/counter_click.jinja:32
@ -475,6 +485,7 @@ msgid "Amount: "
msgstr "Montant : " msgstr "Montant : "
#: accounting/templates/accounting/journal_details.jinja:20 #: accounting/templates/accounting/journal_details.jinja:20
#: accounting/templates/accounting/journal_statement_accounting.jinja:30
msgid "Effective amount: " msgid "Effective amount: "
msgstr "Montant effectif: " msgstr "Montant effectif: "
@ -486,12 +497,12 @@ msgstr "Le classeur est fermé, vous ne pouvez pas créer d'opération"
msgid "New operation" msgid "New operation"
msgstr "Nouvelle opération" msgstr "Nouvelle opération"
#: accounting/templates/accounting/journal_details.jinja:29 #: accounting/templates/accounting/journal_details.jinja:30
#: counter/templates/counter/stats.jinja:14 #: counter/templates/counter/stats.jinja:14
msgid "Nb" msgid "Nb"
msgstr "No" msgstr "No"
#: accounting/templates/accounting/journal_details.jinja:30 #: accounting/templates/accounting/journal_details.jinja:31
#: club/templates/club/club_sellings.jinja:19 #: club/templates/club/club_sellings.jinja:19
#: core/templates/core/user_account_detail.jinja:17 #: core/templates/core/user_account_detail.jinja:17
#: core/templates/core/user_account_detail.jinja:50 #: core/templates/core/user_account_detail.jinja:50
@ -502,50 +513,94 @@ msgstr "No"
msgid "Date" msgid "Date"
msgstr "Date" msgstr "Date"
#: accounting/templates/accounting/journal_details.jinja:31 #: accounting/templates/accounting/journal_details.jinja:32
#: club/templates/club/club_sellings.jinja:23 #: club/templates/club/club_sellings.jinja:23
#: core/templates/core/user_account_detail.jinja:20 #: core/templates/core/user_account_detail.jinja:20
#: counter/templates/counter/last_ops.jinja:42 #: counter/templates/counter/last_ops.jinja:42
msgid "Label" msgid "Label"
msgstr "Étiquette" msgstr "Étiquette"
#: accounting/templates/accounting/journal_details.jinja:33 #: accounting/templates/accounting/journal_details.jinja:34
msgid "Payment mode" msgid "Payment mode"
msgstr "Méthode de paiement" msgstr "Méthode de paiement"
#: accounting/templates/accounting/journal_details.jinja:34 #: accounting/templates/accounting/journal_details.jinja:35
msgid "Target" msgid "Target"
msgstr "Cible" msgstr "Cible"
#: accounting/templates/accounting/journal_details.jinja:35 #: accounting/templates/accounting/journal_details.jinja:36
msgid "Code" msgid "Code"
msgstr "Code" msgstr "Code"
#: accounting/templates/accounting/journal_details.jinja:36 #: accounting/templates/accounting/journal_details.jinja:37
msgid "Nature" msgid "Nature"
msgstr "Nature" msgstr "Nature"
#: accounting/templates/accounting/journal_details.jinja:37 #: accounting/templates/accounting/journal_details.jinja:38
msgid "Done" msgid "Done"
msgstr "Effectué" msgstr "Effectué"
#: accounting/templates/accounting/journal_details.jinja:38 #: accounting/templates/accounting/journal_details.jinja:39
#: counter/templates/counter/cash_summary_list.jinja:37 counter/views.py:710 #: counter/templates/counter/cash_summary_list.jinja:37 counter/views.py:710
msgid "Comment" msgid "Comment"
msgstr "Commentaire" msgstr "Commentaire"
#: accounting/templates/accounting/journal_details.jinja:39 #: accounting/templates/accounting/journal_details.jinja:40
msgid "File" msgid "File"
msgstr "Fichier" msgstr "Fichier"
#: accounting/templates/accounting/journal_details.jinja:41 #: accounting/templates/accounting/journal_details.jinja:42
msgid "PDF" msgid "PDF"
msgstr "PDF" msgstr "PDF"
#: accounting/templates/accounting/journal_details.jinja:75 #: accounting/templates/accounting/journal_details.jinja:76
msgid "Generate" msgid "Generate"
msgstr "Générer" msgstr "Générer"
#: accounting/templates/accounting/journal_statement_accounting.jinja:9
msgid "Accounting statement: "
msgstr "Bilan comptable : "
#: accounting/templates/accounting/journal_statement_accounting.jinja:14
msgid "Operation type"
msgstr "Type d'opération"
#: accounting/templates/accounting/journal_statement_accounting.jinja:15
#: accounting/templates/accounting/journal_statement_nature.jinja:13
#: accounting/templates/accounting/journal_statement_nature.jinja:32
#: accounting/templates/accounting/journal_statement_person.jinja:17
#: accounting/templates/accounting/journal_statement_person.jinja:43
#: counter/templates/counter/invoices_call.jinja:21
msgid "Sum"
msgstr "Somme"
#: accounting/templates/accounting/journal_statement_nature.jinja:12
#: accounting/templates/accounting/journal_statement_nature.jinja:31
msgid "Nature of operation"
msgstr "Nature de l'opération"
#: accounting/templates/accounting/journal_statement_nature.jinja:25
#: accounting/templates/accounting/journal_statement_nature.jinja:44
#: club/templates/club/club_sellings.jinja:14
#: counter/templates/counter/counter_click.jinja:70
#: counter/templates/counter/counter_main.jinja:28
#: eboutic/templates/eboutic/eboutic_main.jinja:34
msgid "Total: "
msgstr "Total : "
#: accounting/templates/accounting/journal_statement_nature.jinja:48
msgid "Statement by nature: "
msgstr "Bilan par nature : "
#: accounting/templates/accounting/journal_statement_person.jinja:9
msgid "Statement by person: "
msgstr "Bilan par personne : "
#: accounting/templates/accounting/journal_statement_person.jinja:16
#: accounting/templates/accounting/journal_statement_person.jinja:42
msgid "Target of the operation"
msgstr "Cible de l'opération"
#: accounting/templates/accounting/label_list.jinja:14 #: accounting/templates/accounting/label_list.jinja:14
msgid "Back to club account" msgid "Back to club account"
msgstr "Retour au compte club" msgstr "Retour au compte club"
@ -573,7 +628,7 @@ msgstr "Sauver"
#: accounting/templates/accounting/refound_account.jinja:4 #: accounting/templates/accounting/refound_account.jinja:4
#: accounting/templates/accounting/refound_account.jinja:8 #: accounting/templates/accounting/refound_account.jinja:8
#: accounting/views.py:548 #: accounting/views.py:688
msgid "Refound account" msgid "Refound account"
msgstr "Remboursement de compte" msgstr "Remboursement de compte"
@ -594,55 +649,75 @@ msgstr "Types simplifiés"
msgid "New simplified type" msgid "New simplified type"
msgstr "Nouveau type simplifié" msgstr "Nouveau type simplifié"
#: accounting/views.py:365 accounting/views.py:371 #: accounting/views.py:172 accounting/views.py:179 accounting/views.py:399
msgid "Operation"
msgstr "Opération"
#: accounting/views.py:371
msgid "Journal" msgid "Journal"
msgstr "Classeur" msgstr "Classeur"
#: accounting/views.py:382 #: accounting/views.py:184
msgid "Statement by nature"
msgstr "Bilan par nature"
#: accounting/views.py:189
msgid "Statement by person"
msgstr "Bilan par personne"
#: accounting/views.py:194
msgid "Accounting statement"
msgstr "Bilan comptable"
#: accounting/views.py:393 accounting/views.py:399
msgid "Operation"
msgstr "Opération"
#: accounting/views.py:410
msgid "Financial proof: " msgid "Financial proof: "
msgstr "Justificatif de libellé : " msgstr "Justificatif de libellé : "
#: accounting/views.py:383 #: accounting/views.py:411
#, python-format #, python-format
msgid "Club: %(club_name)s" msgid "Club: %(club_name)s"
msgstr "Club : %(club_name)s" msgstr "Club : %(club_name)s"
#: accounting/views.py:384 #: accounting/views.py:412
#, python-format #, python-format
msgid "Label: %(op_label)s" msgid "Label: %(op_label)s"
msgstr "Libellé : %(op_label)s" msgstr "Libellé : %(op_label)s"
#: accounting/views.py:385 #: accounting/views.py:413
#, python-format #, python-format
msgid "Date: %(date)s" msgid "Date: %(date)s"
msgstr "Date : %(date)s" msgstr "Date : %(date)s"
#: accounting/views.py:391 #: accounting/views.py:419
#, python-format #, python-format
msgid "Amount: %(amount).2f €" msgid "Amount: %(amount).2f €"
msgstr "Montant : %(amount).2f €" msgstr "Montant : %(amount).2f €"
#: accounting/views.py:403 #: accounting/views.py:431
msgid "Debtor" msgid "Debtor"
msgstr "Débiteur" msgstr "Débiteur"
#: accounting/views.py:403 #: accounting/views.py:431
msgid "Creditor" msgid "Creditor"
msgstr "Créditeur" msgstr "Créditeur"
#: accounting/views.py:405 #: accounting/views.py:433
msgid "Comment:" msgid "Comment:"
msgstr "Commentaire :" msgstr "Commentaire :"
#: accounting/views.py:424 #: accounting/views.py:452
msgid "Signature:" msgid "Signature:"
msgstr "Signature :" msgstr "Signature :"
#: accounting/views.py:510 #: accounting/views.py:504
msgid "General statement"
msgstr "Bilan général"
#: accounting/views.py:507
msgid "No label operations"
msgstr "Opérations sans étiquette"
#: accounting/views.py:650
msgid "Refound this account" msgid "Refound this account"
msgstr "Rembourser ce compte" msgstr "Rembourser ce compte"
@ -790,13 +865,6 @@ msgstr "Quantité : "
msgid "units" msgid "units"
msgstr "unités" msgstr "unités"
#: club/templates/club/club_sellings.jinja:14
#: counter/templates/counter/counter_click.jinja:70
#: counter/templates/counter/counter_main.jinja:28
#: eboutic/templates/eboutic/eboutic_main.jinja:34
msgid "Total: "
msgstr "Total : "
#: club/templates/club/club_sellings.jinja:20 club/views.py:167 #: club/templates/club/club_sellings.jinja:20 club/views.py:167
#: core/templates/core/user_account_detail.jinja:18 #: core/templates/core/user_account_detail.jinja:18
#: core/templates/core/user_account_detail.jinja:51 #: core/templates/core/user_account_detail.jinja:51
@ -2601,10 +2669,6 @@ msgstr "Appels à facture pour %(date)s"
msgid "Choose another month: " msgid "Choose another month: "
msgstr "Choisir un autre mois : " msgstr "Choisir un autre mois : "
#: counter/templates/counter/invoices_call.jinja:21
msgid "Sum"
msgstr "Somme"
#: counter/templates/counter/last_ops.jinja:5 #: counter/templates/counter/last_ops.jinja:5
#: counter/templates/counter/last_ops.jinja:9 #: counter/templates/counter/last_ops.jinja:9
#, python-format #, python-format
@ -3228,5 +3292,3 @@ msgid "You must either choose an existing user or create a new one properly"
msgstr "" msgstr ""
"Vous devez soit choisir un utilisateur existant, soit en créer un proprement" "Vous devez soit choisir un utilisateur existant, soit en créer un proprement"
#~ msgid "Welcome to the new AE's website!"
#~ msgstr "Bienvenue sur le nouveau site de l'AE ! "