mirror of
https://github.com/HolgerHatGarKeineNode/einundzwanzig-nostr.git
synced 2025-12-13 05:26:47 +00:00
This commit modifies the query in EinundzwanzigPlebTable.php to filter out the paymentEvents where 'paid' is false. It also includes minor refactoring and formatting changes to improve code readability.
181 lines
5.9 KiB
PHP
181 lines
5.9 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire;
|
|
|
|
use App\Enums\AssociationStatus;
|
|
use App\Models\EinundzwanzigPleb;
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
use PowerComponents\LivewirePowerGrid\Button;
|
|
use PowerComponents\LivewirePowerGrid\Column;
|
|
use PowerComponents\LivewirePowerGrid\Detail;
|
|
use PowerComponents\LivewirePowerGrid\Exportable;
|
|
use PowerComponents\LivewirePowerGrid\Facades\Rule;
|
|
use PowerComponents\LivewirePowerGrid\Footer;
|
|
use PowerComponents\LivewirePowerGrid\Header;
|
|
use PowerComponents\LivewirePowerGrid\PowerGrid;
|
|
use PowerComponents\LivewirePowerGrid\PowerGridFields;
|
|
use PowerComponents\LivewirePowerGrid\PowerGridComponent;
|
|
use PowerComponents\LivewirePowerGrid\Traits\WithExport;
|
|
|
|
final class EinundzwanzigPlebTable extends PowerGridComponent
|
|
{
|
|
use WithExport;
|
|
|
|
public string $sortField = 'application_for';
|
|
|
|
public string $sortDirection = 'asc';
|
|
|
|
public bool $multiSort = true;
|
|
|
|
public function setUp(): array
|
|
{
|
|
return [
|
|
Exportable::make('export')
|
|
->striped()
|
|
->type(Exportable::TYPE_XLS, Exportable::TYPE_CSV),
|
|
Header::make()->showSearchInput(),
|
|
Footer::make()
|
|
->showPerPage(25)
|
|
->showRecordCount(),
|
|
Detail::make()
|
|
->view('components.detail')
|
|
->showCollapseIcon()
|
|
->params([]),
|
|
];
|
|
}
|
|
|
|
public function datasource(): Builder
|
|
{
|
|
return EinundzwanzigPleb::query()
|
|
->with([
|
|
'profile',
|
|
'paymentEvents' => fn($query)
|
|
=> $query
|
|
->where('year', date('Y'))
|
|
->where('paid', true),
|
|
])
|
|
->where('association_status', '>', 1)
|
|
->orWhereNotNull('application_for');
|
|
}
|
|
|
|
public function fields(): PowerGridFields
|
|
{
|
|
return PowerGrid::fields()
|
|
->add('pubkey')
|
|
->add(
|
|
'avatar',
|
|
fn($model,
|
|
)
|
|
=> '<img class="w-8 h-8 shrink-0 grow-0 rounded-full" onerror="this.onerror=null; this.src=\'https://robohash.org/test\'";" src="' . asset(
|
|
$model->profile?->picture,
|
|
) . '">',
|
|
)
|
|
->add(
|
|
'for',
|
|
fn($model,
|
|
)
|
|
=> $model->application_for ? '<div class="m-1.5"><div class="text-xs inline-flex font-medium bg-red-500/20 text-red-700 rounded-full text-center px-2.5 py-1">' . AssociationStatus::from(
|
|
$model->application_for,
|
|
)->label() . '</div></div>' : '',
|
|
)
|
|
->add(
|
|
'payment',
|
|
fn(EinundzwanzigPleb $model)
|
|
=> $model->paymentEvents->count() > 0 && $model->paymentEvents->first(
|
|
)->paid ? $model->paymentEvents->first()->amount : 'keine Zahlung vorhanden',
|
|
)
|
|
->add(
|
|
'npub',
|
|
fn(EinundzwanzigPleb $model)
|
|
=> '<a target="_blank" class="btn-xs bg-gray-900 text-gray-100 hover:bg-gray-800 dark:bg-gray-100 dark:text-gray-800 dark:hover:bg-white" href="https://next.nostrudel.ninja/#/u/' . e(
|
|
$model->npub,
|
|
) . '">Nostr Profile</a>',
|
|
)
|
|
->add(
|
|
'association_status_formatted',
|
|
fn(EinundzwanzigPleb $model)
|
|
=> $model->association_status->label(),
|
|
)
|
|
->add(
|
|
'name_lower',
|
|
fn(EinundzwanzigPleb $model)
|
|
=> strtolower(
|
|
e($model->profile?->name ?? $model->profile?->display_name ?? ''),
|
|
),
|
|
);
|
|
}
|
|
|
|
public function columns(): array
|
|
{
|
|
return [
|
|
Column::make('Avatar', 'avatar')
|
|
->visibleInExport(visible: false),
|
|
|
|
Column::make('Npub', 'npub')
|
|
->visibleInExport(visible: false)
|
|
->sortable(),
|
|
|
|
Column::make('Name', 'name_lower')
|
|
->sortable(),
|
|
|
|
Column::make('Aktueller Status', 'association_status_formatted', 'association_status')
|
|
->visibleInExport(visible: true)
|
|
->sortable(),
|
|
|
|
Column::make('Beitrag ' . date('Y'), 'payment')
|
|
->visibleInExport(visible: true),
|
|
|
|
Column::make('Bewirbt sich für', 'for', 'application_for')
|
|
->visibleInExport(visible: false)
|
|
->sortable(),
|
|
|
|
Column::action('Action')
|
|
->visibleInExport(visible: false),
|
|
];
|
|
}
|
|
|
|
public function filters(): array
|
|
{
|
|
return [];
|
|
}
|
|
|
|
#[\Livewire\Attributes\On('edit')]
|
|
public function edit($rowId): void
|
|
{
|
|
$pleb = EinundzwanzigPleb::query()->findOrFail($rowId);
|
|
$for = $pleb->application_for;
|
|
$text = $pleb->application_text;
|
|
$pleb->association_status = AssociationStatus::from($for);
|
|
$pleb->application_for = null;
|
|
$pleb->archived_application_text = $text;
|
|
$pleb->application_text = null;
|
|
$pleb->save();
|
|
|
|
$this->fillData();
|
|
}
|
|
|
|
public function actions(EinundzwanzigPleb $row): array
|
|
{
|
|
return [
|
|
Button::add('edit')
|
|
->slot('Approve')
|
|
->id()
|
|
->class(
|
|
'btn bg-white dark:bg-gray-800 border-gray-200 dark:border-gray-700/60 hover:border-gray-300 dark:hover:border-gray-600 text-green-500',
|
|
)
|
|
->dispatch('edit', ['rowId' => $row->id]),
|
|
];
|
|
}
|
|
|
|
public function actionRules(EinundzwanzigPleb $row): array
|
|
{
|
|
return [
|
|
// Hide button edit for ID 1
|
|
Rule::button('edit')
|
|
->when(fn($row) => $row->application_for === null)
|
|
->hide(),
|
|
];
|
|
}
|
|
|
|
}
|