Compare commits

..

No commits in common. "ef70203c8a3d5232fe7aded143bbbfb20ca1496d" and "547c9edfd548b9d9ee02f081e5cab6b1b433392e" have entirely different histories.

6 changed files with 74 additions and 72 deletions

View File

@ -2,6 +2,7 @@
namespace App\Member; namespace App\Member;
use App\Country;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Setting\NamiSettings; use App\Setting\NamiSettings;
use Illuminate\Http\RedirectResponse; use Illuminate\Http\RedirectResponse;
@ -32,7 +33,8 @@ class MemberController extends Controller
session()->put('menu', 'member'); session()->put('menu', 'member');
session()->put('title', 'Mitglied erstellen'); session()->put('title', 'Mitglied erstellen');
return Inertia::render('member/VForm', [ return \Inertia::render('member/VForm', [
'data' => MemberResource::defaultModel(),
'mode' => 'create', 'mode' => 'create',
'meta' => MemberResource::meta(), 'meta' => MemberResource::meta(),
]); ]);
@ -50,7 +52,7 @@ class MemberController extends Controller
session()->put('menu', 'member'); session()->put('menu', 'member');
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),
'mode' => 'edit', 'mode' => 'edit',
'conflict' => '1' === $request->query('conflict', '0'), 'conflict' => '1' === $request->query('conflict', '0'),

View File

@ -162,47 +162,54 @@ class MemberResource extends JsonResource
'activity_ids' => [], 'activity_ids' => [],
'subactivity_ids' => [] 'subactivity_ids' => []
], ],
'default' => [ ];
'gender_id' => null, }
'salutation' => '',
'nationality_id' => null, /**
'firstname' => '', * @return array<string, mixed>
'lastname' => '', */
'address' => '', public static function defaultModel(): array
'further_address' => '', {
'zip' => '', return [
'location' => '', 'gender_id' => null,
'birthday' => '', 'salutation' => '',
'region_id' => null, 'nationality_id' => null,
'country_id' => Country::default(), 'firstname' => '',
'other_country' => '', 'lastname' => '',
'main_phone' => '', 'address' => '',
'mobile_phone' => '', 'further_address' => '',
'work_phone' => '', 'zip' => '',
'children_phone' => '', 'location' => '',
'email' => '', 'birthday' => '',
'email_parents' => '', 'region_id' => null,
'fax' => '', 'country_id' => Country::default(),
'letter_address' => '', 'other_country' => '',
'bill_kind' => null, 'main_phone' => '',
'subscription_id' => null, 'mobile_phone' => '',
'has_nami' => false, 'work_phone' => '',
'send_newspaper' => false, 'children_phone' => '',
'joined_at' => now()->format('Y-m-d'), 'email' => '',
'comment' => '', 'email_parents' => '',
'first_activity_id' => null, 'fax' => '',
'first_subactivity_id' => null, 'letter_address' => '',
'efz' => null, 'bill_kind' => null,
'ps_at' => null, 'subscription_id' => null,
'more_ps_at' => null, 'has_nami' => false,
'without_education_at' => null, 'send_newspaper' => false,
'recertified_at' => null, 'joined_at' => now()->format('Y-m-d'),
'without_efz_at' => null, 'comment' => '',
'has_vk' => false, 'first_activity_id' => null,
'has_svk' => false, 'first_subactivity_id' => null,
'multiply_pv' => false, 'efz' => null,
'multiply_more_pv' => false, 'ps_at' => null,
] 'more_ps_at' => null,
'without_education_at' => null,
'recertified_at' => null,
'without_efz_at' => null,
'has_vk' => false,
'has_svk' => false,
'multiply_pv' => false,
'multiply_more_pv' => false,
]; ];
} }
} }

View File

