mirror of
https://github.com/pretix/pretix.git
synced 2026-05-07 15:34:02 +00:00
Improvements for bank transfer importing (#1762)
Co-authored-by: Raphael Michel <michel@rami.io> Co-authored-by: Raphael Michel <mail@raphaelmichel.de>
This commit is contained in:
@@ -2,6 +2,7 @@ import logging
|
||||
import re
|
||||
from decimal import Decimal
|
||||
|
||||
import dateutil.parser
|
||||
from celery.exceptions import MaxRetriesExceededError
|
||||
from django.conf import settings
|
||||
from django.db import transaction
|
||||
@@ -41,9 +42,9 @@ def notify_incomplete_payment(o: Order):
|
||||
|
||||
def cancel_old_payments(order):
|
||||
for p in order.payments.filter(
|
||||
state__in=(OrderPayment.PAYMENT_STATE_PENDING,
|
||||
OrderPayment.PAYMENT_STATE_CREATED),
|
||||
provider='banktransfer',
|
||||
state__in=(OrderPayment.PAYMENT_STATE_PENDING,
|
||||
OrderPayment.PAYMENT_STATE_CREATED),
|
||||
provider='banktransfer',
|
||||
):
|
||||
try:
|
||||
with transaction.atomic():
|
||||
@@ -64,8 +65,8 @@ def cancel_old_payments(order):
|
||||
|
||||
|
||||
@transaction.atomic
|
||||
def _handle_transaction(trans: BankTransaction, code: str, event: Event=None, organizer: Organizer=None,
|
||||
slug: str=None):
|
||||
def _handle_transaction(trans: BankTransaction, code: str, event: Event = None, organizer: Organizer = None,
|
||||
slug: str = None):
|
||||
if event:
|
||||
try:
|
||||
trans.order = event.orders.get(code=code)
|
||||
@@ -117,8 +118,10 @@ def _handle_transaction(trans: BankTransaction, code: str, event: Event=None, or
|
||||
|
||||
p.info_data = {
|
||||
'reference': trans.reference,
|
||||
'date': trans.date,
|
||||
'date': trans.date_parsed.isoformat() if trans.date_parsed else trans.date,
|
||||
'payer': trans.payer,
|
||||
'iban': trans.iban,
|
||||
'bic': trans.bic,
|
||||
'trans_id': trans.pk
|
||||
}
|
||||
|
||||
@@ -150,7 +153,18 @@ def _handle_transaction(trans: BankTransaction, code: str, event: Event=None, or
|
||||
trans.save()
|
||||
|
||||
|
||||
def _get_unknown_transactions(job: BankImportJob, data: list, event: Event=None, organizer: Organizer=None):
|
||||
def parse_date(date_str):
|
||||
try:
|
||||
return dateutil.parser.parse(
|
||||
date_str,
|
||||
dayfirst="." in date_str,
|
||||
).date()
|
||||
except (ValueError, OverflowError):
|
||||
pass
|
||||
return None
|
||||
|
||||
|
||||
def _get_unknown_transactions(job: BankImportJob, data: list, event: Event = None, organizer: Organizer = None):
|
||||
amount_pattern = re.compile("[^0-9.-]")
|
||||
known_checksums = set(t['checksum'] for t in BankTransaction.objects.filter(
|
||||
Q(event=event) if event else Q(organizer=organizer)
|
||||
@@ -176,8 +190,11 @@ def _get_unknown_transactions(job: BankImportJob, data: list, event: Event=None,
|
||||
trans = BankTransaction(event=event, organizer=organizer, import_job=job,
|
||||
payer=row.get('payer', ''),
|
||||
reference=row['reference'],
|
||||
amount=amount,
|
||||
date=row['date'])
|
||||
amount=amount, date=row['date'],
|
||||
iban=row.get('iban', ''), bic=row.get('bic', ''))
|
||||
|
||||
trans.date_parsed = parse_date(trans.date)
|
||||
|
||||
trans.checksum = trans.calculate_checksum()
|
||||
if trans.checksum not in known_checksums:
|
||||
trans.state = BankTransaction.STATE_UNCHECKED
|
||||
|
||||
Reference in New Issue
Block a user