Version 1.2: Fix PDF-Upload und Dateiname-Fallback

- Fix: transnoentitiesaliases() → transnoentities() (Kompatibilität mit Dolibarr 22)
- Neu: Fallback-Parser extrahiert Auszugsnummer/Jahr aus Dateinamen wenn pdfinfo/pdftotext nicht verfügbar

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Eduard Wisch 2026-02-14 22:02:05 +01:00
parent 1fc10d3781
commit 31daf7ec94
3 changed files with 26 additions and 3 deletions

View file

@ -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;

View file

@ -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';

View file

@ -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;
}