Skip to content

Commit dc5ec93

Browse files
committed
feat: create member if does not exists at ticket assignment
1 parent 3fb4a25 commit dc5ec93

File tree

5 files changed

+125
-85
lines changed

5 files changed

+125
-85
lines changed

app/Models/Foundation/Summit/Registration/Attendees/SummitAttendee.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -774,7 +774,11 @@ public function getCompanyName(): ?string
774774
{
775775
if ($this->hasCompany())
776776
return $this->company->getName();
777-
return $this->company_name;
777+
$res = $this->company_name;
778+
if (empty($res) && $this->hasMember()) {
779+
$res = $this->member->getCompany();
780+
}
781+
return $res;
778782
}
779783

780784
/**
@@ -811,7 +815,7 @@ public function setCompanyName(?string $company_name): void
811815
*/
812816
public function getCompany(): ?Company
813817
{
814-
return $this->company;
818+
$res = $this->company;
815819
}
816820

817821
/**

app/Services/Model/IMemberService.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,4 +155,11 @@ public function updatePendingRegistrationRequest(string $email, bool $is_redeeme
155155
* @return Member|null
156156
*/
157157
public function updateMyMember(Member $me, array $payload):?Member;
158+
159+
/**
160+
* @param array $user_data
161+
* @return Member
162+
* @throws \Exception
163+
*/
164+
public function registerExternalUserByPayload(array $user_data):Member;
158165
}

app/Services/Model/Imp/MemberService.php

Lines changed: 90 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -329,110 +329,120 @@ public function registerExternalUser(ExternalUserDTO $userDTO): Member
329329
}
330330

