Completed
Pull Request — master (#147)
by
unknown
13:27
created

OrderManager::addOrderToTicket()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 3
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 5
rs 9.4285
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
    /**
15
     * @var RegistryInterface
16
     */
17
    protected $doctrine;
18
19
    /**
20
     * @var TokenStorageInterface
21
     */
22
    protected $tokenStorage;
23
24
    public function __construct(RegistryInterface $doctrine, TokenStorageInterface $tokenStorage)
25
    {
26
        $this->doctrine = $doctrine;
27
        $this->tokenStorage = $tokenStorage;
28
    }
29
30
    /**
31
     * @param Ticket $ticket
32
     */
33
    public function addOrderToTicket(Ticket $ticket): void
34
    {
35
        $order = $this->getCustomerOrder();
36
        $ticket->setUserOrder($order);
37
    }
38
39
    /**
40
     * @param Ticket $ticket
41
     */
42
    public function removeOrderFromTicket(Ticket $ticket): void
43
    {
44
        $em = $this->doctrine->getEntityManager();
45
        $user = $this->tokenStorage->getToken()->getUser();
46
        /** @var UserOrder $order */
47
        $order = $em->getRepository('AppBundle:UserOrder')->findLastOpenOrder($user);
48
        if ($ticket->getUserOrder() !== $order) {
49
            throw new AccessDeniedHttpException('You cannot change status for this ticket');
50
        }
51
52
        $ticket->setUserOrder(null);
53
        $ticket->setStatus(Ticket::STATUS_FREE);
54
    }
55
56
    /**
57
     * Returns or creates UserOrder
58
     *
59
     * @return UserOrder
60
     */
61
    private function getCustomerOrder(): UserOrder
62
    {
63
        $em = $this->doctrine->getEntityManager();
64
        $user = $this->tokenStorage->getToken()->getUser();
65
        /** @var UserOrderRepository $userOrderRepository */
66
        $userOrderRepository = $em->getRepository('AppBundle:UserOrder');
67
        $order = $userOrderRepository->findLastOpenOrder($user);
68
69
        /**
70
         * Creating order if isn't exist
71
         */
72
        if (!$order) {
73
            $order = new UserOrder($user);
74
            $em->persist($order);
75
        }
76
77
        return $order;
78
    }
79
}
80