fix(banking): handle blank password protected PDFs and negative amounts in CR/DR columns (backport #56690) (#56694)

fix(banking): handle blank password protected PDFs and negative amounts in CR/DR columns (#56690)

* fix(banking): strip signs from amount if column has CR/DR values

* fix(banking): try decrypting PDF with a blank password

(cherry picked from commit 300471da12)

Co-authored-by: Nikhil Kothari <nik.kothari22@live.com>
This commit is contained in:
mergify[bot]
2026-07-01 08:24:28 +00:00
committed by GitHub
parent 2cb577b912
commit 19c318df68

View File

@@ -829,7 +829,9 @@ def compute_final_transactions(transaction_rows: list, date_format: str, amount_
if amount_format == 'Amount column has "CR"/"DR" values': if amount_format == 'Amount column has "CR"/"DR" values':
amount = transaction_row.get("amount") amount = transaction_row.get("amount")
float_amount = get_float_amount(amount)
# If the amount column has CR/DR in it - we should remove any signs (negative or positive) from the amount
float_amount = abs(get_float_amount(amount) or 0)
if "cr" in amount.lower(): if "cr" in amount.lower():
return 0, float_amount return 0, float_amount
else: else:
@@ -932,14 +934,18 @@ def extract_pdf_tables(content: bytes, password: str | None = None) -> list[dict
from pypdf import PdfReader from pypdf import PdfReader
reader = PdfReader(io.BytesIO(content)) reader = PdfReader(io.BytesIO(content))
if reader.is_encrypted and (not password or not reader.decrypt(password)): if reader.is_encrypted:
frappe.throw( # Try opening the PDF with a password - if no password is provided, try with a blank password
_( if not password:
"This PDF is password protected. Please set the correct statement password on the" password = ""
" Bank Account and try again." if not reader.decrypt(password):
), frappe.throw(
title=_("Password Required"), _(
) "This PDF is password protected. Please set the correct statement password on the"
" Bank Account and try again."
),
title=_("Password Required"),
)
text_settings = {"vertical_strategy": "text", "horizontal_strategy": "text"} text_settings = {"vertical_strategy": "text", "horizontal_strategy": "text"}
tables = [] tables = []