Fix on reassign attendee tix

tix was not assigned correctly to new attendee

Change-Id: I378573d456b3db16fae944c1673de50f9799beab
This commit is contained in:
Sebastian Marcet 2018-09-20 10:36:04 -03:00
parent 6688606abe
commit 8ffec4ed79
5 changed files with 38 additions and 3 deletions

View File

@ -201,7 +201,6 @@ Route::group([
Route::delete('', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitAttendeesApiController@deleteAttendeeTicket']); Route::delete('', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitAttendeesApiController@deleteAttendeeTicket']);
Route::put('reassign/{other_member_id}', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitAttendeesApiController@reassignAttendeeTicket']); Route::put('reassign/{other_member_id}', [ 'middleware' => 'auth.user:administrators|summit-front-end-administrators', 'uses' => 'OAuth2SummitAttendeesApiController@reassignAttendeeTicket']);
}); });
}); });
}); });
}); });

View File

@ -118,7 +118,7 @@ class SummitAttendee extends SilverstripeBaseModel
} }
/** /**
* @ORM\OneToMany(targetEntity="SummitAttendeeTicket", mappedBy="owner", cascade={"persist"}, orphanRemoval=true) * @ORM\OneToMany(targetEntity="SummitAttendeeTicket", mappedBy="owner", cascade={"persist", "remove"})
* @var SummitAttendeeTicket[] * @var SummitAttendeeTicket[]
*/ */
private $tickets; private $tickets;

View File

@ -30,6 +30,7 @@ final class SummitAttendeeTicketFactory
public static function build(SummitAttendee $attendee, SummitTicketType $type, array $data){ public static function build(SummitAttendee $attendee, SummitTicketType $type, array $data){
$ticket = new SummitAttendeeTicket(); $ticket = new SummitAttendeeTicket();
$attendee->addTicket($ticket); $attendee->addTicket($ticket);
if(isset($data['external_order_id'])) if(isset($data['external_order_id']))
$ticket->setExternalOrderId($data['external_order_id']); $ticket->setExternalOrderId($data['external_order_id']);
if(isset($data['external_attendee_id'])) if(isset($data['external_attendee_id']))

View File

@ -311,13 +311,17 @@ final class AttendeeService extends AbstractService implements IAttendeeService
if(is_null($ticket)){ if(is_null($ticket)){
throw new EntityNotFoundException("ticket not found"); throw new EntityNotFoundException("ticket not found");
} }
$new_owner = $this->attendee_repository->getBySummitAndMember($summit, $other_member); $new_owner = $this->attendee_repository->getBySummitAndMember($summit, $other_member);
if(is_null($new_owner)){ if(is_null($new_owner)){
$new_owner = SummitAttendeeFactory::build($summit, $other_member, []); $new_owner = SummitAttendeeFactory::build($summit, $other_member, []);
$this->attendee_repository->add($new_owner); $this->attendee_repository->add($new_owner);
} }
$new_owner->addTicket($ticket);
$attendee->removeTicket($ticket); $attendee->removeTicket($ticket);
$new_owner->addTicket($ticket);
if(!$attendee->hasTickets()){ if(!$attendee->hasTickets()){
$this->attendee_repository->delete($attendee); $this->attendee_repository->delete($attendee);
} }

View File

@ -292,4 +292,35 @@ class OAuth2AttendeesApiTest extends ProtectedApiTest
$this->assertResponseStatus(204); $this->assertResponseStatus(204);
} }
public function testReassignAttendeeTicket($summit_id = 25){
$params = [
'id' => $summit_id,
'attendee_id' => 14938,
'ticket_id' => 15070,
'other_member_id' => 13867,
];
$headers = [
"HTTP_Authorization" => " Bearer " . $this->access_token,
"CONTENT_TYPE" => "application/json"
];
$response = $this->action(
"PUT",
"OAuth2SummitAttendeesApiController@reassignAttendeeTicket",
$params,
[],
[],
[],
$headers,
''
);
$content = $response->getContent();
$this->assertResponseStatus(201);
$ticket = json_decode($content);
$this->assertTrue(!is_null($ticket));
return $ticket;
}
} }