query(Currency::query())
->modelLabel($this->getTableModelLabel())
->columns([
Tables\Columns\TextColumn::make('code')
->localizeLabel()
->weight(FontWeight::Medium)
->icon(static fn (Currency $record) => $record->isEnabled() ? 'heroicon-o-lock-closed' : null)
->tooltip(function (Currency $record) {
$tooltipMessage = translate('Default :Record', [
'Record' => $this->getTableModelLabel(),
]);
return $record->isEnabled() ? $tooltipMessage : null;
})
->iconPosition(IconPosition::After)
->sortable()
->searchable(),
Tables\Columns\TextColumn::make('name')
->localizeLabel()
->sortable()
->searchable(),
Tables\Columns\TextColumn::make('rate')
->localizeLabel()
->sortable()
->searchable(),
Tables\Columns\TextColumn::make('live_rate')
->localizeLabel()
->sortable()
->searchable(),
])
->filters([
//
])
->actions([
Tables\Actions\Action::make('update_rate')
->label('Update Rate')
->icon('heroicon-o-arrow-path')
->hidden(static fn (Currency $record): bool => $record->isEnabled() || ($record->rate === $record->live_rate))
->requiresConfirmation()
->action(static function (Currency $record): void {
if (($record->rate !== $record->live_rate) && $record->isDisabled()) {
$record->update([
'rate' => $record->live_rate,
]);
Notification::make()
->success()
->title('Exchange Rate Updated')
->body(__('The exchange rate for :currency has been updated to reflect the current market rate.', [
'currency' => $record->name,
]))
->send();
}
}),
])
->bulkActions([
Tables\Actions\BulkAction::make('update_rate')
->label('Update Rate')
->icon('heroicon-o-arrow-path')
->requiresConfirmation()
->deselectRecordsAfterCompletion()
->action(function (Collection $records): void {
$updatedCurrencies = [];
$records->each(function (Currency $record) use (&$updatedCurrencies): void {
if (($record->rate !== $record->live_rate) && $record->isDisabled()) {
$record->update([
'rate' => $record->live_rate,
]);
$updatedCurrencies[] = $record->name;
}
});
if (filled($updatedCurrencies)) {
$currencyList = implode('
', array_map(static function ($currency) {
return '• ' . $currency;
}, $updatedCurrencies));
$message = __('The exchange rate for the following currencies has been updated to reflect the current market rate:') . '
';
$message .= $currencyList;
Notification::make()
->success()
->title('Exchange Rates Updated')
->body($message)
->send();
}
}),
])
->checkIfRecordIsSelectableUsing(static function (Currency $record): bool {
return ($record->rate !== $record->live_rate) && $record->isDisabled();
});
}
public function render(): View
{
return view('livewire.company.service.live-currency.list-company-currencies');
}
}