Add age nami field

This commit is contained in:
philipp lang 2024-06-12 00:41:49 +02:00
parent 86aaf55d21
commit cb3cc087d6
3 changed files with 27 additions and 2 deletions

View File

@ -2,6 +2,7 @@
namespace App\Form\Enums; namespace App\Form\Enums;
use App\Form\Models\Form;
use App\Group\Enums\Level; use App\Group\Enums\Level;
use App\Member\Member; use App\Member\Member;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
@ -19,6 +20,8 @@ enum NamiType: string
case ZIP = 'PLZ'; case ZIP = 'PLZ';
case LOCATION = 'Ort'; case LOCATION = 'Ort';
case GENDER = 'Geschlecht'; case GENDER = 'Geschlecht';
case AGE = 'Alter (zum Zeitpunkt der Anmeldung)';
case AGEEVENT = 'Alter (zum Zeitpunkt der Veranstaltung)';
/** /**
* @return array<int, array{name: string, id: string}> * @return array<int, array{name: string, id: string}>
@ -30,7 +33,7 @@ enum NamiType: string
->toArray(); ->toArray();
} }
public function getMemberAttribute(Member $member): ?string public function getMemberAttribute(Member $member, Form $form): ?string
{ {
return match ($this) { return match ($this) {
static::FIRSTNAME => $member->firstname, static::FIRSTNAME => $member->firstname,
@ -44,6 +47,8 @@ enum NamiType: string
static::LOCATION => $member->location, static::LOCATION => $member->location,
static::NICKNAME => $member->nickname, static::NICKNAME => $member->nickname,
static::GENDER => $member->gender?->name, static::GENDER => $member->gender?->name,
static::AGE => $member->birthday->diffInYears(now()),
static::AGEEVENT => $member->birthday->diffInYears($form->from),
}; };
} }

View File

@ -116,7 +116,7 @@ class NamiField extends Field
foreach (FieldCollection::fromRequest($form, $memberData) as $field) { foreach (FieldCollection::fromRequest($form, $memberData) as $field) {
$data[$field->key] = $field->namiType === null $data[$field->key] = $field->namiType === null
? $field->value ? $field->value
: $field->namiType->getMemberAttribute($member); : $field->namiType->getMemberAttribute($member, $form);
} }
$data[$this->key] = []; $data[$this->key] = [];

View File

@ -494,6 +494,24 @@ class FormRegisterActionTest extends FormTestCase
NamiType::GENDER, NamiType::GENDER,
'', '',
]; ];
yield [
['birthday' => '1991-10-02'],
NamiType::AGE,
'31'
];
yield [
['birthday' => '1991-05-04'],
NamiType::AGE,
'32'
];
yield [
['birthday' => '1991-08-15'],
NamiType::AGEEVENT,
'32'
];
} }
/** /**
@ -503,12 +521,14 @@ class FormRegisterActionTest extends FormTestCase
*/ */
public function testItSynchsMemberAttributes(array $memberAttributes, NamiType $type, mixed $participantValue, ?callable $factory = null): void public function testItSynchsMemberAttributes(array $memberAttributes, NamiType $type, mixed $participantValue, ?callable $factory = null): void
{ {
Carbon::setTestNow(Carbon::parse('2023-05-04'));
$this->login()->loginNami(); $this->login()->loginNami();
$this->createMember(['mitgliedsnr' => '5505', ...$memberAttributes], $factory); $this->createMember(['mitgliedsnr' => '5505', ...$memberAttributes], $factory);
$form = Form::factory()->fields([ $form = Form::factory()->fields([
$this->namiField('members'), $this->namiField('members'),
$this->textField('other')->required(true)->namiType($type), $this->textField('other')->required(true)->namiType($type),
]) ])
->from('2023-08-15')
->create(); ->create();
$this->register($form, ['other' => '::other::', 'members' => [['id' => '5505']]])->assertOk(); $this->register($form, ['other' => '::other::', 'members' => [['id' => '5505']]])->assertOk();