Add create all payment pdf
This commit is contained in:
parent
21bb6aadf6
commit
78a05ec82a
|
@ -2,19 +2,19 @@
|
|||
|
||||
namespace App\Member;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Gender;
|
||||
use App\Region;
|
||||
use App\Country;
|
||||
use App\Nationality;
|
||||
use App\Confession;
|
||||
use App\Bill\BillKind;
|
||||
use App\Activity;
|
||||
use App\Bill\BillKind;
|
||||
use App\Confession;
|
||||
use App\Country;
|
||||
use App\Gender;
|
||||
use App\Group;
|
||||
use App\Payment\Subscription;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Views\MemberView;
|
||||
use App\Member\DeleteJob;
|
||||
use App\Nationality;
|
||||
use App\Payment\Subscription;
|
||||
use App\Region;
|
||||
use Illuminate\Http\Request;
|
||||
use Inertia\Response;
|
||||
|
||||
class MemberController extends Controller
|
||||
|
@ -27,7 +27,8 @@ class MemberController extends Controller
|
|||
$payload = app(MemberView::class)->index($request);
|
||||
$payload['toolbar'] = [
|
||||
['href' => route('member.create'), 'label' => 'Mitglied anlegen', 'color' => 'primary', 'icon' => 'plus'],
|
||||
['href' => route('allpayment.create'), 'label' => 'Rechnungen erstellen', 'color' => 'primary', 'icon' => 'plus']
|
||||
['href' => route('allpayment.create'), 'label' => 'Rechnungen erstellen', 'color' => 'primary', 'icon' => 'plus'],
|
||||
['href' => route('sendpayment.create'), 'label' => 'Rechnungen versenden', 'color' => 'info', 'icon' => 'envelope'],
|
||||
];
|
||||
|
||||
return \Inertia::render('member/Index', $payload);
|
||||
|
|
|
@ -22,4 +22,16 @@ class ActionFactory
|
|||
});
|
||||
}
|
||||
|
||||
public function allLinks(): Collection
|
||||
{
|
||||
return app(PdfRepositoryFactory::class)->getTypes()->map(function(string $repo) {
|
||||
$repo = app($repo);
|
||||
|
||||
return [
|
||||
'href' => route('sendpayment.pdf', ['type' => get_class($repo)]),
|
||||
'label' => $repo->allLabel(),
|
||||
];
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
|
||||
namespace App\Payment;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Pdf\PdfGenerator;
|
||||
use App\Pdf\PdfRepositoryFactory;
|
||||
use Illuminate\Http\Request;
|
||||
use Inertia\Inertia;
|
||||
use Inertia\Response as InertiaResponse;
|
||||
|
||||
class SendpaymentController extends Controller
|
||||
{
|
||||
|
||||
public function create(): InertiaResponse
|
||||
{
|
||||
session()->put('menu', 'member');
|
||||
session()->put('title', 'Rechnungen versenden');
|
||||
|
||||
return Inertia::render('sendpayment/Form', [
|
||||
'links' => app(ActionFactory::class)->allLinks(),
|
||||
]);
|
||||
}
|
||||
|
||||
public function send(Request $request)
|
||||
{
|
||||
$repo = app(PdfRepositoryFactory::class)->forAll($request->type);
|
||||
|
||||
return $repo === null
|
||||
? response()->noContent()
|
||||
: app(PdfGenerator::class)->setRepository($repo)->render();
|
||||
}
|
||||
|
||||
}
|
|
@ -92,4 +92,9 @@ class BillType extends Repository implements PdfRepository
|
|||
return "Mitgliedsbeitrag für {$this->getFamilyName($page)}";
|
||||
}
|
||||
|
||||
public function allLabel(): string
|
||||
{
|
||||
return 'Rechnungen versenden';
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -37,4 +37,6 @@ interface PdfRepository
|
|||
|
||||
public function getUsage(Collection $page): string;
|
||||
|
||||
public function allLabel(): string;
|
||||
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
namespace App\Pdf;
|
||||
|
||||
use App\Member\Member;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
|
@ -34,6 +35,17 @@ class PdfRepositoryFactory
|
|||
);
|
||||
}
|
||||
|
||||
public function forAll(string $type): ?PdfRepository
|
||||
{
|
||||
$members = $this->allMemberCollection($type);
|
||||
|
||||
if ($members->isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $this->resolve($type, $members)->setFilename('alle-rechnungen');
|
||||
}
|
||||
|
||||
public function singleMemberCollection(Member $member, string $type): Collection
|
||||
{
|
||||
$members = Member::where($member->only(['lastname', 'address', 'zip', 'location']))
|
||||
|
@ -43,6 +55,15 @@ class PdfRepositoryFactory
|
|||
return $this->toMemberGroup($members);
|
||||
}
|
||||
|
||||
public function allMemberCollection(string $type): Collection
|
||||
{
|
||||
$members = Member::whereHas('billKind', fn (Builder $q) => $q->where('name', 'Post'))
|
||||
->get()
|
||||
->filter(fn (Member $member) => app($type)->createable($member));
|
||||
|
||||
return $this->toMemberGroup($members);
|
||||
}
|
||||
|
||||
private function resolve(string $kind, Collection $members): PdfRepository
|
||||
{
|
||||
return new $kind($members);
|
||||
|
|
|
@ -26,9 +26,9 @@
|
|||
}
|
||||
}
|
||||
&.btn-info {
|
||||
@apply bg-blue-700;
|
||||
@apply bg-blue-700 text-blue-300;
|
||||
&:not(.disabled):hover {
|
||||
@apply bg-blue-500;
|
||||
@apply bg-blue-500 text-blue-100;
|
||||
}
|
||||
}
|
||||
&.btn-danger {
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
<div class="flex">
|
||||
<span class="text-xl font-semibold text-white leading-none" v-html="$page.props.title"></span>
|
||||
<div class="flex ml-4">
|
||||
<inertia-link v-for="link, index in $page.props.toolbar" :key="index" :href="link.href" v-text="link.label" class="btn label btn-primary mr-2" :class="link.color">
|
||||
<inertia-link v-for="link, index in $page.props.toolbar" :key="index" :href="link.href" v-text="link.label" class="btn label mr-2" :class="`btn-${link.color}`">
|
||||
<sprite :src="link.icon"></sprite>
|
||||
</inertia-link>
|
||||
</div>
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
<template>
|
||||
<div class="p-6">
|
||||
<a :href="link.href" target="_BLANK" v-for="link in links" class="btn btn-primary" v-text="link.label"></a>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data: function() {
|
||||
return {
|
||||
inner: {},
|
||||
};
|
||||
},
|
||||
|
||||
props: {
|
||||
links: {}
|
||||
},
|
||||
|
||||
methods: {
|
||||
submit() {
|
||||
this.$inertia.post(`/allpayment`, this.inner)
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
</script>
|
|
@ -6,14 +6,15 @@ use App\Member\MemberConfirmController;
|
|||
use App\Member\MemberController;
|
||||
use App\Payment\AllpaymentController;
|
||||
use App\Payment\PaymentController;
|
||||
use App\Payment\SendpaymentController;
|
||||
use App\Payment\SubscriptionController;
|
||||
use App\Pdf\MemberPdfController;
|
||||
|
||||
Route::group(['namespace' => 'App\\Http\\Controllers'], function() {
|
||||
Route::group(['namespace' => 'App\\Http\\Controllers'], function(): void {
|
||||
Auth::routes(['register' => false]);
|
||||
});
|
||||
|
||||
Route::group(['middleware' => 'auth:web'], function () {
|
||||
Route::group(['middleware' => 'auth:web'], function (): void {
|
||||
Route::get('/', HomeController::class)->name('home');
|
||||
Route::resource('initialize', InitializeController::class);
|
||||
Route::resource('member', MemberController::class);
|
||||
|
@ -23,5 +24,6 @@ Route::group(['middleware' => 'auth:web'], function () {
|
|||
Route::post('/member/{member}/confirm', MemberConfirmController::class);
|
||||
Route::get('/member/{member}/pdf', MemberPdfController::class)
|
||||
->name('member.singlepdf');
|
||||
Route::get('/sendpayment', [SendpaymentController::class, 'create'])->name('sendpayment.create');
|
||||
Route::get('/sendpayment/pdf', [SendpaymentController::class, 'send'])->name('sendpayment.pdf');
|
||||
});
|
||||
|
||||
|
|
|
@ -29,6 +29,8 @@ module.exports = {
|
|||
white: colors.white,
|
||||
red: colors.red,
|
||||
blue: {
|
||||
100: colors.blue[100],
|
||||
300: colors.blue[300],
|
||||
500: colors.blue[500],
|
||||
700: colors.blue[700],
|
||||
},
|
||||
|
|
Loading…
Reference in New Issue