diff --git a/app/Invoice/Contracts/InvoiceCreator.php b/app/Invoice/Contracts/InvoiceCreator.php new file mode 100644 index 00000000..363d239b --- /dev/null +++ b/app/Invoice/Contracts/InvoiceCreator.php @@ -0,0 +1,21 @@ + */ + public function getPositions(): Collection; + + public function getReceiver(): ReceiverData; + +} diff --git a/app/Invoice/Models/Invoice.php b/app/Invoice/Models/Invoice.php index c3f49c15..ebd62cac 100644 --- a/app/Invoice/Models/Invoice.php +++ b/app/Invoice/Models/Invoice.php @@ -4,12 +4,12 @@ namespace App\Invoice\Models; use App\Invoice\BillDocument; use App\Invoice\BillKind; +use App\Invoice\Creators\InvoiceCreator; use App\Invoice\Data\ReceiverData; use App\Invoice\Enums\InvoiceStatus; use App\Invoice\InvoiceDocument; use App\Invoice\InvoiceSettings; use App\Invoice\RememberDocument; -use App\Member\Factories\MemberInvoiceFactory; use Database\Factories\Invoice\Models\InvoiceFactory; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; @@ -41,10 +41,7 @@ class Invoice extends Model return $this->hasMany(InvoicePosition::class); } - /** - * @param Collection $members - */ - public static function createFromFactory(MemberInvoiceFactory $factory): self + public static function createFromFactory(InvoiceCreator $factory): self { $invoice = new self([ 'to' => $factory->getReceiver(), diff --git a/app/Member/Factories/MemberInvoiceFactory.php b/app/Member/Factories/MemberInvoiceFactory.php index 6c773866..3f749f6e 100644 --- a/app/Member/Factories/MemberInvoiceFactory.php +++ b/app/Member/Factories/MemberInvoiceFactory.php @@ -3,13 +3,14 @@ namespace App\Member\Factories; use App\Invoice\BillKind; +use App\Invoice\Creators\InvoiceCreator; use App\Invoice\Data\PositionData; use App\Invoice\Data\ReceiverData; use App\Member\Member; use App\Payment\Subscription; use Illuminate\Support\Collection; -class MemberInvoiceFactory +class MemberInvoiceFactory implements InvoiceCreator { /** @var Collection */ @@ -71,8 +72,7 @@ class MemberInvoiceFactory return 'Mitgliedsbeitrag für ' . $this->member->lastname; } - /** @return Collection */ - public function getPositions() { + public function getPositions(): Collection { /** @var Collection */ $positions = collect([]); foreach ($this->positions as $member) { @@ -81,6 +81,7 @@ class MemberInvoiceFactory $positions->push(PositionData::from([ 'description' => str($child->name)->replace('{name}', $member->firstname . ' ' . $member->lastname)->replace('{year}', (string) $this->year), 'price' => $child->amount, + /** @todo check if this is correct */ 'member_id' => $member->id, 'id' => null, ]));