Fix #258 -- Add a comment field to bank transactions

This commit is contained in:
Raphael Michel
2016-10-08 20:18:35 +02:00
parent 166fedb4ef
commit d43d6f485b
6 changed files with 104 additions and 1 deletions

View File

@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.2 on 2016-10-08 17:50
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('banktransfer', '0002_auto_20160908_2020'),
]
operations = [
migrations.AddField(
model_name='banktransaction',
name='comment',
field=models.TextField(blank=True),
),
]

View File

@@ -50,6 +50,7 @@ class BankTransaction(models.Model):
amount = models.DecimalField(max_digits=10, decimal_places=2)
date = models.CharField(max_length=50)
order = models.ForeignKey('pretixbase.Order', null=True, blank=True)
comment = models.TextField(blank=True)
def calculate_checksum(self):
clean = re.compile('[^a-zA-Z0-9.-]')

View File

@@ -66,6 +66,49 @@ var bankimport_transactionlist = {
});
},
comment_reset_to_text: function (id, text) {
var $box = $("tr[data-id=" + id + "] .comment-box");
$box.html("")
.append($("<strong>").text(gettext("Comment:")))
.append(" ")
.append($("<span>").addClass("comment").text(text))
.append(" ")
.append($("<a>").addClass("comment-modify btn btn-default btn-xs")
.append("<span class='fa fa-edit'></span>"));
},
comment_start_edit: function (e) {
var $box = $(e.target).closest("div");
var id = $box.closest("tr").attr("data-id");
var $inp = $("<textarea>").addClass("form-control");
var orig_text = $box.find(".comment").text();
$inp.val(orig_text);
var $btngrp = $("<div>");
$btngrp.addClass("btn-group");
var $btn1 = $("<button>");
$btn1.attr("type", "button").addClass("btn btn-default");
$btn1.append("<span class='fa fa-check'></span>");
$btngrp.append($btn1);
var $btn2 = $("<button>");
$btn2.attr("type", "button").addClass("btn btn-default");
$btn2.append("<span class='fa fa-close'></span>");
$btngrp.append($btn2);
$box.html("").append($inp).append($btngrp);
$btn1.click(function () {
var text = $box.find("textarea").val();
$box.find("input, textarea, button").prop("disabled", true);
bankimport_transactionlist._action(id, "comment:" + text, function () {
bankimport_transactionlist.comment_reset_to_text(id, text);
});
});
$btn2.click(function () {
bankimport_transactionlist.comment_reset_to_text(id, orig_text);
});
e.preventDefault();
},
typeahead_source: function () {
return new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
@@ -92,6 +135,9 @@ var bankimport_transactionlist = {
init: function () {
if ($(".transaction-list").length) {
$(".transaction-list button").click(bankimport_transactionlist._btn_click);
$(".transaction-list").on("click", ".comment-modify", bankimport_transactionlist.comment_start_edit);
$(".transaction-list .form-control").typeahead(null, {
minLength: 2,
name: 'order-dataset',

View File

@@ -54,7 +54,17 @@
{% endif %}
</td>
<td>{{ trans.date }}</td>
<td>{{ trans.payer }}<br/>{{ trans.reference }}</td>
<td>
{{ trans.payer }}<br/>
{{ trans.reference }}
<div class="comment-box">
<strong>{% trans "Comment:" %}</strong>
<span class="comment">{{ trans.comment }}</span>
<a href="#" class="comment-modify btn btn-default btn-xs">
<span class="fa fa-edit"></span>
</a>
</div>
</td>
<td>{{ trans.amount|floatformat:2 }}</td>
<td>
{% if trans.message %}

View File

@@ -99,6 +99,13 @@ class ActionView(EventPermissionRequiredMixin, View):
else:
return self._retry(trans)
def _comment(self, trans, comment):
trans.comment = comment
trans.save()
return JsonResponse({
'status': 'ok'
})
def post(self, request, *args, **kwargs):
for k, v in request.POST.items():
if not k.startswith('action_'):
@@ -113,6 +120,9 @@ class ActionView(EventPermissionRequiredMixin, View):
# Accept anyway even with wrong amount
return self._accept_ignore_amount(trans)
elif v.startswith('comment:'):
return self._comment(trans, v[8:])
elif v.startswith('assign:') and trans.state == BankTransaction.STATE_NOMATCH:
return self._assign(trans, v[7:])

View File

@@ -118,6 +118,22 @@ def test_assign_order_amount_incorrect(env, client):
assert trans.state == BankTransaction.STATE_NOMATCH
@pytest.mark.django_db
def test_comment(env, client):
job = BankImportJob.objects.create(event=env[0])
trans = BankTransaction.objects.create(event=env[0], import_job=job, payer='Foo',
state=BankTransaction.STATE_NOMATCH,
amount=12, date='unknown')
client.login(email='dummy@dummy.dummy', password='dummy')
r = json.loads(client.post('/control/event/{}/{}/banktransfer/action/'.format(env[0].organizer.slug, env[0].slug), {
'action_{}'.format(trans.pk): 'comment:This is my comment'.format(env[2].code)
}).content.decode('utf-8'))
assert r['status'] == 'ok'
trans.refresh_from_db()
assert trans.comment == 'This is my comment'
assert trans.state == BankTransaction.STATE_NOMATCH
@pytest.mark.django_db
def test_retry_success(env, client):
job = BankImportJob.objects.create(event=env[0])