remove member view
continuous-integration/drone/push Build is failing Details

This commit is contained in:
philipp lang 2023-05-02 23:49:16 +02:00
parent 55ef4efe50
commit 3c64dee689
5 changed files with 59 additions and 115 deletions

View File

@ -1,43 +0,0 @@
<?php
namespace App\Http\Views;
use App\Activity;
use App\Course\Models\Course;
use App\Member\FilterScope;
use App\Member\Member;
use App\Member\MemberResource;
use App\Payment\Status;
use App\Payment\Subscription;
use App\Region;
use App\Subactivity;
use Illuminate\Http\Request;
class MemberView
{
public function index(Request $request): array
{
$activities = Activity::with('subactivities')->get();
$filter = FilterScope::fromRequest($request->input('filter', ''));
return [
'data' => MemberResource::collection(Member::search($filter->search)->query(fn ($q) => $q->select('*')
->withFilter($filter)
->with('payments.subscription')->with(['memberships' => fn ($query) => $query->active()])->with('courses')->with('subscription')->with('leaderMemberships')->with('ageGroupMemberships')
->withPendingPayment()
->ordered()
)->paginate(15)),
'filterActivities' => Activity::where('is_filterable', true)->pluck('name', 'id'),
'filterSubactivities' => Subactivity::where('is_filterable', true)->pluck('name', 'id'),
'paymentDefaults' => ['nr' => date('Y')],
'subscriptions' => Subscription::pluck('name', 'id'),
'statuses' => Status::pluck('name', 'id'),
'regions' => Region::forSelect(),
'activities' => $activities->pluck('name', 'id'),
'courses' => Course::pluck('name', 'id'),
'subactivities' => $activities->map(function (Activity $activity) {
return ['subactivities' => $activity->subactivities->pluck('name', 'id'), 'id' => $activity->id];
})->pluck('subactivities', 'id'),
];
}
}

View File

