Move letter to invoice
continuous-integration/drone/push Build is passing Details

This commit is contained in:
philipp lang 2023-04-18 22:08:45 +02:00
parent b0874cecda
commit aba214614c
32 changed files with 165 additions and 165 deletions

View File

@ -4,7 +4,7 @@ namespace App\Console;
use App\Initialize\Actions\InitializeAction; use App\Initialize\Actions\InitializeAction;
use App\Initialize\InitializeMembers; use App\Initialize\InitializeMembers;
use App\Letter\Actions\LetterSendAction; use App\Invoice\Actions\InvoiceSendAction;
use Illuminate\Console\Scheduling\Schedule; use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel; use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Laravel\Telescope\Console\PruneCommand; use Laravel\Telescope\Console\PruneCommand;
@ -17,7 +17,7 @@ class Kernel extends ConsoleKernel
* @var array<int, class-string> * @var array<int, class-string>
*/ */
protected $commands = [ protected $commands = [
LetterSendAction::class, InvoiceSendAction::class,
InitializeAction::class, InitializeAction::class,
InitializeMembers::class, InitializeMembers::class,
]; ];

View File

@ -0,0 +1,48 @@
<?php
namespace App\Invoice\Actions;
use App\Invoice\BillKind;
use App\Invoice\DocumentFactory;
use App\Invoice\Queries\BillKindQuery;
use App\Payment\PaymentMail;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Storage;
use Lorisleiva\Actions\Concerns\AsAction;
use Zoomyboy\Tex\Tex;
class InvoiceSendAction
{
use AsAction;
/**
* The name and signature of the console command.
*/
public string $commandSignature = 'invoice:send';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Sends Bills';
/**
* Execute the console command.
*/
public function handle(): int
{
foreach (app(DocumentFactory::class)->getTypes() as $type) {
$invoices = app(DocumentFactory::class)->invoiceCollection($type, new BillKindQuery(BillKind::EMAIL));
foreach ($invoices as $invoice) {
$invoicePath = Storage::disk('temp')->path(Tex::compile($invoice)->storeIn('', 'temp'));
Mail::to($invoice->getRecipient())
->send(new PaymentMail($invoice, $invoicePath));
app(DocumentFactory::class)->afterSingle($invoice);
}
}
return 0;
}
}

View File

