diff --git a/class/bankstatement.class.php b/class/bankstatement.class.php index e870bde..affa95e 100755 --- a/class/bankstatement.class.php +++ b/class/bankstatement.class.php @@ -621,6 +621,29 @@ class BankImportStatement extends CommonObject $result['statement_year'] = $result['pdf_year']; } + // Fallback: extract data from filename if PDF tools returned nothing + // Supports patterns like: 13438147_2025_Nr.001_Kontoauszug_vom_2025.07.01_timestamp.pdf + if (empty($result['statement_number']) && empty($result['iban'])) { + $basename = basename($filepath); + if (preg_match('/(\d+)_(\d{4})_Nr\.?(\d+)/', $basename, $fm)) { + $result['account_number'] = ltrim($fm[1], '0'); + $result['pdf_number'] = (string) intval($fm[3]); + $result['pdf_year'] = (int) $fm[2]; + $result['statement_number'] = $result['pdf_number']; + $result['statement_year'] = $result['pdf_year']; + } + if (preg_match('/vom[_\s](\d{4})\.(\d{2})\.(\d{2})/', $basename, $dm)) { + $stmtDate = DateTime::createFromFormat('Y-m-d', $dm[1].'-'.$dm[2].'-'.$dm[3]); + if ($stmtDate) { + $result['statement_date'] = $stmtDate->setTime(0, 0, 0)->getTimestamp(); + if (empty($result['statement_number'])) { + $result['statement_number'] = (string) intval($dm[2]); + $result['statement_year'] = (int) $dm[1]; + } + } + } + } + // Validate: at least statement number or IBAN must be present if (empty($result['statement_number']) && empty($result['iban'])) { return false; diff --git a/core/modules/modBankImport.class.php b/core/modules/modBankImport.class.php index 871aa89..d264f82 100755 --- a/core/modules/modBankImport.class.php +++ b/core/modules/modBankImport.class.php @@ -76,7 +76,7 @@ class modBankImport extends DolibarrModules $this->editor_squarred_logo = ''; // Must be image filename into the module/img directory followed with @modulename. Example: 'myimage.png@bankimport' // Possible values for version are: 'development', 'experimental', 'dolibarr', 'dolibarr_deprecated', 'experimental_deprecated' or a version string like 'x.y.z' - $this->version = '1.1'; + $this->version = '1.2'; // Url to the file with your last numberversion of this module //$this->url_last_version = 'http://www.example.com/versionmodule.txt'; diff --git a/pdfstatements.php b/pdfstatements.php index 233b08c..79134a3 100755 --- a/pdfstatements.php +++ b/pdfstatements.php @@ -167,12 +167,12 @@ if ($action == 'upload' && !empty($_FILES['pdffile'])) { // Validate required fields if (empty($statementNumber)) { - setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesaliases("StatementNumber")).': '.$fileNames[$fi], null, 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("StatementNumber")).': '.$fileNames[$fi], null, 'errors'); $errorCount++; continue; } if (empty($statementYear)) { - setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesaliases("Year")).': '.$fileNames[$fi], null, 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Year")).': '.$fileNames[$fi], null, 'errors'); $errorCount++; continue; }