VendaApi::cancelarVenda()   B
last analyzed

Complexity

Conditions 6
Paths 68

Size

Total Lines 36

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 36
rs 8.7217
c 0
b 0
f 0
cc 6
nc 68
nop 1
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: a.moreira
5
 * Date: 20/10/2016
6
 * Time: 09:51
7
 */
8
9
namespace Integracao\ControlPay\API;
10
11
use GuzzleHttp\Exception\RequestException;
12
use Integracao\ControlPay\AbstractAPI;
13
use Integracao\ControlPay\Client;
14
use Integracao\ControlPay\Constants\ControlPayParameterConst;
15
use Integracao\ControlPay\Helpers\SerializerHelper;
16
use Integracao\ControlPay\Contracts;
17
18
/**
19
 * Class VenderApi
20
 * @package Integracao\ControlPay\API
21
 */
22
class VendaApi extends AbstractAPI
23
{
24
    /**
25
     * @var PedidoApi
26
     */
27
    private $pedidoApi;
28
29
    /**
30
     * VenderApi constructor.
31
     */
32
    public function __construct(Client $client = null)
33
    {
34
        parent::__construct('venda', $client);
35
        $this->pedidoApi = new PedidoApi($client);
0 ignored issues
show
Bug introduced by
It seems like $client defined by parameter $client on line 32 can be null; however, Integracao\ControlPay\API\PedidoApi::__construct() does not accept null, maybe add an additional type check?

It seems like you allow that null is being passed for a parameter, however the function which is called does not seem to accept null.

We recommend to add an additional type check (or disallow null for the parameter):

function notNullable(stdClass $x) { }

// Unsafe
function withoutCheck(stdClass $x = null) {
    notNullable($x);
}

// Safe - Alternative 1: Adding Additional Type-Check
function withCheck(stdClass $x = null) {
    if ($x instanceof stdClass) {
        notNullable($x);
    }
}

// Safe - Alternative 2: Changing Parameter
function withNonNullableParam(stdClass $x) {
    notNullable($x);
}
Loading history...
36
    }
37
38
    /**
39
     * @param Contracts\Venda\VenderRequest $venderRequest
40
     * @return Contracts\Venda\VenderResponse
41
     * @throws \Exception
42
     */
43
    public function vender(Contracts\Venda\VenderRequest $venderRequest)
44
    {
45
        try{
46
47
            if(empty($venderRequest->getTerminalId()))
48
                $venderRequest->setTerminalId(
49
                    $this->_client->getParameter(ControlPayParameterConst::CONTROLPAY_DEFAULT_TERMINAL_ID)
50
                );
51
            
52
            if(empty($venderRequest->getFormaPagamentoId()))
53
                $venderRequest->setFormaPagamentoId(
54
                    $this->_client->getParameter(ControlPayParameterConst::CONTROLPAY_DEFAULT_FORMA_PAGAMENTO_ID)
55
                );
56
57
            if(empty($venderRequest->isAguardarTefIniciarTransacao()))
58
                $venderRequest->setAguardarTefIniciarTransacao(
59
                    boolval(
60
                        $this->_client->getParameter(ControlPayParameterConst::CONTROLPAY_DEFAULT_FORMA_AGUARDA_TEF)
61
                    )
62
                );
63
64
            if(!empty($venderRequest->getProdutosVendidos()))
65
                foreach ($venderRequest->getProdutosVendidos() as $key => $produto)
66
                {
67
                    if(empty($produto->getId()))
68
                        $venderRequest->getProdutosVendidos()[$key]->setId(
69
                            $this->_client->getParameter(ControlPayParameterConst::CONTROLPAY_DEFAULT_PRODUTO_ID)
70
                        );
71
72
                    if(empty($produto->getQuantidade()))
73
                        $venderRequest->getProdutosVendidos()[$key]->setQuantidade(
74
                            $this->_client->getParameter(ControlPayParameterConst::CONTROLPAY_DEFAULT_PRODUTO_QTDE)
75
                        );
76
                }
77
78
            $this->response = $this->_httpClient->post(__FUNCTION__,[
79
                'body' => json_encode($venderRequest),
80
            ]);
81
82
            return SerializerHelper::denormalize(
83
                $this->response->json(),
84
                Contracts\Venda\VenderResponse::class
85
            );
86
        }catch (RequestException $ex) {
87
            $this->requestException($ex);
88
        }catch (\Exception $ex){
89
            throw new \Exception($ex->getMessage(), $ex->getCode(), $ex);
90
        }
91
    }
92
93
    /**
94
     * @param Contracts\Venda\VenderComPedidoRequest $venderComPedidoRequest
95
     * @return Contracts\Venda\VenderResponse
96
     * @throws \Exception
97
     */
98
    public function venderComPedido(Contracts\Venda\VenderComPedidoRequest $venderComPedidoRequest)
99
    {
100
        try{
101
            $response = $this->pedidoApi->insert($venderComPedidoRequest->getPedidoInserirRequest());
102
103
            if(empty($response->getPedido()->getId()))
104
                throw new \Exception("Falha ao inserir pedido");
105
106
            $venderComPedidoRequest->getInventarioVenderRequest()->setPedidoId(
107
                $response->getPedido()->getId()
108
            );
109
110
            return $this->vender($venderComPedidoRequest->getInventarioVenderRequest());
111
        }catch (RequestException $ex) {
112
            $this->requestException($ex);
113
        }catch (\Exception $ex){
114
            throw new \Exception($ex->getMessage(), $ex->getCode(), $ex);
115
        }
116
    }
117
118
    /**
119
     * @param Contracts\Venda\CancelarVendaRequest $cancelarVendaRequest
120
     * @return Contracts\Venda\CancelarVendaResponse
121
     * @throws \Exception
122
     */
123
    public function cancelarVenda(Contracts\Venda\CancelarVendaRequest $cancelarVendaRequest)
124
    {
125
        try{
126
127
            if(empty($cancelarVendaRequest->getTerminalId()))
128
                $cancelarVendaRequest->setTerminalId(
129
                    $this->_client->getParameter(ControlPayParameterConst::CONTROLPAY_DEFAULT_TERMINAL_ID)
130
                );
131
132
            if(empty($cancelarVendaRequest->getSenhaTecnica()))
133
                $cancelarVendaRequest->setSenhaTecnica(
134
                    $this->_client->getParameter(ControlPayParameterConst::CONTROLPAY_DEFAULT_SENHA_TECNICA)
135
                );
136
137
            if(empty($cancelarVendaRequest->isAguardarTefIniciarTransacao()))
138
                $cancelarVendaRequest->setAguardarTefIniciarTransacao(
139
                    boolval(
140
                        $this->_client->getParameter(ControlPayParameterConst::CONTROLPAY_DEFAULT_FORMA_AGUARDA_TEF)
141
                    )
142
                );
143
144
145
            $this->response = $this->_httpClient->post(__FUNCTION__,[
146
                'body' => json_encode($cancelarVendaRequest),
147
            ]);
148
149
            return SerializerHelper::denormalize(
150
                $this->response->json(),
151
                Contracts\Venda\CancelarVendaResponse::class
152
            );
153
        }catch (RequestException $ex) {
154
            $this->requestException($ex);
155
        }catch (\Exception $ex){
156
            throw new \Exception($ex->getMessage(), $ex->getCode(), $ex);
157
        }
158
    }
159
160
161
//    /**
162
//     * API Provavelmente descontinuada
163
//     *
164
//     * @return Contracts\Venda\ConsultarVendasResponse
165
//     * @throws \Exception
166
//     */
167
//    public function consultarVendas(array $ids = [])
168
//    {
169
//        try{
170
//            $this->response = $this->_httpClient->post(__FUNCTION__, [
171
//                'body' => json_encode(array_map(function($id){
172
//                    return [
173
//                        'Id' => (string)$id
174
//                    ];
175
//                },$ids))
176
//            ]);
177
//
178
//            return SerializerHelper::denormalize(
179
//                $this->response->json(),
180
//                Contracts\Venda\ConsultarVendasResponse::class
181
//            );
182
//        }catch (RequestException $ex) {
183
//            $this->response = $ex->getResponse();
184
//            $responseBody = $ex->getResponse()->json();
185
//            throw new \Exception($responseBody['message']);
186
//        }catch (\Exception $ex){
187
//            throw new \Exception($ex->getMessage(), $ex->getCode(), $ex);
188
//        }
189
//    }
190
191
}