Files
mareike/app/Resources/InvoiceResource.php

70 lines
3.1 KiB
PHP

<?php
namespace App\Resources;
use App\Enumerations\InvoiceStatus;
use App\Enumerations\InvoiceType;
use App\Models\Invoice;
use App\ValueObjects\Amount;
class InvoiceResource {
private Invoice $invoice;
function __construct(Invoice $invoice) {
$this->invoice = $invoice;
}
public function toArray() {
$returnData = [];
$returnData['invoiceType'] = $this->invoice->invoiceType()->name;
if ($this->invoice->invoiceType()->slug === InvoiceType::INVOICE_TYPE_OTHER) {
$returnData['invoiceType'] .= ' (' . $this->invoice->type_other . ')';
}
$returnData['costUnitName'] = $this->invoice->costUnit()->first()->name;
$returnData['invoiceNumber'] = $this->invoice->invoice_number;
$returnData['contactName'] = $this->invoice->contact_name;
$returnData['contactEmail'] = $this->invoice->contact_email ?? '--';
$returnData['contactPhone'] = $this->invoice->contact_phone ?? '--';
$returnData['amount'] = Amount::fromString($this->invoice->amount, ' Euro')->toString();
$returnData['id'] = $this->invoice->id;
$returnData['donation'] = $this->invoice->donation;
$returnData['alreadyPaid'] = !$this->invoice->donation && null === $this->invoice->contact_bank_iban;
$returnData['accountOwner'] = $this->invoice->contact_bank_owner ?? '--';
$returnData['accountIban'] = $this->invoice->contact_bank_iban ?? '--';
$returnData['status'] = $this->invoice->status;
$returnData['documentFilename'] = $this->invoice->document_filename;
$returnData['readableStatus'] = $this->getReadableStatus();
$returnData['comment'] = $this->invoice->comment ?? '--';
$returnData['changes'] = $this->invoice->changes ?? '--';
$returnData['deniedReason'] = $this->invoice->denied_reason ?? '--';
$returnData['travelDirection'] = $this->invoice->travel_direction ?? '--';
$returnData['distance'] = $this->invoice->distance;
$returnData['distanceAllowance'] = new Amount($this->invoice->costUnit()->first()->distance_allowance, '')->toString();
$returnData['passengers'] = $this->invoice->passengers ? 'Ja' : 'Nein';
$returnData['transportation'] = $this->invoice->transportation ? 'Ja' : 'Nein';
$returnData['travelRoute'] = $this->invoice->travel_direction;
$returnData['costUnitId'] = $this->invoice->cost_unit_id;
$returnData['amountPlain'] = new Amount($this->invoice->amount, '')->toString();
$returnData['internalType'] = $this->invoice->type;
return $returnData;
}
private function getReadableStatus() : string {
switch ($this->invoice->status) {
case InvoiceStatus::INVOICE_STATUS_NEW:
return 'Unbearbeitet';
case InvoiceStatus::INVOICE_STATUS_APPROVED:
return 'Nicht exportiert';
case InvoiceStatus::INVOICE_STATUS_DENIED:
return 'Abgelehnt';
case InvoiceStatus::INVOICE_STATUS_EXPORTED:
return 'Exportiert';
}
return $this->invoice->status;
}
}