<?php
namespace Kenepa\TranslationManager\Pages;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Contracts\HasForms;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\Page;
use Filament\Tables\Actions\Action;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Concerns\InteractsWithTable;
use Filament\Tables\Contracts\HasTable;
use Filament\Tables\Table;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Query\Builder;
use Illuminate\Support\Facades\DB;
use Kenepa\TranslationManager\Models\UserTranslation;
use Kenepa\TranslationManager\Resources\LanguageLineResource;
use Kenepa\TranslationManager\Traits\CanRegisterPanelNavigation;
class TranslationBilling extends Page implements HasForms, HasTable
{
use CanRegisterPanelNavigation;
use InteractsWithTable;
use InteractsWithForms;
protected static ?string $navigationIcon = 'heroicon-o-document-text';
// protected static ?string $navigationGroup = 'MyNavigationGroup';
protected static string $view = 'translation-manager::translation-billing';
protected static string $resource = LanguageLineResource::class;
public static function shouldRegisterNavigation(array $parameters = []): bool
{
return static::shouldRegisterOnPanel() ? config('translation-manager.quick_translate_navigation_registration') : false;
}
public static function getNavigationGroup(): ?string
{
return config('translation-manager.navigation_group');
}
public static function getNavigationIcon(): ?string
{
return 'heroicon-o-currency-dollar';
}
public function mount(): void
{
abort_unless(static::shouldRegisterOnPanel(), 403);
}
public function getTableRecordKey($record): string
{
return (string) $record->getKeyName();
}
public function table(Table $table): Table
{
return $table
->query(
UserTranslation::query()
->select('user_id', DB::raw('SUM(word_count) as total_word_count'))
->where('is_paid', false)
->groupBy('user_id')
->orderBy('total_word_count', 'desc')
)
->columns([
TextColumn::make('user.name')
->searchable(),
TextColumn::make('total_word_count')
->sortable(),
])
->filters([
// ...
])
->actions([
Action::make('mark_paid')
->label('Mark Paid')
->icon('heroicon-o-currency-dollar')
->color('success')
->before(function ($record) {
dd('hello');
})
->action(function ($record) {
dd($record);
})
->after(function(){
Notification::make()
->duration(3000)
->success()
->title('User Paid')
->body('User has been marked as paid.')
->send();
})
])
->bulkActions([
// ...
]);
}
}
<?php
namespace Kenepa\TranslationManager\Pages;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Contracts\HasForms;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\Page;
use Filament\Tables\Actions\Action;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Concerns\InteractsWithTable;
use Filament\Tables\Contracts\HasTable;
use Filament\Tables\Table;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Query\Builder;
use Illuminate\Support\Facades\DB;
use Kenepa\TranslationManager\Models\UserTranslation;
use Kenepa\TranslationManager\Resources\LanguageLineResource;
use Kenepa\TranslationManager\Traits\CanRegisterPanelNavigation;
class TranslationBilling extends Page implements HasForms, HasTable
{
use CanRegisterPanelNavigation;
use InteractsWithTable;
use InteractsWithForms;
protected static ?string $navigationIcon = 'heroicon-o-document-text';
// protected static ?string $navigationGroup = 'MyNavigationGroup';
protected static string $view = 'translation-manager::translation-billing';
protected static string $resource = LanguageLineResource::class;
public static function shouldRegisterNavigation(array $parameters = []): bool
{
return static::shouldRegisterOnPanel() ? config('translation-manager.quick_translate_navigation_registration') : false;
}
public static function getNavigationGroup(): ?string
{
return config('translation-manager.navigation_group');
}
public static function getNavigationIcon(): ?string
{
return 'heroicon-o-currency-dollar';
}
public function mount(): void
{
abort_unless(static::shouldRegisterOnPanel(), 403);
}
public function getTableRecordKey($record): string
{
return (string) $record->getKeyName();
}
public function table(Table $table): Table
{
return $table
->query(
UserTranslation::query()
->select('user_id', DB::raw('SUM(word_count) as total_word_count'))
->where('is_paid', false)
->groupBy('user_id')
->orderBy('total_word_count', 'desc')
)
->columns([
TextColumn::make('user.name')
->searchable(),
TextColumn::make('total_word_count')
->sortable(),
])
->filters([
// ...
])
->actions([
Action::make('mark_paid')
->label('Mark Paid')
->icon('heroicon-o-currency-dollar')
->color('success')
->before(function ($record) {
dd('hello');
})
->action(function ($record) {
dd($record);
})
->after(function(){
Notification::make()
->duration(3000)
->success()
->title('User Paid')
->body('User has been marked as paid.')
->send();
})
])
->bulkActions([
// ...
]);
}
}