Files
afup/sources/AppBundle/Event/Ticket/SponsorTicketHelper.php
Xavier Leune 564ceee2f1 Style
2017-05-29 19:07:40 +02:00

87 lines
3.0 KiB
PHP

<?php
namespace AppBundle\Event\Ticket;
use AppBundle\Event\Model\InvoiceFactory;
use AppBundle\Event\Model\Repository\InvoiceRepository;
use AppBundle\Event\Model\Repository\SponsorTicketRepository;
use AppBundle\Event\Model\Repository\TicketRepository;
use AppBundle\Event\Model\SponsorTicket;
use AppBundle\Event\Model\Ticket;
use CCMBenchmark\Ting\Exception;
class SponsorTicketHelper
{
/**
* @var InvoiceFactory
*/
private $invoiceFactory;
/**
* @var InvoiceRepository
*/
private $invoiceRepository;
/**
* @var TicketRepository
*/
private $ticketRepository;
public function __construct(
InvoiceFactory $invoiceFactory,
InvoiceRepository $invoiceRepository,
TicketRepository $ticketRepository,
SponsorTicketRepository $sponsorTicketRepository
) {
$this->invoiceFactory = $invoiceFactory;
$this->invoiceRepository = $invoiceRepository;
$this->ticketRepository = $ticketRepository;
$this->sponsorTicketRepository = $sponsorTicketRepository;
}
public function addTicketToSponsor(SponsorTicket $sponsorTicket, Ticket $ticket)
{
$invoice = $this->invoiceFactory->createInvoiceFromSponsorTicket($sponsorTicket);
try {
$this->invoiceRepository->startTransaction();
$this->invoiceRepository->save($invoice);
$this->ticketRepository->save($ticket);
$sponsorTicket->setUsedInvitations($sponsorTicket->getUsedInvitations()+1);
$this->sponsorTicketRepository->save($sponsorTicket);
$this->invoiceRepository->commit();
} catch (Exception $e) {
$this->invoiceRepository->rollback();
}
}
public function removeTicketFromSponsor(SponsorTicket $sponsorTicket, Ticket $ticket)
{
$invoice = $this->invoiceFactory->createInvoiceFromSponsorTicket($sponsorTicket);
if ($invoice->getReference() !== $ticket->getReference()) {
throw new \RuntimeException(sprintf('Erreur: le ticket n\'est pas rattaché à ce token'));
}
try {
$this->ticketRepository->startTransaction();
$this->ticketRepository->delete($ticket);
$sponsorTicket->setUsedInvitations($sponsorTicket->getUsedInvitations()-1);
$this->sponsorTicketRepository->save($sponsorTicket);
$this->ticketRepository->commit();
} catch (Exception $e) {
$this->ticketRepository->rollback();
}
}
public function doesTicketBelongsToSponsor(SponsorTicket $sponsorTicket, Ticket $ticket)
{
$invoice = $this->invoiceFactory->createInvoiceFromSponsorTicket($sponsorTicket);
return ($ticket->getReference() === $invoice->getReference());
}
public function getRegisteredTickets(SponsorTicket $sponsorTicket)
{
$invoice = $this->invoiceFactory->createInvoiceFromSponsorTicket($sponsorTicket);
return $this->ticketRepository->getByReference($invoice->getReference());
}
}