@ -1,9 +1,7 @@
<template> <template>
<div class="fixed z-40 top-0 left-0 w-full h-full flex items-center justify-center p-6 bg-black/60 backdrop-blur-sm"> <div class="fixed z-40 top-0 left-0 w-full h-full flex items-center justify-center p-6">
<div <div class="relative rounded-lg p-8 bg-zinc-800 shadow-2xl shadow-black border border-zinc-700 border-solid w-full max-h-full flex flex-col overflow-auto"
class="relative rounded-lg p-8 bg-zinc-800 shadow-2xl shadow-black border border-zinc-700 border-solid w-full max-h-full flex flex-col overflow-auto" :class="full ? 'h-full' : innerWidth">
:class="full ? 'h-full' : innerWidth"
>
<div class="absolute top-0 right-0 mt-6 mr-6 flex space-x-6"> <div class="absolute top-0 right-0 mt-6 mr-6 flex space-x-6">
<slot name="actions"></slot> <slot name="actions"></slot>
<a href="#" @click.prevent="$emit('close')"> <a href="#" @click.prevent="$emit('close')">

View File

@ -153,8 +153,8 @@ export default {
}, },
data: function () { data: function () {
return { return {
original: this.mode === 'create' ? {...this.meta.default} : {...this.data}, original: {...this.data},
inner: this.mode === 'create' ? {...this.meta.default} : {...this.data}, inner: {...this.data},
active: 0, active: 0,
}; };
}, },

View File

@ -2,6 +2,7 @@
<page-layout page-class="pb-6"> <page-layout page-class="pb-6">
<template #toolbar> <template #toolbar>
<page-toolbar-button :href="meta.links.create" color="primary" icon="plus">Mitglied anlegen</page-toolbar-button> <page-toolbar-button :href="meta.links.create" color="primary" icon="plus">Mitglied anlegen</page-toolbar-button>
<page-toolbar-button v-if="hasModule('bill')" :href="meta.links.allpayment" color="primary" icon="invoice">Rechnungen erstellen</page-toolbar-button>
</template> </template>
<ui-popup v-if="deleting !== null" heading="Mitglied löschen?" @close="deleting.reject()"> <ui-popup v-if="deleting !== null" heading="Mitglied löschen?" @close="deleting.reject()">
<div> <div>
@ -39,15 +40,7 @@
</ui-popup> </ui-popup>
<page-filter breakpoint="xl"> <page-filter breakpoint="xl">
<template #fields> <template #fields>
<f-switch <f-switch v-show="hasModule('bill')" id="ausstand" :model-value="getFilter('ausstand')" label="Nur Ausstände" size="sm" @update:model-value="setFilter('ausstand', $event)"></f-switch>
v-show="hasModule('bill')"
id="ausstand"
name="ausstand"
:model-value="getFilter('ausstand')"
label="Nur Ausstände"
size="sm"
@update:model-value="setFilter('ausstand', $event)"
></f-switch>
<f-multipleselect <f-multipleselect
id="group_ids" id="group_ids"
:options="meta.groups" :options="meta.groups"

View File

