misaf / vendra-currency
Currency management with a fiat and crypto catalog, per-tenant activation, and a single default currency
Requires
- php: ^8.3
- cknow/laravel-money: ^8.5
- misaf/filament-jalali: ^5.1.4
- misaf/vendra-support: v1.10.0
- moneyphp/crypto-currencies: ^1.1.0
- spatie/eloquent-sortable: ^5.0.1
- spatie/laravel-package-tools: ^1.93.1
Requires (Dev)
- fakerphp/faker: ^1.24.1
- larastan/larastan: ^3.10.0
- laravel/boost: ^2.4.12
- laravel/pint: ^1.29.3
- misaf/vendra-testing: v1.10.0
- mockery/mockery: ^1.6.12
- nunomaduro/collision: ^8.9.4
- orchestra/testbench: ^11.1
- pestphp/pest: ^5.0
- pestphp/pest-plugin-arch: ^5.0
- pestphp/pest-plugin-laravel: ^5.0
- pestphp/pest-plugin-profanity: ^5.0
- pestphp/pest-plugin-type-coverage: ^5.0
- phpstan/extension-installer: ^1.4.3
README
Tenant-aware currency management for Vendra applications.
Features
- Catalog of installable currencies: ISO 4217 fiat (via
moneyphp/money) and crypto currencies (viamoneyphp/crypto-currencies) - Enable/disable installed currencies per tenant with a single enforced default currency
- Money formatting through
cknow/laravel-money - Filament resource on the
adminpanel
Requirements
- PHP 8.3+
- Laravel 13
- Filament 5
- Livewire 4
- Pest 4
misaf/vendra-support
Installation
composer require misaf/vendra-currency php artisan vendor:publish --tag=vendra-currency-migrations php artisan migrate
Optional configuration and translations:
php artisan vendor:publish --tag=vendra-currency-config php artisan vendor:publish --tag=vendra-currency-translations
The service provider and Filament plugin are auto-registered.
Usage
Install a currency from the catalog:
use Misaf\VendraCurrency\Models\Currency; use Misaf\VendraCurrency\Support\CurrencyRegistry; Currency::query()->create([ 'code' => 'USD', 'name' => CurrencyRegistry::nameFor('USD'), 'symbol' => '$', 'decimal_places' => CurrencyRegistry::minorUnitFor('USD'), 'type' => CurrencyRegistry::typeFor('USD'), 'is_default' => true, ]);
Browse the catalog:
CurrencyRegistry::options(); // ['USD' => 'US Dollar (USD)', ..., 'BTC' => 'BTC', ...] CurrencyRegistry::isSupported('BTC'); // true
Format an amount stored in minor units:
$currency = Currency::query()->where('code', 'USD')->firstOrFail(); $currency->formatAmount(1050); // "$10.50" $currency->money(1050); // Cknow\Money\Money instance
Exactly one enabled currency is the default at any time; use the domain action to switch it:
use Misaf\VendraCurrency\Actions\SetDefaultCurrencyAction; (new SetDefaultCurrencyAction())->execute($currency);
Filament
The Currencies resource lives in the Sales cluster on the admin panel. Install currencies from the searchable catalog, toggle their active state, reorder them, and pick the default via the table toggle or row action.
Testing
Run the package checks from the package directory:
composer test
composer analyse
License
MIT. See LICENSE.