mirror of
https://github.com/ae-utbm/sith.git
synced 2024-11-22 14:13:21 +00:00
Merge branch 'bilanTresorerie' into 'master'
Bilan tresorerie See merge request !36
This commit is contained in:
commit
f79ffbee7d
@ -22,6 +22,7 @@
|
||||
<p>{% trans %}Journal is closed, you can not create operation{% endtrans %}</p>
|
||||
{% else %}
|
||||
<p><a href="{{ url('accounting:op_new', j_id=object.id) }}">{% trans %}New operation{% endtrans %}</a></p>
|
||||
</br>
|
||||
{% endif %}
|
||||
<table>
|
||||
<thead>
|
||||
|
@ -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 %}
|
@ -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 %}
|
@ -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 %}
|
@ -26,6 +26,10 @@ urlpatterns = [
|
||||
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]+)/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
|
||||
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'),
|
||||
|
@ -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,
|
||||
|
@ -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()
|
||||
|
@ -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 <skia@libskia.so>\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: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 ! "
|
||||
|
Loading…
Reference in New Issue
Block a user