Fix: Match Group of member

This commit is contained in:
philipp lang 2024-02-21 22:08:50 +01:00
parent 5919082211
commit 66a76ad2b1
3 changed files with 69 additions and 2 deletions

View File

@ -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;
}
}

View File

@ -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]);

View File

@ -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);
}
}