Add TeX Package

This commit is contained in:
Philipp Lang 2022-10-28 12:01:04 +02:00
parent 4a66dbd329
commit b717148058
13 changed files with 308 additions and 136 deletions

3
.gitmodules vendored
View File

@ -4,3 +4,6 @@
[submodule "packages/laravel-nami"]
path = packages/laravel-nami
url = git@github.com:DPSGKoeln/laravel-nami.git
[submodule "packages/tex"]
path = packages/tex
url = git@zoomyboy.de:pille/tex.git

47
app/Efz/EfzDocument.php Normal file
View File

@ -0,0 +1,47 @@
<?php
namespace App\Efz;
use App\Member\Member;
use App\Pdf\Sender;
use Zoomyboy\Tex\Document;
use Zoomyboy\Tex\Engine;
use Zoomyboy\Tex\Template;
class EfzDocument extends Document
{
public string $name;
public string $slug;
public string $secondLine;
public string $now;
public Sender $sender;
public function __construct(public Member $member)
{
$this->name = $member->fullname;
$this->slug = $member->slug;
$this->secondLine = "geb. am {$member->birthday->format('d.m.Y')}, wohnhaft in {$member->location}";
$this->now = now()->format('d.m.Y');
$this->sender = $member->toSender();
}
public function basename(): string
{
return "efz-fuer-{$this->slug}";
}
public function getEngine(): Engine
{
return Engine::PDFLATEX;
}
public function template(): Template
{
return Template::make('tex.templates.efz');
}
public function view(): string
{
return 'tex.efz';
}
}

View File

@ -0,0 +1,24 @@
<?php
namespace App\Efz;
use App\Member\Member;
use Lorisleiva\Actions\ActionRequest;
use Lorisleiva\Actions\Concerns\AsAction;
use Zoomyboy\Tex\BaseCompiler;
use Zoomyboy\Tex\Tex;
class ShowEfzDocumentAction
{
use AsAction;
public function handle(Member $member): BaseCompiler
{
return Tex::compile(new EfzDocument($member));
}
public function asController(Member $member, ActionRequest $request): BaseCompiler
{
return $this->handle($member);
}
}

View File

@ -11,6 +11,7 @@ use App\Group;
use App\Nationality;
use App\Payment\Payment;
use App\Payment\Subscription;
use App\Pdf\Sender;
use App\Region;
use App\Setting\NamiSettings;
use App\Subactivity;
@ -24,6 +25,7 @@ use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Notifications\Notifiable;
use Sabre\VObject\Component\VCard;
use Sabre\VObject\Reader;
use Spatie\LaravelData\Lazy;
use Zoomyboy\LaravelNami\Api;
use Zoomyboy\LaravelNami\Data\MembershipEntry;
@ -446,4 +448,14 @@ class Member extends Model
return $card;
}
public function toSender(): Sender
{
return Sender::from([
'name' => $this->fullname,
'address' => $this->address,
'zipLocation' => $this->zip.' '.$this->location,
'mglnr' => Lazy::create(fn () => 'Mglnr.: '.$this->nami_id),
]);
}
}

View File

@ -1,14 +0,0 @@
<?php
namespace App\Pdf;
use App\Http\Controllers\Controller;
use App\Pdf\Data\MemberEfzData;
class MemberEfzController extends Controller
{
public function __invoke(MemberEfzData $data): PdfGenerator
{
return app(PdfGenerator::class)->setRepository($data)->render();
}
}

21
app/Pdf/Sender.php Normal file
View File

@ -0,0 +1,21 @@
<?php
namespace App\Pdf;
use Spatie\LaravelData\Data;
use Spatie\LaravelData\Lazy;
class Sender extends Data
{
public function __construct(public string $name, public string $address, public string $zipLocation, public Lazy|string $mglnr)
{
}
/**
* @return array<int, string>
*/
public function values(): array
{
return array_values($this->include('mglnr')->toArray());
}
}

View File

