Skip to content

Commit

Permalink
Export
Browse files Browse the repository at this point in the history
  • Loading branch information
the-glu committed Jan 18, 2014
1 parent 98f1aff commit 4e5d176
Show file tree
Hide file tree
Showing 11 changed files with 388 additions and 13 deletions.
85 changes: 85 additions & 0 deletions server/configs/migrations/0004_auto__add_field_config_group.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models


class Migration(SchemaMigration):

def forwards(self, orm):
# Adding field 'Config.group'
db.add_column(u'configs_config', 'group',
self.gf('django.db.models.fields.CharField')(max_length=255, null=True, blank=True),
keep_default=False)


def backwards(self, orm):
# Deleting field 'Config.group'
db.delete_column(u'configs_config', 'group')


models = {
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'auth.user': {
'Meta': {'object_name': 'User'},
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
u'configs.config': {
'Meta': {'object_name': 'Config'},
'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'admin_enable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'allowed_users': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.User']", 'symmetrical': 'False', 'blank': 'True'}),
'group': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'key_api': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'key_ipn': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'key_request': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'test_mode': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'url_back_err': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
'url_back_ok': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
'url_ipn': ('django.db.models.fields.URLField', [], {'max_length': '200'})
},
u'configs.configlogs': {
'Meta': {'object_name': 'ConfigLogs'},
'config': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['configs.Config']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'text': ('django.db.models.fields.TextField', [], {}),
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}),
'when': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
}
}

complete_apps = ['configs']
5 changes: 3 additions & 2 deletions server/configs/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ class Config(models.Model):

allowed_users = models.ManyToManyField(User, blank=True)

group = models.CharField(max_length=255, help_text=_('To group configs in summary'), blank=True, null=True)

def __unicode__(self):
bonus = u''

Expand All @@ -51,7 +53,7 @@ def generate_diff(self, other):
"""Generate diff from this objet an another one (for logs)"""
retour = u'\n\n'

for (prop, prop_name) in (('name', 'Name'), ('active', 'Active'), ('admin_enable', 'Admin enable'), ('test_mode', 'Test mode'), ('url_ipn', 'URL Ipn'), ('url_back_ok', 'Return URL for success'), ('url_back_err', 'Return URL for error')):
for (prop, prop_name) in (('name', 'Name'), ('active', 'Active'), ('admin_enable', 'Admin enable'), ('test_mode', 'Test mode'), ('url_ipn', 'URL Ipn'), ('url_back_ok', 'Return URL for success'), ('url_back_err', 'Return URL for error'), ('group', 'Group')):
if not other.pk or getattr(self, prop) != getattr(other, prop):
retour += unicode(prop_name) + u'=' + unicode(getattr(self, prop))

Expand All @@ -78,7 +80,6 @@ def gen_key(self):

h = hashlib.sha512()


for i in range(2):
h.update(str(os.random()))
h.update(str(uuid.uuid4()))
Expand Down
7 changes: 7 additions & 0 deletions server/configs/templates/configs/configs/show.html
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,13 @@ <h3 class="panel-title">{% trans "Details of a config" %}</h3>
<p class="form-control-static">{{object.name}}</p>
</div>

{% if object.group %}
<div class="form-group">
<label>{% trans "Group" %}</label>
<p class="form-control-static">{{object.group}}</p>
</div>
{% endif %}

<div class="form-group">
<label>{% trans "URL Ipn" %}</label>
<p class="form-control-static">{{object.url_ipn}}</p>
Expand Down
6 changes: 3 additions & 3 deletions server/configs/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def edit(request, pk):
"""Edit or create a config"""

try:
config = Config.configs.get(pk=pk)
config = Config.objects.get(pk=pk)
create = False
except:
config = Config()
Expand All @@ -56,14 +56,14 @@ def edit(request, pk):
config = form.save(commit=False)

if not create:
ConfigLogs(config=config, user=request.user, text=_('Config has been updated: ') + config.generate_diff(Config.configs.get(pk=pk))).save()
ConfigLogs(config=config, user=request.user, text=_('Config has been updated: ') + config.generate_diff(Config.objects.get(pk=pk))).save()

config.save() # To use allowed_users

config.allowed_users.clear()

for u in request.POST.get('allowed_users', []):
config.allowed_users.add(User.configs.get(pk=u))
config.allowed_users.add(User.objects.get(pk=u))
config.allowed_users.add(request.user)
config.save()

Expand Down
1 change: 1 addition & 0 deletions server/data/pip-reqs.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@ celery
django-celery
python-dateutil
PicklingTools
reportlab
15 changes: 15 additions & 0 deletions server/export/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,18 @@ def __init__(self, user, *args, **kwargs):
self.fields['config'].queryset = Config.objects.filter(allowed_users=user).order_by('name').all()
else:
self.fields['config'].queryset = Config.objects.order_by('name').all()


