added EPC qr code to transaction overview

pull/94/head
mariusrklein 12 months ago
parent 1c191496dd
commit 100732602f

@ -15,6 +15,9 @@ from contrib.models import CommonModel
from contrib.rules import has_global_perm
from utils import cvt_to_decimal
from schwifty import IBAN
import re
# Create your models here.
class Ledger(models.Model):
@ -487,6 +490,39 @@ class Transaction(models.Model):
def __str__(self):
return "T#{}".format(self.pk)
@staticmethod
def escape_reference(reference):
umlaut_map = {
'ä': 'ae', 'ö': 'oe', 'ü': 'ue',
'Ä': 'Ae', 'Ö': 'Oe', 'Ü': 'Ue',
'ß': 'ss'
}
pattern = re.compile('|'.join(umlaut_map.keys()))
int_reference = pattern.sub(lambda x: umlaut_map[x.group()], reference)
allowed_chars = r"[^a-z0-9 /?: .,'+-]"
clean_reference = re.sub(allowed_chars, '', int_reference, flags=re.IGNORECASE)
return clean_reference
def code(self):
if self.amount == 0:
return ""
reference = self.escape_reference(self.reference)
iban = IBAN(self.member.iban)
bic = iban.bic
return f"""BCD
001
1
SCT
{bic}
{self.member.prename} {self.member.lastname}
{iban}
EUR{self.amount}
{reference}"""
class Meta:
verbose_name = _('Transaction')

@ -7,6 +7,8 @@
<script src="{% static 'admin/js/cancel.js' %}" async></script>
<script type="text/javascript" src="{% static "admin/js/vendor/jquery/jquery.js" %}"></script>
<script type="text/javascript" src="{% static "admin/js/jquery.init.js" %}"></script>
<script type="text/javascript" src="https://cdn.rawgit.com/davidshimjs/qrcodejs/gh-pages/qrcode.js"></script>
{% endblock %}
{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} admin-view
@ -36,6 +38,7 @@
<td>{% trans "Amount" %}</td>
<td>{% trans "Reference" %}</td>
<td>{% trans "Ledger" %}</td>
<td>{% trans "QR Code" %}</td>
</th>
{% for transaction in statement.transaction_set.all %}
<tr>
@ -54,6 +57,20 @@
<td>
{{ transaction.ledger }}
</td>
<td>
<div id="qrcode_{{ forloop.counter }}"></div>
<script type="text/javascript">
var qrcode_{{ forloop.counter }} = new QRCode(document.getElementById("qrcode_{{ forloop.counter }}"), {
text: `{{ transaction.code }}`,
width: 128,
height: 128,
colorDark : "#000000",
colorLight : "#ffffff",
correctLevel : QRCode.CorrectLevel.M
});
</script>
</td>
</tr>
{% endfor %}
</table>

Loading…
Cancel
Save