Fix: Load bank account when editing member
continuous-integration/drone/push Build is failing Details

This commit is contained in:
philipp lang 2025-05-13 22:00:12 +02:00
parent 64511479ef
commit d07a9a8372
6 changed files with 79 additions and 6 deletions

View File

@ -1,5 +1,9 @@
# Letzte Änderungen # Letzte Änderungen
### 1.12.11
- Fix: Bank Account mit abrufen wenn Mitglied editiert wird
### 1.12.7 ### 1.12.7
- Fix: Synchronisation von allen Mitgliedern bei Mail-Verteilern - nicht nur den ersten 20 - Fix: Synchronisation von allen Mitgliedern bei Mail-Verteilern - nicht nur den ersten 20

View File

@ -51,7 +51,7 @@ class MemberController extends Controller
session()->put('title', "Mitglied {$member->firstname} {$member->lastname} bearbeiten"); session()->put('title', "Mitglied {$member->firstname} {$member->lastname} bearbeiten");
return Inertia::render('member/VForm', [ return Inertia::render('member/VForm', [
'data' => new MemberResource($member), 'data' => new MemberResource($member->load('bankAccount')),
'mode' => 'edit', 'mode' => 'edit',
'conflict' => '1' === $request->query('conflict', '0'), 'conflict' => '1' === $request->query('conflict', '0'),
'meta' => MemberResource::meta(), 'meta' => MemberResource::meta(),

View File

@ -84,20 +84,24 @@ class MemberRequest extends FormRequest
'salutation' => '', 'salutation' => '',
'comment' => '', 'comment' => '',
'keepdata' => 'boolean', 'keepdata' => 'boolean',
'bank_account' => 'array|exclude', 'bank_account' => 'array',
'bank_account.iban' => 'nullable|string|max:255', 'bank_account.iban' => 'nullable|string|max:255',
'bank_account.bic' => 'nullable|string|max:255', 'bank_account.bic' => 'nullable|string|max:255',
'bank_account.blz' => 'nullable|string|max:255',
'bank_account.bank_name' => 'nullable|string|max:255',
'bank_account.person' => 'nullable|string|max:255',
'bank_account.account_number' => 'nullable|string|max:255',
]; ];
} }
public function persistCreate(NamiSettings $settings): void public function persistCreate(NamiSettings $settings): void
{ {
$member = new Member([ $member = new Member([
...$this->validated(), ...$this->dataToInsert(),
'group_id' => Group::where('nami_id', $settings->default_group_id)->firstOrFail()->id, 'group_id' => Group::where('nami_id', $settings->default_group_id)->firstOrFail()->id,
]); ]);
$member->updatePhoneNumbers()->save(); $member->updatePhoneNumbers()->save();
$member->bankAccount->update($this->input('bank_account')); $member->bankAccount->update($this->validated('bank_account'));
if ($this->input('has_nami')) { if ($this->input('has_nami')) {
$this->storeFreshMemberInNami($member); $this->storeFreshMemberInNami($member);
@ -116,12 +120,12 @@ class MemberRequest extends FormRequest
public function persistUpdate(Member $member): void public function persistUpdate(Member $member): void
{ {
$member->fill($this->validated())->updatePhoneNumbers(); $member->fill($this->dataToInsert())->updatePhoneNumbers();
$namiSync = $member->isDirty(Member::$namiFields); $namiSync = $member->isDirty(Member::$namiFields);
$member->save(); $member->save();
$member->bankAccount->update($this->input('bank_account')); $member->bankAccount->update($this->validated('bank_account'));
if ($this->input('has_nami') && null === $member->nami_id) { if ($this->input('has_nami') && null === $member->nami_id) {
$this->storeFreshMemberInNami($member); $this->storeFreshMemberInNami($member);
@ -164,4 +168,9 @@ class MemberRequest extends FormRequest
$when = fn () => true === $request->input('has_nami') && ($member === null || !$member->has_nami); $when = fn () => true === $request->input('has_nami') && ($member === null || !$member->has_nami);
$validator->sometimes($attribute, $rules, $when); $validator->sometimes($attribute, $rules, $when);
} }
protected function dataToInsert(): array
{
return $this->safe()->except('bank_account');
}
} }

View File

@ -11,6 +11,7 @@ use App\Invoice\BillKind;
use App\Invoice\Resources\InvoicePositionResource; use App\Invoice\Resources\InvoicePositionResource;
use App\Lib\HasMeta; use App\Lib\HasMeta;
use App\Member\Data\NestedGroup; use App\Member\Data\NestedGroup;
use App\Member\Resources\BankAccountResource;
use App\Member\Resources\NationalityResource; use App\Member\Resources\NationalityResource;
use App\Member\Resources\RegionResource; use App\Member\Resources\RegionResource;
use App\Membership\MembershipResource; use App\Membership\MembershipResource;
@ -107,6 +108,7 @@ class MemberResource extends JsonResource
'lon' => $this->lon, 'lon' => $this->lon,
'group_name' => $this->group->name, 'group_name' => $this->group->name,
'keepdata' => $this->keepdata, 'keepdata' => $this->keepdata,
'bank_account' => new BankAccountResource($this->whenLoaded('bankAccount')),
'links' => [ 'links' => [
'membership_index' => route('member.membership.index', ['member' => $this->getModel()]), 'membership_index' => route('member.membership.index', ['member' => $this->getModel()]),
'invoiceposition_index' => route('member.invoice-position.index', ['member' => $this->getModel()]), 'invoiceposition_index' => route('member.invoice-position.index', ['member' => $this->getModel()]),

View File

@ -0,0 +1,31 @@
<?php
namespace App\Member\Resources;
use App\Member\BankAccount;
use Illuminate\Http\Resources\Json\JsonResource;
/**
* @mixin BankAccount
*/
class BankAccountResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
*
* @return array<string, int|string>
*/
public function toArray($request)
{
return [
'iban' => $this->iban,
'bic' => $this->bic,
'blz' => $this->blz,
'bank_name' => $this->bank_name,
'person' => $this->person,
'account_number' => $this->account_number,
];
}
}

View File

@ -4,6 +4,7 @@ namespace Tests\Feature\Member;
use App\Activity; use App\Activity;
use App\Country; use App\Country;
use App\Member\BankAccount;
use App\Member\Member; use App\Member\Member;
use App\Subactivity; use App\Subactivity;
use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Foundation\Testing\DatabaseTransactions;
@ -88,4 +89,30 @@ class EditTest extends TestCase
'bill_kind' => 'E-Mail', 'bill_kind' => 'E-Mail',
], $response, 'data'); ], $response, 'data');
} }
public function testItDisplaysBankAccount(): void
{
$this->withoutExceptionHandling()->login()->loginNami();
$member = Member::factory()
->defaults()
->emailBillKind()
->withBankAccount(BankAccount::factory()->inNami(30)->state([
'bank_name' => 'Stadt',
'bic' => 'SOLSDE33',
'iban' => 'DE50',
'blz' => 'ssss',
'person' => 'Pill',
'account_number' => 'ddf',
]))
->create();
$response = $this->get(route('member.edit', ['member' => $member]));
$this->assertInertiaHas('Stadt', $response, 'data.bank_account.bank_name');
$this->assertInertiaHas('SOLSDE33', $response, 'data.bank_account.bic');
$this->assertInertiaHas('DE50', $response, 'data.bank_account.iban');
$this->assertInertiaHas('ssss', $response, 'data.bank_account.blz');
$this->assertInertiaHas('Pill', $response, 'data.bank_account.person');
$this->assertInertiaHas('ddf', $response, 'data.bank_account.account_number');
}
} }