/** * @param $member * @param string $external_summit_id * @param string $external_order_id * @param string $external_attendee_id * @param string $external_ticket_class_id * @param string $bought_date * @param bool $shared_contact_info * @return ISummitAttendee */ public function registerAttendee($member, $external_summit_id, $external_order_id, $external_attendee_id, $external_ticket_class_id, $bought_date, $shared_contact_info = false) { $repository = $this->repository; $member_repository = $this->member_repository; $attendee_factory = $this->attendee_factory; $attendee_repository = $this->attendee_repository; $summit_repository = $this->summit_repository; return $this->tx_manager->transaction(function () use($member, $external_summit_id, $external_order_id, $external_attendee_id, $external_ticket_class_id, $bought_date, $shared_contact_info, $repository, $member_repository, $attendee_factory, $attendee_repository, $summit_repository) { $summit = $summit_repository->getByExternalEventId($external_summit_id); if (is_null($summit)) { throw new NotFoundEntityException('Summit', sprintf('external_summit_id %s', $external_summit_id)); } $ticket_type = $summit->findTicketTypeByExternalId($external_ticket_class_id); if (is_null($ticket_type)) { throw new NotFoundEntityException('SummitTicketType', sprintf('external_ticket_class_id %s', $external_ticket_class_id)); } $old_ticket = SummitAttendeeTicket::get()->filter(array('ExternalOrderId' => $external_order_id, 'ExternalAttendeeId' => $external_attendee_id))->first(); if (!is_null($old_ticket)) { if ($old_ticket->OwnerID > 0) { throw new EntityValidationException(sprintf('Ticket already redeem external_order_id %s - external_attendee_id %s - old attendee id %s - current member id %s !', $external_order_id, $external_attendee_id, $old_ticket->OwnerID, $member->ID)); } $old_ticket->delete(); } $ticket = $attendee_factory->buildTicket($external_attendee_id, $external_order_id, $bought_date, $bought_date, $ticket_type); $attendee = $attendee_factory->build($member, $summit); $attendee->setShareContactInfo($shared_contact_info); $attendee->addTicket($ticket); $attendee_repository->add($attendee); return $attendee; }); }
public function getTicketData(SS_HTTPRequest $request) { try { $summit_id = intval($request->param('SUMMIT_ID')); $summit = Summit::get_by_id('Summit', $summit_id); if (is_null($summit)) { throw new NotFoundEntityException('Summit', sprintf(' id %s', $summit_id)); } $ticket_id = intval($request->param('TICKET_ID')); $ticket = SummitAttendeeTicket::get_by_id('SummitAttendeeTicket', $ticket_id); if (is_null($ticket)) { throw new NotFoundEntityException('SummitAttendeeTicket', sprintf(' id %s', $ticket_id)); } $ticket_array = $ticket->toMap(); $ticket_array['TicketTypeName'] = $ticket->TicketType()->Name; return $this->ok($ticket_array); } catch (NotFoundEntityException $ex2) { SS_Log::log($ex2->getMessage(), SS_Log::WARN); return $this->notFound($ex2->getMessage()); } catch (Exception $ex) { SS_Log::log($ex->getMessage(), SS_Log::ERR); return $this->serverError(); } }
/** * @param ISummit $summit * @param $ticket_id * @param $member_id * @return mixed */ public function reassignTicket(ISummit $summit, $ticket_id, $member_id) { $attendee_repository = $this->attendee_repository; return $this->tx_service->transaction(function () use($summit, $ticket_id, $member_id, $attendee_repository) { if (!$ticket_id) { throw new EntityValidationException('missing required param: id'); } $attendee = $attendee_repository->getByMemberAndSummit($member_id, $summit->getIdentifier()); $ticket = SummitAttendeeTicket::get_by_id('SummitAttendeeTicket', $ticket_id); $previous_owner = $ticket->Owner(); if ($attendee) { if ($attendee->Tickets()->count() > 0) { throw new EntityValidationException('This member is already assigned to another tix'); } else { $previous_owner->Tickets()->remove($ticket); $attendee->Tickets()->add($ticket); } } else { $previous_owner->Tickets()->remove($ticket); $attendee = new SummitAttendee(); $attendee->MemberID = $member_id; $attendee->SummitID = $summit->getIdentifier(); $attendee->Tickets()->add($ticket); } $attendee->write(); // if the attendee has no more tickets we delete it if ($previous_owner->Tickets()->count() == 0) { $previous_owner->delete(); } return $attendee; }); }
/** * @param ISummit $summit * @param int $eb_attendee_id * @param int $member_id * @return ISummitAttendee */ public function matchEventbriteAttendee(ISummit $summit, $eb_attendee_id, $member_id) { $attendee_repository = $this->attendee_repository; $eventbrite_attendee_repository = new SapphireEventbriteAttendeeRepository(); $member_repository = $this->member_repository; return $this->tx_service->transaction(function () use($summit, $eb_attendee_id, $member_id, $attendee_repository, $eventbrite_attendee_repository, $member_repository) { $eb_attendee = $eventbrite_attendee_repository->getByAttendeeId($eb_attendee_id); if (is_null($eb_attendee)) { throw new NotFoundEntityException('Attendee', sprintf(' id %s', $eb_attendee_id)); } $member = $member_repository->getById($member_id); if (is_null($member)) { throw new NotFoundEntityException('Member', sprintf(' id %s', $member_id)); } $attendee = $attendee_repository->getByMemberAndSummit($member_id, $summit->getIdentifier()); if (!$attendee) { $attendee = new SummitAttendee(); $attendee->MemberID = $member_id; $attendee->SummitID = $summit->getIdentifier(); $attendee->write(); } list($eb_attendees, $count) = $eventbrite_attendee_repository->getByEmail($eb_attendee->Email); foreach ($eb_attendees as $eb_ticket) { $attendee_ticket = SummitAttendeeTicket::get()->where("ExternalAttendeeId = " . $eb_ticket->ExternalAttendeeId)->first(); if (!$attendee_ticket) { $attendee_ticket = new SummitAttendeeTicket(); $ticket_type = SummitTicketType::get()->where("ExternalId = " . $eb_ticket->ExternalTicketClassId)->first(); $external_event = EventbriteEvent::get()->where("ID = " . $eb_ticket->EventbriteOrderId)->first(); $attendee_ticket->ExternalOrderId = $external_event->ExternalOrderId; $attendee_ticket->ExternalAttendeeId = $eb_ticket->ExternalAttendeeId; $attendee_ticket->TicketTypeID = $ticket_type ? $ticket_type->ID : 0; } $attendee_ticket->OwnerID = $attendee->ID; $attendee_ticket->write(); } return $attendee; }); }