Add leader lilie

This commit is contained in:
philipp lang 2022-09-06 01:25:04 +02:00
parent 9ab4415b16
commit 3d395b1981
6 changed files with 27 additions and 5 deletions
app
database/factories
resources/js/views/member
tests/Feature/Member

View File

@ -25,7 +25,7 @@ class MemberView
'data' => MemberResource::collection(Member::select('*')
->filter($filter)->search($request->query('search', null))
->with('billKind')->with('payments')->with('memberships')->with('courses')
->withSubscriptionName()->withIsConfirmed()->withPendingPayment()->withAgeGroup()
->withSubscriptionName()->withIsConfirmed()->withPendingPayment()->withAgeGroup()->withIsLeader()
->orderByRaw('lastname, firstname')
->paginate(15)
),

View File

@ -28,6 +28,7 @@ use Zoomyboy\LaravelNami\Data\MembershipEntry;
* @property int $pending_payment
* @property bool $is_confirmed
* @property string $age_group_icon
* @property bool $is_leader
* @property \Carbon\Carbon $try_created_at
*/
class Member extends Model
@ -55,6 +56,7 @@ class Member extends Model
'has_vk' => 'boolean',
'multiply_pv' => 'boolean',
'multiply_more_pv' => 'boolean',
'is_leader' => 'boolean',
];
public function scopeSearch(Builder $q, ?string $text): Builder
@ -252,6 +254,11 @@ class Member extends Model
]);
}
public function scopeWithIsLeader(Builder $q): Builder
{
return $q->selectSub('EXISTS(SELECT memberships.id FROM memberships INNER JOIN activities ON activities.id=memberships.activity_id INNER JOIN subactivities ON subactivities.id=memberships.subactivity_id WHERE members.id=memberships.member_id AND subactivities.is_age_group=1 AND activities.has_efz=1)', 'is_leader');
}
public function scopeWhereHasPendingPayment(Builder $q): Builder
{
return $q->whereHas('payments', function (Builder $q): void {

View File

@ -72,6 +72,7 @@ class MemberResource extends JsonResource
'multiply_pv' => $this->multiply_pv,
'multiply_more_pv' => $this->multiply_more_pv,
'age' => $this->getModel()->getAge(),
'is_leader' => $this->is_leader,
];
}
}

View File

@ -29,4 +29,9 @@ class SubactivityFactory extends Factory
{
return $this->state(['nami_id' => $namiId]);
}
public function ageGroup(): self
{
return $this->state(['is_age_group' => true]);
}
}

View File

@ -25,9 +25,15 @@
</thead>
<tr v-for="(member, index) in data.data" :key="index">
<td class="w-3">
<td class="w-3 flex gap-1">
<svg-sprite
class="w-3 h-3"
class="w-3 h-3 flex-none"
v-if="member.is_leader"
:class="ageColors.leiter"
src="lilie"
></svg-sprite>
<svg-sprite
class="w-3 h-3 flex-none"
v-if="member.age_group_icon"
:class="ageColors[member.age_group_icon]"
src="lilie"

View File

@ -53,11 +53,11 @@ class IndexTest extends TestCase
$this->login()->loginNami();
$member = Member::factory()
->defaults()
->has(Membership::factory()->for(Subactivity::factory())->for(Activity::factory()->state(['has_efz' => true])))
->has(Membership::factory()->for(Subactivity::factory()->ageGroup())->for(Activity::factory()->state(['has_efz' => true])))
->create(['lastname' => 'A']);
Member::factory()
->defaults()
->has(Membership::factory()->for(Subactivity::factory())->for(Activity::factory()->state(['has_efz' => false])))
->has(Membership::factory()->for(Subactivity::factory()->ageGroup())->for(Activity::factory()->state(['has_efz' => false])))
->create(['lastname' => 'B']);
Member::factory()
->defaults()
@ -68,5 +68,8 @@ class IndexTest extends TestCase
$this->assertInertiaHas(url("/member/{$member->id}/efz"), $response, 'data.data.0.efz_link');
$this->assertInertiaHas(null, $response, 'data.data.1.efz_link');
$this->assertInertiaHas(null, $response, 'data.data.2.efz_link');
$this->assertInertiaHas(true, $response, 'data.data.0.is_leader');
$this->assertInertiaHas(false, $response, 'data.data.1.is_leader');
$this->assertInertiaHas(false, $response, 'data.data.2.is_leader');
}
}