Add settings for letter pdf

This commit is contained in:
philipp lang 2022-11-17 23:59:43 +01:00
parent 39b680a0e4
commit 33df7bef1f
11 changed files with 87 additions and 10 deletions

View File

@ -44,6 +44,7 @@ abstract class Letter extends Document
public string $subject;
protected string $filename;
public string $until;
public LetterSettings $settings;
/**
* @param Collection<int, Page> $pages
@ -54,6 +55,7 @@ abstract class Letter extends Document
$this->subject = $this->getSubject();
$this->until = now()->addWeeks(2)->format('d.m.Y');
$this->setFilename(Str::slug("{$this->getSubject()} für {$pages->first()?->familyName}"));
$this->settings = app(LetterSettings::class);
}
public function number(int $number): string

View File

@ -22,6 +22,10 @@ class LetterSettings extends LocalSettings
public string $zip;
public string $iban;
public string $bic;
public static function group(): string
{
return 'bill';

View File

@ -24,6 +24,8 @@ class SettingIndexAction
'address' => $settings->address,
'place' => $settings->place,
'zip' => $settings->zip,
'iban' => $settings->iban,
'bic' => $settings->bic,
];
}

View File

@ -26,6 +26,8 @@ class SettingSaveAction
'address' => $input['address'] ?? '',
'place' => $input['place'] ?? '',
'zip' => $input['zip'] ?? '',
'iban' => $input['iban'] ?? '',
'bic' => $input['bic'] ?? '',
]);
$settings->save();

View File

@ -0,0 +1,12 @@
<?php
use Spatie\LaravelSettings\Migrations\SettingsMigration;
class IbanSettings extends SettingsMigration
{
public function up(): void
{
$this->migrator->add('bill.iban', '');
$this->migrator->add('bill.bic', '');
}
}

View File

@ -2,7 +2,7 @@
<form class="grow p-6 grid grid-cols-2 gap-3 items-start content-start" @submit.prevent="submit">
<f-text
label="Absender"
hint="Absender-Name, i.d.R. der kurze Stammesname"
hint="Absender-Name in Kurzform, i.d.R. der kurze Stammesname"
name="from"
id="from"
v-model="inner.from"
@ -12,7 +12,7 @@
v-model="inner.from_long"
name="from_long"
id="from_long"
hint="Absender-Name in Kurzform, i.d.R. der Stammesname"
hint="Absender-Name in Langform, i.d.R. der Stammesname"
></f-text>
<h2 class="text-lg font-semibold text-gray-300 col-span-2 mt-5">Kontaktdaten</h2>
<div class="col-span-2 text-gray-300 text-sm">
@ -24,6 +24,8 @@
<f-text label="E-Mail-Adresse" v-model="inner.email" name="email" id="email"></f-text>
<f-text label="Telefonnummer" v-model="inner.mobile" name="mobile" id="mobile"></f-text>
<f-text label="Webseite" v-model="inner.website" name="website" id="website"></f-text>
<f-text label="IBAN" v-model="inner.iban" name="iban" id="iban"></f-text>
<f-text label="BIC" v-model="inner.bic" name="bic" id="bic"></f-text>
<div>
<button type="submit" class="mt-3 btn block btn-primary">Speichern</button>

View File

@ -1,6 +1,6 @@
\documentclass[silvaletter,12pt]{scrlttr2}
\setkomavar{subject}{<<< $subject >>>}
@include('tex.letter-header')
\begin{document}
@foreach($pages as $page)
@ -24,9 +24,9 @@
Somit bitten wir Sie, den ausstehenden Betrag von \totalttc bis zum \textbf{<<< $until >>>} auf folgendes Konto zu überweisen:
\begin{tabular}{ll}
Kontoinhaber: & DPSG Stamm Silva \\
IBAN: & DE40 3425 0000 0000 2145 51 \\
Bic: & SOLSDE33XXX \\
Kontoinhaber: & <<<$settings->from_long>>> \\
IBAN: & <<<$settings->iban>>> \\
Bic: & <<<$settings->bic>>> \\
Verwendungszweck: & <<<$page->usage>>>
\end{tabular}

View File

@ -0,0 +1,9 @@
\setkomavar{subject}{{{ $subject }}}
\setkomavar{fromname}[{{ $settings->from}}]{{{ $settings->from_long}}}
\setkomavar{frommobilephone}[Mobiltelefon: ]{{{ $settings->mobile}}}
\setkomavar{fromemail}[E-Mail: ]{{{ $settings->email}}}
\setkomavar{fromurl}[Website: ]{{{ $settings->website}}}
\setkomavar{fromaddress}{{{ $settings->address}}}
\setkomavar{place}{{{ $settings->place}}}
\setkomavar{fromzipcode}{{{ $settings->zip}}}
\setkomavar{fromlogo}{\includegraphics[width=2cm]{logo.png}} % stammeslogo

View File

@ -1,6 +1,6 @@
\documentclass[silvaletter,12pt]{scrlttr2}
\setkomavar{subject}{<<< $subject >>>}
@include('tex.letter-header')
\begin{document}
@foreach($pages as $page)
@ -24,9 +24,9 @@
Somit bitten wir Sie, den ausstehenden Betrag von \totalttc bis zum \textbf{<<< $until >>>} auf folgendes Konto zu überweisen:
\begin{tabular}{ll}
Kontoinhaber: & DPSG Stamm Silva \\
IBAN: & DE40 3425 0000 0000 2145 51 \\
Bic: & SOLSDE33XXX \\
Kontoinhaber: & <<<$settings->from_long>>> \\
IBAN: & <<<$settings->iban>>> \\
Bic: & <<<$settings->bic>>> \\
Verwendungszweck: & <<<$page->usage>>>
\end{tabular}

View File

@ -22,6 +22,8 @@ class SettingTest extends TestCase
'address' => 'Musterstr 4',
'place' => 'Solingen',
'zip' => '12345',
'iban' => 'DE05',
'bic' => 'SOLSDE',
]);
$response = $this->get('/setting/bill');
@ -36,6 +38,8 @@ class SettingTest extends TestCase
'address' => 'Musterstr 4',
'place' => 'Solingen',
'zip' => '12345',
'iban' => 'DE05',
'bic' => 'SOLSDE',
], $response, 'data');
}
@ -71,10 +75,14 @@ class SettingTest extends TestCase
'address' => 'Musterstr 4',
'place' => 'Solingen',
'zip' => '12345',
'iban' => 'DE05',
'bic' => 'SOLSDE',
]);
$response->assertRedirect('/setting/bill');
$settings = app(LetterSettings::class);
$this->assertEquals('DPSG Stamm Muster', $settings->from_long);
$this->assertEquals('DE05', $settings->iban);
$this->assertEquals('SOLSDE', $settings->bic);
}
}

View File

@ -8,6 +8,8 @@ use App\Group;
use App\Letter\BillDocument;
use App\Letter\DocumentFactory;
use App\Letter\Letter;
use App\Letter\LetterSettings;
use App\Letter\Page;
use App\Member\Member;
use App\Nationality;
use App\Payment\Subscription;
@ -201,6 +203,40 @@ class GenerateTest extends TestCase
$this->assertEquals('inline; filename="'.$filename.'"', $response->headers->get('content-disposition'));
}
/**
* @testWith ["App\\Letter\\BillDocument"]
* ["App\\Letter\\RememberDocument"]
*/
public function testTheDocumentHasSettings(string $type): void
{
LetterSettings::fake([
'from_long' => 'langer Stammesname',
'from' => 'Stammeskurz',
'mobile' => '+49 176 55555',
'email' => 'max@muster.de',
'website' => 'https://example.com',
'address' => 'Musterstr 4',
'place' => 'Münster',
'zip' => '12345',
'iban' => 'DE444',
'bic' => 'SOLSSSSS',
]);
$member = Member::factory()->defaults()->create();
$document = new $type(collect([new Page(Member::get())]));
$document->assertHasContent('langer Stammesname');
$document->assertHasContent('Stammeskurz');
$document->assertHasContent('+49 176 55555');
$document->assertHasContent('max@muster.de');
$document->assertHasContent('https://example.com');
$document->assertHasContent('Musterstr 4');
$document->assertHasContent('Münster');
$document->assertHasContent('12345');
$document->assertHasContent('DE444');
$document->assertHasContent('SOLSSSSS');
}
private function setupMembers(array $members): Collection
{
return collect($members)->map(function (array $member): Member {