Completed
Pull Request — master (#147)
by
unknown
17:38
created

OrderManager::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nc 1
nop 2
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace AppBundle\Services;
4
5
use AppBundle\Entity\Ticket;
6
use AppBundle\Entity\UserOrder;
7
use AppBundle\Repository\UserOrderRepository;
8
use Symfony\Bridge\Doctrine\RegistryInterface;
9
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
10
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
11
12
class OrderManager
13
{
14
    protected $doctrine;
15
16
    protected $tokenStorage;
17
18
    public function __construct(RegistryInterface $doctrine, TokenStorageInterface $tokenStorage)
19
    {
20
        $this->doctrine = $doctrine;
21
        $this->tokenStorage = $tokenStorage;
22
    }
23
24
    public function addOrderToTicket(Ticket $ticket)
25
    {
26
        $order = $this->getCustomerOrder();
27
        $ticket->setUserOrder($order);
28
    }
29
30
    public function removeOrderFromTicket(Ticket $ticket)
31
    {
32
        $em = $this->doctrine->getEntityManager();
33
        $user = $this->tokenStorage->getToken()->getUser();
34
        /** @var UserOrder $order */
35
        $order = $em->getRepository('AppBundle:UserOrder')->findLastOpenOrder($user);
36
        if ($ticket->getUserOrder() !== $order) {
37
            throw new AccessDeniedHttpException('You cannot change status for this ticket');
38
        }
39
40
        $ticket->setUserOrder(null);
41
        $ticket->setStatus(Ticket::STATUS_FREE);
42
    }
43
44
    /**
45
     * Returns or creates UserOrder
46
     *
47
     * @return UserOrder
48
     */
49
    private function getCustomerOrder()
50
    {
51
        $em = $this->doctrine->getEntityManager();
52
        $user = $this->tokenStorage->getToken()->getUser();
53
        /** @var UserOrderRepository $userOrderRepository */
54
        $userOrderRepository = $em->getRepository('AppBundle:UserOrder');
55
        $order = $userOrderRepository->findLastOpenOrder($user);
56
57
        /**
58
         * Creating order if isn't exist
59
         */
60
        if (!$order) {
61
            $order = new UserOrder($user);
62
            $em->persist($order);
63
        }
64
65
        return $order;
66
    }
67
}
68