diff --git a/src/Console/ImportTransactionsCommand.php b/src/Console/ImportTransactionsCommand.php index bf82f5f..f685d33 100644 --- a/src/Console/ImportTransactionsCommand.php +++ b/src/Console/ImportTransactionsCommand.php @@ -7,8 +7,12 @@ use DateTime; use Fhp\Action\GetSEPAAccounts; use Fhp\Action\GetStatementOfAccount; +use Fhp\Action\GetStatementOfAccountXML; +use Fhp\CAMT\CAMT; use Fhp\FinTs; use Fhp\Model\SEPAAccount; +use Fhp\Model\StatementOfAccount\StatementOfAccount; +use Fhp\UnsupportedException; use Gared\FireflyImporter\Config\ConfigFileHandlerFactory; use Gared\FireflyImporter\Config\Parser\Config; use Gared\FireflyImporter\FinTS\FinTSFactory; @@ -81,17 +85,11 @@ public function execute(InputInterface $input, OutputInterface $output): int $account = $this->getAccount($finTs, $config); - $getStatementOfAccountRequest = GetStatementOfAccount::create( - account: $account, - from: DateTime::createFromInterface($config->account->fromDate), - to: DateTime::createFromInterface($config->account->toDate) - ); - $finTs->execute($getStatementOfAccountRequest); - $statementAccount = $getStatementOfAccountRequest->getStatement(); + $statementAccount = $this->getStatementOfAccount($account, $config, $finTs); $table = new Table($output); - $table->setHeaders(['Credit/Debit', 'Amount', 'Description', 'Account Number', 'Name']); + $table->setHeaders(['Date', 'Credit/Debit', 'Amount', 'Description', 'Account Number', 'Name']); $transactionMapper = new TransactionMapper(); @@ -99,6 +97,7 @@ public function execute(InputInterface $input, OutputInterface $output): int foreach ($statementAccount->getStatements() as $statement) { foreach ($statement->getTransactions() as $transaction) { $table->addRow([ + $transaction->getBookingDate()?->format('Y-m-d'), $transaction->getCreditDebit(), $transaction->getAmount(), $transaction->getMainDescription(), @@ -133,6 +132,33 @@ public function execute(InputInterface $input, OutputInterface $output): int return self::SUCCESS; } + private function getStatementOfAccount(SEPAAccount $account, Config $config, FinTs $finTs): StatementOfAccount + { + try { + $getStatementOfAccountRequestXML = GetStatementOfAccountXML::create( + account: $account, + from: DateTime::createFromInterface($config->account->fromDate), + to: DateTime::createFromInterface($config->account->toDate) + ); + $finTs->execute($getStatementOfAccountRequestXML); + $bookedXML = $getStatementOfAccountRequestXML->getBookedXML(); + + $parser = new CAMT(); + $parsedCAMT = $parser->parse($bookedXML); + + return StatementOfAccount::fromCAMTArray($parsedCAMT); + } catch (UnsupportedException) { + $getStatementOfAccountRequest = GetStatementOfAccount::create( + account: $account, + from: DateTime::createFromInterface($config->account->fromDate), + to: DateTime::createFromInterface($config->account->toDate) + ); + $finTs->execute($getStatementOfAccountRequest); + + return $getStatementOfAccountRequest->getStatement(); + } + } + private function getAccount(FinTs $finTs, Config $config): SEPAAccount { $getSepaAccountsAction = GetSEPAAccounts::create();