Skip to content

Commit 3574152

Browse files
committed
Improves statement request handling and error reporting
Enhances the logic for requesting bank statements by refining object instantiation, adding checks for empty responses, and handling pagination. Updates error handling to capture and report specific cURL errors and invalid statement object types. Introduces better status message reporting and ensures proper exit codes are set during exceptions for improved debugging.
1 parent c774957 commit 3574152

2 files changed

Lines changed: 91 additions & 26 deletions

File tree

.openapi-generator/templates/Statementor.mustache

Lines changed: 46 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -98,37 +98,70 @@ class Statementor extends \Ease\Sand
9898
$this->addStatusMessage(sprintf(_('Request statements from %s to %s'), $this->since->format(self::$dateFormat), $this->until->format(self::$dateFormat)), 'debug');
9999
100100
try {
101+
$stop = true;
102+
101103
do {
102-
$requestBody = new Model\GetStatementsRequest([
103-
'accountNumber' => $this->accountNumber,
104+
$requestBody = new \VitexSoftware\Raiffeisenbank\Model\GetStatementsRequest([
105+
'accountNumber' => $this->bank->getDataValue('buc'),
104106
'page' => ++$page,
105107
'size' => 60,
106108
'currency' => $currencyCode,
107109
'statementLine' => $statementLineFinal,
108110
'dateFrom' => $this->since->format(self::$dateFormat),
109111
'dateTo' => $this->until->format(self::$dateFormat)]);
110112
111-
$result = $apiInstance->getStatements(ApiClient::getxRequestId(), $requestBody, $page);
113+
$result = $apiInstance->getStatements($this->getxRequestId(), $requestBody, $page);
114+
115+
$pageStatements = $result->getStatements();
116+
117+
if (empty($pageStatements)) {
118+
$this->addStatusMessage(sprintf(_('No Statements from %s to %s'), $this->since->format(self::$dateFormat), $this->until->format(self::$dateFormat)));
119+
$stop = true;
120+
} else {
121+
foreach ($pageStatements as $statement) {
122+
if ($statement instanceof \VitexSoftware\Raiffeisenbank\Model\GetStatements200ResponseStatementsInner) {
123+
$statements[] = [
124+
'statementId' => $statement->getStatementId(),
125+
'accountId' => $statement->getAccountId(),
126+
'statementNumber' => $statement->getStatementNumber(),
127+
'dateFrom' => $statement->getDateFrom()->format(self::$dateFormat),
128+
'dateTo' => $statement->getDateTo()->format(self::$dateFormat),
129+
'currency' => $statement->getCurrency(),
130+
'statementFormats' => $statement->getStatementFormats(),
131+
];
132+
} else {
133+
$this->addStatusMessage('Invalid statement object type', 'error');
134+
}
135+
}
112136

113-
if (empty($result)) {
114-
$this->addStatusMessage(sprintf(_('No transactions from %s to %s'), $this->since->format(self::$dateFormat), $this->until->format(self::$dateFormat)));
115-
$result['lastPage'] = true;
116-
$result['last'] = true;
137+
$stop = $result->getLast() ?? true; // Assuming `getLast()` exists to indicate the last page
117138
}
118139

119-
if (\array_key_exists('statements', $result)) {
120-
$statements = array_merge($statements, $result['statements']);
140+
if ($stop === false) {
141+
sleep(1);
121142
}
143+
} while ($stop === false);
144+
} catch (\Exception $e) {
145+
$errorMessage = $e->getMessage();
146+
preg_match('/cURL error ([0-9]+)/', $errorMessage, $matches);
147+
148+
if (\array_key_exists(1, $matches)) {
149+
$errorCode = $matches[1];
150+
} elseif (preg_match('/\[([0-9]+)\]/', $errorMessage, $matches)) {
151+
$errorCode = $matches[1];
152+
} else {
153+
$errorCode = 2;
154+
}
122155

123-
sleep(1);
124-
} while ($result['last'] === false);
125-
} catch (\Ease\Exception $e) {
126-
echo 'Exception when calling GetTransactionListApi->getTransactionList: ', $e->getMessage(), \PHP_EOL;
156+
$this->addStatusMessage('Exception when calling GetStatementsRequest: '.$errorMessage, 'error', $apiInstance);
157+
158+
$this->exitCode = (int) $errorCode;
127159
}
128160

129161
return $statements;
130162
}
131163

164+
132165
/**
133166
* Prepare processing interval.
134167
*

lib/Statementor.php

Lines changed: 45 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -100,32 +100,64 @@ public function getStatements($currencyCode = 'CZK', string $statementLine = '')
100100
$this->addStatusMessage(sprintf(_('Request statements from %s to %s'), $this->since->format(self::$dateFormat), $this->until->format(self::$dateFormat)), 'debug');
101101

102102
try {
103+
$stop = true;
104+
103105
do {
104-
$requestBody = new Model\GetStatementsRequest([
105-
'accountNumber' => $this->accountNumber,
106+
$requestBody = new \VitexSoftware\Raiffeisenbank\Model\GetStatementsRequest([
107+
'accountNumber' => $this->bank->getDataValue('buc'),
106108
'page' => ++$page,
107109
'size' => 60,
108110
'currency' => $currencyCode,
109111
'statementLine' => $statementLineFinal,
110112
'dateFrom' => $this->since->format(self::$dateFormat),
111113
'dateTo' => $this->until->format(self::$dateFormat)]);
112114

113-
$result = $apiInstance->getStatements(ApiClient::getxRequestId(), $requestBody, $page);
115+
$result = $apiInstance->getStatements($this->getxRequestId(), $requestBody, $page);
116+
117+
$pageStatements = $result->getStatements();
114118

115-
if (empty($result)) {
116-
$this->addStatusMessage(sprintf(_('No transactions from %s to %s'), $this->since->format(self::$dateFormat), $this->until->format(self::$dateFormat)));
117-
$result['lastPage'] = true;
118-
$result['last'] = true;
119+
if (empty($pageStatements)) {
120+
$this->addStatusMessage(sprintf(_('No Statements from %s to %s'), $this->since->format(self::$dateFormat), $this->until->format(self::$dateFormat)));
121+
$stop = true;
122+
} else {
123+
foreach ($pageStatements as $statement) {
124+
if ($statement instanceof \VitexSoftware\Raiffeisenbank\Model\GetStatements200ResponseStatementsInner) {
125+
$statements[] = [
126+
'statementId' => $statement->getStatementId(),
127+
'accountId' => $statement->getAccountId(),
128+
'statementNumber' => $statement->getStatementNumber(),
129+
'dateFrom' => $statement->getDateFrom()->format(self::$dateFormat),
130+
'dateTo' => $statement->getDateTo()->format(self::$dateFormat),
131+
'currency' => $statement->getCurrency(),
132+
'statementFormats' => $statement->getStatementFormats(),
133+
];
134+
} else {
135+
$this->addStatusMessage('Invalid statement object type', 'error');
136+
}
137+
}
138+
139+
$stop = $result->getLast() ?? true; // Assuming `getLast()` exists to indicate the last page
119140
}
120141

121-
if (\array_key_exists('statements', $result)) {
122-
$statements = array_merge($statements, $result['statements']);
142+
if ($stop === false) {
143+
sleep(1);
123144
}
145+
} while ($stop === false);
146+
} catch (\Exception $e) {
147+
$errorMessage = $e->getMessage();
148+
preg_match('/cURL error ([0-9]+)/', $errorMessage, $matches);
149+
150+
if (\array_key_exists(1, $matches)) {
151+
$errorCode = $matches[1];
152+
} elseif (preg_match('/\[([0-9]+)\]/', $errorMessage, $matches)) {
153+
$errorCode = $matches[1];
154+
} else {
155+
$errorCode = 2;
156+
}
157+
158+
$this->addStatusMessage('Exception when calling GetStatementsRequest: '.$errorMessage, 'error', $apiInstance);
124159

125-
sleep(1);
126-
} while ($result['last'] === false);
127-
} catch (\Ease\Exception $e) {
128-
echo 'Exception when calling GetTransactionListApi->getTransactionList: ', $e->getMessage(), \PHP_EOL;
160+
$this->exitCode = (int) $errorCode;
129161
}
130162

131163
return $statements;

0 commit comments

Comments
 (0)