diff --git a/app/Contribution/ContributionController.php b/app/Contribution/ContributionController.php index 89c7a7c4..558203d2 100644 --- a/app/Contribution/ContributionController.php +++ b/app/Contribution/ContributionController.php @@ -18,7 +18,7 @@ class ContributionController extends Controller session()->put('title', 'Zuschüsse'); return Inertia::render('contribution/VIndex', [ - 'members' => MemberResource::collection(Member::get()), + 'allMembers' => MemberResource::collection(Member::get()), ]); } diff --git a/app/Contribution/SolingenData.php b/app/Contribution/SolingenData.php index cbfbce52..7b2f5c56 100644 --- a/app/Contribution/SolingenData.php +++ b/app/Contribution/SolingenData.php @@ -17,8 +17,9 @@ class SolingenData extends Data implements PdfRepository public string $eventName, public string $dateFrom, public string $dateUntil, + public array $members, public ?string $filename = '', - public $type = 'FK', + public $type = 'F', ) { } @@ -28,6 +29,7 @@ class SolingenData extends Data implements PdfRepository eventName: $request->eventName, dateFrom: $request->dateFrom, dateUntil: $request->dateUntil, + members: $request->members, ); } @@ -48,7 +50,7 @@ class SolingenData extends Data implements PdfRepository public function members(): Collection { - return Member::orderByRaw('lastname, firstname')->get(); + return Member::whereIn('id', $this->members)->orderByRaw('lastname, firstname')->get(); } public function niceEventFrom(): string diff --git a/resources/js/components/FSwitch.vue b/resources/js/components/FSwitch.vue index 5d45de8f..2dc13415 100644 --- a/resources/js/components/FSwitch.vue +++ b/resources/js/components/FSwitch.vue @@ -1,14 +1,42 @@ <template> <label class="flex flex-col relative field-switch cursor-pointer" :for="id" :class="{[`size-${outerSize}`]: true}"> - <span v-if="label" class="font-semibold leading-none text-gray-400" :class="{ - 'text-xs': size == 'sm', - 'text-sm': size === null - }">{{ label }}</span> + <span + v-if="label" + class="font-semibold leading-none text-gray-400" + :class="{ + 'text-xs': size == 'sm', + 'text-sm': size === null, + }" + >{{ label }}</span + > <div class="relative inner-field mt-1" :class="`h-field-${fieldSize}`"> - <input :id="id" type="checkbox" v-model="v" :disabled="disabled" class="invisible absolute" /> - <span class="relative cursor-pointer flex grow display" :class="{'bg-switch': v === true, 'bg-gray-700': v === false}"> - <span><svg-sprite class="relative text-gray-400 flex-none" :class="{'w-2 h-2': size === 'sm' || size == 'xs', 'w-4 h-4': size === null}" src="check"></svg-sprite></span> - <span><svg-sprite class="relative text-gray-400 flex-none" :class="{'w-2 h-2': size === 'sm' || size == 'xs', 'w-4 h-4': size === null}" src="close"></svg-sprite></span> + <input + :id="id" + type="checkbox" + :name="name" + :value="value" + v-model="v" + :disabled="disabled" + class="invisible absolute" + /> + <span + class="relative cursor-pointer flex grow display" + :class="{'bg-switch': v === true, 'bg-gray-700': v === false}" + > + <span + ><svg-sprite + class="relative text-gray-400 flex-none" + :class="{'w-2 h-2': size === 'sm' || size == 'xs', 'w-4 h-4': size === null}" + src="check" + ></svg-sprite + ></span> + <span + ><svg-sprite + class="relative text-gray-400 flex-none" + :class="{'w-2 h-2': size === 'sm' || size == 'xs', 'w-4 h-4': size === null}" + src="close" + ></svg-sprite + ></span> <var class="absolute overlay bg-gray-400 rounded top-0"></var> </span> </div> @@ -19,33 +47,36 @@ export default { model: { prop: 'items', - event: 'input' + event: 'input', }, props: { inset: { type: Boolean, - default: false + default: false, }, size: { default: null, - required: false + required: false, }, id: { - required: true + required: true, + }, + name: { + default: '', }, disabled: { type: Boolean, - default: false + default: false, }, value: { - default: false + default: false, }, label: { - default: false + default: false, }, items: { - default: undefined - } + default: undefined, + }, }, computed: { v: { @@ -59,7 +90,7 @@ export default { return; } - var a = this.items.filter(i => i !== this.value); + var a = this.items.filter((i) => i !== this.value); if (v) { a.push(this.value); } @@ -76,21 +107,23 @@ export default { } return this.items.indexOf(this.value) !== -1; - } + }, }, fieldSize() { var sizes = ['xxs', 'xs', 'sm', 'md', 'lg']; - var sizeIndex = sizes.findIndex(s => s === this.size); + var sizeIndex = sizes.findIndex((s) => s === this.size); return sizes[this.inset ? sizeIndex : sizeIndex - 1]; }, outerSize() { var sizes = ['xxs', 'xs', 'sm', 'md', 'lg']; - var sizeIndex = sizes.findIndex(s => s === this.size); - if (!this.label || this.inset) { sizeIndex--; } + var sizeIndex = sizes.findIndex((s) => s === this.size); + if (!this.label || this.inset) { + sizeIndex--; + } return sizes[sizeIndex]; - } - } + }, + }, }; </script> diff --git a/resources/js/views/contribution/VIndex.vue b/resources/js/views/contribution/VIndex.vue index b88c89eb..6c045dee 100644 --- a/resources/js/views/contribution/VIndex.vue +++ b/resources/js/views/contribution/VIndex.vue @@ -17,6 +17,19 @@ label="Datum bis" required ></f-text> + + <div class="col-span-2"> + <f-switch + :id="`members-${member.id}`" + :key="member.id" + :label="`${member.firstname} ${member.lastname}`" + v-for="member in allMembers" + name="members[]" + :value="member.id" + v-model="values.members" + ></f-switch> + </div> + <button target="_BLANK" type="submit" @@ -34,6 +47,7 @@ export default { data: function () { return { values: { + members: [], event_name: '', dateFrom: '', dateUntil: '', @@ -41,7 +55,7 @@ export default { }; }, props: { - members: {}, + allMembers: {}, }, }; </script>