@ -7,7 +7,8 @@
"laravel"
],
"repositories": [
{ "type": "path", "url": "./packages/laravel-nami", "options": {"symlink": true} }
{ "type": "path", "url": "./packages/laravel-nami", "options": {"symlink": true} },
{ "type": "path", "url": "./packages/tex", "options": {"symlink": true} }
],
"license": "MIT",
"require": {
@ -31,7 +32,8 @@
"spatie/laravel-medialibrary": "^10.0",
"spatie/laravel-settings": "^2.2",
"worksome/request-factories": "^2.5",
"zoomyboy/laravel-nami": "dev-master"
"zoomyboy/laravel-nami": "dev-master",
"zoomyboy/tex": "dev-main as 1.0"
},
"require-dev": {
"fakerphp/faker": "^1.9.1",

268
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "636d4f83830d3a56848cfaca9a395a8a",
"content-hash": "77a195281ef8e4e20e6e5f9a6d36c752",
"packages": [
{
"name": "beyondcode/laravel-dump-server",
@ -276,16 +276,16 @@
},
{
"name": "dflydev/dot-access-data",
"version": "v3.0.1",
"version": "v3.0.2",
"source": {
"type": "git",
"url": "https://github.com/dflydev/dflydev-dot-access-data.git",
"reference": "0992cc19268b259a39e86f296da5f0677841f42c"
"reference": "f41715465d65213d644d3141a6a93081be5d3549"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/0992cc19268b259a39e86f296da5f0677841f42c",
"reference": "0992cc19268b259a39e86f296da5f0677841f42c",
"url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549",
"reference": "f41715465d65213d644d3141a6a93081be5d3549",
"shasum": ""
},
"require": {
@ -296,7 +296,7 @@
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.3",
"scrutinizer/ocular": "1.6.0",
"squizlabs/php_codesniffer": "^3.5",
"vimeo/psalm": "^3.14"
"vimeo/psalm": "^4.0.0"
},
"type": "library",
"extra": {
@ -345,9 +345,9 @@
],
"support": {
"issues": "https://github.com/dflydev/dflydev-dot-access-data/issues",
"source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.1"
"source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2"
},
"time": "2021-08-13T13:06:58+00:00"
"time": "2022-10-27T11:44:00+00:00"
},
{
"name": "doctrine/cache",
@ -444,23 +444,23 @@
},
{
"name": "doctrine/dbal",
"version": "3.4.5",
"version": "3.5.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
"reference": "a5a58773109c0abb13e658c8ccd92aeec8d07f9e"
"reference": "f38ee8aaca2d58ee88653cb34a6a3880c23f38a5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/dbal/zipball/a5a58773109c0abb13e658c8ccd92aeec8d07f9e",
"reference": "a5a58773109c0abb13e658c8ccd92aeec8d07f9e",
"url": "https://api.github.com/repos/doctrine/dbal/zipball/f38ee8aaca2d58ee88653cb34a6a3880c23f38a5",
"reference": "f38ee8aaca2d58ee88653cb34a6a3880c23f38a5",
"shasum": ""
},
"require": {
"composer-runtime-api": "^2",
"doctrine/cache": "^1.11|^2.0",
"doctrine/deprecations": "^0.5.3|^1",
"doctrine/event-manager": "^1.0",
"doctrine/event-manager": "^1|^2",
"php": "^7.4 || ^8.0",
"psr/cache": "^1|^2|^3",
"psr/log": "^1|^2|^3"
@ -468,14 +468,14 @@
"require-dev": {
"doctrine/coding-standard": "10.0.0",
"jetbrains/phpstorm-stubs": "2022.2",
"phpstan/phpstan": "1.8.3",
"phpstan/phpstan-strict-rules": "^1.3",
"phpunit/phpunit": "9.5.24",
"phpstan/phpstan": "1.8.10",
"phpstan/phpstan-strict-rules": "^1.4",
"phpunit/phpunit": "9.5.25",
"psalm/plugin-phpunit": "0.17.0",
"squizlabs/php_codesniffer": "3.7.1",
"symfony/cache": "^5.4|^6.0",
"symfony/console": "^4.4|^5.4|^6.0",
"vimeo/psalm": "4.27.0"
"vimeo/psalm": "4.29.0"
},
"suggest": {
"symfony/console": "For helpful console commands such as SQL execution and import of files."
@ -535,7 +535,7 @@
],
"support": {
"issues": "https://github.com/doctrine/dbal/issues",
"source": "https://github.com/doctrine/dbal/tree/3.4.5"
"source": "https://github.com/doctrine/dbal/tree/3.5.1"
},
"funding": [
{
@ -551,7 +551,7 @@
"type": "tidelift"
}
],
"time": "2022-09-23T17:48:57+00:00"
"time": "2022-10-24T07:26:18+00:00"
},
{
"name": "doctrine/deprecations",
@ -598,30 +598,29 @@
},
{
"name": "doctrine/event-manager",
"version": "1.2.0",
"version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/event-manager.git",
"reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520"
"reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520",
"reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520",
"url": "https://api.github.com/repos/doctrine/event-manager/zipball/750671534e0241a7c50ea5b43f67e23eb5c96f32",
"reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32",
"shasum": ""
},
"require": {
"doctrine/deprecations": "^0.5.3 || ^1",
"php": "^7.1 || ^8.0"
"php": "^8.1"
},
"conflict": {
"doctrine/common": "<2.9"
},
"require-dev": {
"doctrine/coding-standard": "^9 || ^10",
"phpstan/phpstan": "~1.4.10 || ^1.8.8",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"vimeo/psalm": "^4.24"
"doctrine/coding-standard": "^10",
"phpstan/phpstan": "^1.8.8",
"phpunit/phpunit": "^9.5",
"vimeo/psalm": "^4.28"
},
"type": "library",
"autoload": {
@ -670,7 +669,7 @@
],
"support": {
"issues": "https://github.com/doctrine/event-manager/issues",
"source": "https://github.com/doctrine/event-manager/tree/1.2.0"
"source": "https://github.com/doctrine/event-manager/tree/2.0.0"
},
"funding": [
{
@ -686,27 +685,27 @@
"type": "tidelift"
}
],
"time": "2022-10-12T20:51:15+00:00"
"time": "2022-10-12T20:59:15+00:00"
},
{
"name": "doctrine/inflector",
"version": "2.0.5",
"version": "2.0.6",
"source": {
"type": "git",
"url": "https://github.com/doctrine/inflector.git",
"reference": "ade2b3bbfb776f27f0558e26eed43b5d9fe1b392"
"reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/inflector/zipball/ade2b3bbfb776f27f0558e26eed43b5d9fe1b392",
"reference": "ade2b3bbfb776f27f0558e26eed43b5d9fe1b392",
"url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024",
"reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^9",
"doctrine/coding-standard": "^10",
"phpstan/phpstan": "^1.8",
"phpstan/phpstan-phpunit": "^1.1",
"phpstan/phpstan-strict-rules": "^1.3",
@ -761,7 +760,7 @@
],
"support": {
"issues": "https://github.com/doctrine/inflector/issues",
"source": "https://github.com/doctrine/inflector/tree/2.0.5"
"source": "https://github.com/doctrine/inflector/tree/2.0.6"
},
"funding": [
{
@ -777,7 +776,7 @@
"type": "tidelift"
}
],
"time": "2022-09-07T09:01:28+00:00"
"time": "2022-10-20T09:10:12+00:00"
},
{
"name": "doctrine/instantiator",
@ -1472,16 +1471,16 @@
},
{
"name": "guzzlehttp/psr7",
"version": "2.4.1",
"version": "2.4.3",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "69568e4293f4fa993f3b0e51c9723e1e17c41379"
"reference": "67c26b443f348a51926030c83481b85718457d3d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/69568e4293f4fa993f3b0e51c9723e1e17c41379",
"reference": "69568e4293f4fa993f3b0e51c9723e1e17c41379",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d",
"reference": "67c26b443f348a51926030c83481b85718457d3d",
"shasum": ""
},
"require": {
@ -1571,7 +1570,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
"source": "https://github.com/guzzle/psr7/tree/2.4.1"
"source": "https://github.com/guzzle/psr7/tree/2.4.3"
},
"funding": [
{
@ -1587,7 +1586,7 @@
"type": "tidelift"
}
],
"time": "2022-08-28T14:45:39+00:00"
"time": "2022-10-26T14:07:24+00:00"
},
{
"name": "inertiajs/inertia-laravel",
@ -1730,16 +1729,16 @@
},
{
"name": "laravel/framework",
"version": "v9.36.3",
"version": "v9.37.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
"reference": "80ba0561b3682b96743e1c152fde0698bbdb2412"
"reference": "0c9675abf6d966e834b2ebeca3319f524e07a330"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/80ba0561b3682b96743e1c152fde0698bbdb2412",
"reference": "80ba0561b3682b96743e1c152fde0698bbdb2412",
"url": "https://api.github.com/repos/laravel/framework/zipball/0c9675abf6d966e834b2ebeca3319f524e07a330",
"reference": "0c9675abf6d966e834b2ebeca3319f524e07a330",
"shasum": ""
},
"require": {
@ -1751,7 +1750,7 @@
"fruitcake/php-cors": "^1.2",
"laravel/serializable-closure": "^1.2.2",
"league/commonmark": "^2.2",
"league/flysystem": "^3.0.16",
"league/flysystem": "^3.8.0",
"monolog/monolog": "^2.0",
"nesbot/carbon": "^2.62.1",
"nunomaduro/termwind": "^1.13",
@ -1912,20 +1911,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2022-10-19T13:23:53+00:00"
"time": "2022-10-25T15:43:46+00:00"
},
{
"name": "laravel/horizon",
"version": "v5.10.2",
"version": "v5.10.3",
"source": {
"type": "git",
"url": "https://github.com/laravel/horizon.git",
"reference": "de84bf86ffee940fa92e29c54d41618048ec9b6f"
"reference": "22403726851d62c45051114c89106130c348decc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/horizon/zipball/de84bf86ffee940fa92e29c54d41618048ec9b6f",
"reference": "de84bf86ffee940fa92e29c54d41618048ec9b6f",
"url": "https://api.github.com/repos/laravel/horizon/zipball/22403726851d62c45051114c89106130c348decc",
"reference": "22403726851d62c45051114c89106130c348decc",
"shasum": ""
},
"require": {
@ -1987,9 +1986,9 @@
],
"support": {
"issues": "https://github.com/laravel/horizon/issues",
"source": "https://github.com/laravel/horizon/tree/v5.10.2"
"source": "https://github.com/laravel/horizon/tree/v5.10.3"
},
"time": "2022-09-26T13:45:51+00:00"
"time": "2022-10-14T13:33:44+00:00"
},
{
"name": "laravel/serializable-closure",
@ -2053,16 +2052,16 @@
},
{
"name": "laravel/telescope",
"version": "v4.9.4",
"version": "v4.9.5",
"source": {
"type": "git",
"url": "https://github.com/laravel/telescope.git",
"reference": "ca8bec380ecef80d00ce6daecac2dc17c7e35ccd"
"reference": "a316d6d15793b559c51ccb4b5dc59b223da500e5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/telescope/zipball/ca8bec380ecef80d00ce6daecac2dc17c7e35ccd",
"reference": "ca8bec380ecef80d00ce6daecac2dc17c7e35ccd",
"url": "https://api.github.com/repos/laravel/telescope/zipball/a316d6d15793b559c51ccb4b5dc59b223da500e5",
"reference": "a316d6d15793b559c51ccb4b5dc59b223da500e5",
"shasum": ""
},
"require": {
@ -2115,9 +2114,9 @@
],
"support": {
"issues": "https://github.com/laravel/telescope/issues",
"source": "https://github.com/laravel/telescope/tree/v4.9.4"
"source": "https://github.com/laravel/telescope/tree/v4.9.5"
},
"time": "2022-10-03T14:55:50+00:00"
"time": "2022-10-06T14:01:10+00:00"
},
{
"name": "laravel/tinker",
@ -2438,16 +2437,16 @@
},
{
"name": "league/flysystem",
"version": "3.9.0",
"version": "3.10.2",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem.git",
"reference": "60f3760352fe08e918bc3b1acae4e91af092ebe1"
"reference": "b9bd194b016114d6ff6765c09d40c7d427e4e3f6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/60f3760352fe08e918bc3b1acae4e91af092ebe1",
"reference": "60f3760352fe08e918bc3b1acae4e91af092ebe1",
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/b9bd194b016114d6ff6765c09d40c7d427e4e3f6",
"reference": "b9bd194b016114d6ff6765c09d40c7d427e4e3f6",
"shasum": ""
},
"require": {
@ -2463,7 +2462,7 @@
},
"require-dev": {
"async-aws/s3": "^1.5",
"async-aws/simple-s3": "^1.0",
"async-aws/simple-s3": "^1.1",
"aws/aws-sdk-php": "^3.198.1",
"composer/semver": "^3.0",
"ext-fileinfo": "*",
@ -2509,7 +2508,7 @@
],
"support": {
"issues": "https://github.com/thephpleague/flysystem/issues",
"source": "https://github.com/thephpleague/flysystem/tree/3.9.0"
"source": "https://github.com/thephpleague/flysystem/tree/3.10.2"
},
"funding": [
{
@ -2525,7 +2524,7 @@
"type": "tidelift"
}
],
"time": "2022-10-18T21:02:43+00:00"
"time": "2022-10-25T07:01:47+00:00"
},
{
"name": "league/glide",
@ -2650,25 +2649,26 @@
},
{
"name": "lorisleiva/laravel-actions",
"version": "v2.4.0",
"version": "v2.4.1",
"source": {
"type": "git",
"url": "https://github.com/lorisleiva/laravel-actions.git",
"reference": "4e60c9fbdfcea7d9977d882f3104c8996b43c169"
"reference": "6701206501fcb048f1bba33b84a5a174188cadb7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/lorisleiva/laravel-actions/zipball/4e60c9fbdfcea7d9977d882f3104c8996b43c169",
"reference": "4e60c9fbdfcea7d9977d882f3104c8996b43c169",
"url": "https://api.github.com/repos/lorisleiva/laravel-actions/zipball/6701206501fcb048f1bba33b84a5a174188cadb7",
"reference": "6701206501fcb048f1bba33b84a5a174188cadb7",
"shasum": ""
},
"require": {
"illuminate/contracts": "^8.15|^9.0",
"illuminate/contracts": "^8.15 || 9.0 - 9.34 || ^9.36",
"lorisleiva/lody": "^0.3.0",
"php": "^8.0"
},
"require-dev": {
"orchestra/testbench": "^7.0",
"orchestra/testbench": "7.0.0",
"orchestra/testbench-core": "7.0.0",
"pestphp/pest": "^1.2",
"phpunit/phpunit": "^9.5"
},
@ -2713,7 +2713,7 @@
],
"support": {
"issues": "https://github.com/lorisleiva/laravel-actions/issues",
"source": "https://github.com/lorisleiva/laravel-actions/tree/v2.4.0"
"source": "https://github.com/lorisleiva/laravel-actions/tree/v2.4.1"
},
"funding": [
{
@ -2721,7 +2721,7 @@
"type": "github"
}
],
"time": "2022-02-27T15:30:59+00:00"
"time": "2022-10-20T17:56:26+00:00"
},
{
"name": "lorisleiva/lody",
@ -5740,16 +5740,16 @@
},
{
"name": "spatie/laravel-ignition",
"version": "1.5.2",
"version": "1.6.1",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-ignition.git",
"reference": "f2336fc79d99aab5cf27fa4aebe5e9c9ecf3808a"
"reference": "2b79cf6ed40946b64ac6713d7d2da8a9d87f612b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/f2336fc79d99aab5cf27fa4aebe5e9c9ecf3808a",
"reference": "f2336fc79d99aab5cf27fa4aebe5e9c9ecf3808a",
"url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/2b79cf6ed40946b64ac6713d7d2da8a9d87f612b",
"reference": "2b79cf6ed40946b64ac6713d7d2da8a9d87f612b",
"shasum": ""
},
"require": {
@ -5826,20 +5826,20 @@
"type": "github"
}
],
"time": "2022-10-14T12:24:21+00:00"
"time": "2022-10-26T17:39:54+00:00"
},
{
"name": "spatie/laravel-medialibrary",
"version": "10.5.2",
"version": "10.6.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-medialibrary.git",
"reference": "5872a4f9e5f72b9dd1a02ea5ab699f33ef1a1c75"
"reference": "2f7db874ecdb9c6a2b06db794f00fb2e487c91ee"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/spatie/laravel-medialibrary/zipball/5872a4f9e5f72b9dd1a02ea5ab699f33ef1a1c75",
"reference": "5872a4f9e5f72b9dd1a02ea5ab699f33ef1a1c75",
"url": "https://api.github.com/repos/spatie/laravel-medialibrary/zipball/2f7db874ecdb9c6a2b06db794f00fb2e487c91ee",
"reference": "2f7db874ecdb9c6a2b06db794f00fb2e487c91ee",
"shasum": ""
},
"require": {
@ -5922,7 +5922,7 @@
],
"support": {
"issues": "https://github.com/spatie/laravel-medialibrary/issues",
"source": "https://github.com/spatie/laravel-medialibrary/tree/10.5.2"
"source": "https://github.com/spatie/laravel-medialibrary/tree/10.6.0"
},
"funding": [
{
@ -5934,7 +5934,7 @@
"type": "github"
}
],
"time": "2022-09-30T09:48:56+00:00"
"time": "2022-10-21T14:20:02+00:00"
},
{
"name": "spatie/laravel-package-tools",
@ -8931,6 +8931,38 @@
"symlink": true,
"relative": true
}
},
{
"name": "zoomyboy/tex",
"version": "dev-main",
"dist": {
"type": "path",
"url": "./packages/tex",
"reference": "48251272de62e3fea044a7ad31e1a411c15eb4c6"
},
"type": "library",
"extra": {
"laravel": {
"providers": [
"Zoomyboy\\Tex\\TexServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"Zoomyboy\\Tex\\": "src/"
}
},
"authors": [
{
"name": "Philipp Lang",
"email": "philipp@zoomyboy.de"
}
],
"transport-options": {
"symlink": true,
"relative": true
}
}
],
"packages-dev": [
@ -9085,16 +9117,16 @@
},
{
"name": "composer/composer",
"version": "2.4.3",
"version": "2.4.4",
"source": {
"type": "git",
"url": "https://github.com/composer/composer.git",
"reference": "b34c0e9a93f2cd688c62ce4dfcc69e13b6ce7aa4"
"reference": "e8d9087229bcdbc5867594d3098091412f1130cf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/composer/zipball/b34c0e9a93f2cd688c62ce4dfcc69e13b6ce7aa4",
"reference": "b34c0e9a93f2cd688c62ce4dfcc69e13b6ce7aa4",
"url": "https://api.github.com/repos/composer/composer/zipball/e8d9087229bcdbc5867594d3098091412f1130cf",
"reference": "e8d9087229bcdbc5867594d3098091412f1130cf",
"shasum": ""
},
"require": {
@ -9177,7 +9209,7 @@
"support": {
"irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/composer/issues",
"source": "https://github.com/composer/composer/tree/2.4.3"
"source": "https://github.com/composer/composer/tree/2.4.4"
},
"funding": [
{
@ -9193,7 +9225,7 @@
"type": "tidelift"
}
],
"time": "2022-10-14T14:56:41+00:00"
"time": "2022-10-27T12:39:29+00:00"
},
{
"name": "composer/metadata-minifier",
@ -10316,16 +10348,16 @@
},
{
"name": "phpstan/phpstan",
"version": "1.8.10",
"version": "1.8.11",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
"reference": "0c4459dc42c568b818b3f25186589f3acddc1823"
"reference": "46e223dd68a620da18855c23046ddb00940b4014"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/0c4459dc42c568b818b3f25186589f3acddc1823",
"reference": "0c4459dc42c568b818b3f25186589f3acddc1823",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/46e223dd68a620da18855c23046ddb00940b4014",
"reference": "46e223dd68a620da18855c23046ddb00940b4014",
"shasum": ""
},
"require": {
@ -10355,7 +10387,7 @@
],
"support": {
"issues": "https://github.com/phpstan/phpstan/issues",
"source": "https://github.com/phpstan/phpstan/tree/1.8.10"
"source": "https://github.com/phpstan/phpstan/tree/1.8.11"
},
"funding": [
{
@ -10371,20 +10403,20 @@
"type": "tidelift"
}
],
"time": "2022-10-17T14:23:35+00:00"
"time": "2022-10-24T15:45:13+00:00"
},
{
"name": "phpunit/php-code-coverage",
"version": "9.2.17",
"version": "9.2.18",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
"reference": "aa94dc41e8661fe90c7316849907cba3007b10d8"
"reference": "12fddc491826940cf9b7e88ad9664cf51f0f6d0a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/aa94dc41e8661fe90c7316849907cba3007b10d8",
"reference": "aa94dc41e8661fe90c7316849907cba3007b10d8",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/12fddc491826940cf9b7e88ad9664cf51f0f6d0a",
"reference": "12fddc491826940cf9b7e88ad9664cf51f0f6d0a",
"shasum": ""
},
"require": {
@ -10440,7 +10472,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.17"
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.18"
},
"funding": [
{
@ -10448,7 +10480,7 @@
"type": "github"
}
],
"time": "2022-08-30T12:24:04+00:00"
"time": "2022-10-27T13:35:33+00:00"
},
{
"name": "phpunit/php-file-iterator",
@ -10693,16 +10725,16 @@
},
{
"name": "phpunit/phpunit",
"version": "9.5.25",
"version": "9.5.26",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d"
"reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d",
"reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/851867efcbb6a1b992ec515c71cdcf20d895e9d2",
"reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2",
"shasum": ""
},
"require": {
@ -10775,7 +10807,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.25"
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.26"
},
"funding": [
{
@ -10791,7 +10823,7 @@
"type": "tidelift"
}
],
"time": "2022-09-25T03:44:45+00:00"
"time": "2022-10-28T06:00:21+00:00"
},
{
"name": "pimple/pimple",
@ -12601,10 +12633,18 @@
"time": "2022-09-08T15:44:55+00:00"
}
],
"aliases": [],
"aliases": [
{
"package": "zoomyboy/tex",
"version": "dev-main",
"alias": "1.0",
"alias_normalized": "1.0.0.0"
}
],
"minimum-stability": "dev",
"stability-flags": {
"zoomyboy/laravel-nami": 20
"zoomyboy/laravel-nami": 20,
"zoomyboy/tex": 20
},
"prefer-stable": true,
"prefer-lowest": false,

