Query::process()   F
last analyzed

Complexity

Conditions 26
Paths 524

Size

Total Lines 213
Code Lines 163

Duplication

Lines 0
Ratio 0 %

Importance

Changes 4
Bugs 4 Features 0
Metric Value
cc 26
eloc 163
nc 524
nop 0
dl 0
loc 213
rs 2.7623
c 4
b 4
f 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
/**
4
 * Mode Query
5
 *
6
 * @author Alexey Krupskiy <[email protected]>
7
 * @link http://inji.ru/
8
 * @copyright 2015 Alexey Krupskiy
9
 * @license https://github.com/injitools/cms-Inji/blob/master/LICENSE
10
 */
11
12
namespace Exchange1c\Mode;
13
14
15
class Query extends \Exchange1c\Mode {
16
17
    public function process() {
18
19
        function addToXml($xml, $parent, $nodeName, $text) {
20
            $node = $parent->appendChild($xml->createElement($nodeName));
21
            $node->appendChild($xml->createTextNode($text));
22
            return $node;
23
        }
24
25
        header("Content-Type: text/xml; charset=windows-1251");
26
        header("Expires: Thu, 19 Feb 1998 13:24:18 GMT");
27
        header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
28
        header("Cache-Control: no-cache, must-revalidate");
29
        header("Cache-Control: post-check=0,pre-check=0");
30
        header("Cache-Control: max-age=0");
31
        header("Pragma: no-cache");
32
        header("Content-Encoding: none");
33
        $xml = new \DOMDocument('1.0', 'windows-1251');
34
35
        $xml->formatOutput = true;
36
37
        $root = $xml->createElement('КоммерческаяИнформация');
38
        $root->setAttribute("ВерсияСхемы", "2.03");
39
        $root->setAttribute("ДатаФормирования", date('Y-m-d'));
40
        $root = $xml->appendChild($root);
41
        $carts = \Ecommerce\Cart::getList(['where' => ['cart_status_id', empty(\App::$cur->Exchange1c->config['uploadStatusId']) ? '3' : \App::$cur->Exchange1c->config['uploadStatusId'], 'IN']]);
42
        if (!empty($_GET["version"])) {
43
            $root = $root->appendChild($xml->createElement('Контейнер'));
44
        }
45
46
        foreach ($carts as $cart) {
47
            if (!empty($_SESSION['uploadedCarts'][$cart->id])) {
48
                continue;
49
            }
50
            $_SESSION['uploadedCarts'][$cart->id] = true;
51
            $doc = $xml->createElement('Документ');
52
            $statusDateTime = new \DateTime($cart->complete_data);
53
            $items = $cart->cartItems;
54
            if (!$items) {
55
                continue;
56
            }
57
58
            $goodss = $xml->createElement('Товары');
59
            $sum = 0;
60
            foreach ($items as $cartitem) {
61
                $goods = $goodss->appendChild($xml->createElement('Товар'));
62
                if ($cartitem->price && $cartitem->price->offer && $cartitem->price->offer->item_id) {
63
                    $id1c = \Migrations\Id::get([['object_id', $cartitem->price->offer->item_id], ['type', 'Ecommerce\Item']]);
64
                    if ($id1c) {
65
                        addToXml($xml, $goods, 'Ид', $id1c->parse_id);
66
                    }
67
                }
68
                addToXml($xml, $goods, 'Наименование', $cartitem->item->name);
69
                $one = addToXml($xml, $goods, 'БазоваяЕдиница', 'шт');
70
                $one->setAttribute("Код", "796");
71
                $one->setAttribute("НаименованиеПолное", "Штука");
72
                $one->setAttribute("МеждународноеСокращение", "PCE");
73
                addToXml($xml, $goods, 'ЦенаЗаЕдиницу', $cartitem->final_price);
74
                addToXml($xml, $goods, 'Количество', $cartitem->count);
75
                addToXml($xml, $goods, 'Сумма', $cartitem->final_price * $cartitem->count);
76
77
                $sum += $cartitem->final_price * $cartitem->count;
78
79
                $reqs = $goods->appendChild($xml->createElement('ЗначенияРеквизитов'));
80
81
                $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
82
                addToXml($xml, $req, 'Наименование', 'ВидНоменклатуры');
83
                addToXml($xml, $req, 'Значение', 'Товар');
84
85
                $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
86
                addToXml($xml, $req, 'Наименование', 'ТипНоменклатуры');
87
                addToXml($xml, $req, 'Значение', 'Товар');
88
            }
89
            foreach ($cart->extras as $extra) {
90
                $goods = $goodss->appendChild($xml->createElement('Товар'));
91
                addToXml($xml, $goods, 'Наименование', $extra->name);
92
                $one = addToXml($xml, $goods, 'БазоваяЕдиница', 'шт');
93
                $one->setAttribute("Код", "796");
94
                $one->setAttribute("НаименованиеПолное", "Штука");
95
                $one->setAttribute("МеждународноеСокращение", "PCE");
96
                addToXml($xml, $goods, 'ЦенаЗаЕдиницу', $extra->price);
97
                addToXml($xml, $goods, 'Количество', $extra->count);
98
                addToXml($xml, $goods, 'Сумма', $extra->price * $extra->count);
99
                $reqs = $goods->appendChild($xml->createElement('ЗначенияРеквизитов'));
100
101
                $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
102
                addToXml($xml, $req, 'Наименование', 'ВидНоменклатуры');
103
                addToXml($xml, $req, 'Значение', 'Товар');
104
105
                $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
106
                addToXml($xml, $req, 'Наименование', 'ТипНоменклатуры');
107
                addToXml($xml, $req, 'Значение', 'Товар');
108
            }
109
            if ($cart->delivery && $cart->delivery->price && $sum < $cart->delivery->max_cart_price) {
110
                $sum += $cart->delivery->price;
111
112
                $goods = $goodss->appendChild($xml->createElement('Товар'));
113
                addToXml($xml, $goods, 'Наименование', 'Доставка');
114
                $one = addToXml($xml, $goods, 'БазоваяЕдиница', 'шт');
115
                $one->setAttribute("Код", "796");
116
                $one->setAttribute("НаименованиеПолное", "Штука");
117
                $one->setAttribute("МеждународноеСокращение", "PCE");
118
                addToXml($xml, $goods, 'ЦенаЗаЕдиницу', $cart->delivery->price);
119
                addToXml($xml, $goods, 'Количество', 1);
120
                addToXml($xml, $goods, 'Сумма', $cart->delivery->price);
121
                $reqs = $goods->appendChild($xml->createElement('ЗначенияРеквизитов'));
122
123
                $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
124
                addToXml($xml, $req, 'Наименование', 'ВидНоменклатуры');
125
                addToXml($xml, $req, 'Значение', 'Услуга');
126
127
                $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
128
                addToXml($xml, $req, 'Наименование', 'ТипНоменклатуры');
129
                addToXml($xml, $req, 'Значение', 'Услуга');
130
            }
131
132
            addToXml($xml, $doc, 'Ид', $cart->id);
133
            addToXml($xml, $doc, 'Номер', $cart->id);
134
            addToXml($xml, $doc, 'Дата', $statusDateTime->format('Y-m-d'));
135
            addToXml($xml, $doc, 'ХозОперация', 'Заказ товара');
136
            addToXml($xml, $doc, 'Роль', 'Продавец');
137
            addToXml($xml, $doc, 'Валюта', 'руб');
138
            addToXml($xml, $doc, 'Курс', '1');
139
            addToXml($xml, $doc, 'Сумма', $sum);
140
141
            $agents = $doc->appendChild($xml->createElement('Контрагенты'));
142
            $agent = $agents->appendChild($xml->createElement('Контрагент'));
143
            $user = $cart->user;
144
            addToXml($xml, $agent, 'Ид', $user->id);
145
            addToXml($xml, $agent, 'ИдРодителя', $user->parent_id);
146
            addToXml($xml, $agent, 'Наименование', $user->name());
147
            addToXml($xml, $agent, 'Роль', $user->role->name);
148
            addToXml($xml, $agent, 'ПолноеНаименование', $user->name());
149
            $reg = $agent->appendChild($xml->createElement('АдресРегистрации'));
150
            addToXml($xml, $reg, 'Представление', '');
151
152
            $presents = $agent->appendChild($xml->createElement('Представители'));
153
            $present = $presents->appendChild($xml->createElement('Представитель'));
154
            $presentAgent = $present->appendChild($xml->createElement('Контрагент'));
155
156
            addToXml($xml, $presentAgent, 'Отношение', 'Контактное лицо');
157
            addToXml($xml, $presentAgent, 'Ид', $user->id);
158
            addToXml($xml, $presentAgent, 'Наименование', $user->name());
159
160
            addToXml($xml, $doc, 'Время', $statusDateTime->format('H:i:s'));
161
            addToXml($xml, $doc, 'Комментарий', $cart->comment);
162
            $doc->appendChild($goodss);
163
164
            $reqs = $doc->appendChild($xml->createElement('ЗначенияРеквизитов'));
165
            $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
166
            addToXml($xml, $req, 'Наименование', 'Метод оплаты');
167
            if ($cart->payType) {
168
                addToXml($xml, $req, 'Значение', $cart->payType->name);
169
            } else {
170
                addToXml($xml, $req, 'Значение', 'Наличный расчет');
171
            }
172
173
            $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
174
            addToXml($xml, $req, 'Наименование', 'Заказ оплачен');
175
            addToXml($xml, $req, 'Значение', ($cart->payed) ? 'true' : 'false');
176
177
            $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
178
            addToXml($xml, $req, 'Наименование', 'Доставка разрешена');
179
            addToXml($xml, $req, 'Значение', $cart->delivery ? 'true' : 'false');
180
181
            $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
182
            addToXml($xml, $req, 'Наименование', 'Отменен');
183
            addToXml($xml, $req, 'Значение', 'false');
184
185
            if (!empty(\App::$primary->exchange1c->config['queryCartFieldGroups'])) {
186
                $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
187
                foreach (\App::$primary->exchange1c->config['queryCartFieldGroups'] as $group) {
188
                    addToXml($xml, $req, 'Наименование', $group['name']);
189
                    $string = '';
190
                    foreach ($group['parts'] as $part) {
191
                        switch ($part['type']) {
192
                            case 'text':
193
                                $string .= $part['text'];
194
                                break;
195
                            case 'field':
196
                                $value = \Ecommerce\Cart\Info::get([
0 ignored issues
show
Bug introduced by
The type Ecommerce\Cart\Info was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
197
                                    ['useradds_field_id', $part['field']],
198
                                    ['cart_id', $cart->id]
199
                                ]);
200
                                $string .= $value->value;
201
                                break;
202
                        }
203
                    }
204
                    addToXml($xml, $req, 'Значение', $string);
205
                }
206
            }
207
            foreach ($cart->infos as $value) {
208
                $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
209
                addToXml($xml, $req, 'Наименование', $value->name);
210
                addToXml($xml, $req, 'Значение', $value->value);
211
            }
212
213
            $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
214
            addToXml($xml, $req, 'Наименование', 'Статус заказа');
215
            addToXml($xml, $req, 'Значение', $cart->status->name);
216
217
            $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
218
            addToXml($xml, $req, 'Наименование', 'Дата изменения статуса');
219
            addToXml($xml, $req, 'Значение', $statusDateTime->format('Y-m-d H:i:s'));
220
221
            $root->appendChild($doc);
222
        }
223
        if (!empty($_GET["version"]) && $root->childNodes->length == 0) {
224
            $root->parentNode->removeChild($root);
225
        }
226
227
        echo $xml->saveXML();
228
229
        $this->end();
230
    }
231
232
}
233