Add settings for letter pdf
This commit is contained in:
parent
39b680a0e4
commit
33df7bef1f
|
@ -44,6 +44,7 @@ abstract class Letter extends Document
|
||||||
public string $subject;
|
public string $subject;
|
||||||
protected string $filename;
|
protected string $filename;
|
||||||
public string $until;
|
public string $until;
|
||||||
|
public LetterSettings $settings;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Collection<int, Page> $pages
|
* @param Collection<int, Page> $pages
|
||||||
|
@ -54,6 +55,7 @@ abstract class Letter extends Document
|
||||||
$this->subject = $this->getSubject();
|
$this->subject = $this->getSubject();
|
||||||
$this->until = now()->addWeeks(2)->format('d.m.Y');
|
$this->until = now()->addWeeks(2)->format('d.m.Y');
|
||||||
$this->setFilename(Str::slug("{$this->getSubject()} für {$pages->first()?->familyName}"));
|
$this->setFilename(Str::slug("{$this->getSubject()} für {$pages->first()?->familyName}"));
|
||||||
|
$this->settings = app(LetterSettings::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function number(int $number): string
|
public function number(int $number): string
|
||||||
|
|
|
@ -22,6 +22,10 @@ class LetterSettings extends LocalSettings
|
||||||
|
|
||||||
public string $zip;
|
public string $zip;
|
||||||
|
|
||||||
|
public string $iban;
|
||||||
|
|
||||||
|
public string $bic;
|
||||||
|
|
||||||
public static function group(): string
|
public static function group(): string
|
||||||
{
|
{
|
||||||
return 'bill';
|
return 'bill';
|
||||||
|
|
|
@ -24,6 +24,8 @@ class SettingIndexAction
|
||||||
'address' => $settings->address,
|
'address' => $settings->address,
|
||||||
'place' => $settings->place,
|
'place' => $settings->place,
|
||||||
'zip' => $settings->zip,
|
'zip' => $settings->zip,
|
||||||
|
'iban' => $settings->iban,
|
||||||
|
'bic' => $settings->bic,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,8 @@ class SettingSaveAction
|
||||||
'address' => $input['address'] ?? '',
|
'address' => $input['address'] ?? '',
|
||||||
'place' => $input['place'] ?? '',
|
'place' => $input['place'] ?? '',
|
||||||
'zip' => $input['zip'] ?? '',
|
'zip' => $input['zip'] ?? '',
|
||||||
|
'iban' => $input['iban'] ?? '',
|
||||||
|
'bic' => $input['bic'] ?? '',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$settings->save();
|
$settings->save();
|
||||||
|
|
|
@ -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', '');
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,7 +2,7 @@
|
||||||
<form class="grow p-6 grid grid-cols-2 gap-3 items-start content-start" @submit.prevent="submit">
|
<form class="grow p-6 grid grid-cols-2 gap-3 items-start content-start" @submit.prevent="submit">
|
||||||
<f-text
|
<f-text
|
||||||
label="Absender"
|
label="Absender"
|
||||||
hint="Absender-Name, i.d.R. der kurze Stammesname"
|
hint="Absender-Name in Kurzform, i.d.R. der kurze Stammesname"
|
||||||
name="from"
|
name="from"
|
||||||
id="from"
|
id="from"
|
||||||
v-model="inner.from"
|
v-model="inner.from"
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
v-model="inner.from_long"
|
v-model="inner.from_long"
|
||||||
name="from_long"
|
name="from_long"
|
||||||
id="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>
|
></f-text>
|
||||||
<h2 class="text-lg font-semibold text-gray-300 col-span-2 mt-5">Kontaktdaten</h2>
|
<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">
|
<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="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="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="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>
|
<div>
|
||||||
<button type="submit" class="mt-3 btn block btn-primary">Speichern</button>
|
<button type="submit" class="mt-3 btn block btn-primary">Speichern</button>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
\documentclass[silvaletter,12pt]{scrlttr2}
|
\documentclass[silvaletter,12pt]{scrlttr2}
|
||||||
|
|
||||||
\setkomavar{subject}{<<< $subject >>>}
|
@include('tex.letter-header')
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
@foreach($pages as $page)
|
@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:
|
Somit bitten wir Sie, den ausstehenden Betrag von \totalttc bis zum \textbf{<<< $until >>>} auf folgendes Konto zu überweisen:
|
||||||
|
|
||||||
\begin{tabular}{ll}
|
\begin{tabular}{ll}
|
||||||
Kontoinhaber: & DPSG Stamm Silva \\
|
Kontoinhaber: & <<<$settings->from_long>>> \\
|
||||||
IBAN: & DE40 3425 0000 0000 2145 51 \\
|
IBAN: & <<<$settings->iban>>> \\
|
||||||
Bic: & SOLSDE33XXX \\
|
Bic: & <<<$settings->bic>>> \\
|
||||||
Verwendungszweck: & <<<$page->usage>>>
|
Verwendungszweck: & <<<$page->usage>>>
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
@ -1,6 +1,6 @@
|
||||||
\documentclass[silvaletter,12pt]{scrlttr2}
|
\documentclass[silvaletter,12pt]{scrlttr2}
|
||||||
|
|
||||||
\setkomavar{subject}{<<< $subject >>>}
|
@include('tex.letter-header')
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
@foreach($pages as $page)
|
@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:
|
Somit bitten wir Sie, den ausstehenden Betrag von \totalttc bis zum \textbf{<<< $until >>>} auf folgendes Konto zu überweisen:
|
||||||
|
|
||||||
\begin{tabular}{ll}
|
\begin{tabular}{ll}
|
||||||
Kontoinhaber: & DPSG Stamm Silva \\
|
Kontoinhaber: & <<<$settings->from_long>>> \\
|
||||||
IBAN: & DE40 3425 0000 0000 2145 51 \\
|
IBAN: & <<<$settings->iban>>> \\
|
||||||
Bic: & SOLSDE33XXX \\
|
Bic: & <<<$settings->bic>>> \\
|
||||||
Verwendungszweck: & <<<$page->usage>>>
|
Verwendungszweck: & <<<$page->usage>>>
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,8 @@ class SettingTest extends TestCase
|
||||||
'address' => 'Musterstr 4',
|
'address' => 'Musterstr 4',
|
||||||
'place' => 'Solingen',
|
'place' => 'Solingen',
|
||||||
'zip' => '12345',
|
'zip' => '12345',
|
||||||
|
'iban' => 'DE05',
|
||||||
|
'bic' => 'SOLSDE',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$response = $this->get('/setting/bill');
|
$response = $this->get('/setting/bill');
|
||||||
|
@ -36,6 +38,8 @@ class SettingTest extends TestCase
|
||||||
'address' => 'Musterstr 4',
|
'address' => 'Musterstr 4',
|
||||||
'place' => 'Solingen',
|
'place' => 'Solingen',
|
||||||
'zip' => '12345',
|
'zip' => '12345',
|
||||||
|
'iban' => 'DE05',
|
||||||
|
'bic' => 'SOLSDE',
|
||||||
], $response, 'data');
|
], $response, 'data');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,10 +75,14 @@ class SettingTest extends TestCase
|
||||||
'address' => 'Musterstr 4',
|
'address' => 'Musterstr 4',
|
||||||
'place' => 'Solingen',
|
'place' => 'Solingen',
|
||||||
'zip' => '12345',
|
'zip' => '12345',
|
||||||
|
'iban' => 'DE05',
|
||||||
|
'bic' => 'SOLSDE',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$response->assertRedirect('/setting/bill');
|
$response->assertRedirect('/setting/bill');
|
||||||
$settings = app(LetterSettings::class);
|
$settings = app(LetterSettings::class);
|
||||||
$this->assertEquals('DPSG Stamm Muster', $settings->from_long);
|
$this->assertEquals('DPSG Stamm Muster', $settings->from_long);
|
||||||
|
$this->assertEquals('DE05', $settings->iban);
|
||||||
|
$this->assertEquals('SOLSDE', $settings->bic);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,8 @@ use App\Group;
|
||||||
use App\Letter\BillDocument;
|
use App\Letter\BillDocument;
|
||||||
use App\Letter\DocumentFactory;
|
use App\Letter\DocumentFactory;
|
||||||
use App\Letter\Letter;
|
use App\Letter\Letter;
|
||||||
|
use App\Letter\LetterSettings;
|
||||||
|
use App\Letter\Page;
|
||||||
use App\Member\Member;
|
use App\Member\Member;
|
||||||
use App\Nationality;
|
use App\Nationality;
|
||||||
use App\Payment\Subscription;
|
use App\Payment\Subscription;
|
||||||
|
@ -201,6 +203,40 @@ class GenerateTest extends TestCase
|
||||||
$this->assertEquals('inline; filename="'.$filename.'"', $response->headers->get('content-disposition'));
|
$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
|
private function setupMembers(array $members): Collection
|
||||||
{
|
{
|
||||||
return collect($members)->map(function (array $member): Member {
|
return collect($members)->map(function (array $member): Member {
|
||||||
|
|
Loading…
Reference in New Issue