Completed
Push — master ( ac28ba...d1c608 )
by Adriano
05:00
created

VendaApi::vender()   D

Complexity

Conditions 8
Paths 244

Size

Total Lines 45
Code Lines 27

Duplication

Lines 7
Ratio 15.56 %

Importance

Changes 0
Metric Value
dl 7
loc 45
rs 4
c 0
b 0
f 0
cc 8
eloc 27
nc 244
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->response = $ex->getResponse();
82
            $responseBody = $ex->getResponse()->json();
83
            throw new \Exception($responseBody['message']);
84
        }catch (\Exception $ex){
85
            throw new \Exception($ex->getMessage(), $ex->getCode(), $ex);
86
        }
87
    }
88
89
    /**
90
     * @param Contracts\Venda\VenderComPedidoRequest $venderComPedidoRequest
91
     * @return Contracts\Venda\VenderResponse
92
     * @throws \Exception
93
     */
94
    public function venderComPedido(Contracts\Venda\VenderComPedidoRequest $venderComPedidoRequest)
95
    {
96
        try{
97
            $response = $this->pedidoApi->insert($venderComPedidoRequest->getPedidoInserirRequest());
98
99
            if(empty($response->getPedido()->getId()))
100
                throw new \Exception("Falha ao inserir pedido");
101
102
            $venderComPedidoRequest->getInventarioVenderRequest()->setPedidoId(
103
                $response->getPedido()->getId()
104
            );
105
106
            return $this->vender($venderComPedidoRequest->getInventarioVenderRequest());
107
        }catch (RequestException $ex) {
108
            $this->response = $ex->getResponse();
109
            $responseBody = $ex->getResponse()->json();
110
            throw new \Exception($responseBody['message']);
111
        }catch (\Exception $ex){
112
            throw new \Exception($ex->getMessage(), $ex->getCode(), $ex);
113
        }
114
    }
115
116
//    /**
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...
117
//     * API Provavelmente descontinuada
118
//     *
119
//     * @return Contracts\Venda\ConsultarVendasResponse
120
//     * @throws \Exception
121
//     */
122
//    public function consultarVendas(array $ids = [])
123
//    {
124
//        try{
125
//            $this->response = $this->_httpClient->post(__FUNCTION__, [
126
//                'body' => json_encode(array_map(function($id){
127
//                    return [
128
//                        'Id' => (string)$id
129
//                    ];
130
//                },$ids))
131
//            ]);
132
//
133
//            return SerializerHelper::denormalize(
134
//                $this->response->json(),
135
//                Contracts\Venda\ConsultarVendasResponse::class
136
//            );
137
//        }catch (RequestException $ex) {
138
//            $this->response = $ex->getResponse();
139
//            $responseBody = $ex->getResponse()->json();
140
//            throw new \Exception($responseBody['message']);
141
//        }catch (\Exception $ex){
142
//            throw new \Exception($ex->getMessage(), $ex->getCode(), $ex);
143
//        }
144
//    }
145
146
}