class SummaryForm(forms.Form):

RANGE_CHOICES = [
('thismonth', _('This month')),
('previousmonth', _('The previous month')),
('sincemonth', _('Since a month')),
('thisyear', _('This year')),
('sinceyear', _('Since a year')),
]

include_test = forms.BooleanField(help_text=_('Export transactions from all config'), required=False)

range = forms.ChoiceField(choices=RANGE_CHOICES)
47 changes: 47 additions & 0 deletions server/export/templates/export/summary.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
{% extends "base.html" %}
{% load i18n %}
{% load bootstrap3 %}

{% block title %}{{block.super}} :: {% trans "Summary" %}{% endblock %}

{% block content %}

<script type="text/javascript">$('#nav-summary').addClass('active');</script>

<h2>{% trans "Export of data" %}</h2>

<ol class="breadcrumb">
<li><a href="{% url 'main.views.home' %}"><i class="fa fa-home"></i> {% trans "Home" %}</a></li>

<li class="active"><i class="fa fa-ticket"></i> {% trans "Summary form" %}</li>

</ol>

<div class="row-fluid">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">{% trans "Summary parameters" %}</h3>
</div>
<div class="panel-body">

<form action="" method="POST">
{% csrf_token %}

{% bootstrap_form form %}

<div class="row-fluid box-section" style="text-align: right;">
<input type="submit" class="btn btn-primary" value="{% trans "Save" %}">
</div>

</form>
</div>
</div>

</div>

<script type="text/javascript">
$('#id_range').select2();
</script>


{% endblock %}
99 changes: 99 additions & 0 deletions server/export/templates/export/summary_pdf.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
{% load i18n %}<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>PolyBanking - {% blocktrans with start_date=start_date|date:"r" end_date=end_date|date:"r" %}Summary from {{start_date}} to {{end_date}}{% endblocktrans %}</title>
<style type="text/css">
@page {
size: {{ pagesize }};
margin: 1cm;
@frame footer {
-pdf-frame-content: footerContent;
bottom: 0cm;
margin-left: 9cm;
margin-right: 9cm;
height: 1cm;
}
}

table tr {
border: 1px black solid;
padding: 3px;
}
</style>
</head>
<body>
<h1>PolyBanking - {% blocktrans with start_date=start_date|date:"r" end_date=end_date|date:"r" %}Summary from {{start_date}} to {{end_date}}{% endblocktrans %}</h1>
<div>
{% for group_name, group_data in data.items %}
<h2>{{group_name}}</h2>

<table>
<thead>
<tr>
<th>{% trans "Config" %}</th>
<th>{% trans "From" %}</th>
<th>{% trans "To" %}</th>
<th>{% trans "Total" %}</th>
</tr>
</thead>

<tbody>

{% for configs_data in group_data.0 %}

{% for config_data in configs_data %}

{% if forloop.first %}
<tr>
<td>{{config_data.3.name}} {% if config_data.3.test_mode %}{% trans "(Test mode !)" %}{% endif %}</td>
<td>{{config_data.0|date:"r"}}</td>
<td>{{config_data.1|date:"r"}}</td>
<td>{{config_data.2|floatformat:"2"}} CHF</td>
</tr>
{% else %}


{% if forloop.last %}
<tr>
<td></td>
<td></td>
<td></td>
<td><b>{{config_data|floatformat:"2"}} CHF</b></td>
</tr>
{% else %}


<tr>
<td></td>
<td>{{config_data.0|date:"r"}}</td>
<td>{{config_data.1|date:"r"}}</td>
<td>{{config_data.2|floatformat:"2"}} CHF</td>
</tr>

{% endif %}


{% endif %}

{% endfor %}


{% endfor %}

<tr style="border: none;"><td></td><td></td><td></td><td>&nbsp;</td></tr>

<tr><td><b>{% trans "Total" %}</b></td><td>{{start_date|date:"r"}}</td><td>{{end_date|date:"r"}}</td><td><b><u>{{group_data.1|floatformat:"2"}} CHF</u></b></td></tr>


</tbody>
</table>

{% endfor %}
</div>
<div id="footerContent">
{%block page_foot%}
Page <pdf:pagenumber> - PolyBanking - {% blocktrans with start_date=start_date|date:"r" end_date=end_date|date:"r" %}Summary from {{start_date}} to {{end_date}}{% endblocktrans %}
{%endblock%}
</div>
</body>
</html>
2 changes: 2 additions & 0 deletions server/export/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,7 @@

url(r'^$', 'home'),

url(r'^summary$', 'summary'),


)
Loading

0 comments on commit 4e5d176

Please sign in to comment.