1
packages/tex Submodule

@ -0,0 +1 @@
Subproject commit fb9d7a660c6e170eedf7a11b02f7cfeff14346ab

View File

@ -7,6 +7,7 @@ parameters:
- app
- tests
- database
- packages/tex/src
# The level 8 is the highest level
level: 6

View File

@ -26,9 +26,9 @@
\coordinate (B) at ($(A)+(0mm,5mm)$);
\coordinate (C) at (19mm,212mm);
\path (A) node[anchor=west,fill=white,text width=120mm,text height=2.5mm,inner xsep=0mm,inner ysep=1mm]{<<<$data->name>>>};
\path (B) node[anchor=west,fill=white,text width=120mm,text height=2.5mm,inner xsep=0mm,inner ysep=1mm]{<<<$data->secondLine>>>};
\path (C) node[anchor=west,fill=white,text width=120mm,text height=2.5mm,inner xsep=0mm,inner ysep=1mm]{Neuss, <<<$data->currentDate>>>};
\path (A) node[anchor=west,fill=white,text width=120mm,text height=2.5mm,inner xsep=0mm,inner ysep=1mm]{<<<$name>>>};
\path (B) node[anchor=west,fill=white,text width=120mm,text height=2.5mm,inner xsep=0mm,inner ysep=1mm]{<<<$secondLine>>>};
\path (C) node[anchor=west,fill=white,text width=120mm,text height=2.5mm,inner xsep=0mm,inner ysep=1mm]{Neuss, <<<$now>>>};
\end{tikzpicture}
\backgroundsetup{scale = 1, pages=some, angle = 0, opacity = 1, color=black, contents = {\includegraphics[width = \paperwidth, height = \paperheight] {bg-2.pdf}}}
@ -40,7 +40,7 @@
% \useasboundingbox (2.52,6.67) rectangle (18.47,12.85);
% \fill[fill=white, opacity=0.9] (25mm,63mm) rectangle ++(160mm,62mm);
\node[anchor=north west,fill=white,text width=80mm,minimum height=30mm,inner sep=1mm] at (110mm, 42.0mm) {Absender: \vspace{2mm} \\ <<<implode(' \\\\ ', $data->sender)>>>};
\node[anchor=north west,fill=white,text width=80mm,minimum height=30mm,inner sep=1mm] at (110mm, 42.0mm) {Absender: \vspace{2mm} \\ <<<implode(' \\\\ ', $sender->values())>>>};
\end{tikzpicture}
\end{document}

