. */ declare(strict_types=1); namespace FireflyIII\Transformers; use FireflyIII\Models\Category; use FireflyIII\Models\TransactionCurrency; use FireflyIII\Support\Facades\Amount; use FireflyIII\Support\Facades\Steam; /** * Class CategoryTransformer */ class CategoryTransformer extends AbstractTransformer { private readonly TransactionCurrency $primaryCurrency; /** * CategoryTransformer constructor. */ public function __construct() { $this->primaryCurrency = Amount::getPrimaryCurrency(); } /** * Convert category. */ public function transform(Category $category): array { return [ 'id' => $category->id, 'created_at' => $category->created_at->toAtomString(), 'updated_at' => $category->updated_at->toAtomString(), 'name' => $category->name, 'notes' => $category->meta['notes'], // category never has currency settings. 'object_has_currency_setting' => false, 'primary_currency_id' => (string)$this->primaryCurrency->id, 'primary_currency_name' => $this->primaryCurrency->name, 'primary_currency_code' => $this->primaryCurrency->code, 'primary_currency_symbol' => $this->primaryCurrency->symbol, 'primary_currency_decimal_places' => (int)$this->primaryCurrency->decimal_places, 'spent' => $this->beautify($category->meta['spent']), 'pc_spent' => $this->beautify($category->meta['pc_spent']), 'earned' => $this->beautify($category->meta['earned']), 'pc_earned' => $this->beautify($category->meta['pc_earned']), 'transferred' => $this->beautify($category->meta['transfers']), 'pc_transferred' => $this->beautify($category->meta['pc_transfers']), 'links' => [ [ 'rel' => 'self', 'uri' => '/categories/'.$category->id, ], ], ]; } private function beautify(?array $array): ?array { if (null === $array) { return null; } $return = []; foreach ($array as $data) { $data['sum'] = Steam::bcround($data['sum'], (int)$data['currency_decimal_places']); $return[] = $data; } return $return; } }