| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 | 
							- <?php
 - 
 - namespace App\Livewire\Company\Service\LiveCurrency;
 - 
 - use App\Models\Setting\Currency;
 - use Filament\Forms\Concerns\InteractsWithForms;
 - use Filament\Forms\Contracts\HasForms;
 - use Filament\Notifications\Notification;
 - use Filament\Support\Enums\FontWeight;
 - use Filament\Support\Enums\IconPosition;
 - use Filament\Tables;
 - use Filament\Tables\Concerns\InteractsWithTable;
 - use Filament\Tables\Contracts\HasTable;
 - use Filament\Tables\Table;
 - use Illuminate\Contracts\View\View;
 - use Illuminate\Database\Eloquent\Collection;
 - use Livewire\Component;
 - 
 - class ListCompanyCurrencies extends Component implements HasForms, HasTable
 - {
 -     use InteractsWithForms;
 -     use InteractsWithTable;
 - 
 -     protected static ?string $tableModelLabel = 'Currency';
 - 
 -     public function getTableModelLabel(): ?string
 -     {
 -         return static::$tableModelLabel;
 -     }
 - 
 -     public function table(Table $table): Table
 -     {
 -         return $table
 -             ->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('<br>', 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:') . '<br><br>';
 - 
 -                             $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');
 -     }
 - }
 
 
  |