Browse Source

Add simple financial report

devel
bashmak 8 years ago
parent
commit
481685785d
  1. 1064
      abonapp/locale/ru/LC_MESSAGES/django.po
  2. 19
      abonapp/models.py
  3. 49
      abonapp/templates/abonapp/fin_report.html
  4. 31
      abonapp/templates/abonapp/group_list.html
  5. 2
      abonapp/urls.py
  6. 26
      abonapp/views.py

1064
abonapp/locale/ru/LC_MESSAGES/django.po
File diff suppressed because it is too large
View File

19
abonapp/models.py

@ -1,10 +1,11 @@
# -*- coding: utf-8 -*-
from datetime import datetime
from django.core.exceptions import ValidationError
from django.core.validators import RegexValidator
from django.db.models.signals import post_save, post_delete, pre_delete, post_init
from django.dispatch import receiver
from django.utils import timezone
from django.db import models
from django.db import models, connection
from django.core import validators
from django.utils.translation import ugettext as _
from agent import Transmitter, AbonStruct, TariffStruct, NasFailedResult, NasNetworkError
@ -316,12 +317,28 @@ class InvoiceForPayment(models.Model):
verbose_name_plural = _('Debts')
class AllTimePayLogManager(models.Manager):
def by_days(self):
cur = connection.cursor()
cur.execute(r'SELECT SUM(summ) as alsum, DATE_FORMAT(date_add, "%Y-%m-%d") AS pay_date FROM all_time_pay_log '
r'GROUP BY DATE_FORMAT(date_add, "%Y-%m-%d")')
while True:
r = cur.fetchone()
if r is None: break
summ, dat = r
print(summ, dat)
yield {'summ': summ, 'pay_date': datetime.strptime(dat, '%Y-%m-%d')}
# Log for pay system "AllTime"
class AllTimePayLog(models.Model):
pay_id = models.CharField(max_length=36, unique=True, primary_key=True)
date_add = models.DateTimeField(auto_now_add=True)
summ = models.FloatField(default=0.0)
objects = AllTimePayLogManager()
def __str__(self):
return self.pay_id

49
abonapp/templates/abonapp/fin_report.html

