| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 | <?php
namespace App\Console\Commands;
use Akaunting\Money\Currency;
use App\Contracts\CurrencyHandler;
use App\Facades\Forex;
use App\Models\Service\CurrencyList;
use Illuminate\Console\Command;
class InitializeCurrencies extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'currency:init';
    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Initialize currencies from the API';
    public function __construct(private readonly CurrencyHandler $currencyService)
    {
        parent::__construct();
    }
    /**
     * Execute the console command.
     */
    public function handle(): void
    {
        $this->info('Fetching supported currencies from the API...');
        $apiSupportedCurrencies = $this->currencyService->getSupportedCurrencies();
        if (Forex::isDisabled()) {
            $this->error('The Currency Exchange Rate feature is disabled.');
            return;
        }
        if (empty($apiSupportedCurrencies)) {
            $this->error('Failed to fetch supported currencies from the API.');
            return;
        }
        $appSupportedCurrencies = array_keys(Currency::getCurrencies());
        foreach ($appSupportedCurrencies as $appSupportedCurrency) {
            $isAvailable = in_array($appSupportedCurrency, $apiSupportedCurrencies, true);
            $currencyAttributes = [
                'code' => $appSupportedCurrency,
                'name' => currency($appSupportedCurrency)->getName(),
                'entity' => currency($appSupportedCurrency)->getEntity(),
                'available' => $isAvailable,
            ];
            CurrencyList::updateOrCreate(
                ['code' => $appSupportedCurrency],
                $currencyAttributes
            );
        }
        $this->info('Successfully initialized currencies.');
    }
}
 |