diff --git a/server/configs/migrations/0004_auto__add_field_config_group.py b/server/configs/migrations/0004_auto__add_field_config_group.py new file mode 100644 index 0000000..7cf50e8 --- /dev/null +++ b/server/configs/migrations/0004_auto__add_field_config_group.py @@ -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'] \ No newline at end of file diff --git a/server/configs/models.py b/server/configs/models.py index e31959c..5443e77 100644 --- a/server/configs/models.py +++ b/server/configs/models.py @@ -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'' @@ -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)) @@ -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())) diff --git a/server/configs/templates/configs/configs/show.html b/server/configs/templates/configs/configs/show.html index c038753..ff02de1 100644 --- a/server/configs/templates/configs/configs/show.html +++ b/server/configs/templates/configs/configs/show.html @@ -46,6 +46,13 @@
{{object.name}}
+ {% if object.group %} +{{object.group}}
+{{object.url_ipn}}
diff --git a/server/configs/views.py b/server/configs/views.py index 7cb1627..3c82e2c 100644 --- a/server/configs/views.py +++ b/server/configs/views.py @@ -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() @@ -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() diff --git a/server/data/pip-reqs.txt b/server/data/pip-reqs.txt index 0a97a6b..0029a41 100644 --- a/server/data/pip-reqs.txt +++ b/server/data/pip-reqs.txt @@ -5,3 +5,4 @@ celery django-celery python-dateutil PicklingTools +reportlab diff --git a/server/export/forms.py b/server/export/forms.py index 867848c..424cb01 100644 --- a/server/export/forms.py +++ b/server/export/forms.py @@ -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) diff --git a/server/export/templates/export/summary.html b/server/export/templates/export/summary.html new file mode 100644 index 0000000..ae6bf28 --- /dev/null +++ b/server/export/templates/export/summary.html @@ -0,0 +1,47 @@ +{% extends "base.html" %} +{% load i18n %} +{% load bootstrap3 %} + +{% block title %}{{block.super}} :: {% trans "Summary" %}{% endblock %} + +{% block content %} + + + +{% trans "Config" %} | +{% trans "From" %} | +{% trans "To" %} | +{% trans "Total" %} | +
---|---|---|---|
{{config_data.3.name}} {% if config_data.3.test_mode %}{% trans "(Test mode !)" %}{% endif %} | +{{config_data.0|date:"r"}} | +{{config_data.1|date:"r"}} | +{{config_data.2|floatformat:"2"}} CHF | +
+ | + | + | {{config_data|floatformat:"2"}} CHF | +
+ | {{config_data.0|date:"r"}} | +{{config_data.1|date:"r"}} | +{{config_data.2|floatformat:"2"}} CHF | +
{% trans "Total" %} | {{start_date|date:"r"}} | {{end_date|date:"r"}} | {{group_data.1|floatformat:"2"}} CHF |
%s' % escape(html)) + + else: + form = SummaryForm() + + return render_to_response('export/summary.html', {'form': form}, context_instance=RequestContext(request)) diff --git a/server/templates/base.html b/server/templates/base.html index e32aab4..73eb877 100644 --- a/server/templates/base.html +++ b/server/templates/base.html @@ -54,6 +54,7 @@