<?php namespace Xentral\Components\ScanbotApi\Data; use DateTimeImmutable; class ScanbotApiResultData { /** @var string|null $iban IBAN-Nummer */ protected $iban; /** @var DateTimeImmutable|null $invoiceDate Rechnungsdatum */ protected $invoiceDate; /** @var string|null $invoiceNumber Rechnungsnummer */ protected $invoiceNumber; /** @var float|null $totalAmount Rechnungsbetrag */ protected $totalAmount; /** @var float|null $totalTax Mehrwertsteuerbetrag */ protected $totalTax; /** @var string|null $currency Währung; dreistelliger ISO-Code */ protected $currency; /** @var string $resultHandle Referenz-ID zum Invoice-Recognition-Task */ protected $resultHandle; /** * @return array */ public function toArray() { return [ 'currency' => $this->currency, 'iban' => $this->iban, 'invoice_date' => $this->invoiceDate !== null ? $this->invoiceDate->format('d.m.Y') : null, 'invoice_number' => $this->invoiceNumber, 'result_handle' => $this->resultHandle, 'total_amount' => $this->totalAmount !== null ? number_format($this->totalAmount, 2, ',', '') : null, 'total_tax' => $this->totalTax !== null ? number_format($this->totalTax, 2, ',', '') : null, ]; } /** * @param array $data */ public function SetDataFromScanbotApi(array $data) { // ID zum Zurückmelden der Ergebnisse if (isset($data['resultHandle']) && $data['resultHandle'] !== null) { $this->resultHandle = $data['resultHandle']; } // IBAN-Nummer if (isset($data['IBAN']) && $data['IBAN'] !== null) { $this->iban = (string)$data['IBAN']['value']; } // Rechnungsdatum if (isset($data['invoiceDate']) && $data['invoiceDate'] !== null) { $this->invoiceDate = new DateTimeImmutable($data['invoiceDate']['value']); } // Rechnungsnummer if (isset($data['invoiceNumber']) && $data['invoiceNumber'] !== null) { $this->invoiceNumber = (string)$data['invoiceNumber']['value']; } // Gesamtbetrag if (isset($data['totalAmount']) && $data['totalAmount'] !== null) { $this->totalAmount = (float)$data['totalAmount']['value']; } // Mehrwertsteuerbetrag if (isset($data['totalTax']) && $data['totalTax'] !== null) { $this->totalTax = (float)$data['totalTax']['value']; } } /** * @param array $data */ public function SetDataFromHocrResult(array $data) { // Währung if ($this->currency === null && isset($data['currency']) && $data['currency'] !== null) { $this->currency = (string)$data['currency']; } // Rechnungsnummer if ($this->invoiceNumber === null && isset($data['invoice_number']) && $data['invoice_number'] !== null) { $this->invoiceNumber = (string)$data['invoice_number']; } // Rechnungsdatum if ($this->invoiceDate === null && isset($data['invoice_date']) && $data['invoice_date'] !== null) { $this->invoiceDate = new DateTimeImmutable($data['invoice_date']); } // Gesamtbetrag if ($this->totalAmount === null && isset($data['total_gross']) && $data['total_gross'] !== null) { $total = $data['total_gross']; $lastDotPos = (int)strrpos($total, '.'); $lastCommaPos = (int)strrpos($total, ','); if ($lastCommaPos > $lastDotPos) { // Komma ist Dezimaltrenner $total = str_replace('.', '', $total); $total = str_replace(',', '.', $total); $this->totalAmount = (float)$total; } else { // Punkt ist Dezimaltrenner $total = str_replace(',', '', $total); $this->totalAmount = (float)$total; } } } }