View File

@ -2,6 +2,7 @@
use App\Contribution\ContributionController;
use App\Course\Controllers\CourseController;
use App\Efz\ShowEfzDocumentAction;
use App\Http\Controllers\HomeController;
use App\Initialize\Actions\InitializeAction;
use App\Initialize\Actions\InitializeFormAction;
@ -13,7 +14,6 @@ use App\Payment\AllpaymentController;
use App\Payment\PaymentController;
use App\Payment\SendpaymentController;
use App\Payment\SubscriptionController;
use App\Pdf\MemberEfzController;
use App\Pdf\MemberPdfController;
Route::group(['namespace' => 'App\\Http\\Controllers'], function (): void {
@ -35,7 +35,7 @@ Route::group(['middleware' => 'auth:web'], function (): void {
Route::get('/sendpayment/pdf', [SendpaymentController::class, 'send'])->name('sendpayment.pdf');
Route::apiResource('member.membership', MembershipController::class);
Route::resource('member.course', CourseController::class);
Route::get('/member/{member}/efz', MemberEfzController::class)->name('efz');
Route::get('/member/{member}/efz', ShowEfzDocumentAction::class)->name('efz');
Route::get('/member/{member}/resync', MemberResyncController::class)->name('member.resync');
Route::get('/contribution', [ContributionController::class, 'form'])->name('contribution.form');
Route::get('/contribution/generate', [ContributionController::class, 'generate'])->name('contribution.generate');

View File

@ -2,9 +2,11 @@
namespace Tests\Feature\Pdf;
use App\Efz\EfzDocument;
use App\Member\Member;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Tests\TestCase;
use Zoomyboy\Tex\Tex;
class EfzTest extends TestCase
{
@ -12,6 +14,38 @@ class EfzTest extends TestCase
public function testItCreatesAEfzPdfFile(): void
{
Tex::fake();
$this->withoutExceptionHandling()->login()->withNamiSettings();
$member = Member::factory()->defaults()->create([
'firstname' => 'Max',
'lastname' => 'Muster',
'address' => 'Itt 4',
'zip' => '12345',
'location' => 'Solingen',
'birthday' => '2015-02-11',
'nami_id' => 552,
]);
$response = $this->get("/member/{$member->id}/efz");
$response->assertOk();
$response->assertHeader('Content-Disposition', 'inline; filename="efz-fuer-max-muster.pdf"');
Tex::assertCompiled(EfzDocument::class, fn ($document) => 'Max Muster' === $document->name
&& 'efz-fuer-max-muster' === $document->basename()
&& 'geb. am 11.02.2015, wohnhaft in Solingen' === $document->secondLine
&& now()->format('d.m.Y') === $document->now
&& [
'Max Muster',
'Itt 4',
'12345 Solingen',
'Mglnr.: 552',
] === $document->sender->values()
);
}
public function testItReallyCreatesAEfzPdfFile(): void
{
Tex::spy();
$this->withoutExceptionHandling()->login()->withNamiSettings();
$member = Member::factory()->defaults()->create(['firstname' => 'Max', 'lastname' => 'Muster']);
@ -19,5 +53,6 @@ class EfzTest extends TestCase
$response->assertOk();
$response->assertHeader('Content-Disposition', 'inline; filename="efz-fuer-max-muster.pdf"');
Tex::assertCompiled(EfzDocument::class, fn ($document) => $document->hasContent('Absender:') && $document->hasContent('Max Muster'));
}
}