Completed
Push — master ( 741114...78e68a )
by Adriano
09:10
created

VendaApi::cancelarVenda()   B

Complexity

Conditions 6
Paths 68

Size

Total Lines 36
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 36
rs 8.439
c 0
b 0
f 0
cc 6
eloc 21
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 View Code Duplication
            foreach ($venderRequest->getProdutosVendidos() as $key => $produto)
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
65
            {
66
                if(empty($produto->getId()))
67
                    $venderRequest->getProdutosVendidos()[$key]->setId(
68
                        $this->_client->getParameter(ControlPayParameterConst::CONTROLPAY_DEFAULT_PRODUTO_ID)
69
                    );
70
            }
71
72
            $this->response = $this->_httpClient->post(__FUNCTION__,[
73
                'body' => json_encode($venderRequest),
74
            ]);
75
76
            return SerializerHelper::denormalize(
77
                $this->response->json(),
78
                Contracts\Venda\VenderResponse::class
79
            );
80
        }catch (RequestException $ex) {
81
            $this->requestException($ex);
82
        }catch (\Exception $ex){
83
            throw new \Exception($ex->getMessage(), $ex->getCode(), $ex);
84
        }
85
    }
86
87
    /**
88
     * @param Contracts\Venda\VenderComPedidoRequest $venderComPedidoRequest
89
     * @return Contracts\Venda\VenderResponse
90
     * @throws \Exception
91
     */
92
    public function venderComPedido(Contracts\Venda\VenderComPedidoRequest $venderComPedidoRequest)
93
    {
94
        try{
95
            $response = $this->pedidoApi->insert($venderComPedidoRequest->getPedidoInserirRequest());
96
97
            if(empty($response->getPedido()->getId()))
98
                throw new \Exception("Falha ao inserir pedido");
99
100
            $venderComPedidoRequest->getInventarioVenderRequest()->setPedidoId(
101
                $response->getPedido()->getId()
102
            );
103
104
            return $this->vender($venderComPedidoRequest->getInventarioVenderRequest());
105
        }catch (RequestException $ex) {
106
            $this->requestException($ex);
107
        }catch (\Exception $ex){
108
            throw new \Exception($ex->getMessage(), $ex->getCode(), $ex);
109
        }
110
    }
111
112
    /**
113
     * @param Contracts\Venda\CancelarVendaRequest $cancelarVendaRequest
114
     * @return Contracts\Venda\CancelarVendaResponse
115
     * @throws \Exception
116
     */
117
    public function cancelarVenda(Contracts\Venda\CancelarVendaRequest $cancelarVendaRequest)
118
    {
119
        try{
120
121
            if(empty($cancelarVendaRequest->getTerminalId()))
122
                $cancelarVendaRequest->setTerminalId(
123
                    $this->_client->getParameter(ControlPayParameterConst::CONTROLPAY_DEFAULT_TERMINAL_ID)
124
                );
125
126
            if(empty($cancelarVendaRequest->getSenhaTecnica()))
127
                $cancelarVendaRequest->setSenhaTecnica(
128
                    $this->_client->getParameter(ControlPayParameterConst::CONTROLPAY_DEFAULT_SENHA_TECNICA)
129
                );
130
131
            if(empty($cancelarVendaRequest->isAguardarTefIniciarTransacao()))
132
                $cancelarVendaRequest->setAguardarTefIniciarTransacao(
133
                    boolval(
134
                        $this->_client->getParameter(ControlPayParameterConst::CONTROLPAY_DEFAULT_FORMA_AGUARDA_TEF)
135
                    )
136
                );
137
138
139
            $this->response = $this->_httpClient->post(__FUNCTION__,[
140
                'body' => json_encode($cancelarVendaRequest),
141
            ]);
142
143
            return SerializerHelper::denormalize(
144
                $this->response->json(),
145
                Contracts\Venda\CancelarVendaResponse::class
146
            );
147
        }catch (RequestException $ex) {
148
            $this->requestException($ex);
149
        }catch (\Exception $ex){
150
            throw new \Exception($ex->getMessage(), $ex->getCode(), $ex);
151
        }
152
    }
153
154
//    /**
0 ignored issues
show
Unused Code Comprehensibility introduced by
47% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
155
//     * API Provavelmente descontinuada
156
//     *
157
//     * @return Contracts\Venda\ConsultarVendasResponse
158
//     * @throws \Exception
159
//     */
160
//    public function consultarVendas(array $ids = [])
161
//    {
162
//        try{
163
//            $this->response = $this->_httpClient->post(__FUNCTION__, [
164
//                'body' => json_encode(array_map(function($id){
165
//                    return [
166
//                        'Id' => (string)$id
167
//                    ];
168
//                },$ids))
169
//            ]);
170
//
171
//            return SerializerHelper::denormalize(
172
//                $this->response->json(),
173
//                Contracts\Venda\ConsultarVendasResponse::class
174
//            );
175
//        }catch (RequestException $ex) {
176
//            $this->response = $ex->getResponse();
177
//            $responseBody = $ex->getResponse()->json();
178
//            throw new \Exception($responseBody['message']);
179
//        }catch (\Exception $ex){
180
//            throw new \Exception($ex->getMessage(), $ex->getCode(), $ex);
181
//        }
182
//    }
183
184
}