From 732e181312830ebd135c99e123c2ff797025ac23 Mon Sep 17 00:00:00 2001 From: Robert Horlings Date: Wed, 17 Feb 2016 16:59:56 +0100 Subject: [PATCH] Bugfix in parsing specific descriptions --- .../Csv/Specifix/AbnAmroDescription.php | 51 ++++++++++++++++--- 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/app/Helpers/Csv/Specifix/AbnAmroDescription.php b/app/Helpers/Csv/Specifix/AbnAmroDescription.php index ab26416ecf..9100bfee68 100644 --- a/app/Helpers/Csv/Specifix/AbnAmroDescription.php +++ b/app/Helpers/Csv/Specifix/AbnAmroDescription.php @@ -114,20 +114,28 @@ class AbnAmroDescription extends Specifix implements SpecifixInterface if (preg_match('/^SEPA(.{28})/', $this->data['description'], $matches)) { Log::debug('AbnAmroSpecifix: Description is structured as SEPA plain description.'); + $type = $matches[1]; + $reference = ''; + $name = ''; + $newDescription = ''; + // SEPA plain descriptions contain several key-value pairs, split by a colon - preg_match_all('/([A-Za-z]+(?=:\s)):\s([A-Za-z 0-9._#-]+(?=\s))/', $this->data['description'], $matches, PREG_SET_ORDER); + preg_match_all('/([A-Za-z]+(?=:\s)):\s([A-Za-z 0-9._#-]+(?=\s|$))/', $this->data['description'], $matches, PREG_SET_ORDER); if (is_array($matches)) { foreach ($matches as $match) { $key = $match[1]; $value = trim($match[2]); - + Log::debug( "SEPA: $key - $value" ); switch (strtoupper($key)) { case 'OMSCHRIJVING': - $this->data['description'] = $value; + $newDescription = $value; break; case 'NAAM': - $this->data['opposing-account-name'] = $value; + $this->data['opposing-account-name'] = $name = $value; + break; + case 'KENMERK': + $reference = $value; break; case 'IBAN': $this->data['opposing-account-iban'] = $value; @@ -137,6 +145,14 @@ class AbnAmroDescription extends Specifix implements SpecifixInterface } } } + + // Set a new description for the current transaction. If none was given + // set the description to type, name and reference + if( $newDescription ) { + $this->data['description'] = $newDescription; + } else { + $this->data[ 'description' ] = sprintf('%s - %s (%s)', $type, $name, $reference); + } return true; } @@ -155,6 +171,13 @@ class AbnAmroDescription extends Specifix implements SpecifixInterface if (preg_match_all('!\/([A-Z]{3,4})\/([^/]*)!', $this->data['description'], $matches, PREG_SET_ORDER)) { Log::debug('AbnAmroSpecifix: Description is structured as TRTP format.'); + $type = ''; + $name = ''; + $reference = ''; + $newDescription = ''; + + // Search for properties specified in the TRTP format. If no description + // is provided, use the type, name and reference as new description if (is_array($matches)) { foreach ($matches as $match) { $key = $match[1]; @@ -162,20 +185,34 @@ class AbnAmroDescription extends Specifix implements SpecifixInterface switch (strtoupper($key)) { case 'NAME': - $this->data['opposing-account-name'] = $value; + $this->data['opposing-account-name'] = $name = $value; break; case 'REMI': - $this->data['description'] = $value; + $newDescription = $value; break; case 'IBAN': $this->data['opposing-account-iban'] = $value; break; + case 'EREF': + $reference = $value; + break; + case 'TRTP': + $type = $value; + break; default: // Ignore the rest } } + + // Set a new description for the current transaction. If none was given + // set the description to type, name and reference + if( $newDescription ) { + $this->data['description'] = $newDescription; + } else { + $this->data[ 'description' ] = sprintf('%s - %s (%s)', $type, $name, $reference); + } } - + return true; }