Compare commits

..

3 Commits

Author SHA1 Message Date
philipp lang fa2d93174a Add mobile phone nami type
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-06-12 00:47:25 +02:00
philipp lang cb3cc087d6 Add age nami field 2024-06-12 00:41:49 +02:00
philipp lang 86aaf55d21 Add gender as a nami field 2024-06-12 00:14:25 +02:00
4 changed files with 67 additions and 7 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;
@ -18,6 +19,10 @@ enum NamiType: string
case ADDRESS = 'Adresse';
case ZIP = 'PLZ';
case LOCATION = 'Ort';
case GENDER = 'Geschlecht';
case MOBILEPHONE = 'Handynummer';
case AGE = 'Alter (zum Zeitpunkt der Anmeldung)';
case AGEEVENT = 'Alter (zum Zeitpunkt der Veranstaltung)';
/**
* @return array<int, array{name: string, id: string}>
@ -29,7 +34,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,
@ -42,6 +47,10 @@ enum NamiType: string
static::ZIP => $member->zip,
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),
static::MOBILEPHONE => $member->mobile_phone,
};
}

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

@ -3,7 +3,7 @@
namespace Database\Factories\Member;
use App\Country;
use App\Fee;
use App\Gender;
use App\Group;
use App\Invoice\BillKind;
use App\Member\Member;
@ -68,6 +68,16 @@ class MemberFactory extends Factory
]);
}
public function male(): self
{
return $this->for(Gender::factory()->male());
}
public function female(): self
{
return $this->for(Gender::factory()->female());
}
public function emailBillKind(): self
{
return $this->state([

View File

@ -10,6 +10,7 @@ use App\Group;
use App\Group\Enums\Level;
use App\Member\Member;
use Carbon\Carbon;
use Database\Factories\Member\MemberFactory;
use Generator;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Support\Facades\Mail;
@ -480,6 +481,43 @@ class FormRegisterActionTest extends FormTestCase
NamiType::BIRTHDAY,
'2023-06-06'
];
yield [
[],
NamiType::GENDER,
'Männlich',
fn (MemberFactory $factory) => $factory->male(),
];
yield [
['gender_id' => null],
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'
];
yield [
['mobile_phone' => '+49 7776666'],
NamiType::MOBILEPHONE,
'+49 7776666'
];
}
/**
@ -487,14 +525,16 @@ class FormRegisterActionTest extends FormTestCase
* @param array<string, string> $memberAttributes
* @param mixed $participantValue
*/
public function testItSynchsMemberAttributes(array $memberAttributes, NamiType $type, mixed $participantValue): 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->createMember(['mitgliedsnr' => '5505', ...$memberAttributes]);
$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();
@ -666,9 +706,10 @@ class FormRegisterActionTest extends FormTestCase
/**
* @param array<string, mixed> $attributes
*/
protected function createMember(array $attributes): Member
protected function createMember(array $attributes, ?callable $factoryCallback = null): Member
{
return Member::factory()->defaults()->create($attributes);
return call_user_func($factoryCallback ?: fn ($factory) => $factory, Member::factory()->defaults())
->create($attributes);
}
/**