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('*') 'data' => MemberResource::collection(Member::select('*')
->filter($filter)->search($request->query('search', null)) ->filter($filter)->search($request->query('search', null))
->with('billKind')->with('payments')->with('memberships')->with('courses') ->with('billKind')->with('payments')->with('memberships')->with('courses')
->withSubscriptionName()->withIsConfirmed()->withPendingPayment()->withAgeGroup() ->withSubscriptionName()->withIsConfirmed()->withPendingPayment()->withAgeGroup()->withIsLeader()
->orderByRaw('lastname, firstname') ->orderByRaw('lastname, firstname')
->paginate(15) ->paginate(15)
), ),

View File

@ -28,6 +28,7 @@ use Zoomyboy\LaravelNami\Data\MembershipEntry;
* @property int $pending_payment * @property int $pending_payment
* @property bool $is_confirmed * @property bool $is_confirmed
* @property string $age_group_icon * @property string $age_group_icon
* @property bool $is_leader
* @property \Carbon\Carbon $try_created_at * @property \Carbon\Carbon $try_created_at
*/ */
class Member extends Model class Member extends Model
@ -55,6 +56,7 @@ class Member extends Model
'has_vk' => 'boolean', 'has_vk' => 'boolean',
'multiply_pv' => 'boolean', 'multiply_pv' => 'boolean',
'multiply_more_pv' => 'boolean', 'multiply_more_pv' => 'boolean',
'is_leader' => 'boolean',
]; ];
public function scopeSearch(Builder $q, ?string $text): Builder 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 public function scopeWhereHasPendingPayment(Builder $q): Builder
{ {
return $q->whereHas('payments', function (Builder $q): void { return $q->whereHas('payments', function (Builder $q): void {

View File

@ -72,6 +72,7 @@ class MemberResource extends JsonResource
'multiply_pv' => $this->multiply_pv, 'multiply_pv' => $this->multiply_pv,
'multiply_more_pv' => $this->multiply_more_pv, 'multiply_more_pv' => $this->multiply_more_pv,
'age' => $this->getModel()->getAge(), '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]); return $this->state(['nami_id' => $namiId]);
} }
public function ageGroup(): self
{
return $this->state(['is_age_group' => true]);
}
} }

View File

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

View File

@ -53,11 +53,11 @@ class IndexTest extends TestCase
$this->login()->loginNami(); $this->login()->loginNami();
$member = Member::factory() $member = Member::factory()
->defaults() ->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']); ->create(['lastname' => 'A']);
Member::factory() Member::factory()
->defaults() ->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']); ->create(['lastname' => 'B']);
Member::factory() Member::factory()
->defaults() ->defaults()
@ -68,5 +68,8 @@ class IndexTest extends TestCase
$this->assertInertiaHas(url("/member/{$member->id}/efz"), $response, 'data.data.0.efz_link'); $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.1.efz_link');
$this->assertInertiaHas(null, $response, 'data.data.2.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');
} }
} }