@ -1,11 +1,11 @@
<?php <?php
namespace App\Letter; namespace App\Invoice;
use App\Payment\Payment; use App\Payment\Payment;
use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasMany;
class BillDocument extends Letter class BillDocument extends Invoice
{ {
public function linkLabel(): string public function linkLabel(): string
{ {

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Letter; namespace App\Invoice;
enum BillKind: string enum BillKind: string
{ {

View File

@ -1,14 +1,14 @@
<?php <?php
namespace App\Letter; namespace App\Invoice;
use App\Letter\Queries\LetterMemberQuery; use App\Invoice\Queries\InvoiceMemberQuery;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
class DocumentFactory class DocumentFactory
{ {
/** /**
* @var array<int, class-string<Letter>> * @var array<int, class-string<Invoice>>
*/ */
private array $types = [ private array $types = [
BillDocument::class, BillDocument::class,
@ -16,7 +16,7 @@ class DocumentFactory
]; ];
/** /**
* @return Collection<int, class-string<Letter>> * @return Collection<int, class-string<Invoice>>
*/ */
public function getTypes(): Collection public function getTypes(): Collection
{ {
@ -24,9 +24,9 @@ class DocumentFactory
} }
/** /**
* @param class-string<Letter> $type * @param class-string<Invoice> $type
*/ */
public function singleLetter(string $type, LetterMemberQuery $query): ?Letter public function singleInvoice(string $type, InvoiceMemberQuery $query): ?Invoice
{ {
$pages = $query->getPages($type); $pages = $query->getPages($type);
@ -38,29 +38,29 @@ class DocumentFactory
} }
/** /**
* @param class-string<Letter> $type * @param class-string<Invoice> $type
* *
* @return Collection<int, Letter> * @return Collection<int, Invoice>
*/ */
public function letterCollection(string $type, LetterMemberQuery $query): Collection public function invoiceCollection(string $type, InvoiceMemberQuery $query): Collection
{ {
return $query return $query
->getPages($type) ->getPages($type)
->map(fn ($page) => $this->resolve($type, collect([$page]))); ->map(fn ($page) => $this->resolve($type, collect([$page])));
} }
public function afterSingle(Letter $letter): void public function afterSingle(Invoice $invoice): void
{ {
foreach ($letter->allPayments() as $payment) { foreach ($invoice->allPayments() as $payment) {
$letter->afterSingle($payment); $invoice->afterSingle($payment);
} }
} }
/** /**
* @param class-string<Letter> $type * @param class-string<Invoice> $type
* @param Collection<int, Page> $pages * @param Collection<int, Page> $pages
*/ */
private function resolve(string $type, Collection $pages): Letter private function resolve(string $type, Collection $pages): Invoice
{ {
return new $type($pages); return new $type($pages);
} }

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Letter; namespace App\Invoice;
use App\Payment\Payment; use App\Payment\Payment;
use Carbon\Carbon; use Carbon\Carbon;
@ -13,7 +13,7 @@ use Zoomyboy\Tex\Document;
use Zoomyboy\Tex\Engine; use Zoomyboy\Tex\Engine;
use Zoomyboy\Tex\Template; use Zoomyboy\Tex\Template;
abstract class Letter extends Document abstract class Invoice extends Document
{ {
abstract public function getSubject(): string; abstract public function getSubject(): string;
@ -44,7 +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; public InvoiceSettings $settings;
/** /**
* @param Collection<int, Page> $pages * @param Collection<int, Page> $pages
@ -55,7 +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); $this->settings = app(InvoiceSettings::class);
} }
public function number(int $number): string public function number(int $number): string

View File

@ -1,10 +1,10 @@
<?php <?php
namespace App\Letter; namespace App\Invoice;
use App\Setting\LocalSettings; use App\Setting\LocalSettings;
class LetterSettings extends LocalSettings class InvoiceSettings extends LocalSettings
{ {
public string $from_long; public string $from_long;

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Letter; namespace App\Invoice;
class MailRecipient class MailRecipient
{ {

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Letter; namespace App\Invoice;
use App\Member\Member; use App\Member\Member;
use App\Payment\Payment; use App\Payment\Payment;

View File

@ -1,12 +1,12 @@
<?php <?php
namespace App\Letter\Queries; namespace App\Invoice\Queries;
use App\Letter\BillKind; use App\Invoice\BillKind;
use App\Member\Member; use App\Member\Member;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
class BillKindQuery extends LetterMemberQuery class BillKindQuery extends InvoiceMemberQuery
{ {
public function __construct( public function __construct(
private BillKind $billKind private BillKind $billKind

View File

@ -1,16 +1,16 @@
<?php <?php
namespace App\Letter\Queries; namespace App\Invoice\Queries;
use App\Letter\Letter; use App\Invoice\Invoice;
use App\Letter\Page; use App\Invoice\Page;
use App\Member\Member; use App\Member\Member;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Collection as EloquentCollection; use Illuminate\Database\Eloquent\Collection as EloquentCollection;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Illuminate\Support\Str; use Illuminate\Support\Str;
abstract class LetterMemberQuery abstract class InvoiceMemberQuery
{ {
/** /**
* @return Builder<Member> * @return Builder<Member>
@ -18,7 +18,7 @@ abstract class LetterMemberQuery
abstract protected function getQuery(): Builder; abstract protected function getQuery(): Builder;
/** /**
* @param class-string<Letter> $type * @param class-string<Invoice> $type
* *
* @return Collection<int, Page> * @return Collection<int, Page>
*/ */
@ -32,7 +32,7 @@ abstract class LetterMemberQuery
} }
/** /**
* @param class-string<Letter> $type * @param class-string<Invoice> $type
* *
* @return EloquentCollection<int, Member> * @return EloquentCollection<int, Member>
*/ */

View File

@ -1,11 +1,11 @@
<?php <?php
namespace App\Letter\Queries; namespace App\Invoice\Queries;
use App\Member\Member; use App\Member\Member;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
class SingleMemberQuery extends LetterMemberQuery class SingleMemberQuery extends InvoiceMemberQuery
{ {
public function __construct( public function __construct(
private Member $member private Member $member

View File

@ -1,11 +1,11 @@
<?php <?php
namespace App\Letter; namespace App\Invoice;
use App\Payment\Payment; use App\Payment\Payment;
use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasMany;
class RememberDocument extends Letter class RememberDocument extends Invoice
{ {
public function linkLabel(): string public function linkLabel(): string
{ {

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Letter; namespace App\Invoice;
use Inertia\Inertia; use Inertia\Inertia;
use Inertia\Response; use Inertia\Response;
@ -13,7 +13,7 @@ class SettingIndexAction
/** /**
* @return array<string, string> * @return array<string, string>
*/ */
public function handle(LetterSettings $settings): array public function handle(InvoiceSettings $settings): array
{ {
return [ return [
'from_long' => $settings->from_long, 'from_long' => $settings->from_long,
@ -29,7 +29,7 @@ class SettingIndexAction
]; ];
} }
public function asController(LetterSettings $settings): Response public function asController(InvoiceSettings $settings): Response
{ {
session()->put('menu', 'setting'); session()->put('menu', 'setting');
session()->put('title', 'Rechnungs-Einstellungen'); session()->put('title', 'Rechnungs-Einstellungen');

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Letter; namespace App\Invoice;
use Illuminate\Http\RedirectResponse; use Illuminate\Http\RedirectResponse;
use Lorisleiva\Actions\ActionRequest; use Lorisleiva\Actions\ActionRequest;
@ -15,7 +15,7 @@ class SettingSaveAction
*/ */
public function handle(array $input): void public function handle(array $input): void
{ {
$settings = app(LetterSettings::class); $settings = app(InvoiceSettings::class);
$settings->fill([ $settings->fill([
'from_long' => $input['from_long'] ?? '', 'from_long' => $input['from_long'] ?? '',

View File

@ -1,48 +0,0 @@
<?php
namespace App\Letter\Actions;
use App\Letter\BillKind;
use App\Letter\DocumentFactory;
use App\Letter\Queries\BillKindQuery;
use App\Payment\PaymentMail;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Storage;
use Lorisleiva\Actions\Concerns\AsAction;
use Zoomyboy\Tex\Tex;
class LetterSendAction
{
use AsAction;
/**
* The name and signature of the console command.
*/
public string $commandSignature = 'letter:send';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Sends Bills';
/**
* Execute the console command.
*/
public function handle(): int
{
foreach (app(DocumentFactory::class)->getTypes() as $type) {
$letters = app(DocumentFactory::class)->letterCollection($type, new BillKindQuery(BillKind::EMAIL));
foreach ($letters as $letter) {
$letterPath = Storage::disk('temp')->path(Tex::compile($letter)->storeIn('', 'temp'));
Mail::to($letter->getRecipient())
->send(new PaymentMail($letter, $letterPath));
app(DocumentFactory::class)->afterSingle($letter);
}
}
return 0;
}
}

View File

@ -2,7 +2,7 @@
namespace App\Member; namespace App\Member;
use App\Letter\BillKind; use App\Invoice\BillKind;
use App\Lib\Filter; use App\Lib\Filter;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Spatie\LaravelData\Attributes\MapInputName; use Spatie\LaravelData\Attributes\MapInputName;

View File

@ -7,7 +7,7 @@ use App\Country;
use App\Course\Models\CourseMember; use App\Course\Models\CourseMember;
use App\Gender; use App\Gender;
use App\Group; use App\Group;
use App\Letter\BillKind; use App\Invoice\BillKind;
use App\Nami\HasNamiField; use App\Nami\HasNamiField;
use App\Nationality; use App\Nationality;
use App\Payment\Payment; use App\Payment\Payment;

View File

@ -8,7 +8,7 @@ use App\Country;
use App\Gender; use App\Gender;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Http\Views\MemberView; use App\Http\Views\MemberView;
use App\Letter\BillKind; use App\Invoice\BillKind;
use App\Nationality; use App\Nationality;
use App\Payment\Subscription; use App\Payment\Subscription;
use App\Region; use App\Region;

View File

@ -4,7 +4,7 @@ namespace App\Member;
use App\Activity; use App\Activity;
use App\Group; use App\Group;
use App\Letter\BillKind; use App\Invoice\BillKind;
use App\Member\Actions\NamiPutMemberAction; use App\Member\Actions\NamiPutMemberAction;
use App\Setting\NamiSettings; use App\Setting\NamiSettings;
use App\Subactivity; use App\Subactivity;
@ -72,7 +72,7 @@ class MemberRequest extends FormRequest
'send_newspaper' => 'boolean', 'send_newspaper' => 'boolean',
'main_phone' => ['nullable', new ValidPhoneRule('Telefon (Eltern)')], 'main_phone' => ['nullable', new ValidPhoneRule('Telefon (Eltern)')],
'mobile_phone' => ['nullable', new ValidPhoneRule('Handy (Eltern)')], 'mobile_phone' => ['nullable', new ValidPhoneRule('Handy (Eltern)')],
'letter_address' => '', 'invoice_address' => '',
'gender_id' => 'nullable|exists:genders,id', 'gender_id' => 'nullable|exists:genders,id',
'region_id' => 'nullable|exists:regions,id', 'region_id' => 'nullable|exists:regions,id',
'nationality_id' => 'required|exists:nationalities,id', 'nationality_id' => 'required|exists:nationalities,id',

View File

@ -2,7 +2,7 @@
namespace App\Payment; namespace App\Payment;
use App\Letter\DocumentFactory; use App\Invoice\DocumentFactory;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
class ActionFactory class ActionFactory

View File

@ -2,7 +2,7 @@
namespace App\Payment; namespace App\Payment;
use App\Letter\Letter; use App\Invoice\Invoice;
use Illuminate\Bus\Queueable; use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable; use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels; use Illuminate\Queue\SerializesModels;
@ -12,7 +12,7 @@ class PaymentMail extends Mailable
use Queueable; use Queueable;
use SerializesModels; use SerializesModels;
public Letter $letter; public Invoice $invoice;
public string $filename; public string $filename;
public string $salutation; public string $salutation;
@ -21,11 +21,11 @@ class PaymentMail extends Mailable
* *
* @return void * @return void
*/ */
public function __construct(Letter $letter, string $filename) public function __construct(Invoice $invoice, string $filename)
{ {
$this->letter = $letter; $this->invoice = $invoice;
$this->filename = $filename; $this->filename = $filename;
$this->salutation = 'Liebe Familie '.$letter->pages->first()->familyName; $this->salutation = 'Liebe Familie '.$invoice->pages->first()->familyName;
} }
/** /**
@ -35,9 +35,9 @@ class PaymentMail extends Mailable
*/ */
public function build() public function build()
{ {
return $this->markdown($this->letter->mailView()) return $this->markdown($this->invoice->mailView())
->attach($this->filename) ->attach($this->filename)
->replyTo('kasse@stamm-silva.de') ->replyTo('kasse@stamm-silva.de')
->subject($this->letter->getSubject().' | DPSG Stamm Silva'); ->subject($this->invoice->getSubject().' | DPSG Stamm Silva');
} }
} }

View File

@ -3,9 +3,9 @@
namespace App\Payment; namespace App\Payment;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Letter\BillKind; use App\Invoice\BillKind;
use App\Letter\DocumentFactory; use App\Invoice\DocumentFactory;
use App\Letter\Queries\BillKindQuery; use App\Invoice\Queries\BillKindQuery;
use Illuminate\Contracts\Support\Responsable; use Illuminate\Contracts\Support\Responsable;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Response; use Illuminate\Http\Response;
@ -30,14 +30,14 @@ class SendpaymentController extends Controller
*/ */
public function send(Request $request) public function send(Request $request)
{ {
$letter = app(DocumentFactory::class)->singleLetter($request->type, new BillKindQuery(BillKind::POST)); $invoice = app(DocumentFactory::class)->singleInvoice($request->type, new BillKindQuery(BillKind::POST));
if (is_null($letter)) { if (is_null($invoice)) {
return response()->noContent(); return response()->noContent();
} }
$pdfFile = Tex::compile($letter); $pdfFile = Tex::compile($invoice);
app(DocumentFactory::class)->afterSingle($letter); app(DocumentFactory::class)->afterSingle($invoice);
return $pdfFile; return $pdfFile;
} }

View File

@ -3,8 +3,8 @@
namespace App\Pdf; namespace App\Pdf;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Letter\DocumentFactory; use App\Invoice\DocumentFactory;
use App\Letter\Queries\SingleMemberQuery; use App\Invoice\Queries\SingleMemberQuery;
use App\Member\Member; use App\Member\Member;
use Illuminate\Contracts\Support\Responsable; use Illuminate\Contracts\Support\Responsable;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@ -18,10 +18,10 @@ class MemberPdfController extends Controller
*/ */
public function __invoke(Request $request, Member $member) public function __invoke(Request $request, Member $member)
{ {
$letter = app(DocumentFactory::class)->singleLetter($request->type, new SingleMemberQuery($member)); $invoice = app(DocumentFactory::class)->singleInvoice($request->type, new SingleMemberQuery($member));
return null === $letter return null === $invoice
? response()->noContent() ? response()->noContent()
: Tex::compile($letter); : Tex::compile($invoice);
} }
} }

View File

@ -2,7 +2,7 @@
namespace App\Setting; namespace App\Setting;
use App\Letter\LetterSettings; use App\Invoice\InvoiceSettings;
use App\Mailman\MailmanSettings; use App\Mailman\MailmanSettings;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
@ -25,7 +25,7 @@ class SettingServiceProvider extends ServiceProvider
*/ */
public function boot() public function boot()
{ {
app(SettingFactory::class)->register(LetterSettings::class); app(SettingFactory::class)->register(InvoiceSettings::class);
app(SettingFactory::class)->register(MailmanSettings::class); app(SettingFactory::class)->register(MailmanSettings::class);
} }
} }

View File

@ -5,7 +5,7 @@ namespace Database\Factories\Member;
use App\Country; use App\Country;
use App\Fee; use App\Fee;
use App\Group; use App\Group;
use App\Letter\BillKind; use App\Invoice\BillKind;
use App\Member\Member; use App\Member\Member;
use App\Nationality; use App\Nationality;
use App\Payment\Payment; use App\Payment\Payment;

View File

@ -630,7 +630,7 @@ parameters:
path: app/Contribution/ContributionFactory.php path: app/Contribution/ContributionFactory.php
- -
message: "#^Return type of call to method Illuminate\\\\Support\\\\Collection\\<int,class\\-string\\<App\\\\Letter\\\\Letter\\>\\>\\:\\:map\\(\\) contains unresolvable type\\.$#" message: "#^Return type of call to method Illuminate\\\\Support\\\\Collection\\<int,class\\-string\\<App\\\\Invoice\\\\Invoice\\>\\>\\:\\:map\\(\\) contains unresolvable type\\.$#"
count: 1 count: 1
path: app/Payment/ActionFactory.php path: app/Payment/ActionFactory.php

View File

@ -2,7 +2,7 @@
namespace Tests\Feature\Bill; namespace Tests\Feature\Bill;
use App\Letter\LetterSettings; use App\Invoice\InvoiceSettings;
use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Foundation\Testing\DatabaseTransactions;
use Tests\TestCase; use Tests\TestCase;
@ -13,7 +13,7 @@ class SettingTest extends TestCase
public function testSettingIndex(): void public function testSettingIndex(): void
{ {
$this->withoutExceptionHandling()->login()->loginNami(); $this->withoutExceptionHandling()->login()->loginNami();
LetterSettings::fake([ InvoiceSettings::fake([
'from_long' => 'DPSG Stamm Muster', 'from_long' => 'DPSG Stamm Muster',
'from' => 'Stamm Muster', 'from' => 'Stamm Muster',
'mobile' => '+49 176 55555', 'mobile' => '+49 176 55555',
@ -80,7 +80,7 @@ class SettingTest extends TestCase
]); ]);
$response->assertRedirect('/setting/bill'); $response->assertRedirect('/setting/bill');
$settings = app(LetterSettings::class); $settings = app(InvoiceSettings::class);
$this->assertEquals('DPSG Stamm Muster', $settings->from_long); $this->assertEquals('DPSG Stamm Muster', $settings->from_long);
$this->assertEquals('DE05', $settings->iban); $this->assertEquals('DE05', $settings->iban);
$this->assertEquals('SOLSDE', $settings->bic); $this->assertEquals('SOLSDE', $settings->bic);

View File

@ -1,13 +1,13 @@
<?php <?php
namespace Tests\Feature\Letter; namespace Tests\Feature\Invoice;
use App\Letter\BillDocument; use App\Invoice\BillDocument;
use App\Letter\DocumentFactory; use App\Invoice\DocumentFactory;
use App\Letter\LetterSettings; use App\Invoice\InvoiceSettings;
use App\Letter\Queries\LetterMemberQuery; use App\Invoice\Queries\InvoiceMemberQuery;
use App\Letter\Queries\SingleMemberQuery; use App\Invoice\Queries\SingleMemberQuery;
use App\Letter\RememberDocument; use App\Invoice\RememberDocument;
use App\Member\Member; use App\Member\Member;
use App\Payment\Payment; use App\Payment\Payment;
use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Foundation\Testing\DatabaseTransactions;
@ -20,14 +20,14 @@ class DocumentFactoryTest extends TestCase
use DatabaseTransactions; use DatabaseTransactions;
/** /**
* @testWith ["\\App\\Letter\\BillDocument"] * @testWith ["\\App\\Invoice\\BillDocument"]
* ["\\App\\Letter\\RememberDocument"] * ["\\App\\Invoice\\RememberDocument"]
*/ */
public function testItDoesntReturnARepositoryWhenMemberDoesntHavePayments(): void public function testItDoesntReturnARepositoryWhenMemberDoesntHavePayments(): void
{ {
$member = Member::factory()->defaults()->create(); $member = Member::factory()->defaults()->create();
$letter = app(DocumentFactory::class)->singleLetter(BillDocument::class, $this->query($member)); $invoice = app(DocumentFactory::class)->singleInvoice(BillDocument::class, $this->query($member));
$this->assertNull($letter); $this->assertNull($invoice);
} }
public function testItDisplaysMemberInformation(): void public function testItDisplaysMemberInformation(): void
@ -47,9 +47,9 @@ class DocumentFactoryTest extends TestCase
])) ]))
->create(); ->create();
$letter = app(DocumentFactory::class)->singleLetter(BillDocument::class, $this->query($member)); $invoice = app(DocumentFactory::class)->singleInvoice(BillDocument::class, $this->query($member));
$letter->assertHasAllContent([ $invoice->assertHasAllContent([
'Rechnung', 'Rechnung',
'15.00', '15.00',
'::subName:: 1995 für ::firstname:: ::lastname::', '::subName:: 1995 für ::firstname:: ::lastname::',
@ -72,9 +72,9 @@ class DocumentFactoryTest extends TestCase
], ['split' => true])) ], ['split' => true]))
->create(); ->create();
$letter = app(DocumentFactory::class)->singleLetter(BillDocument::class, $this->query($member)); $invoice = app(DocumentFactory::class)->singleInvoice(BillDocument::class, $this->query($member));
$letter->assertHasAllContent([ $invoice->assertHasAllContent([
'Rechnung', 'Rechnung',
'10.00', '10.00',
'5.00', '5.00',
@ -92,9 +92,9 @@ class DocumentFactoryTest extends TestCase
->has(Payment::factory()->notPaid()->nr('1995')) ->has(Payment::factory()->notPaid()->nr('1995'))
->create(); ->create();
$letter = app(DocumentFactory::class)->singleLetter(BillDocument::class, $this->query($member)); $invoice = app(DocumentFactory::class)->singleInvoice(BillDocument::class, $this->query($member));
$this->assertEquals('rechnung-fur-lastname.pdf', $letter->compiledFilename()); $this->assertEquals('rechnung-fur-lastname.pdf', $invoice->compiledFilename());
} }
public function testRememberSetsFilename(): void public function testRememberSetsFilename(): void
@ -105,9 +105,9 @@ class DocumentFactoryTest extends TestCase
->has(Payment::factory()->notPaid()) ->has(Payment::factory()->notPaid())
->create(); ->create();
$letter = app(DocumentFactory::class)->singleLetter(RememberDocument::class, $this->query($member)); $invoice = app(DocumentFactory::class)->singleInvoice(RememberDocument::class, $this->query($member));
$this->assertEquals('zahlungserinnerung-fur-lastname.pdf', $letter->compiledFilename()); $this->assertEquals('zahlungserinnerung-fur-lastname.pdf', $invoice->compiledFilename());
} }
public function testItCreatesOneFileForFamilyMembers(): void public function testItCreatesOneFileForFamilyMembers(): void
@ -123,18 +123,18 @@ class DocumentFactoryTest extends TestCase
->has(Payment::factory()->notPaid()->nr('nr2')) ->has(Payment::factory()->notPaid()->nr('nr2'))
->create(); ->create();
$letter = app(DocumentFactory::class)->singleLetter(BillDocument::class, $this->query($firstMember)); $invoice = app(DocumentFactory::class)->singleInvoice(BillDocument::class, $this->query($firstMember));
$letter->assertHasAllContent(['Max1', 'Max2', 'nr1', 'nr2']); $invoice->assertHasAllContent(['Max1', 'Max2', 'nr1', 'nr2']);
} }
/** /**
* @testWith ["App\\Letter\\BillDocument"] * @testWith ["App\\Invoice\\BillDocument"]
* ["App\\Letter\\RememberDocument"] * ["App\\Invoice\\RememberDocument"]
*/ */
public function testItDisplaysSettings(string $type): void public function testItDisplaysSettings(string $type): void
{ {
LetterSettings::fake([ InvoiceSettings::fake([
'from_long' => 'langer Stammesname', 'from_long' => 'langer Stammesname',
'from' => 'Stammeskurz', 'from' => 'Stammeskurz',
'mobile' => '+49 176 55555', 'mobile' => '+49 176 55555',
@ -151,9 +151,9 @@ class DocumentFactoryTest extends TestCase
->has(Payment::factory()->notPaid()->nr('nr2')) ->has(Payment::factory()->notPaid()->nr('nr2'))
->create(); ->create();
$letter = app(DocumentFactory::class)->singleLetter($type, $this->query($member)); $invoice = app(DocumentFactory::class)->singleInvoice($type, $this->query($member));
$letter->assertHasAllContent([ $invoice->assertHasAllContent([
'langer Stammesname', 'langer Stammesname',
'Stammeskurz', 'Stammeskurz',
'+49 176 55555', '+49 176 55555',
@ -185,7 +185,7 @@ class DocumentFactoryTest extends TestCase
$this->assertEquals('inline; filename="rechnung-fur-lastname.pdf"', $response->headers->get('content-disposition')); $this->assertEquals('inline; filename="rechnung-fur-lastname.pdf"', $response->headers->get('content-disposition'));
} }
private function query(Member $member): LetterMemberQuery private function query(Member $member): InvoiceMemberQuery
{ {
return new SingleMemberQuery($member); return new SingleMemberQuery($member);
} }

View File

@ -1,9 +1,9 @@
<?php <?php
namespace Tests\Feature\Letter; namespace Tests\Feature\Invoice;
use App\Letter\Actions\LetterSendAction; use App\Invoice\Actions\InvoiceSendAction;
use App\Letter\BillDocument; use App\Invoice\BillDocument;
use App\Member\Member; use App\Member\Member;
use App\Payment\Payment; use App\Payment\Payment;
use App\Payment\PaymentMail; use App\Payment\PaymentMail;
@ -15,7 +15,7 @@ use Tests\RequestFactories\Child;
use Tests\TestCase; use Tests\TestCase;
use Zoomyboy\Tex\Tex; use Zoomyboy\Tex\Tex;
class LetterSendActionTest extends TestCase class InvoiceSendActionTest extends TestCase
{ {
use DatabaseTransactions; use DatabaseTransactions;
@ -41,7 +41,7 @@ class LetterSendActionTest extends TestCase
{ {
Mail::fake(); Mail::fake();
Artisan::call('letter:send'); Artisan::call('invoice:send');
Mail::assertSent(PaymentMail::class, fn ($mail) => Storage::disk('temp')->path('rechnung-fur-mom.pdf') === $mail->filename && Storage::disk('temp')->exists('rechnung-fur-mom.pdf')); Mail::assertSent(PaymentMail::class, fn ($mail) => Storage::disk('temp')->path('rechnung-fur-mom.pdf') === $mail->filename && Storage::disk('temp')->exists('rechnung-fur-mom.pdf'));
} }
@ -51,7 +51,7 @@ class LetterSendActionTest extends TestCase
Mail::fake(); Mail::fake();
Tex::spy(); Tex::spy();
LetterSendAction::run(); InvoiceSendAction::run();
Tex::assertCompiled(BillDocument::class, fn ($document) => 'Mom' === $document->pages->first()->familyName Tex::assertCompiled(BillDocument::class, fn ($document) => 'Mom' === $document->pages->first()->familyName
&& $document->pages->first()->getPositions() === ['tollerbeitrag 1997 für Lah Mom' => '54.00'] && $document->pages->first()->getPositions() === ['tollerbeitrag 1997 für Lah Mom' => '54.00']

View File

@ -2,14 +2,14 @@
namespace Tests\Feature\Sendpayment; namespace Tests\Feature\Sendpayment;
use App\Letter\BillDocument; use App\Invoice\BillDocument;
use App\Letter\LetterSettings; use App\Invoice\InvoiceSettings;
use App\Member\Member; use App\Member\Member;
use App\Payment\Payment; use App\Payment\Payment;
use App\Payment\Status; use App\Payment\Status;
use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Foundation\Testing\DatabaseTransactions;
use Tests\RequestFactories\Child; use Tests\RequestFactories\Child;
use Tests\RequestFactories\LetterSettingsFake; use Tests\RequestFactories\InvoiceSettingsFake;
use Tests\TestCase; use Tests\TestCase;
use Zoomyboy\Tex\Tex; use Zoomyboy\Tex\Tex;
@ -32,7 +32,7 @@ class SendpaymentTest extends TestCase
public function testItCanCreatePdfPayments(): void public function testItCanCreatePdfPayments(): void
{ {
LetterSettings::fake(LetterSettingsFake::new()->create()); InvoiceSettings::fake(InvoiceSettingsFake::new()->create());
Tex::spy(); Tex::spy();
$this->withoutExceptionHandling(); $this->withoutExceptionHandling();
$this->login()->loginNami(); $this->login()->loginNami();
@ -43,7 +43,7 @@ class SendpaymentTest extends TestCase
->postBillKind() ->postBillKind()
->create(); ->create();
$response = $this->call('GET', route('sendpayment.pdf'), ['type' => 'App\\Letter\\BillDocument']); $response = $this->call('GET', route('sendpayment.pdf'), ['type' => 'App\\Invoice\\BillDocument']);
$response->assertOk(); $response->assertOk();
$this->assertEquals(Status::firstWhere('name', 'Rechnung gestellt')->id, $member->payments->firstWhere('nr', '1997')->status_id); $this->assertEquals(Status::firstWhere('name', 'Rechnung gestellt')->id, $member->payments->firstWhere('nr', '1997')->status_id);
@ -64,7 +64,7 @@ class SendpaymentTest extends TestCase
->emailBillKind() ->emailBillKind()
->create(); ->create();
$response = $this->call('GET', route('sendpayment.pdf'), ['type' => 'App\\Letter\\BillDocument']); $response = $this->call('GET', route('sendpayment.pdf'), ['type' => 'App\\Invoice\\BillDocument']);
$response->assertStatus(204); $response->assertStatus(204);
Tex::assertNotCompiled(BillDocument::class); Tex::assertNotCompiled(BillDocument::class);

View File

@ -4,7 +4,7 @@ namespace Tests\RequestFactories;
use Worksome\RequestFactories\RequestFactory; use Worksome\RequestFactories\RequestFactory;
class LetterSettingsFake extends RequestFactory class InvoiceSettingsFake extends RequestFactory
{ {
public function definition(): array public function definition(): array
{ {