diff --git a/accounting/templates/accounting/journal_details.jinja b/accounting/templates/accounting/journal_details.jinja
index 37b0741f..425ae36b 100644
--- a/accounting/templates/accounting/journal_details.jinja
+++ b/accounting/templates/accounting/journal_details.jinja
@@ -22,6 +22,7 @@
{% trans %}Journal is closed, you can not create operation{% endtrans %}
{% else %}
{% trans %}New operation{% endtrans %}
+
{% endif %}
diff --git a/accounting/templates/accounting/journal_statement_accounting.jinja b/accounting/templates/accounting/journal_statement_accounting.jinja
new file mode 100644
index 00000000..8e6cd8fc
--- /dev/null
+++ b/accounting/templates/accounting/journal_statement_accounting.jinja
@@ -0,0 +1,32 @@
+{% extends "core/base.jinja" %}
+
+{% block title %}
+{% trans %}General journal:{% endtrans %} {{ object.name }}
+{% endblock %}
+
+
+{% block content %}
+{% trans %}Accounting statement: {% endtrans %} {{ object.name }}
+
+
+
+
+ {% trans %}Operation type{% endtrans %} |
+ {% trans %}Sum{% endtrans %} |
+
+
+
+ {% for k,v in statement.items() %}
+
+ {{ k }} |
+ {{ v }} |
+
+ {% endfor %}
+
+
+
+
+{% trans %}Amount: {% endtrans %}{{ object.amount }} €
+{% trans %}Effective amount: {% endtrans %}{{ object.effective_amount }} €
+
+{% endblock %}
diff --git a/accounting/templates/accounting/journal_statement_nature.jinja b/accounting/templates/accounting/journal_statement_nature.jinja
new file mode 100644
index 00000000..44fa33e2
--- /dev/null
+++ b/accounting/templates/accounting/journal_statement_nature.jinja
@@ -0,0 +1,56 @@
+{% extends "core/base.jinja" %}
+
+{% block title %}
+{% trans %}General journal:{% endtrans %} {{ object.name }}
+{% endblock %}
+
+{% macro display_tables(dict) %}
+{% trans %}Credit{% endtrans %}
+
+
+
+ {% trans %}Nature of operation{% endtrans %} |
+ {% trans %}Sum{% endtrans %} |
+
+
+
+ {% for k,v in dict['CREDIT'].items() %}
+
+ {{ k }} |
+ {{ v }} |
+
+ {% endfor %}
+
+
+{% trans %}Total: {% endtrans %}{{ dict['CREDIT_sum'] }}
+
+{% trans %}Debit{% endtrans %}
+
+
+
+ {% trans %}Nature of operation{% endtrans %} |
+ {% trans %}Sum{% endtrans %} |
+
+
+
+ {% for k,v in dict['DEBIT'].items() %}
+
+ {{ k }} |
+ {{ v }} |
+
+ {% endfor %}
+
+
+{% trans %}Total: {% endtrans %}{{ dict['DEBIT_sum'] }}
+{% endmacro %}
+
+{% block content %}
+{% trans %}Statement by nature: {% endtrans %} {{ object.name }}
+
+{% for k,v in statement.items() %}
+ {{ k }} : {{ v['CREDIT_sum'] - v['DEBIT_sum'] }}
+{{ display_tables(v) }}
+
+{% endfor %}
+
+{% endblock %}
diff --git a/accounting/templates/accounting/journal_statement_person.jinja b/accounting/templates/accounting/journal_statement_person.jinja
new file mode 100644
index 00000000..3c71f900
--- /dev/null
+++ b/accounting/templates/accounting/journal_statement_person.jinja
@@ -0,0 +1,67 @@
+{% extends "core/base.jinja" %}
+
+{% block title %}
+{% trans %}General journal:{% endtrans %} {{ object.name }}
+{% endblock %}
+
+
+{% block content %}
+{% trans %}Statement by person: {% endtrans %} {{ object.name }}
+
+{% trans %}Credit{% endtrans %}
+
+
+
+
+ {% trans %}Target of the operation{% endtrans %} |
+ {% trans %}Sum{% endtrans %} |
+
+
+
+ {% for key in credit_statement.keys() %}
+
+ {% if key.target_type == "OTHER" %}
+ {{ o.target_label }} |
+ {% elif key %}
+ {{ key.get_display_name() }} |
+ {% else %}
+ |
+ {% endif %}
+ {{ credit_statement[key] }} |
+
+ {% endfor %}
+
+
+
+
+Total : {{ total_credit }}
+
+{% trans %}Debit{% endtrans %}
+
+
+
+
+ {% trans %}Target of the operation{% endtrans %} |
+ {% trans %}Sum{% endtrans %} |
+
+
+
+ {% for key in debit_statement.keys() %}
+
+ {% if key.target_type == "OTHER" %}
+ {{ o.target_label }} |
+ {% elif key %}
+ {{ key.get_display_name() }} |
+ {% else %}
+ |
+ {% endif %}
+ {{ debit_statement[key] }} |
+
+ {% endfor %}
+
+
+
+
+Total : {{ total_debit }}
+
+{% endblock %}
diff --git a/accounting/urls.py b/accounting/urls.py
index d0d4e76a..3255cb9d 100644
--- a/accounting/urls.py
+++ b/accounting/urls.py
@@ -26,6 +26,10 @@ urlpatterns = [
url(r'^journal/create$', JournalCreateView.as_view(), name='journal_new'),
url(r'^journal/(?P[0-9]+)$', JournalDetailView.as_view(), name='journal_details'),
url(r'^journal/(?P[0-9]+)/edit$', JournalEditView.as_view(), name='journal_edit'),
+ url(r'^journal/(?P[0-9]+)/statement/nature$', JournalNatureStatementView.as_view(), name='journal_nature_statement'),
+ url(r'^journal/(?P[0-9]+)/statement/person$', JournalPersonStatementView.as_view(), name='journal_person_statement'),
+ url(r'^journal/(?P[0-9]+)/statement/accounting$', JournalAccountingStatementView.as_view(), name='journal_accounting_statement'),
+
# Operations
url(r'^operation/create/(?P[0-9]+)$', OperationCreateView.as_view(), name='op_new'),
url(r'^operation/(?P[0-9]+)$', OperationEditView.as_view(), name='op_edit'),
diff --git a/accounting/views.py b/accounting/views.py
index fb390585..6984ec24 100644
--- a/accounting/views.py
+++ b/accounting/views.py
@@ -7,16 +7,18 @@ from django.forms.models import modelform_factory
from django.core.exceptions import PermissionDenied
from django.forms import HiddenInput
from django.db import transaction
+from django.db.models import Sum
from django.conf import settings
from django import forms
from django.http import HttpResponseRedirect, HttpResponse
from django.utils.translation import ugettext as _
from django.conf import settings
+import collections
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 accounting.models import BankAccount, ClubAccount, GeneralJournal, Operation, AccountingType, Company, SimplifiedAccountingType, Label
from counter.models import Counter, Selling, Product
@@ -165,6 +167,34 @@ class ClubAccountDeleteView(CanEditPropMixin, DeleteView): # TODO change Delete
# 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):
"""
Create a general journal
@@ -182,13 +212,14 @@ class JournalCreateView(CanCreateMixin, CreateView):
ret['club_account'] = obj.id
return ret
-class JournalDetailView(CanViewMixin, DetailView):
+class JournalDetailView(JournalTabsMixin, CanViewMixin, DetailView):
"""
A detail view, listing every operation
"""
model = GeneralJournal
pk_url_kwarg = "j_id"
template_name = 'accounting/journal_details.jinja'
+ current_tab = 'journal'
class JournalEditView(CanEditMixin, UpdateView):
"""
@@ -334,8 +365,6 @@ class OperationPDFView(CanViewMixin, DetailView):
pdfmetrics.registerFont(TTFont('DejaVu', 'DejaVuSerif.ttf'))
-
-
self.object = self.get_object()
amount = self.object.amount
remark = self.object.remark
@@ -355,7 +384,6 @@ class OperationPDFView(CanViewMixin, DetailView):
else:
target = self.object.target.get_display_name()
-
response = HttpResponse(content_type='application/pdf')
response['Content-Disposition'] = 'attachment; filename="op-%d(%s_on_%s).pdf"' %(num, ti, club_name)
p = canvas.Canvas(response)
@@ -367,11 +395,11 @@ class OperationPDFView(CanViewMixin, DetailView):
im = ImageReader("core/static/core/img/logo.jpg")
iw, ih = im.getSize()
p.drawImage(im, 40, height - 50, width=iw/2, height=ih/2)
-
+
labelStr = [["%s %s - %s %s" % (_("Journal"), ti, _("Operation"), num)]]
label = Table(labelStr, colWidths=[150], rowHeights=[20])
-
+
label.setStyle(TableStyle([
('ALIGN',(0,0),(-1,-1),'CENTER'),
('BOX', (0,0), (-1,-1), 0.25, colors.black),
@@ -385,11 +413,11 @@ class OperationPDFView(CanViewMixin, DetailView):
p.drawString(90, height - 190, _("Date: %(date)s") % {"date": date})
data = []
-
+
data += [["%s" % (_("Credit").upper() if nature == 'CREDIT' else _("Debit").upper())]]
data += [[_("Amount: %(amount).2f €") % {"amount": amount}]]
-
+
payment_mode = ""
for m in settings.SITH_ACCOUNTING_PAYMENT_METHOD:
if m[0] == mode:
@@ -399,11 +427,11 @@ class OperationPDFView(CanViewMixin, DetailView):
payment_mode += " %s\n" %(m[1])
data += [[payment_mode]]
-
+
data += [["%s : %s" % (_("Debtor") if nature == 'CREDIT' else _("Creditor"), target), ""]]
data += [["%s \n%s" % (_("Comment:"), remark)]]
-
+
t = Table(data, colWidths=[(width-90*2)/2]*2, rowHeights=[20, 20, 70, 20, 80])
t.setStyle(TableStyle([
('ALIGN',(0,0),(-1,-1),'CENTER'),
@@ -435,8 +463,6 @@ class OperationPDFView(CanViewMixin, DetailView):
t.drawOn(p, 90, 350)
-
-
p.drawCentredString(10.5 * cm, 2 * cm, club_name)
p.drawCentredString(10.5 * cm, 1 * cm, club_address)
@@ -444,6 +470,112 @@ class OperationPDFView(CanViewMixin, DetailView):
p.save()
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
class CompanyListView(CanViewMixin, ListView):
@@ -477,7 +609,7 @@ class LabelListView(CanViewMixin, DetailView):
pk_url_kwarg = "clubaccount_id"
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
form_class = modelform_factory(Label, fields=['name', 'club_account'], widgets={
'club_account': HiddenInput,
diff --git a/core/management/commands/populate.py b/core/management/commands/populate.py
index 673d3154..db81f0c1 100644
--- a/core/management/commands/populate.py
+++ b/core/management/commands/populate.py
@@ -295,10 +295,17 @@ Cette page vise à documenter la syntaxe *Markdown* utilisée sur le site.
ca.save()
gj = GeneralJournal(name="A16", start_date=date.today(), club_account=ca)
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()
- 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()
+ 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,
remark="An answer to life...", mode="CASH", done=True, accounting_type=credit, target_type="USER",
target_id=skia.id).save()
diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po
index fcdf8fd4..065ffb43 100644
--- a/locale/fr/LC_MESSAGES/django.po
+++ b/locale/fr/LC_MESSAGES/django.po
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"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"
"Last-Translator: Skia \n"
"Language-Team: AE info \n"
@@ -161,7 +161,7 @@ msgstr "type comptable"
#: accounting/models.py:205 accounting/models.py:299 accounting/models.py:325
#: accounting/models.py:348 counter/models.py:282
msgid "label"
-msgstr "intitulé"
+msgstr "étiquette"
#: accounting/models.py:206
msgid "target type"
@@ -244,11 +244,17 @@ msgstr "Un code comptable ne contient que des numéros"
msgid "movement type"
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"
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"
msgstr "Débit"
@@ -340,7 +346,7 @@ msgstr "Nouveau compte club"
#: accounting/templates/accounting/bank_account_details.jinja:26
#: accounting/templates/accounting/bank_account_list.jinja:21
#: 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/user_tools.jinja:38 core/views/user.py:152
#: counter/templates/counter/cash_summary_list.jinja:53
@@ -413,7 +419,7 @@ msgid "End"
msgstr "Fin"
#: 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:80
#: counter/templates/counter/last_ops.jinja:17
@@ -429,17 +435,17 @@ msgid "Closed"
msgstr "Fermé"
#: accounting/templates/accounting/club_account_details.jinja:34
-#: accounting/templates/accounting/journal_details.jinja:40
+#: accounting/templates/accounting/journal_details.jinja:41
msgid "Actions"
msgstr "Actions"
#: accounting/templates/accounting/club_account_details.jinja:50
-#: accounting/templates/accounting/journal_details.jinja:60
+#: accounting/templates/accounting/journal_details.jinja:61
msgid "Yes"
msgstr "Oui"
#: accounting/templates/accounting/club_account_details.jinja:52
-#: accounting/templates/accounting/journal_details.jinja:62
+#: accounting/templates/accounting/journal_details.jinja:63
msgid "No"
msgstr "Non"
@@ -464,10 +470,14 @@ msgstr "Entreprises"
#: accounting/templates/accounting/journal_details.jinja:4
#: 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:"
msgstr "Classeur : "
#: 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_detail.jinja:10
#: counter/templates/counter/counter_click.jinja:32
@@ -475,6 +485,7 @@ msgid "Amount: "
msgstr "Montant : "
#: accounting/templates/accounting/journal_details.jinja:20
+#: accounting/templates/accounting/journal_statement_accounting.jinja:30
msgid "Effective amount: "
msgstr "Montant effectif: "
@@ -486,12 +497,12 @@ msgstr "Le classeur est fermé, vous ne pouvez pas créer d'opération"
msgid "New operation"
msgstr "Nouvelle opération"
-#: accounting/templates/accounting/journal_details.jinja:29
+#: accounting/templates/accounting/journal_details.jinja:30
#: counter/templates/counter/stats.jinja:14
msgid "Nb"
msgstr "No"
-#: accounting/templates/accounting/journal_details.jinja:30
+#: accounting/templates/accounting/journal_details.jinja:31
#: club/templates/club/club_sellings.jinja:19
#: core/templates/core/user_account_detail.jinja:17
#: core/templates/core/user_account_detail.jinja:50
@@ -502,50 +513,94 @@ msgstr "No"
msgid "Date"
msgstr "Date"
-#: accounting/templates/accounting/journal_details.jinja:31
+#: accounting/templates/accounting/journal_details.jinja:32
#: club/templates/club/club_sellings.jinja:23
#: core/templates/core/user_account_detail.jinja:20
#: counter/templates/counter/last_ops.jinja:42
msgid "Label"
msgstr "Étiquette"
-#: accounting/templates/accounting/journal_details.jinja:33
+#: accounting/templates/accounting/journal_details.jinja:34
msgid "Payment mode"
msgstr "Méthode de paiement"
-#: accounting/templates/accounting/journal_details.jinja:34
+#: accounting/templates/accounting/journal_details.jinja:35
msgid "Target"
msgstr "Cible"
-#: accounting/templates/accounting/journal_details.jinja:35
+#: accounting/templates/accounting/journal_details.jinja:36
msgid "Code"
msgstr "Code"
-#: accounting/templates/accounting/journal_details.jinja:36
+#: accounting/templates/accounting/journal_details.jinja:37
msgid "Nature"
msgstr "Nature"
-#: accounting/templates/accounting/journal_details.jinja:37
+#: accounting/templates/accounting/journal_details.jinja:38
msgid "Done"
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
msgid "Comment"
msgstr "Commentaire"
-#: accounting/templates/accounting/journal_details.jinja:39
+#: accounting/templates/accounting/journal_details.jinja:40
msgid "File"
msgstr "Fichier"
-#: accounting/templates/accounting/journal_details.jinja:41
+#: accounting/templates/accounting/journal_details.jinja:42
msgid "PDF"
msgstr "PDF"
-#: accounting/templates/accounting/journal_details.jinja:75
+#: accounting/templates/accounting/journal_details.jinja:76
msgid "Generate"
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
msgid "Back to club account"
msgstr "Retour au compte club"
@@ -573,7 +628,7 @@ msgstr "Sauver"
#: accounting/templates/accounting/refound_account.jinja:4
#: accounting/templates/accounting/refound_account.jinja:8
-#: accounting/views.py:548
+#: accounting/views.py:688
msgid "Refound account"
msgstr "Remboursement de compte"
@@ -594,55 +649,75 @@ msgstr "Types simplifiés"
msgid "New simplified type"
msgstr "Nouveau type simplifié"
-#: accounting/views.py:365 accounting/views.py:371
-msgid "Operation"
-msgstr "Opération"
-
-#: accounting/views.py:371
+#: accounting/views.py:172 accounting/views.py:179 accounting/views.py:399
msgid "Journal"
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: "
msgstr "Justificatif de libellé : "
-#: accounting/views.py:383
+#: accounting/views.py:411
#, python-format
msgid "Club: %(club_name)s"
msgstr "Club : %(club_name)s"
-#: accounting/views.py:384
+#: accounting/views.py:412
#, python-format
msgid "Label: %(op_label)s"
msgstr "Libellé : %(op_label)s"
-#: accounting/views.py:385
+#: accounting/views.py:413
#, python-format
msgid "Date: %(date)s"
msgstr "Date : %(date)s"
-#: accounting/views.py:391
+#: accounting/views.py:419
#, python-format
msgid "Amount: %(amount).2f €"
msgstr "Montant : %(amount).2f €"
-#: accounting/views.py:403
+#: accounting/views.py:431
msgid "Debtor"
msgstr "Débiteur"
-#: accounting/views.py:403
+#: accounting/views.py:431
msgid "Creditor"
msgstr "Créditeur"
-#: accounting/views.py:405
+#: accounting/views.py:433
msgid "Comment:"
msgstr "Commentaire :"
-#: accounting/views.py:424
+#: accounting/views.py:452
msgid "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"
msgstr "Rembourser ce compte"
@@ -790,13 +865,6 @@ msgstr "Quantité : "
msgid "units"
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
#: core/templates/core/user_account_detail.jinja:18
#: core/templates/core/user_account_detail.jinja:51
@@ -2601,10 +2669,6 @@ msgstr "Appels à facture pour %(date)s"
msgid "Choose another month: "
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:9
#, python-format
@@ -3228,5 +3292,3 @@ msgid "You must either choose an existing user or create a new one properly"
msgstr ""
"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 ! "