Add filter for activity and subactivity
continuous-integration/drone/push Build is passing Details

This commit is contained in:
philipp lang 2021-08-23 00:46:41 +02:00
parent 6f9ccd7c92
commit 6e8d169f54
8 changed files with 65 additions and 3 deletions

View File

@ -11,7 +11,7 @@ class Activity extends Model
use HasNamiField;
public $fillable = ['name', 'nami_id'];
public $fillable = ['name', 'is_filterable', 'nami_id'];
public $timestamps = false;
public $casts = [

View File

@ -9,6 +9,7 @@ use App\Payment\ActionFactory;
use App\Payment\PaymentResource;
use App\Payment\Status;
use App\Payment\Subscription;
use App\Subactivity;
use Illuminate\Http\Request;
class MemberView {
@ -23,6 +24,8 @@ class MemberView {
->orderByRaw('lastname, firstname')
->paginate(15)
),
'filterActivities' => Activity::where('is_filterable', true)->get()->pluck('name', 'id'),
'filterSubactivities' => Subactivity::where('is_filterable', true)->get()->pluck('name', 'id'),
'toolbar' => [ ['href' => route('member.index'), 'label' => 'Zurück', 'color' => 'primary', 'icon' => 'plus'] ],
'paymentDefaults' => ['nr' => date('Y')],
'subscriptions' => Subscription::get()->pluck('name', 'id'),

View File

@ -204,6 +204,16 @@ class Member extends Model
if (data_get($filter, 'bill_kind', false)) {
$q->where('bill_kind_id', $filter['bill_kind']);
}
if (data_get($filter, 'subactivity_id', false) || data_get($filter, 'activity_id', false)) {
$q->whereHas('memberships', function ($q) use ($filter) {
if (data_get($filter, 'subactivity_id', false)) {
$q->where('subactivity_id', $filter['subactivity_id']);
}
if (data_get($filter, 'activity_id', false)) {
$q->where('activity_id', $filter['activity_id']);
}
});
}
return $q;
}

View File

@ -23,6 +23,8 @@ class MemberController extends Controller
public $filter = [
'ausstand' => false,
'bill_kind' => null,
'activity_id' => null,
'subactivity_id' => null,
];
public function index(Request $request): Response {

View File

@ -15,7 +15,7 @@ class Subactivity extends Model
use HasNamiField;
use Sluggable;
public $fillable = ['is_age_group', 'slug', 'name', 'nami_id'];
public $fillable = ['is_age_group', 'is_filterable', 'slug', 'name', 'nami_id'];
public $timestamps = false;

View File

@ -0,0 +1,41 @@
<?php
use App\Activity;
use App\Subactivity;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateActivitiesIsLeaderColumn extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('activities', function (Blueprint $table) {
$table->boolean('is_filterable')->after('name')->default(false);
});
Schema::table('subactivities', function (Blueprint $table) {
$table->boolean('is_filterable')->after('slug')->default(false);
});
Activity::whereIn('name', ['€ Mitglied', '€ passive Mitgliedschaft', 'Schnuppermitgliedschaft', '€ LeiterIn', '€ KassiererIn', '€ KassenprüferIn'])
->update(['is_filterable' => true]);
SubActivity::whereIn('name', ['Biber', 'Wölfling', 'Jungpfadfinder', 'Pfadfinder', 'Rover', 'Vorstand', 'Sonstige'])
->update(['is_filterable' => true]);
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('activities', function (Blueprint $table) {
//
});
}
}

View File

@ -2,6 +2,8 @@
<div class="px-6 py-2 flex border-b border-gray-600 space-x-3">
<f-switch id="ausstand" @input="reload" v-model="value.ausstand" label="Nur Ausstände" size="sm"></f-switch>
<f-select id="billKinds" @input="reload" :options="billKinds" v-model="value.bill_kind" label="Rechnung" size="sm"></f-select>
<f-select id="activity_id" @input="reload" :options="activities" v-model="value.activity_id" label="Tätigkeit" size="sm"></f-select>
<f-select id="subactivity_id" @input="reload" :options="subactivities" v-model="value.subactivity_id" label="Untertätigkeit" size="sm"></f-select>
</div>
</template>
@ -15,6 +17,8 @@ export default {
props: {
value: {},
billKinds: {},
activities: {},
subactivities: {},
},
methods: {

View File

@ -1,7 +1,7 @@
<template>
<div>
<filt v-model="query.filter" :bill-kinds="billKinds"></filt>
<filt v-model="query.filter" :activities="filterActivities" :subactivities="filterSubactivities" :bill-kinds="billKinds"></filt>
<table cellspacing="0" cellpadding="0" border="0" class="custom-table custom-table-sm">
<thead>
@ -118,6 +118,8 @@ export default {
billKinds: {},
activities: {},
subactivities: {},
filterActivities: {},
filterSubactivities: {},
}
}
</script>