Add invoice creator
continuous-integration/drone/push Build is failing
Details
continuous-integration/drone/push Build is failing
Details
This commit is contained in:
parent
78629989e4
commit
f5a57a9d16
|
|
@ -0,0 +1,21 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Invoice\Creators;
|
||||||
|
|
||||||
|
use App\Invoice\BillKind;
|
||||||
|
use App\Invoice\Data\PositionData;
|
||||||
|
use App\Invoice\Data\ReceiverData;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
|
||||||
|
interface InvoiceCreator {
|
||||||
|
|
||||||
|
public function getVia(): BillKind;
|
||||||
|
|
||||||
|
public function getUsage(): string;
|
||||||
|
|
||||||
|
/** @return Collection<int, PositionData> */
|
||||||
|
public function getPositions(): Collection;
|
||||||
|
|
||||||
|
public function getReceiver(): ReceiverData;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -4,12 +4,12 @@ namespace App\Invoice\Models;
|
||||||
|
|
||||||
use App\Invoice\BillDocument;
|
use App\Invoice\BillDocument;
|
||||||
use App\Invoice\BillKind;
|
use App\Invoice\BillKind;
|
||||||
|
use App\Invoice\Creators\InvoiceCreator;
|
||||||
use App\Invoice\Data\ReceiverData;
|
use App\Invoice\Data\ReceiverData;
|
||||||
use App\Invoice\Enums\InvoiceStatus;
|
use App\Invoice\Enums\InvoiceStatus;
|
||||||
use App\Invoice\InvoiceDocument;
|
use App\Invoice\InvoiceDocument;
|
||||||
use App\Invoice\InvoiceSettings;
|
use App\Invoice\InvoiceSettings;
|
||||||
use App\Invoice\RememberDocument;
|
use App\Invoice\RememberDocument;
|
||||||
use App\Member\Factories\MemberInvoiceFactory;
|
|
||||||
use Database\Factories\Invoice\Models\InvoiceFactory;
|
use Database\Factories\Invoice\Models\InvoiceFactory;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
|
|
@ -41,10 +41,7 @@ class Invoice extends Model
|
||||||
return $this->hasMany(InvoicePosition::class);
|
return $this->hasMany(InvoicePosition::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public static function createFromFactory(InvoiceCreator $factory): self
|
||||||
* @param Collection<int, Member> $members
|
|
||||||
*/
|
|
||||||
public static function createFromFactory(MemberInvoiceFactory $factory): self
|
|
||||||
{
|
{
|
||||||
$invoice = new self([
|
$invoice = new self([
|
||||||
'to' => $factory->getReceiver(),
|
'to' => $factory->getReceiver(),
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,14 @@
|
||||||
namespace App\Member\Factories;
|
namespace App\Member\Factories;
|
||||||
|
|
||||||
use App\Invoice\BillKind;
|
use App\Invoice\BillKind;
|
||||||
|
use App\Invoice\Creators\InvoiceCreator;
|
||||||
use App\Invoice\Data\PositionData;
|
use App\Invoice\Data\PositionData;
|
||||||
use App\Invoice\Data\ReceiverData;
|
use App\Invoice\Data\ReceiverData;
|
||||||
use App\Member\Member;
|
use App\Member\Member;
|
||||||
use App\Payment\Subscription;
|
use App\Payment\Subscription;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
|
|
||||||
class MemberInvoiceFactory
|
class MemberInvoiceFactory implements InvoiceCreator
|
||||||
{
|
{
|
||||||
|
|
||||||
/** @var Collection<int, Member> */
|
/** @var Collection<int, Member> */
|
||||||
|
|
@ -71,8 +72,7 @@ class MemberInvoiceFactory
|
||||||
return 'Mitgliedsbeitrag für ' . $this->member->lastname;
|
return 'Mitgliedsbeitrag für ' . $this->member->lastname;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return Collection<int, PositionData> */
|
public function getPositions(): Collection {
|
||||||
public function getPositions() {
|
|
||||||
/** @var Collection<int, PositionData> */
|
/** @var Collection<int, PositionData> */
|
||||||
$positions = collect([]);
|
$positions = collect([]);
|
||||||
foreach ($this->positions as $member) {
|
foreach ($this->positions as $member) {
|
||||||
|
|
@ -81,6 +81,7 @@ class MemberInvoiceFactory
|
||||||
$positions->push(PositionData::from([
|
$positions->push(PositionData::from([
|
||||||
'description' => str($child->name)->replace('{name}', $member->firstname . ' ' . $member->lastname)->replace('{year}', (string) $this->year),
|
'description' => str($child->name)->replace('{name}', $member->firstname . ' ' . $member->lastname)->replace('{year}', (string) $this->year),
|
||||||
'price' => $child->amount,
|
'price' => $child->amount,
|
||||||
|
/** @todo check if this is correct */
|
||||||
'member_id' => $member->id,
|
'member_id' => $member->id,
|
||||||
'id' => null,
|
'id' => null,
|
||||||
]));
|
]));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue