|
|
|
|
@ -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')
|
|
|
|
|
|