@ -2,16 +2,8 @@
namespace App\Member; namespace App\Member;
use App\Activity;
use App\Confession;
use App\Country; use App\Country;
use App\Gender;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Http\Views\MemberView;
use App\Invoice\BillKind;
use App\Nationality;
use App\Payment\Subscription;
use App\Region;
use App\Setting\GeneralSettings; use App\Setting\GeneralSettings;
use App\Setting\NamiSettings; use App\Setting\NamiSettings;
use Illuminate\Http\RedirectResponse; use Illuminate\Http\RedirectResponse;
@ -25,11 +17,16 @@ class MemberController extends Controller
{ {
session()->put('menu', 'member'); session()->put('menu', 'member');
session()->put('title', 'Mitglieder'); session()->put('title', 'Mitglieder');
$filter = FilterScope::fromRequest($request->input('filter', ''));
$payload = app(MemberView::class)->index($request); return \Inertia::render('member/VIndex', [
$payload['billKinds'] = BillKind::forSelect(); 'data' => MemberResource::collection(Member::search($filter->search)->query(fn ($q) => $q->select('*')
->withFilter($filter)
return \Inertia::render('member/VIndex', $payload); ->with('payments.subscription')->with(['memberships' => fn ($query) => $query->active()])->with('courses')->with('subscription')->with('leaderMemberships')->with('ageGroupMemberships')
->withPendingPayment()
->ordered()
)->paginate(15)),
]);
} }
public function create(): Response public function create(): Response
@ -37,20 +34,7 @@ class MemberController extends Controller
session()->put('menu', 'member'); session()->put('menu', 'member');
session()->put('title', 'Mitglied erstellen'); session()->put('title', 'Mitglied erstellen');
$activities = Activity::remote()->with(['subactivities' => fn ($q) => $q->remote()])->get();
return \Inertia::render('member/VForm', [ return \Inertia::render('member/VForm', [
'activities' => $activities->pluck('name', 'id'),
'subactivities' => $activities->map(function (Activity $activity) {
return ['subactivities' => $activity->subactivities()->pluck('name', 'id'), 'id' => $activity->id];
})->pluck('subactivities', 'id'),
'billKinds' => BillKind::forSelect(),
'genders' => Gender::pluck('name', 'id'),
'countries' => Country::pluck('name', 'id'),
'regions' => Region::where('is_null', false)->pluck('name', 'id'),
'nationalities' => Nationality::pluck('name', 'id'),
'confessions' => Confession::where('is_null', false)->pluck('name', 'id'),
'subscriptions' => Subscription::pluck('name', 'id'),
'data' => [ 'data' => [
'country_id' => Country::default(), 'country_id' => Country::default(),
'efz' => null, 'efz' => null,
@ -76,20 +60,7 @@ class MemberController extends Controller
session()->put('menu', 'member'); session()->put('menu', 'member');
session()->put('title', "Mitglied {$member->firstname} {$member->lastname} bearbeiten"); session()->put('title', "Mitglied {$member->firstname} {$member->lastname} bearbeiten");
$activities = Activity::remote()->with(['subactivities' => fn ($q) => $q->remote()])->get();
return \Inertia::render('member/VForm', [ return \Inertia::render('member/VForm', [
'activities' => $activities->pluck('name', 'id'),
'subactivities' => $activities->map(function ($activity) {
return ['subactivities' => $activity->subactivities->pluck('name', 'id'), 'id' => $activity->id];
})->pluck('subactivities', 'id'),
'billKinds' => BillKind::forSelect(),
'genders' => Gender::pluck('name', 'id'),
'countries' => Country::pluck('name', 'id'),
'regions' => Region::where('is_null', false)->pluck('name', 'id'),
'nationalities' => Nationality::pluck('name', 'id'),
'confessions' => Confession::where('is_null', false)->pluck('name', 'id'),
'subscriptions' => Subscription::select('name', 'id')->get(),
'data' => new MemberResource($member), 'data' => new MemberResource($member),
'mode' => 'edit', 'mode' => 'edit',
'conflict' => '1' === $request->query('conflict', '0'), 'conflict' => '1' === $request->query('conflict', '0'),

View File

@ -2,14 +2,24 @@
namespace App\Member; namespace App\Member;
use App\Activity;
use App\Country;
use App\Course\Models\Course;
use App\Course\Resources\CourseMemberResource; use App\Course\Resources\CourseMemberResource;
use App\Gender;
use App\Invoice\BillKind;
use App\Lib\HasMeta; use App\Lib\HasMeta;
use App\Member\Data\NestedGroup; use App\Member\Data\NestedGroup;
use App\Member\Resources\NationalityResource; use App\Member\Resources\NationalityResource;
use App\Member\Resources\RegionResource; use App\Member\Resources\RegionResource;
use App\Membership\MembershipResource; use App\Membership\MembershipResource;
use App\Nationality;
use App\Payment\PaymentResource; use App\Payment\PaymentResource;
use App\Payment\Status;
use App\Payment\Subscription;
use App\Payment\SubscriptionResource; use App\Payment\SubscriptionResource;
use App\Region;
use App\Subactivity;
use Illuminate\Http\Resources\Json\JsonResource; use Illuminate\Http\Resources\Json\JsonResource;
/** /**
@ -103,9 +113,25 @@ class MemberResource extends JsonResource
*/ */
public static function meta(): array public static function meta(): array
{ {
$activities = Activity::remote()->with(['subactivities' => fn ($q) => $q->remote()])->get();
return [ return [
'filterActivities' => Activity::where('is_filterable', true)->pluck('name', 'id'),
'filterSubactivities' => Subactivity::where('is_filterable', true)->pluck('name', 'id'),
'formActivities' => $activities->pluck('name', 'id'),
'formSubactivities' => $activities->map(function (Activity $activity) {
return ['subactivities' => $activity->subactivities()->pluck('name', 'id'), 'id' => $activity->id];
})->pluck('subactivities', 'id'),
'groups' => NestedGroup::cacheForSelect(), 'groups' => NestedGroup::cacheForSelect(),
'filter' => FilterScope::fromRequest(request()->input('filter', '')), 'filter' => FilterScope::fromRequest(request()->input('filter', '')),
'courses' => Course::pluck('name', 'id'),
'regions' => Region::forSelect(),
'statuses' => Status::pluck('name', 'id'),
'subscriptions' => Subscription::pluck('name', 'id'),
'countries' => Country::pluck('name', 'id'),
'genders' => Gender::pluck('name', 'id'),
'billKinds' => BillKind::forSelect(),
'nationalities' => Nationality::pluck('name', 'id'),
'links' => [ 'links' => [
'index' => route('member.index'), 'index' => route('member.index'),
'create' => route('member.create'), 'create' => route('member.create'),

View File

@ -21,10 +21,10 @@
<box heading="Stammdaten"> <box heading="Stammdaten">
<div class="grid sm:grid-cols-2 gap-3"> <div class="grid sm:grid-cols-2 gap-3">
<div class="grid grid-cols-2 gap-3"> <div class="grid grid-cols-2 gap-3">
<f-select id="gender_id" name="gender_id" :options="genders" v-model="inner.gender_id" label="Geschlecht" size="sm"></f-select> <f-select id="gender_id" name="gender_id" :options="meta.genders" v-model="inner.gender_id" label="Geschlecht" size="sm"></f-select>
<f-text id="salutation" v-model="inner.salutation" size="sm" label="Anrede"></f-text> <f-text id="salutation" v-model="inner.salutation" size="sm" label="Anrede"></f-text>
</div> </div>
<f-select :options="nationalities" id="nationality_id" v-model="inner.nationality_id" label="Staatsangehörigkeit" name="nationality_id" size="sm" required></f-select> <f-select :options="meta.nationalities" id="nationality_id" v-model="inner.nationality_id" label="Staatsangehörigkeit" name="nationality_id" size="sm" required></f-select>
<f-text id="firstname" v-model="inner.firstname" size="sm" label="Vorname" required></f-text> <f-text id="firstname" v-model="inner.firstname" size="sm" label="Vorname" required></f-text>
<f-text id="lastname" v-model="inner.lastname" size="sm" label="Nachname" required></f-text> <f-text id="lastname" v-model="inner.lastname" size="sm" label="Nachname" required></f-text>
<f-text id="address" v-model="inner.address" size="sm" label="Adresse" required></f-text> <f-text id="address" v-model="inner.address" size="sm" label="Adresse" required></f-text>
@ -32,8 +32,8 @@
<f-text id="zip" v-model="inner.zip" size="sm" label="PLZ" required></f-text> <f-text id="zip" v-model="inner.zip" size="sm" label="PLZ" required></f-text>
<f-text id="location" v-model="inner.location" size="sm" label="Ort" required></f-text> <f-text id="location" v-model="inner.location" size="sm" label="Ort" required></f-text>
<f-text type="date" id="birthday" v-model="inner.birthday" size="sm" label="Geburtsdatum" required></f-text> <f-text type="date" id="birthday" v-model="inner.birthday" size="sm" label="Geburtsdatum" required></f-text>
<f-select :options="regions" name="region_id" id="region_id" v-model="inner.region_id" label="Bundesland" size="sm"></f-select> <f-select :options="meta.regions" name="region_id" id="region_id" v-model="inner.region_id" label="Bundesland" size="sm"></f-select>
<f-select :options="countries" id="country_id" v-model="inner.country_id" label="Land" name="country_id" size="sm" required></f-select> <f-select :options="meta.countries" id="country_id" v-model="inner.country_id" label="Land" name="country_id" size="sm" required></f-select>
<f-text id="other_country" v-model="inner.other_country" label="Andere Staatsangehörigkeit" size="sm"></f-text> <f-text id="other_country" v-model="inner.other_country" label="Andere Staatsangehörigkeit" size="sm"></f-text>
</div> </div>
</box> </box>
@ -51,17 +51,25 @@
</box> </box>
<box heading="System"> <box heading="System">
<div class="grid gap-3"> <div class="grid gap-3">
<f-select :options="billKinds" id="bill_kind" v-model="inner.bill_kind" label="Rechnung versenden über" name="bill_kind" size="sm"></f-select> <f-select :options="meta.billKinds" id="bill_kind" v-model="inner.bill_kind" label="Rechnung versenden über" name="bill_kind" size="sm"></f-select>
<f-select :options="subscriptions" id="subscription_id" v-model="inner.subscription_id" label="Beitrag" name="subscription_id" size="sm"></f-select> <f-select :options="meta.subscriptions" id="subscription_id" v-model="inner.subscription_id" label="Beitrag" name="subscription_id" size="sm"></f-select>
<f-switch id="has_nami" size="sm" v-model="inner.has_nami" label="In Nami eintragen"></f-switch> <f-switch id="has_nami" size="sm" v-model="inner.has_nami" label="In Nami eintragen"></f-switch>
<f-switch id="send_newspaper" v-model="inner.send_newspaper" label="Mittendrin versenden" size="sm"></f-switch> <f-switch id="send_newspaper" v-model="inner.send_newspaper" label="Mittendrin versenden" size="sm"></f-switch>
<f-text class="sm:col-span-2" type="date" id="joined_at" v-model="inner.joined_at" label="Eintrittsdatum" size="sm"></f-text> <f-text class="sm:col-span-2" type="date" id="joined_at" v-model="inner.joined_at" label="Eintrittsdatum" size="sm"></f-text>
<f-textarea rows="3" id="comment" class="col-span-2" v-model="inner.comment" label="Kommentar" size="sm"></f-textarea> <f-textarea rows="3" id="comment" class="col-span-2" v-model="inner.comment" label="Kommentar" size="sm"></f-textarea>
<div class="contents" v-if="mode === 'create'"> <div class="contents" v-if="mode === 'create'">
<f-select :options="activities" id="first_activity_id" v-model="inner.first_activity_id" label="Erste Tätigkeit" name="first_activity_id" size="sm" required></f-select> <f-select
:options="meta.formActivities"
id="first_activity_id"
v-model="inner.first_activity_id"
label="Erste Tätigkeit"
name="first_activity_id"
size="sm"
required
></f-select>
<f-select <f-select
v-if="inner.first_activity_id" v-if="inner.first_activity_id"
:options="subactivities[inner.first_activity_id]" :options="meta.formSubactivities[inner.first_activity_id]"
id="first_subactivity_id" id="first_subactivity_id"
v-model="inner.first_subactivity_id" v-model="inner.first_subactivity_id"
label="Erste Untertätigkeit" label="Erste Untertätigkeit"
@ -130,17 +138,8 @@ export default {
}, },
props: { props: {
subactivities: {},
activities: {},
mode: {}, mode: {},
genders: {},
subscriptions: {},
data: {}, data: {},
regions: {},
countries: {},
nationalities: {},
confessions: {},
billKinds: {},
conflict: {}, conflict: {},
meta: {}, meta: {},
}, },

View File

@ -14,7 +14,7 @@
name="billKinds" name="billKinds"
id="billKinds" id="billKinds"
@input="setFilter('bill_kind', $event)" @input="setFilter('bill_kind', $event)"
:options="billKinds" :options="data.meta.billKinds"
:value="getFilter('bill_kind')" :value="getFilter('bill_kind')"
label="Rechnung" label="Rechnung"
size="sm" size="sm"
@ -22,7 +22,7 @@
<f-select <f-select
id="activity_id" id="activity_id"
@input="setFilter('activity_id', $event)" @input="setFilter('activity_id', $event)"
:options="filterActivities" :options="data.meta.filterActivities"
:value="getFilter('activity_id')" :value="getFilter('activity_id')"
label="Tätigkeit" label="Tätigkeit"
size="sm" size="sm"
@ -31,7 +31,7 @@
<f-select <f-select
id="subactivity_id" id="subactivity_id"
@input="setFilter('subactivity_id', $event)" @input="setFilter('subactivity_id', $event)"
:options="filterSubactivities" :options="data.meta.filterSubactivities"
:value="getFilter('subactivity_id')" :value="getFilter('subactivity_id')"
label="Untertätigkeit" label="Untertätigkeit"
size="sm" size="sm"
@ -100,19 +100,19 @@
<member-payments <member-payments
v-if="single !== null && sidebar === 'payment.index'" v-if="single !== null && sidebar === 'payment.index'"
@close="closeSidebar" @close="closeSidebar"
:subscriptions="subscriptions" :subscriptions="data.meta.subscriptions"
:statuses="statuses" :statuses="data.meta.statuses"
:value="data.data[single]" :value="data.data[single]"
></member-payments> ></member-payments>
<member-memberships <member-memberships
v-if="single !== null && sidebar === 'membership.index'" v-if="single !== null && sidebar === 'membership.index'"
@close="closeSidebar" @close="closeSidebar"
:groups="data.meta.groups" :groups="data.meta.groups"
:activities="activities" :activities="data.meta.formActivities"
:subactivities="subactivities" :subactivities="data.meta.formSubactivities"
:value="data.data[single]" :value="data.data[single]"
></member-memberships> ></member-memberships>
<member-courses v-if="single !== null && sidebar === 'courses.index'" @close="closeSidebar" :courses="courses" :value="data.data[single]"></member-courses> <member-courses v-if="single !== null && sidebar === 'courses.index'" @close="closeSidebar" :courses="data.meta.courses" :value="data.data[single]"></member-courses>
</transition> </transition>
</page-layout> </page-layout>
</template> </template>
@ -163,16 +163,7 @@ export default {
}, },
props: { props: {
subscriptions: {},
statuses: {},
paymentDefaults: {},
query: {}, query: {},
billKinds: {},
activities: {},
subactivities: {},
filterActivities: {},
filterSubactivities: {},
courses: {},
}, },
}; };
</script> </script>