331331
/**
332-
* @param $user_external_id
332+
* @param array $user_data
333333
* @return Member
334334
* @throws \Exception
335335
*/
336-
public function registerExternalUserById($user_external_id): Member
337-
{
338-
$member = $this->tx_service->transaction(function () use ($user_external_id) {
339-
// get external user from IDP
340-
$user_data = $this->user_ext_api->getUserById($user_external_id);
341-
if(is_null($user_data) || !isset($user_data['email'])){
342-
Log::warning(sprintf("MemberService::registerExternalUserById user_external_id %s does not exists.", $user_external_id));
343-
throw new EntityNotFoundException(sprintf("MemberService::registerExternalUserById user_external_id %s does not exists.", $user_external_id));
344-
}
345-
$email = trim($user_data['email']);
346-
// first by external id due email could be updated
347-
Log::debug(sprintf("MemberService::registerExternalUserById trying to get user by external id %s", $user_external_id));
348-
$member = $this->member_repository->getByExternalIdExclusiveLock(intval($user_external_id));
349-
// if we dont registered yet a member with that external id try to get by email
350-
if(is_null($member)) {
351-
Log::debug(sprintf("MemberService::registerExternalUserById trying to get user by email %s", $email));
352-
$member = $this->member_repository->getByEmail($email);
353-
}
354-
$is_new = false;
355-
if(is_null($member)) {
356-
Log::debug(sprintf("MemberService::registerExternalUserById %s does not exists , creating it ...", $email));
357-
$member = MemberFactory::createFromExternalProfile($user_external_id, $user_data);
358-
$this->member_repository->add($member, true);
359-
$is_new = true;
360-
}
361-
else {
362-
Log::debug(sprintf("MemberService::registerExternalUserById %s already exists", $email));
363-
$member = MemberFactory::populateFromExternalProfile($member, $user_external_id, $user_data);
364-
}
336+
public function registerExternalUserByPayload(array $user_data):Member{
337+
Log::debug(sprintf("MemberService::registerExternalUserByPayload user_data %s", json_encode($user_data)));
338+
$email = trim($user_data['email']);
339+
$user_external_id = $user_data['id'];
340+
// first by external id due email could be updated
341+
Log::debug(sprintf("MemberService::registerExternalUserByPayload trying to get user by external id %s", $user_external_id));
342+
$member = $this->member_repository->getByExternalIdExclusiveLock(intval($user_external_id));
343+
// if we dont registered yet a member with that external id try to get by email
344+
if(is_null($member)) {
345+
Log::debug(sprintf("MemberService::registerExternalUserByPayload trying to get user by email %s", $email));
346+
$member = $this->member_repository->getByEmail($email);
347+
}
348+
$is_new = false;
349+
if(is_null($member)) {
350+
Log::debug(sprintf("MemberService::registerExternalUserByPayload %s does not exists , creating it ...", $email));
351+
$member = MemberFactory::createFromExternalProfile($user_external_id, $user_data);
352+
$this->member_repository->add($member, true);
353+
$is_new = true;
354+
}
355+
else {
356+
Log::debug(sprintf("MemberService::registerExternalUserByPayload %s already exists", $email));
357+
$member = MemberFactory::populateFromExternalProfile($member, $user_external_id, $user_data);
358+
}
365359

366-
$this->synchronizeGroups($member, $user_data['groups']);
367-
368-
// check speaker registration request by email and no member set
369-
Log::debug(sprintf("MemberService::registerExternalUserById trying to get former registration request by email %s", $email));
370-
$request = $this->speaker_registration_request_repository->getByEmail($email);
371-
if(!is_null($request) && $request->hasSpeaker()){
372-
Log::debug(sprintf("MemberService::registerExternalUserById got former registration request by email %s", $email));
373-
$speaker = $request->getSpeaker();
374-
if(!is_null($speaker))
375-
if(!$speaker->hasMember()) {
376-
if($member->hasSpeaker()){
377-
// member has a former speaker
378-
$former_speaker = $member->getSpeaker();
379-
Log::debug
360+
$this->synchronizeGroups($member, $user_data['groups']);
361+
362+
// check speaker registration request by email and no member set
363+
Log::debug(sprintf("MemberService::registerExternalUserByPayload trying to get former registration request by email %s", $email));
364+
$request = $this->speaker_registration_request_repository->getByEmail($email);
365+
if(!is_null($request) && $request->hasSpeaker()){
366+
Log::debug(sprintf("MemberService::registerExternalUserByPayload got former registration request by email %s", $email));
367+
$speaker = $request->getSpeaker();
368+
if(!is_null($speaker))
369+
if(!$speaker->hasMember()) {
370+
if($member->hasSpeaker()){
371+
// member has a former speaker
372+
$former_speaker = $member->getSpeaker();
373+
Log::debug
374+
(
375+
sprintf
380376
(
381-
sprintf
382-
(
383-
"MemberService::registerExternalUserById Member %s (%s) has a former speaker profile %s",
384-
$member->getEmail(),
385-
$member->getFirstName(),
386-
$former_speaker->getId(),
387-
)
388-
);
389-
foreach($former_speaker->getAllPresentations() as $presentation){
390-
if(!$presentation instanceof Presentation) continue;
391-
Log:debug
392-
(
393-
sprintf
394-
(
395-
"MemberService::registerExternalUserById Member %s (%s) moving presentation %s from speaker %s to speaker %s",
396-
$member->getEmail(),
397-
$member->getFirstName(),
398-
$presentation->getId(),
399-
$former_speaker->getId(),
400-
$speaker->getId()
401-
)
402-
);
403-
$presentation->removeSpeaker($former_speaker);
404-
$presentation->addSpeaker($speaker);
405-
}
406-
Log::debug
377+
"MemberService::registerExternalUserByPayload Member %s (%s) has a former speaker profile %s",
378+
$member->getEmail(),
379+
$member->getFirstName(),
380+
$former_speaker->getId(),
381+
)
382+
);
383+
foreach($former_speaker->getAllPresentations() as $presentation){
384+
if(!$presentation instanceof Presentation) continue;
385+
Log:debug
407386
(
408387
sprintf
409388
(
410-
"MemberService::registerExternalUserById Member %s (%s) former speaker %s will be deleted",
389+
"MemberService::registerExternalUserByPayload Member %s (%s) moving presentation %s from speaker %s to speaker %s",
411390
$member->getEmail(),
412391
$member->getFirstName(),
413-
$former_speaker->getId()
392+
$presentation->getId(),
393+
$former_speaker->getId(),
394+
$speaker->getId()
414395
)
415396
);
397+
$presentation->removeSpeaker($former_speaker);
398+
$presentation->addSpeaker($speaker);
416399
}
417400
Log::debug
418401
(
419402
sprintf
420403
(
421-
"MemberService::registerExternalUserById setting Member %s (%s) to speaker %s",
404+
"MemberService::registerExternalUserByPayload Member %s (%s) former speaker %s will be deleted",
422405
$member->getEmail(),
423406
$member->getFirstName(),
424-
$speaker->getId()
407+
$former_speaker->getId()
425408
)
426409
);
427-
// after this , former speaker will be deleted
428-
$speaker->setMember($member);
429410
}
430-
}
411+
Log::debug
412+
(
413+
sprintf
414+
(
415+
"MemberService::registerExternalUserByPayload setting Member %s (%s) to speaker %s",
416+
$member->getEmail(),
417+
$member->getFirstName(),
418+
$speaker->getId()
419+
)
420+
);
421+
// after this , former speaker will be deleted
422+
$speaker->setMember($member);
423+
}
424+
}
431425

432-
if($is_new)
433-
Event::dispatch(new NewMember($member->getId()));
426+
if($is_new)
427+
Event::dispatch(new NewMember($member->getId()));
434428

435-
return $member;
429+
return $member;
430+
}
431+
/**
432+
* @param $user_external_id
433+
* @return Member
434+
* @throws \Exception
435+
*/
436+
public function registerExternalUserById($user_external_id): Member
437+
{
438+
$member = $this->tx_service->transaction(function () use ($user_external_id) {
439+
// get external user from IDP
440+
$user_data = $this->user_ext_api->getUserById($user_external_id);
441+
if(is_null($user_data) || !isset($user_data['email'])){
442+
Log::warning(sprintf("MemberService::registerExternalUserById user_external_id %s does not exists.", $user_external_id));
443+
throw new EntityNotFoundException(sprintf("MemberService::registerExternalUserById user_external_id %s does not exists.", $user_external_id));
444+
}
445+
return $this->registerExternalUserByPayload($user_data);
436446
});
437447

438448
Event::dispatch(new MemberDataUpdatedExternally($member->getId()));

app/Services/Model/Imp/SummitOrderService.php

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1883,7 +1883,6 @@ public function ownerAssignTicket(Member $current_user, int $order_id, int $tick
18831883
{
18841884
Log::debug("SummitOrderService::ownerAssignTicket");
18851885

1886-
18871886
return $this->tx_service->transaction(function () use ($current_user, $order_id, $ticket_id, $payload) {
18881887

18891888
Log::debug
@@ -1951,6 +1950,16 @@ public function ownerAssignTicket(Member $current_user, int $order_id, int $tick
19511950
$member = $this->member_repository->getByEmail($email);
19521951
$attendee = $summit->getAttendeeByEmail($email);
19531952

1953+
if(is_null($member)){
1954+
$user = $this->member_service->checkExternalUser($email);
1955+
1956+
//If user exists => update it
1957+
if (!is_null($user))
1958+
{
1959+
$member = $this->member_service->registerExternalUserByPayload($user);
1960+
}
1961+
}
1962+
19541963
if (is_null($attendee) && !is_null($member)) {
19551964
// if we have a member, try to get attendee by member
19561965
Log::debug
@@ -1965,7 +1974,7 @@ public function ownerAssignTicket(Member $current_user, int $order_id, int $tick
19651974
}
19661975

19671976
if (is_null($attendee)) {
1968-
// if attendee did not exist , create a new one
1977+
// if attendee did not exists... create a new one
19691978
Log::debug
19701979
(
19711980
sprintf
@@ -2017,6 +2026,16 @@ public function ownerAssignTicket(Member $current_user, int $order_id, int $tick
20172026
$ticket->generateQRCode();
20182027
$ticket->generateHash();
20192028
$attendee->updateStatus();
2029+
$member_company = !is_null($member) ? $member->getCompany() : null;
2030+
if(!$attendee->hasCompany() && !empty($member_company)){
2031+
$company = $this->company_repository->getByName($member_company);
2032+
if(!is_null($company)){
2033+
$attendee->setCompany($company);
2034+
} else {
2035+
$company = $this->company_service->addCompany(['name' => $member_company]);
2036+
$attendee->setCompany($company);
2037+
}
2038+
}
20202039
if ($summit->isRegistrationSendTicketEmailAutomatically())
20212040
$attendee->sendInvitationEmail($ticket, false, $payload);
20222041

app/Worker/DoctrineWorker.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ private function pingConnection(Connection $con):bool{
118118
$con->executeQuery($con->getDatabasePlatform()->getDummySelectSQL());
119119
return true;
120120
} catch (\Exception $e) {
121-
Log::error($e);
121+
Log::warning($e);
122122
return false;
123123
}
124124
}

0 commit comments

Comments
 (0)