Commit bdcc0bf6 authored by Skia's avatar Skia

Remake the statement by nature

parent 6d756423
......@@ -6,28 +6,27 @@
{% block content %}
<h2>{% trans %}Accounting bilan: {% endtrans %} {{ object.name }}</h2>
<h3>{% trans %}Accounting bilan: {% endtrans %} {{ object.name }}</h3>
<h3>{% trans %}Credit{% endtrans %}</h3>
<table>
<thead>
<table>
<thead>
<tr>
<td>{% trans %}Type of operations{% endtrans %}</td>
<td>{% trans %}Operation type{% endtrans %}</td>
<td>{% trans %}Sum{% endtrans %}</td>
</tr>
</thead>
<tbody>
{% for key in bilan.keys() %}
<tr>
<td>{{ key }}</td>
<td>{{ bilan[key] }}</td>
</tr>
{% endfor %}
</tbody>
</thead>
<tbody>
{% for k,v in bilan.items() %}
<tr>
<td>{{ k }}</td>
<td>{{ v }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</table>
<p>Total : {{ total_credit }}</p>
<p><strong>{% trans %}Amount: {% endtrans %}</strong>{{ object.amount }}</p>
<p><strong>{% trans %}Effective amount: {% endtrans %}</strong>{{ object.effective_amount }}</p>
{% endblock %}
\ No newline at end of file
{% endblock %}
......@@ -4,52 +4,53 @@
{% trans %}General journal:{% endtrans %} {{ object.name }}
{% endblock %}
{% block content %}
<h2>{% trans %}Nature bilan: {% endtrans %} {{ object.name }}</h2>
<h3>{% trans %}Credit{% endtrans %}</h3>
<table>
<thead>
{% macro display_tables(dict) %}
<h4>{% trans %}Credit{% endtrans %}</h4>
<table>
<thead>
<tr>
<td>{% trans %}Nature of operation{% endtrans %}</td>
<td>{% trans %}Sum{% endtrans %}</td>
</tr>
</thead>
<tbody>
{% for key in bilan_credit.keys() %}
<tr>
<td>{{key}}</td>
<td>{{bilan_credit[key]}}</td>
</tr>
{% endfor %}
</tbody>
</table>
<p>Total : {{total_credit}}</p>
<h3>{% trans %}Debit{% endtrans %}</h3>
<table>
<thead>
</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'] }}
<h4>{% trans %}Debit{% endtrans %}</h4>
<table>
<thead>
<tr>
<td>{% trans %}Nature of operation{% endtrans %}</td>
<td>{% trans %}Sum{% endtrans %}</td>
</tr>
</thead>
<tbody>
{% for key in bilan_debit.keys() %}
<tr>
<td>{{key}}</td>
<td>{{bilan_debit[key]}}</td>
</tr>
{% endfor %}
</tbody>
</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 %}
</table>
{% block content %}
<h2>{% trans %}Statement by nature: {% endtrans %} {{ object.name }}</h2>
<p>Total : {{total_debit}}</p>
{% for k,v in statement.items() %}
<h3>{{ k }}</h3>
{{ display_tables(v) }}
<hr>
{% endfor %}
{% endblock %}
\ No newline at end of file
{% endblock %}
......@@ -7,12 +7,14 @@ 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
......@@ -363,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
......@@ -384,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)
......@@ -396,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),
......@@ -414,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:
......@@ -428,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'),
......@@ -464,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)
......@@ -475,44 +472,50 @@ class OperationPDFView(CanViewMixin, DetailView):
class JournalBilanNatureView(JournalTabsMixin, CanViewMixin, DetailView):
"""
Calculate a dictionary with operation code and sum of operations
Display a statement sorted by labels
"""
model = GeneralJournal
pk_url_kwarg = "j_id"
template_name='accounting/journal_bilan_nature.jinja'
current_tab='bilan_nature'
def sum_by_code(self, code):
from decimal import Decimal
from django.db.models import Sum, DecimalField
return(list((self.object.operations.filter(
accounting_type__code=code).aggregate(Sum('amount'))).values())[0])
def bilan_credit(self):
bilan = {}
for el in AccountingType.objects.filter(movement_type='CREDIT'):
bilan["%s - %s" % (el.code, el.label)] = self.sum_by_code(el.code)
return bilan
def bilan_debit(self):
bilan = {}
for el in AccountingType.objects.filter(movement_type='DEBIT'):
bilan["%s - %s" % (el.code, el.label)] = self.sum_by_code(el.code)
return bilan
def total_credit(self):
return sum(self.bilan_credit().values())
def statement(self, queryset, movement_type):
ret = collections.OrderedDict()
statement = collections.OrderedDict()
total_sum = 0
for at in AccountingType.objects.order_by('label').all():
sum = queryset.filter(accounting_type__movement_type=movement_type,
accounting_type__code__startswith=at.code).aggregate(amount_sum=Sum('amount'))['amount_sum']
if sum:
total_sum += sum
statement[at.label] = sum
ret[movement_type] = statement
ret[movement_type+"_sum"] = total_sum
return ret
def total_debit(self):
return sum(self.bilan_debit().values())
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 journal to the context """
""" Add infos to the context """
kwargs = super(JournalBilanNatureView, self).get_context_data(**kwargs)
kwargs['bilan_credit'] = self.bilan_credit()
kwargs['bilan_debit'] = self.bilan_debit()
kwargs['total_credit'] = self.total_credit()
kwargs['total_debit'] = self.total_debit()
kwargs['statement'] = self.big_statement()
return kwargs
class JournalBilanPersonView(JournalTabsMixin, CanViewMixin, DetailView):
......@@ -530,30 +533,29 @@ class JournalBilanPersonView(JournalTabsMixin, CanViewMixin, DetailView):
return(list((self.object.operations.filter(
target_id=target_id).aggregate(Sum('amount'))).values())[0])
def bilan_credit(self):
bilan = {}
def credit_statement(self):
statement = {}
for el in Operation.objects.filter(accounting_type__movement_type='CREDIT'):
bilan[el.target] = self.sum_by_target(el.target_id)
return bilan
statement[el.target] = self.sum_by_target(el.target_id)
return statement
def bilan_debit(self):
bilan = {}
def debit_statement(self):
statement = {}
for el in Operation.objects.filter(accounting_type__movement_type='DEBIT'):
bilan[el.target] = self.sum_by_target(el.target_id)
return bilan
statement[el.target] = self.sum_by_target(el.target_id)
return statement
def total_credit(self):
return sum(self.bilan_credit().values())
return sum(self.credit_statement().values())
def total_debit(self):
return sum(self.bilan_debit().values())
return sum(self.debit_statement().values())
def get_context_data(self, **kwargs):
""" Add journal to the context """
kwargs = super(JournalBilanPersonView, self).get_context_data(**kwargs)
kwargs['bilan_credit'] = self.bilan_credit()
kwargs['bilan_debit'] = self.bilan_debit()
kwargs['credit_statement'] = self.credit_statement()
kwargs['debit_statement'] = self.debit_statement()
kwargs['total_credit'] = self.total_credit()
kwargs['total_debit'] = self.total_debit()
return kwargs
......@@ -567,38 +569,19 @@ class JournalBilanAccountingView(JournalTabsMixin, CanViewMixin, DetailView):
template_name='accounting/journal_bilan_accounting.jinja'
current_tab = "bilan_accounting"
def recursive_sum(self, max_length):
import collections
from decimal import Decimal
from django.db.models import Sum, DecimalField
bilan = {}
bilan = collections.OrderedDict(bilan)
def statement(self):
statement = collections.OrderedDict()
for at in AccountingType.objects.order_by('code').all():
#bilan[at] = self.object.operations.filter(type__startswith=at.code)
sum_by_type = list((self.object.operations.filter(
accounting_type__code__startswith=at.code).aggregate(Sum('amount'))).values())[0]
sum_by_type = self.object.operations.filter(
accounting_type__code__startswith=at.code).aggregate(amount_sum=Sum('amount'))['amount_sum']
if sum_by_type != 0:
bilan[at] = sum_by_type
return bilan
def bilan(self):
bilan = self.recursive_sum(3)
return bilan
def total_credit(self):
return self.bilan().get('6')#sum(self.bilan().values())
def total_debit(self):
return self.bilan().get('6')#sum(self.bilan().values())
statement[at] = sum_by_type
return statement
def get_context_data(self, **kwargs):
""" Add journal to the context """
kwargs = super(JournalBilanAccountingView, self).get_context_data(**kwargs)
kwargs['bilan'] = self.bilan()
kwargs['total_credit'] = self.total_credit()
kwargs['total_debit'] = self.total_debit()
kwargs['statement'] = self.statement()
return kwargs
# Company views
......@@ -634,7 +617,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,
......
......@@ -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"
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment