| 1234567891011121314151617181920212223242526272829303132333435363738 | <?php
namespace App\DTO;
use App\Contracts\BalanceFormattable;
readonly class AgingBucketDTO implements BalanceFormattable
{
    /**
     * @param  array<string, string>  $periods
     */
    public function __construct(
        public string $current,
        public array $periods,
        public string $overPeriods,
        public string $total,
    ) {}
    public static function fromArray(array $balances): static
    {
        $periods = [];
        // Extract all period balances
        foreach ($balances as $key => $value) {
            if (str_starts_with($key, 'period_')) {
                $periods[$key] = $value;
                unset($balances[$key]);
            }
        }
        return new static(
            current: $balances['current'],
            periods: $periods,
            overPeriods: $balances['over_periods'],
            total: $balances['total'],
        );
    }
}
 |