ResponseDeserializer   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 73
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 3

Importance

Changes 0
Metric Value
wmc 7
lcom 0
cbo 3
dl 0
loc 73
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A deserializeLine() 0 24 3
A deserializeResult() 0 26 4
1
<?php
2
3
/*
4
 * This file is part of the core-library package.
5
 *
6
 * (c) 2019 WEBEWEB
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace WBW\Library\Core\ThirdParty\Adoria\Serializer;
13
14
use DateTime;
15
use WBW\Library\Core\Argument\Helper\ArrayHelper;
16
use WBW\Library\Core\ThirdParty\Adoria\Model\Line;
17
use WBW\Library\Core\ThirdParty\Adoria\Model\Result;
18
19
/**
20
 * Response deserializer.
21
 *
22
 * @author webeweb <https://github.com/webeweb/>
23
 * @package WBW\Library\Core\ThirdParty\Adoria\Serializer
24
 */
25
class ResponseDeserializer {
26
27
    /**
28
     * Response date format.
29
     *
30
     * @var string
31
     */
32
    const RESPONSE_DATE_FORMAT = RequestSerializer::REQUEST_DATE_FORMAT;
33
34
    /**
35
     * Deserialize a line.
36
     *
37
     * @param string $rawResponse The raw response.
38
     * @return Line Returns the line.
39
     */
40
    public static function deserializeLine(string $rawResponse): Line {
41
42
        $decodedResponse = json_decode($rawResponse, true);
43
44
        $invoiceDate    = DateTime::createFromFormat(self::RESPONSE_DATE_FORMAT, ArrayHelper::get($decodedResponse, "InvoiceDate"));
45
        $invoiceDueDate = DateTime::createFromFormat(self::RESPONSE_DATE_FORMAT, ArrayHelper::get($decodedResponse, "InvoiceDueDate"));
46
47
        $model = new Line();
48
49
        $model->setBookingJournalCode(ArrayHelper::get($decodedResponse, "BookingJournalCode"));
50
        $model->setInvoiceDate(false !== $invoiceDate ? $invoiceDate : null);
51
        $model->setAccountingCode(ArrayHelper::get($decodedResponse, "AccountingCode"));
52
        $model->setSubledgerAccount(ArrayHelper::get($decodedResponse, "SubledgerAccount"));
53
        $model->setInvoiceNumber(ArrayHelper::get($decodedResponse, "InvoiceNumber"));
54
        $model->setReference(ArrayHelper::get($decodedResponse, "Reference"));
55
        $model->setAnalyticCode(ArrayHelper::get($decodedResponse, "AnalyticCode"));
56
        $model->setAmount(ArrayHelper::get($decodedResponse, "Amount"));
57
        $model->setCurrency(ArrayHelper::get($decodedResponse, "Currency"));
58
        $model->setAmountSign(ArrayHelper::get($decodedResponse, "AmountSign"));
59
        $model->setInvoiceDueDate(false !== $invoiceDueDate ? $invoiceDueDate : null);
60
        $model->setFreeField(ArrayHelper::get($decodedResponse, "FreeField"));
61
62
        return $model;
63
    }
64
65
    /**
66
     * Deserialize a result.
67
     *
68
     * @param string $rawResponse The raw response.
69
     * @return Result Returns the result.
70
     */
71
    public static function deserializeResult(string $rawResponse): Result {
72
73
        $model = new Result();
74
75
        $decodedResponse = json_decode($rawResponse, true);
76
        if (null === $decodedResponse) {
77
            return $model;
78
        }
79
80
        $lines = [];
81
82
        $data = ArrayHelper::get($decodedResponse, "Datas", []);
83
        if (null === $data) {
84
            $data = [];
85
        }
86
87
        foreach ($data as $current) {
88
            $lines[] = static::deserializeLine(json_encode($current));
89
        }
90
91
        $model->setReturnCode(intval(ArrayHelper::get($decodedResponse, "ReturnCode", -1)));
92
        $model->setErrors(ArrayHelper::get($decodedResponse, "Errors", []));
93
        $model->setData($lines);
94
95
        return $model;
96
    }
97
}
98