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 -*- # -*- coding: utf-8 -*-
from datetime import datetime
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.core.validators import RegexValidator from django.core.validators import RegexValidator
from django.db.models.signals import post_save, post_delete, pre_delete, post_init from django.db.models.signals import post_save, post_delete, pre_delete, post_init
from django.dispatch import receiver from django.dispatch import receiver
from django.utils import timezone from django.utils import timezone
from django.db import models
from django.db import models, connection
from django.core import validators from django.core import validators
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from agent import Transmitter, AbonStruct, TariffStruct, NasFailedResult, NasNetworkError from agent import Transmitter, AbonStruct, TariffStruct, NasFailedResult, NasNetworkError
@ -316,12 +317,28 @@ class InvoiceForPayment(models.Model):
verbose_name_plural = _('Debts') 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" # Log for pay system "AllTime"
class AllTimePayLog(models.Model): class AllTimePayLog(models.Model):
pay_id = models.CharField(max_length=36, unique=True, primary_key=True) pay_id = models.CharField(max_length=36, unique=True, primary_key=True)
date_add = models.DateTimeField(auto_now_add=True) date_add = models.DateTimeField(auto_now_add=True)
summ = models.FloatField(default=0.0) summ = models.FloatField(default=0.0)
objects = AllTimePayLogManager()
def __str__(self): def __str__(self):
return self.pay_id 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> </tbody>
<tfoot> <tfoot>
<tr> <tr>
<td colspan="4" class="btn-group">
<td colspan="4" class="btn-group btn-group-sm">
{% if perms.abonapp.add_abongroup %} {% 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> </a>
{% endif %} {% 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> </td>
</tr> </tr>
</tfoot> </tfoot>

2
abonapp/urls.py

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

26
abonapp/views.py

@ -690,14 +690,14 @@ def abon_ping(request):
else: else:
if type(ping_result) is tuple: if type(ping_result) is tuple:
loses_percent = (ping_result[0] / ping_result[1] if ping_result[1] != 0 else 1) 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: 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: 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 status = True
else: 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: else:
text = '<span class="glyphicon glyphicon-ok"></span> %s' % _('ping ok') + ' ' + str(ping_result) text = '<span class="glyphicon glyphicon-ok"></span> %s' % _('ping ok') + ' ' + str(ping_result)
status = True 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 # API's
def abons(request): def abons(request):

Loading…
Cancel
Save