. */ declare(strict_types=1); namespace FireflyIII\Transformers; use FireflyIII\Models\BudgetLimit; use FireflyIII\Repositories\Budget\OperationsRepository; use Illuminate\Support\Collection; use League\Fractal\Resource\Item; /** * Class BudgetLimitTransformer */ class BudgetLimitTransformer extends AbstractTransformer { protected array $availableIncludes = [ 'budget', ]; /** * Include Budget * * @return Item */ public function includeBudget(BudgetLimit $limit) { return $this->item($limit->budget, new BudgetTransformer(), 'budgets'); } /** * Transform the note. */ public function transform(BudgetLimit $budgetLimit): array { $repository = app(OperationsRepository::class); $repository->setUser($budgetLimit->budget->user); $expenses = $repository->sumExpenses( $budgetLimit->start_date, $budgetLimit->end_date, null, new Collection([$budgetLimit->budget]), $budgetLimit->transactionCurrency ); $currency = $budgetLimit->transactionCurrency; $amount = $budgetLimit->amount; $currencyDecimalPlaces = 2; $currencyId = null; $currencyName = null; $currencyCode = null; $currencySymbol = null; if (null !== $currency) { $amount = $budgetLimit->amount; $currencyId = $currency->id; $currencyName = $currency->name; $currencyCode = $currency->code; $currencySymbol = $currency->symbol; $currencyDecimalPlaces = $currency->decimal_places; } $amount = app('steam')->bcround($amount, $currencyDecimalPlaces); return [ 'id' => (string)$budgetLimit->id, 'created_at' => $budgetLimit->created_at->toAtomString(), 'updated_at' => $budgetLimit->updated_at->toAtomString(), 'start' => $budgetLimit->start_date->toAtomString(), 'end' => $budgetLimit->end_date->endOfDay()->toAtomString(), 'budget_id' => (string)$budgetLimit->budget_id, 'currency_id' => (string)$currencyId, 'currency_code' => $currencyCode, 'currency_name' => $currencyName, 'currency_decimal_places' => $currencyDecimalPlaces, 'currency_symbol' => $currencySymbol, 'amount' => $amount, 'period' => $budgetLimit->period, 'spent' => $expenses[$currencyId]['sum'] ?? '0', 'links' => [ [ 'rel' => 'self', 'uri' => '/budgets/limits/'.$budgetLimit->id, ], ], ]; } }