@ -3,7 +3,6 @@
namespace Tests\EndToEnd; namespace Tests\EndToEnd;
use App\Activity; use App\Activity;
use App\Country;
use App\Group; use App\Group;
use App\Invoice\BillKind; use App\Invoice\BillKind;
use App\Invoice\Enums\InvoiceStatus; use App\Invoice\Enums\InvoiceStatus;
@ -17,15 +16,9 @@ use Tests\EndToEndTestCase;
class MemberIndexTest extends EndToEndTestCase class MemberIndexTest extends EndToEndTestCase
{ {
public function setUp(): void
{
parent::setUp();
Country::factory()->create(['name' => 'Deutschland']);
$this->withoutExceptionHandling()->login()->loginNami();
}
public function testItHandlesFullTextSearch(): void public function testItHandlesFullTextSearch(): void
{ {
$this->withoutExceptionHandling()->login()->loginNami();
Member::factory()->defaults()->count(2)->create(['firstname' => 'Alexander']); Member::factory()->defaults()->count(2)->create(['firstname' => 'Alexander']);
Member::factory()->defaults()->create(['firstname' => 'Heinrich']); Member::factory()->defaults()->create(['firstname' => 'Heinrich']);
@ -36,13 +29,9 @@ class MemberIndexTest extends EndToEndTestCase
->assertInertiaCount('data.data', 1); ->assertInertiaCount('data.data', 1);
} }
public function testItGetsDefaultCountryFromDefaultModel(): void
{
$this->callFilter('member.index', [])->assertInertiaPath('data.meta.default.country_id', Country::firstWhere('name', 'Deutschland')->id);
}
public function testItHandlesAddress(): void public function testItHandlesAddress(): void
{ {
$this->withoutExceptionHandling()->login()->loginNami();
Member::factory()->defaults()->create(['address' => '']); Member::factory()->defaults()->create(['address' => '']);
Member::factory()->defaults()->create(['zip' => '']); Member::factory()->defaults()->create(['zip' => '']);
Member::factory()->defaults()->create(['location' => '']); Member::factory()->defaults()->create(['location' => '']);
@ -63,6 +52,7 @@ class MemberIndexTest extends EndToEndTestCase
public function testItHandlesBirthday(): void public function testItHandlesBirthday(): void
{ {
$this->withoutExceptionHandling()->login()->loginNami();
Member::factory()->defaults()->create(['birthday' => null]); Member::factory()->defaults()->create(['birthday' => null]);
Member::factory()->defaults()->count(2)->create(); Member::factory()->defaults()->count(2)->create();
@ -75,6 +65,7 @@ class MemberIndexTest extends EndToEndTestCase
public function testItHandlesBillKind(): void public function testItHandlesBillKind(): void
{ {
$this->withoutExceptionHandling()->login()->loginNami();
Member::factory()->defaults()->postBillKind()->create(); Member::factory()->defaults()->postBillKind()->create();
Member::factory()->defaults()->emailBillKind()->count(2)->create(); Member::factory()->defaults()->emailBillKind()->count(2)->create();
@ -89,6 +80,7 @@ class MemberIndexTest extends EndToEndTestCase
public function testItHandlesGroupIds(): void public function testItHandlesGroupIds(): void
{ {
$this->withoutExceptionHandling()->login()->loginNami();
$group = Group::factory()->create(); $group = Group::factory()->create();
$otherGroup = Group::factory()->create(); $otherGroup = Group::factory()->create();
$thirdGroup = Group::factory()->create(); $thirdGroup = Group::factory()->create();
@ -109,6 +101,7 @@ class MemberIndexTest extends EndToEndTestCase
public function testItHandlesActivitiesAndSubactivities(): void public function testItHandlesActivitiesAndSubactivities(): void
{ {
$this->withoutExceptionHandling()->login()->loginNami();
$mitglied = Activity::factory()->name('€ Mitglied')->create(); $mitglied = Activity::factory()->name('€ Mitglied')->create();
$schnuppermitglied = Activity::factory()->name('Schnuppermitgliedschaft')->create(); $schnuppermitglied = Activity::factory()->name('Schnuppermitgliedschaft')->create();
$woelfling = Subactivity::factory()->name('Wölfling')->create(); $woelfling = Subactivity::factory()->name('Wölfling')->create();
@ -134,6 +127,7 @@ class MemberIndexTest extends EndToEndTestCase
public function testItHandlesActivityAndSubactivityForSingleMembership(): void public function testItHandlesActivityAndSubactivityForSingleMembership(): void
{ {
$this->withoutExceptionHandling()->login()->loginNami();
$mitglied = Activity::factory()->name('€ Mitglied')->create(); $mitglied = Activity::factory()->name('€ Mitglied')->create();
$schnuppermitglied = Activity::factory()->name('Schnuppermitgliedschaft')->create(); $schnuppermitglied = Activity::factory()->name('Schnuppermitgliedschaft')->create();
$woelfling = Subactivity::factory()->name('Wölfling')->create(); $woelfling = Subactivity::factory()->name('Wölfling')->create();
@ -150,6 +144,7 @@ class MemberIndexTest extends EndToEndTestCase
public function testItIgnoresInactiveMemberships(): void public function testItIgnoresInactiveMemberships(): void
{ {
$this->withoutExceptionHandling()->login()->loginNami();
$mitglied = Activity::factory()->name('€ Mitglied')->create(); $mitglied = Activity::factory()->name('€ Mitglied')->create();
$woelfling = Subactivity::factory()->name('Wölfling')->create(); $woelfling = Subactivity::factory()->name('Wölfling')->create();
Member::factory()->defaults()->has(Membership::factory()->for($mitglied)->for($woelfling)->ended())->create(); Member::factory()->defaults()->has(Membership::factory()->for($mitglied)->for($woelfling)->ended())->create();
@ -163,6 +158,7 @@ class MemberIndexTest extends EndToEndTestCase
public function testItListensForMembershipDeletion(): void public function testItListensForMembershipDeletion(): void
{ {
$this->withoutExceptionHandling()->login()->loginNami();
$mitglied = Activity::factory()->name('€ Mitglied')->create(); $mitglied = Activity::factory()->name('€ Mitglied')->create();
$member = Member::factory()->defaults()->has(Membership::factory()->for($mitglied))->create(); $member = Member::factory()->defaults()->has(Membership::factory()->for($mitglied))->create();
$member->memberships->first()->delete(); $member->memberships->first()->delete();
@ -175,6 +171,7 @@ class MemberIndexTest extends EndToEndTestCase
public function testItFiltersForMemberships(): void public function testItFiltersForMemberships(): void
{ {
$this->withoutExceptionHandling()->login()->loginNami();
$mitglied = Activity::factory()->create(); $mitglied = Activity::factory()->create();
$woelfling = Subactivity::factory()->create(); $woelfling = Subactivity::factory()->create();
$juffi = Subactivity::factory()->create(); $juffi = Subactivity::factory()->create();
@ -204,6 +201,7 @@ class MemberIndexTest extends EndToEndTestCase
public function testGroupOfMembershipsFilterCanBeEmpty(): void public function testGroupOfMembershipsFilterCanBeEmpty(): void
{ {
$this->withoutExceptionHandling()->login()->loginNami();
$mitglied = Activity::factory()->create(); $mitglied = Activity::factory()->create();
$woelfling = Subactivity::factory()->create(); $woelfling = Subactivity::factory()->create();
$group = Group::factory()->create(); $group = Group::factory()->create();
@ -223,6 +221,7 @@ class MemberIndexTest extends EndToEndTestCase
public function testItFiltersForSearchButNotForPayments(): void public function testItFiltersForSearchButNotForPayments(): void
{ {
$this->withoutExceptionHandling()->login()->loginNami();
Member::factory()->defaults() Member::factory()->defaults()
->has(InvoicePosition::factory()->for(Invoice::factory())) ->has(InvoicePosition::factory()->for(Invoice::factory()))
->create(['firstname' => 'firstname']); ->create(['firstname' => 'firstname']);
@ -235,6 +234,7 @@ class MemberIndexTest extends EndToEndTestCase
public function testItIgnoresPaidInvoices(): void public function testItIgnoresPaidInvoices(): void
{ {
$this->withoutExceptionHandling()->login()->loginNami();
Member::factory()->defaults() Member::factory()->defaults()
->has(InvoicePosition::factory()->for(Invoice::factory()->status(InvoiceStatus::PAID))) ->has(InvoicePosition::factory()->for(Invoice::factory()->status(InvoiceStatus::PAID)))
->create(); ->create();
@ -247,6 +247,7 @@ class MemberIndexTest extends EndToEndTestCase
public function testItIncludesMembers(): void public function testItIncludesMembers(): void
{ {
$this->withoutExceptionHandling()->login()->loginNami();
$member = Member::factory()->defaults()->create(['birthday' => null, 'location' => '']); $member = Member::factory()->defaults()->create(['birthday' => null, 'location' => '']);
sleep(1); sleep(1);
@ -258,6 +259,7 @@ class MemberIndexTest extends EndToEndTestCase
public function testItExcludesMembers(): void public function testItExcludesMembers(): void
{ {
$this->withoutExceptionHandling()->login()->loginNami();
$member = Member::factory()->defaults()->create(['birthday' => null]); $member = Member::factory()->defaults()->create(['birthday' => null]);
sleep(1); sleep(1);