parent
9ab4415b16
commit
3d395b1981
app
database/factories
resources/js/views/member
tests/Feature/Member
|
@ -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)
|
||||
),
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue