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;
use App\Form\Models\Form;
use App\Group\Enums\Level;
use App\Member\Member;
use Illuminate\Database\Eloquent\Builder;
@ -19,6 +20,8 @@ enum NamiType: string
case ZIP = 'PLZ';
case LOCATION = 'Ort';
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}>
@ -30,7 +33,7 @@ enum NamiType: string
->toArray();
}
public function getMemberAttribute(Member $member): ?string
public function getMemberAttribute(Member $member, Form $form): ?string
{
return match ($this) {
static::FIRSTNAME => $member->firstname,
@ -44,6 +47,8 @@ enum NamiType: string
static::LOCATION => $member->location,
static::NICKNAME => $member->nickname,
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) {
$data[$field->key] = $field->namiType === null
? $field->value
: $field->namiType->getMemberAttribute($member);
: $field->namiType->getMemberAttribute($member, $form);
}
$data[$this->key] = [];

View File

@ -494,6 +494,24 @@ class FormRegisterActionTest extends FormTestCase
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
{
Carbon::setTestNow(Carbon::parse('2023-05-04'));
$this->login()->loginNami();
$this->createMember(['mitgliedsnr' => '5505', ...$memberAttributes], $factory);
$form = Form::factory()->fields([
$this->namiField('members'),
$this->textField('other')->required(true)->namiType($type),
])
->from('2023-08-15')
->create();
$this->register($form, ['other' => '::other::', 'members' => [['id' => '5505']]])->assertOk();