@ -0,0 +1,49 @@
{% extends 'base.html' %}
{% load i18n %}
{% block main %}
<ol class="breadcrumb">
<li><span class="glyphicon glyphicon-home"></span></li>
<li class="active">{% trans 'Fin report' %}</li>
</ol>
{% include 'message_block.html' %}
<h3>{% trans 'Money by days' %}</h3>
<div class="table-responsive">
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>{% trans 'Sum' %}</th>
<th>{% trans 'Date' %}</th>
</tr>
</thead>
<tbody>
{% for l in logs %}
<tr>
<td>{{ l.summ }}</td>
<td>{{ l.pay_date|date:"d E Y" }}</td>
</tr>
{% empty %}
<tr>
<td colspan="2">{% trans 'Pays not found' %}</td>
</tr>
{% endfor %}
</tbody>
<thead>
<tr>
<td colspan="2">
<a href="{% url 'abonapp:fin_report' %}?f=csv" target="_blank" class="btn btn-sm btn-default">
<span class="glyphicon glyphicon-download"></span> <span class="hidden-xs">{% trans 'Export to csv' %}</span>
</a>
</td>
</tr>
</thead>
</table>
</div>
{# {% include 'toolbar_page.html' with pag=logs %} #}
{% endblock %}

31
abonapp/templates/abonapp/group_list.html

@ -57,22 +57,27 @@
</tbody>
<tfoot>
<tr>
<td colspan="4" class="btn-group">
<td colspan="4" class="btn-group btn-group-sm">
{% if perms.abonapp.add_abongroup %}
<a href="{% url 'abonapp:add_group' %}" class="btn btn-success btn-sm">
<span class="glyphicon glyphicon-plus"></span> <span class="hidden-xs">{% trans 'Add group' %}</span>
<a href="{% url 'abonapp:add_group' %}" class="btn btn-success">
<span class="glyphicon glyphicon-plus"></span> <span class="hidden-xs">{% trans 'Add group' %}</span>
</a>
{% endif %}
{% if perms.abonapp.can_view_abonlog %}
<a href="{% url 'abonapp:log' %}" class="btn btn-default btn-sm">
<span class="glyphicon glyphicon-record"></span> <span class="hidden-xs">{% trans 'Subscribers actions' %}</span>
</a>
{% endif %}
{% if perms.abonapp.can_view_invoiceforpayment %}
<a href="{% url 'abonapp:debtors' %}" class="btn btn-default btn-sm">
<span class="glyphicon glyphicon-exclamation-sign"></span> <span class="hidden-xs">{% trans 'List of debtors' %}</span>
</a>
{% endif %}
{% if perms.abonapp.can_view_abonlog %}
<a href="{% url 'abonapp:log' %}" class="btn btn-default">
<span class="glyphicon glyphicon-record"></span> <span class="hidden-xs">{% trans 'Subscribers actions' %}</span>
</a>
{% endif %}
{% if perms.abonapp.can_view_invoiceforpayment %}
<a href="{% url 'abonapp:debtors' %}" class="btn btn-default">
<span class="glyphicon glyphicon-exclamation-sign"></span> <span class="hidden-xs">{% trans 'List of debtors' %}</span>
</a>
{% endif %}
{% if request.user.is_superuser %}
<a href="{% url 'abonapp:fin_report' %}" class="btn btn-default">
<span class="glyphicon glyphicon-usd"></span> <span class="hidden-xs">{% trans 'Fin report' %}</span>
</a>
{% endif %}
</td>
</tr>
</tfoot>

2
abonapp/urls.py

@ -9,6 +9,8 @@ urlpatterns = [
url(r'^addgroup$', views.addgroup, name='add_group'),
url(r'^delgroup', views.delgroup, name='del_group'),
url(r'^fin_report$', views.fin_report, name='fin_report'),
url(r'^(?P<gid>\d+)/', include('abonapp.urls_abon')),
url(r'^log$', views.log_page, name='log'),

26
abonapp/views.py

@ -690,14 +690,14 @@ def abon_ping(request):
else:
if type(ping_result) is tuple:
loses_percent = (ping_result[0] / ping_result[1] if ping_result[1] != 0 else 1)
print(ping_result, loses_percent)
ping_result = {'all':ping_result[0], 'return': ping_result[1]}
if loses_percent > 1.0:
text = '<span class="glyphicon glyphicon-exclamation-sign"></span> %s' % _('IP Conflict! %d/%d results') % ping_result
text = '<span class="glyphicon glyphicon-exclamation-sign"></span> %s' % _('IP Conflict! %(all)d/%(return)d results') % ping_result
elif loses_percent > 0.5:
text = '<span class="glyphicon glyphicon-ok"></span> %s' % _('ok ping, %d/%d loses') % ping_result
text = '<span class="glyphicon glyphicon-ok"></span> %s' % _('ok ping, %(all)d/%(return)d loses') % ping_result
status = True
else:
text = '<span class="glyphicon glyphicon-exclamation-sign"></span> %s' % _('no ping, %d/%d loses') % ping_result
text = '<span class="glyphicon glyphicon-exclamation-sign"></span> %s' % _('no ping, %(all)d/%(return)d loses') % ping_result
else:
text = '<span class="glyphicon glyphicon-ok"></span> %s' % _('ping ok') + ' ' + str(ping_result)
status = True
@ -907,6 +907,24 @@ def reset_ip(request, gid, uid):
@login_required
@mydefs.only_admins
def fin_report(request):
q = models.AllTimePayLog.objects.by_days()
res_format = request.GET.get('f')
if res_format == 'csv':
import csv
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="report.csv"'
writer = csv.writer(response, quoting=csv.QUOTE_NONNUMERIC)
for row in q:
writer.writerow((row['summ'], row['pay_date'].strftime('%Y-%m-%d')))
return response
return render(request, 'abonapp/fin_report.html', {
'logs': q
})
# API's
def abons(request):

Loading…
Cancel
Save