Add transactio matching
This commit is contained in:
parent
17c70e03a6
commit
4687763098
@ -38,15 +38,30 @@ def process_bank_csv(source):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def match_transaction(transaction):
|
@receiver(derive_virtual_transactions)
|
||||||
|
def match_transaction(transaction, signal, **kwargs):
|
||||||
uid, score = reference_parser(transaction.reference)
|
uid, score = reference_parser(transaction.reference)
|
||||||
member = None
|
member = None
|
||||||
error = None
|
|
||||||
try:
|
try:
|
||||||
if uid:
|
member = Member.objects.get(number=uid)
|
||||||
member = Member.objects.get(member_id=uid)
|
|
||||||
except Member.DoesNotExist:
|
except Member.DoesNotExist:
|
||||||
error = "Member does not exist"
|
return
|
||||||
|
|
||||||
|
account = Account.objects.get(account_category=AccountCategory.MEMBER_FEES)
|
||||||
|
data = {
|
||||||
|
'amount': transaction.amount,
|
||||||
|
'destination': account,
|
||||||
|
'value_datetime': value_datetime,
|
||||||
|
'member': member,
|
||||||
|
}
|
||||||
|
virtual_transaction = VirtualTransaction.objects.filter(**data).first()
|
||||||
|
if virtual_transaction and virtual_transaction.real_transaction != transaction:
|
||||||
|
raise Exception(f'RealTransaction {transaction.id} cannot be matched! There is already a VirtualTransaction ({virtual_transaction.id}) that is too similar. It is matched to RealTransaction {virtual_transaction.real_transaction.id}.')
|
||||||
|
if not virtual_transaction:
|
||||||
|
data['real_transaction'] = transaction
|
||||||
|
virtual_transaction = VirtualTransaction.objects.create(**data)
|
||||||
|
return [virtual_transaction]
|
||||||
|
|
||||||
|
|
||||||
def reference_parser(self, reference):
|
def reference_parser(self, reference):
|
||||||
reference = reference.lower()
|
reference = reference.lower()
|
||||||
@ -70,10 +85,3 @@ def reference_parser(self, reference):
|
|||||||
return (int(hit.groupdict().get('ID')), score)
|
return (int(hit.groupdict().get('ID')), score)
|
||||||
|
|
||||||
return (False, 99)
|
return (False, 99)
|
||||||
|
|
||||||
def get_debitor_by_record_token(self, reference):
|
|
||||||
reference = "".join(reference.lower().split())
|
|
||||||
for debitor in self.debitors:
|
|
||||||
if re.match(debitor['regex'], reference):
|
|
||||||
return Debitor.objects.get(pk=debitor['pk'])
|
|
||||||
return None
|
|
||||||
|
Loading…
Reference in New Issue
Block a user