Add create all payment pdf
This commit is contained in:
parent
21bb6aadf6
commit
78a05ec82a
|
@ -2,19 +2,19 @@
|
||||||
|
|
||||||
namespace App\Member;
|
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\Activity;
|
||||||
|
use App\Bill\BillKind;
|
||||||
|
use App\Confession;
|
||||||
|
use App\Country;
|
||||||
|
use App\Gender;
|
||||||
use App\Group;
|
use App\Group;
|
||||||
use App\Payment\Subscription;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Http\Views\MemberView;
|
use App\Http\Views\MemberView;
|
||||||
use App\Member\DeleteJob;
|
use App\Member\DeleteJob;
|
||||||
|
use App\Nationality;
|
||||||
|
use App\Payment\Subscription;
|
||||||
|
use App\Region;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
use Inertia\Response;
|
use Inertia\Response;
|
||||||
|
|
||||||
class MemberController extends Controller
|
class MemberController extends Controller
|
||||||
|
@ -27,7 +27,8 @@ class MemberController extends Controller
|
||||||
$payload = app(MemberView::class)->index($request);
|
$payload = app(MemberView::class)->index($request);
|
||||||
$payload['toolbar'] = [
|
$payload['toolbar'] = [
|
||||||
['href' => route('member.create'), 'label' => 'Mitglied anlegen', 'color' => 'primary', 'icon' => 'plus'],
|
['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);
|
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)}";
|
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 getUsage(Collection $page): string;
|
||||||
|
|
||||||
|
public function allLabel(): string;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
namespace App\Pdf;
|
namespace App\Pdf;
|
||||||
|
|
||||||
use App\Member\Member;
|
use App\Member\Member;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Illuminate\Support\Str;
|
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
|
public function singleMemberCollection(Member $member, string $type): Collection
|
||||||
{
|
{
|
||||||
$members = Member::where($member->only(['lastname', 'address', 'zip', 'location']))
|
$members = Member::where($member->only(['lastname', 'address', 'zip', 'location']))
|
||||||
|
@ -43,6 +55,15 @@ class PdfRepositoryFactory
|
||||||
return $this->toMemberGroup($members);
|
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
|
private function resolve(string $kind, Collection $members): PdfRepository
|
||||||
{
|
{
|
||||||
return new $kind($members);
|
return new $kind($members);
|
||||||
|
|
|
@ -26,9 +26,9 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
&.btn-info {
|
&.btn-info {
|
||||||
@apply bg-blue-700;
|
@apply bg-blue-700 text-blue-300;
|
||||||
&:not(.disabled):hover {
|
&:not(.disabled):hover {
|
||||||
@apply bg-blue-500;
|
@apply bg-blue-500 text-blue-100;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
&.btn-danger {
|
&.btn-danger {
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
<span class="text-xl font-semibold text-white leading-none" v-html="$page.props.title"></span>
|
<span class="text-xl font-semibold text-white leading-none" v-html="$page.props.title"></span>
|
||||||
<div class="flex ml-4">
|
<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>
|
<sprite :src="link.icon"></sprite>
|
||||||
</inertia-link>
|
</inertia-link>
|
||||||
</div>
|
</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\Member\MemberController;
|
||||||
use App\Payment\AllpaymentController;
|
use App\Payment\AllpaymentController;
|
||||||
use App\Payment\PaymentController;
|
use App\Payment\PaymentController;
|
||||||
|
use App\Payment\SendpaymentController;
|
||||||
use App\Payment\SubscriptionController;
|
use App\Payment\SubscriptionController;
|
||||||
use App\Pdf\MemberPdfController;
|
use App\Pdf\MemberPdfController;
|
||||||
|
|
||||||
Route::group(['namespace' => 'App\\Http\\Controllers'], function() {
|
Route::group(['namespace' => 'App\\Http\\Controllers'], function(): void {
|
||||||
Auth::routes(['register' => false]);
|
Auth::routes(['register' => false]);
|
||||||
});
|
});
|
||||||
|
|
||||||
Route::group(['middleware' => 'auth:web'], function () {
|
Route::group(['middleware' => 'auth:web'], function (): void {
|
||||||
Route::get('/', HomeController::class)->name('home');
|
Route::get('/', HomeController::class)->name('home');
|
||||||
Route::resource('initialize', InitializeController::class);
|
Route::resource('initialize', InitializeController::class);
|
||||||
Route::resource('member', MemberController::class);
|
Route::resource('member', MemberController::class);
|
||||||
|
@ -23,5 +24,6 @@ Route::group(['middleware' => 'auth:web'], function () {
|
||||||
Route::post('/member/{member}/confirm', MemberConfirmController::class);
|
Route::post('/member/{member}/confirm', MemberConfirmController::class);
|
||||||
Route::get('/member/{member}/pdf', MemberPdfController::class)
|
Route::get('/member/{member}/pdf', MemberPdfController::class)
|
||||||
->name('member.singlepdf');
|
->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,
|
white: colors.white,
|
||||||
red: colors.red,
|
red: colors.red,
|
||||||
blue: {
|
blue: {
|
||||||
|
100: colors.blue[100],
|
||||||
|
300: colors.blue[300],
|
||||||
500: colors.blue[500],
|
500: colors.blue[500],
|
||||||
700: colors.blue[700],
|
700: colors.blue[700],
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue