Fix: Match Group of member
This commit is contained in:
parent
5919082211
commit
66a76ad2b1
|
@ -2,6 +2,7 @@
|
|||
|
||||
namespace App\Form\Enums;
|
||||
|
||||
use App\Group\Enums\Level;
|
||||
use App\Member\Member;
|
||||
|
||||
enum NamiType: string
|
||||
|
@ -9,6 +10,8 @@ enum NamiType: string
|
|||
case FIRSTNAME = 'Vorname';
|
||||
case LASTNAME = 'Nachname';
|
||||
case BIRTHDAY = 'Geburtstag';
|
||||
case REGION = 'Bezirk';
|
||||
case STAMM = 'Stamm';
|
||||
|
||||
/**
|
||||
* @return array<int, array{name: string, id: string}>
|
||||
|
@ -26,6 +29,30 @@ enum NamiType: string
|
|||
static::FIRSTNAME => $member->firstname,
|
||||
static::LASTNAME => $member->lastname,
|
||||
static::BIRTHDAY => $member->birthday?->format('Y-m-d'),
|
||||
static::REGION => $this->matchRegion($member),
|
||||
static::STAMM => $this->matchGroup($member),
|
||||
};
|
||||
}
|
||||
|
||||
protected function matchGroup(Member $member): ?int
|
||||
{
|
||||
if ($member->group->level === Level::GROUP) {
|
||||
return $member->group_id;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
protected function matchRegion(Member $member): ?int
|
||||
{
|
||||
if ($member->group->parent?->level === Level::REGION) {
|
||||
return $member->group->parent->id;
|
||||
}
|
||||
|
||||
if ($member->group->level === Level::REGION) {
|
||||
return $member->group_id;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,6 +38,11 @@ class GroupFactory extends Factory
|
|||
return $this->state(['name' => $name]);
|
||||
}
|
||||
|
||||
public function level(Level $level): self
|
||||
{
|
||||
return $this->state(['level' => $level]);
|
||||
}
|
||||
|
||||
public function innerName(string $name): self
|
||||
{
|
||||
return $this->state(['inner_name' => $name]);
|
||||
|
|
|
@ -5,6 +5,7 @@ namespace Tests\Feature\Form;
|
|||
use App\Form\Enums\NamiType;
|
||||
use App\Form\Models\Form;
|
||||
use App\Group;
|
||||
use App\Group\Enums\Level;
|
||||
use App\Member\Member;
|
||||
use Carbon\Carbon;
|
||||
use Generator;
|
||||
|
@ -428,7 +429,7 @@ class FormRegisterActionTest extends FormTestCase
|
|||
public function testParticipantsHaveRelationToActualMember(): void
|
||||
{
|
||||
$this->login()->loginNami();
|
||||
$member = $this->createMember(['mitgliedsnr' => '5505']);
|
||||
$this->createMember(['mitgliedsnr' => '5505']);
|
||||
$form = Form::factory()
|
||||
->sections([FormtemplateSectionRequest::new()->fields([
|
||||
$this->namiField('members'),
|
||||
|
@ -439,6 +440,41 @@ class FormRegisterActionTest extends FormTestCase
|
|||
$this->assertEquals('5505', $form->participants->get(1)->mitgliedsnr);
|
||||
}
|
||||
|
||||
public function testItSetsRegionIdAndGroupIdOfParentGroup(): void
|
||||
{
|
||||
$this->login()->loginNami();
|
||||
$bezirk = Group::factory()->level(Level::REGION)->create();
|
||||
$stamm = Group::factory()->for($bezirk, 'parent')->level(Level::GROUP)->create();
|
||||
$this->createMember(['mitgliedsnr' => '5505', 'group_id' => $stamm->id]);
|
||||
$form = Form::factory()
|
||||
->sections([FormtemplateSectionRequest::new()->fields([
|
||||
$this->namiField('members'),
|
||||
$this->groupField('bezirk')->forMembers(false)->namiType(NamiType::REGION),
|
||||
$this->groupField('stamm')->forMembers(false)->namiType(NamiType::STAMM),
|
||||
])])
|
||||
->create();
|
||||
|
||||
$this->register($form, ['bezirk' => $bezirk->id, 'stamm' => $stamm->id, 'members' => [['id' => '5505']]])->assertOk();
|
||||
$this->assertEquals($bezirk->id, $form->participants->get(1)->data['bezirk']);
|
||||
$this->assertEquals($stamm->id, $form->participants->get(1)->data['stamm']);
|
||||
}
|
||||
|
||||
public function testItSetsRegionIfMemberIsDirectRegionMember(): void
|
||||
{
|
||||
$this->login()->loginNami();
|
||||
$bezirk = Group::factory()->level(Level::REGION)->create();
|
||||
$this->createMember(['mitgliedsnr' => '5505', 'group_id' => $bezirk->id]);
|
||||
$form = Form::factory()
|
||||
->sections([FormtemplateSectionRequest::new()->fields([
|
||||
$this->namiField('members'),
|
||||
$this->groupField('bezirk')->forMembers(false)->namiType(NamiType::REGION),
|
||||
])])
|
||||
->create();
|
||||
|
||||
$this->register($form, ['bezirk' => $bezirk->id, 'members' => [['id' => '5505']]])->assertOk();
|
||||
$this->assertEquals($bezirk->id, $form->participants->get(1)->data['bezirk']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, mixed> $attributes
|
||||
*/
|
||||
|
@ -452,7 +488,6 @@ class FormRegisterActionTest extends FormTestCase
|
|||
*/
|
||||
protected function register(Form $form, array $payload): TestResponse
|
||||
{
|
||||
|
||||
return $this->postJson(route('form.register', ['form' => $form]), $payload);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue