parsers: rogers parser handle cashbacks

probably need something similar for refunds but don't know the format
until one happens
This commit is contained in:
Keenan Tims 2025-05-01 17:14:40 -07:00
parent 0009d98791
commit a23f2a2619

View File

@ -49,7 +49,7 @@ class TransactionParsingFailed(Exception):
class RogersBankParser(TransactionParser): class RogersBankParser(TransactionParser):
EXTRACT_RE = re.compile( EXTRACT_RE = re.compile(
r"Attempt of \$([0-9,]+\.\d{2}) was made on ([A-z]{3} \d{1,2}, \d{4})[^<]*at ([^<]+) in" r"Attempt of \$([0-9,]+\.\d{2}) was made on ([A-z]{3} \d{1,2}, \d{4})[^<]*at ([^<]+) in ([^<]+)" # noqa: E501
) )
def __init__(self, account_id: UUID): def __init__(self, account_id: UUID):
@ -72,15 +72,21 @@ class RogersBankParser(TransactionParser):
if matches is None: if matches is None:
raise TransactionParsingFailed("No matches for extraction RE") raise TransactionParsingFailed("No matches for extraction RE")
amount = Decimal(matches[1].replace(",", "")) * -1 amount = Decimal(matches[1].replace(",", "")) * -1
date_raw = matches[2] date_raw = matches[2]
payee = matches[3] payee = matches[3]
location = matches[4]
if "Rebate" == location and "CashBack" in payee:
amount = amount * -1
date = datetime.strptime(date_raw, "%b %d, %Y").date() date = datetime.strptime(date_raw, "%b %d, %Y").date()
return Transaction( return Transaction(
account=self.account_id, account=self.account_id,
date=date, date=date,
amount=amount, amount=amount,
payee=payee, payee=payee,
notes="via email", notes=f"in {location} (via email)",
imported_id=msg["Message-ID"], imported_id=msg["Message-ID"],
) )