Completed
Push — 1.9 ( 9955b8...d085a6 )
by
unknown
11:29
created

CustomerController::placeOrderAction()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
3
namespace OroCRM\Bundle\MagentoBundle\Controller;
4
5
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
6
use Symfony\Component\HttpFoundation\JsonResponse;
7
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
8
9
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
10
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
11
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
12
13
use Oro\Bundle\SecurityBundle\Annotation\Acl;
14
use Oro\Bundle\SecurityBundle\Annotation\AclAncestor;
15
use Oro\Bundle\SecurityBundle\SecurityFacade;
16
17
use OroCRM\Bundle\MagentoBundle\Entity\Customer;
18
use OroCRM\Bundle\AccountBundle\Entity\Account;
19
use OroCRM\Bundle\ChannelBundle\Entity\Channel;
20
21
/**
22
 * @Route("/customer")
23
 */
24
class CustomerController extends Controller
25
{
26
    /**
27
     * @Route("/", name="orocrm_magento_customer_index")
28
     * @AclAncestor("orocrm_magento_customer_view")
29
     * @Template
30
     */
31
    public function indexAction()
32
    {
33
        return [
34
            'entity_class' => $this->container->getParameter('orocrm_magento.customer.entity.class')
35
        ];
36
    }
37
38
    /**
39
     * @param Customer $customer
40
     * @return array
41
     *
42
     * @Route("/view/{id}", name="orocrm_magento_customer_view", requirements={"id"="\d+"}))
43
     * @Acl(
44
     *      id="orocrm_magento_customer_view",
45
     *      type="entity",
46
     *      permission="VIEW",
47
     *      class="OroCRMMagentoBundle:Customer"
48
     * )
49
     * @Template
50
     */
51
    public function viewAction(Customer $customer)
52
    {
53
        return ['entity' => $customer];
54
    }
55
56
    /**
57
     * @param Customer $customer
58
     * @return array
59
     *
60
     * @Route("/update/{id}", name="orocrm_magento_customer_update", requirements={"id"="\d+"}))
61
     * @Acl(
62
     *      id="orocrm_magento_customer_update",
63
     *      type="entity",
64
     *      permission="EDIT",
65
     *      class="OroCRMMagentoBundle:Customer"
66
     * )
67
     * @Template("OroCRMMagentoBundle:Customer:update.html.twig")
68
     */
69
    public function updateAction(Customer $customer)
70
    {
71
        return $this->update($customer);
72
    }
73
74
    /**
75
     * @Route("/create", name="orocrm_magento_customer_create"))
76
     * @Acl(
77
     *      id="orocrm_magento_customer_create",
78
     *      type="entity",
79
     *      permission="CREATE",
80
     *      class="OroCRMMagentoBundle:Customer"
81
     * )
82
     * @Template("OroCRMMagentoBundle:Customer:update.html.twig")
83
     */
84
    public function createAction()
85
    {
86
        if (!$this->getSecurityFacade()->isGranted('oro_integration_assign')) {
87
            throw new AccessDeniedHttpException();
88
        }
89
90
        return $this->update(new Customer());
91
    }
92
93
    /**
94
     * @param Customer $customer
95
     * @return JsonResponse
96
     *
97
     * @Route("/register/{id}", name="orocrm_magento_customer_register", requirements={"id"="\d+"}))
98
     * @AclAncestor("orocrm_magento_customer_update")
99
     */
100
    public function registerAction(Customer $customer)
101
    {
102
        return new JsonResponse([
103
            'successful' => $this->get('orocrm_magento.form.handler.customer')->handleRegister($customer),
104
        ]);
105
    }
106
107
    /**
108
     * @param Customer $customer
109
     * @return array
110
     */
111
    protected function update(Customer $customer)
112
    {
113
        return $this->get('orocrm_magento.form.handler.customer')->handleUpdate(
114
            $customer,
115
            $this->createForm('orocrm_magento_customer', $customer),
116
            function (Customer $customer) {
117
                return [
118
                    'route' => 'orocrm_magento_customer_update',
119
                    'parameters' => ['id' => $customer->getId()]
120
                ];
121
            },
122
            function (Customer $customer) {
123
                return [
124
                    'route' => 'orocrm_magento_customer_view',
125
                    'parameters' => ['id' => $customer->getId()]
126
                ];
127
            },
128
            $this->get('translator')->trans('orocrm.magento.customer.saved.message')
129
        );
130
    }
131
132
    /**
133
     * @param Customer $customer
134
     * @return array
135
     *
136
     * @Route("/info/{id}", name="orocrm_magento_customer_info", requirements={"id"="\d+"}))
137
     * @AclAncestor("orocrm_magento_customer_view")
138
     * @Template
139
     */
140
    public function infoAction(Customer $customer)
141
    {
142
        return ['entity' => $customer];
143
    }
144
145
    /**
146
     * @param Account $account
147
     * @param Channel $channel
148
     * @return array
149
     *
150
     * @Route(
151
     *         "/widget/customers-info/{accountId}/{channelId}",
152
     *          name="orocrm_magento_widget_account_customers_info",
153
     *          requirements={"accountId"="\d+", "channelId"="\d+"}
154
     * )
155
     * @ParamConverter("account", class="OroCRMAccountBundle:Account", options={"id" = "accountId"})
156
     * @ParamConverter("channel", class="OroCRMChannelBundle:Channel", options={"id" = "channelId"})
157
     * @AclAncestor("orocrm_magento_customer_view")
158
     * @Template
159
     */
160
    public function accountCustomersInfoAction(Account $account, Channel $channel)
161
    {
162
        $customers = $this->getDoctrine()
163
            ->getRepository('OroCRM\\Bundle\\MagentoBundle\\Entity\\Customer')
164
            ->findBy(['account' => $account, 'dataChannel' => $channel]);
165
        $customers = array_filter(
166
            $customers,
167
            function ($item) {
168
                return $this->getSecurityFacade()->isGranted('VIEW', $item);
169
            }
170
        );
171
172
        return ['customers' => $customers, 'channel' => $channel, 'account' => $account];
173
    }
174
175
    /**
176
     * @param Customer $customer
177
     * @param Channel $channel
178
     * @return array
179
     *
180
     * @Route(
181
     *        "/widget/customer-info/{id}/{channelId}",
182
     *        name="orocrm_magento_widget_customer_info",
183
     *        requirements={"id"="\d+", "channelId"="\d+"}
184
     * )
185
     * @ParamConverter("channel", class="OroCRMChannelBundle:Channel", options={"id" = "channelId"})
186
     * @AclAncestor("orocrm_magento_customer_view")
187
     * @Template
188
     */
189
    public function customerInfoAction(Customer $customer, Channel $channel)
190
    {
191
        return [
192
            'customer'       => $customer,
193
            'channel'        => $channel,
194
            'orderClassName' => $this->container->getParameter('orocrm_magento.entity.order.class'),
195
            'cartClassName'  => $this->container->getParameter('orocrm_magento.entity.cart.class'),
196
        ];
197
    }
198
199
    /**
200
     * @param Customer $customer
201
     * @return array
202
     *
203
     * @Route("/order/{id}", name="orocrm_magento_customer_orderplace", requirements={"id"="\d+"}))
204
     * @AclAncestor("orocrm_magento_customer_view")
205
     * @Template
206
     */
207
    public function placeOrderAction(Customer $customer)
208
    {
209
        return ['entity' => $customer];
210
    }
211
212
    /**
213
     * @param Customer $customer
214
     * @return array
215
     *
216
     * @Route("/addressBook/{id}", name="orocrm_magento_customer_address_book", requirements={"id"="\d+"}))
217
     * @AclAncestor("orocrm_magento_customer_view")
218
     * @Template
219
     */
220
    public function addressBookAction(Customer $customer)
221
    {
222
        return ['entity' => $customer];
223
    }
224
225
    /**
226
     * @return SecurityFacade
227
     */
228
    protected function getSecurityFacade()
229
    {
230
        return $this->get('oro_security.security_facade');
231
    }
232
}
233