Completed
Push — master ( e76e8a...6b7664 )
by Alexey
05:29
created

Query::process()   D

Complexity

Conditions 19
Paths 98

Size

Total Lines 204
Code Lines 156

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 2 Features 0
Metric Value
dl 0
loc 204
rs 4.764
c 2
b 2
f 0
cc 19
eloc 156
nc 98
nop 0

1 Method

Rating   Name   Duplication   Size   Complexity  
A Query.php ➔ Exchange1c\Mode\addToXml() 0 6 1

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
class Query extends \Exchange1c\Mode
15
{
16
    public function process()
17
    {
18
19
        function addToXml($xml, $parent, $nodeName, $text)
20
        {
21
            $node = $parent->appendChild($xml->createElement($nodeName));
22
            $node->appendChild($xml->createTextNode($text));
23
            return $node;
24
        }
25
26
        header("Content-Type: text/xml");
27
        header("Expires: Thu, 19 Feb 1998 13:24:18 GMT");
28
        header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
29
        header("Cache-Control: no-cache, must-revalidate");
30
        header("Cache-Control: post-check=0,pre-check=0");
31
        header("Cache-Control: max-age=0");
32
        header("Pragma: no-cache");
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
42
        $carts = \Ecommerce\Cart::getList(['where' => ['cart_status_id', empty(\App::$cur->Exchange1c->config['uploadStatusId']) ? '3' : \App::$cur->Exchange1c->config['uploadStatusId'], 'IN']]);
43
        foreach ($carts as $cart) {
44
            $doc = $xml->createElement('Документ');
45
            $statusDateTime = new \DateTime($cart->complete_data);
46
            $items = $cart->cartItems;
47
            if (!$items) {
48
                continue;
49
            }
50
51
            $goodss = $xml->createElement('Товары');
52
            $sum = 0;
53
            foreach ($items as $cartitem) {
54
                $goods = $goodss->appendChild($xml->createElement('Товар'));
55
56
                $id1c = \Migrations\Id::get([['object_id', $cartitem->price->offer->item_id], ['type', 'Ecommerce\Item']]);
57
                if ($id1c) {
58
                    addToXml($xml, $goods, 'Ид', $id1c->parse_id);
59
                }
60
                addToXml($xml, $goods, 'Наименование', $cartitem->item->name);
61
                $one = addToXml($xml, $goods, 'БазоваяЕдиница', 'шт');
62
                $one->setAttribute("Код", "796");
63
                $one->setAttribute("НаименованиеПолное", "Штука");
64
                $one->setAttribute("МеждународноеСокращение", "PCE");
65
                addToXml($xml, $goods, 'ЦенаЗаЕдиницу', $cartitem->final_price);
66
                addToXml($xml, $goods, 'Количество', $cartitem->count);
67
                addToXml($xml, $goods, 'Сумма', $cartitem->final_price * $cartitem->count);
68
69
                $sum += $cartitem->final_price * $cartitem->count;
70
71
                $reqs = $goods->appendChild($xml->createElement('ЗначенияРеквизитов'));
72
73
                $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
74
                addToXml($xml, $req, 'Наименование', 'ВидНоменклатуры');
75
                addToXml($xml, $req, 'Значение', 'Товар');
76
77
                $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
78
                addToXml($xml, $req, 'Наименование', 'ТипНоменклатуры');
79
                addToXml($xml, $req, 'Значение', 'Товар');
80
            }
81
            foreach ($cart->extras as $extra) {
82
                $goods = $goodss->appendChild($xml->createElement('Товар'));
83
                addToXml($xml, $goods, 'Наименование', $extra->name);
84
                $one = addToXml($xml, $goods, 'БазоваяЕдиница', 'шт');
85
                $one->setAttribute("Код", "796");
86
                $one->setAttribute("НаименованиеПолное", "Штука");
87
                $one->setAttribute("МеждународноеСокращение", "PCE");
88
                addToXml($xml, $goods, 'ЦенаЗаЕдиницу', $extra->price);
89
                addToXml($xml, $goods, 'Количество', $extra->count);
90
                addToXml($xml, $goods, 'Сумма', $extra->price * $extra->count);
91
                $reqs = $goods->appendChild($xml->createElement('ЗначенияРеквизитов'));
92
93
                $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
94
                addToXml($xml, $req, 'Наименование', 'ВидНоменклатуры');
95
                addToXml($xml, $req, 'Значение', 'Товар');
96
97
                $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
98
                addToXml($xml, $req, 'Наименование', 'ТипНоменклатуры');
99
                addToXml($xml, $req, 'Значение', 'Товар');
100
            }
101
            if ($cart->delivery && $cart->delivery->price && $sum < $cart->delivery->max_cart_price) {
102
                $sum += $cart->delivery->price;
103
104
                $goods = $goodss->appendChild($xml->createElement('Товар'));
105
                addToXml($xml, $goods, 'Наименование', 'Доставка');
106
                $one = addToXml($xml, $goods, 'БазоваяЕдиница', 'шт');
107
                $one->setAttribute("Код", "796");
108
                $one->setAttribute("НаименованиеПолное", "Штука");
109
                $one->setAttribute("МеждународноеСокращение", "PCE");
110
                addToXml($xml, $goods, 'ЦенаЗаЕдиницу', $cart->delivery->price);
111
                addToXml($xml, $goods, 'Количество', 1);
112
                addToXml($xml, $goods, 'Сумма', $cart->delivery->price);
113
                $reqs = $goods->appendChild($xml->createElement('ЗначенияРеквизитов'));
114
115
                $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
116
                addToXml($xml, $req, 'Наименование', 'ВидНоменклатуры');
117
                addToXml($xml, $req, 'Значение', 'Услуга');
118
119
                $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
120
                addToXml($xml, $req, 'Наименование', 'ТипНоменклатуры');
121
                addToXml($xml, $req, 'Значение', 'Услуга');
122
            }
123
124
            addToXml($xml, $doc, 'Ид', $cart->id);
125
            addToXml($xml, $doc, 'Номер', $cart->id);
126
            addToXml($xml, $doc, 'Дата', $statusDateTime->format('Y-m-d'));
127
            addToXml($xml, $doc, 'ХозОперация', 'Заказ товара');
128
            addToXml($xml, $doc, 'Роль', 'Продавец');
129
            addToXml($xml, $doc, 'Валюта', 'руб');
130
            addToXml($xml, $doc, 'Курс', '1');
131
            addToXml($xml, $doc, 'Сумма', $sum);
132
133
            $agents = $doc->appendChild($xml->createElement('Контрагенты'));
134
            $agent = $agents->appendChild($xml->createElement('Контрагент'));
135
            $user = $cart->user;
136
            addToXml($xml, $agent, 'Ид', $user->id);
137
            addToXml($xml, $agent, 'ИдРодителя', $user->parent_id);
138
            addToXml($xml, $agent, 'Наименование', $user->name());
139
            addToXml($xml, $agent, 'Роль', $user->role->name);
140
            addToXml($xml, $agent, 'ПолноеНаименование', $user->name());
141
            $reg = $agent->appendChild($xml->createElement('АдресРегистрации'));
142
            addToXml($xml, $reg, 'Представление', '');
143
144
            $presents = $agent->appendChild($xml->createElement('Представители'));
145
            $present = $presents->appendChild($xml->createElement('Представитель'));
146
            $presentAgent = $present->appendChild($xml->createElement('Контрагент'));
147
148
            addToXml($xml, $presentAgent, 'Отношение', 'Контактное лицо');
149
            addToXml($xml, $presentAgent, 'Ид', $user->id);
150
            addToXml($xml, $presentAgent, 'Наименование', $user->name());
151
152
            addToXml($xml, $doc, 'Время', $statusDateTime->format('H:i:s'));
153
            addToXml($xml, $doc, 'Комментарий', $cart->comment);
154
            $goodss = $doc->appendChild($goodss);
0 ignored issues
show
Unused Code introduced by
$goodss is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
155
156
            $reqs = $doc->appendChild($xml->createElement('ЗначенияРеквизитов'));
157
            $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
158
            addToXml($xml, $req, 'Наименование', 'Метод оплаты');
159
            if ($cart->payType) {
160
                addToXml($xml, $req, 'Значение', $cart->payType->name);
161
            } else {
162
                addToXml($xml, $req, 'Значение', 'Наличный расчет');
163
            }
164
165
            $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
166
            addToXml($xml, $req, 'Наименование', 'Заказ оплачен');
167
            addToXml($xml, $req, 'Значение', ($cart->payed) ? 'true' : 'false');
168
169
            $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
170
            addToXml($xml, $req, 'Наименование', 'Доставка разрешена');
171
            addToXml($xml, $req, 'Значение', $cart->delivery ? 'true' : 'false');
172
173
            $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
174
            addToXml($xml, $req, 'Наименование', 'Отменен');
175
            addToXml($xml, $req, 'Значение', 'false');
176
177
            if (!empty(\App::$primary->exchange1c->config['queryCartFieldGroups'])) {
178
                $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
179
                foreach (\App::$primary->exchange1c->config['queryCartFieldGroups'] as $group) {
180
                    addToXml($xml, $req, 'Наименование', $group['name']);
181
                    $string = '';
182
                    foreach ($group['parts'] as $part) {
183
                        switch ($part['type']) {
184
                            case 'text':
185
                                $string .= $part['text'];
186
                                break;
187
                            case 'field':
188
                                $value = \Ecommerce\Cart\Info::get([
189
                                            ['useradds_field_id', $part['field']],
190
                                            ['cart_id', $cart->id]
191
                                ]);
192
                                $string .= $value->value;
193
                                break;
194
                        }
195
                    }
196
                    addToXml($xml, $req, 'Значение', $string);
197
                }
198
            }
199
            foreach ($cart->infos as $value) {
200
                $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
201
                addToXml($xml, $req, 'Наименование', $value->name);
202
                addToXml($xml, $req, 'Значение', $value->value);
203
            }
204
205
            $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
206
            addToXml($xml, $req, 'Наименование', 'Статус заказа');
207
            addToXml($xml, $req, 'Значение', $cart->status->name);
208
209
            $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
210
            addToXml($xml, $req, 'Наименование', 'Дата изменения статуса');
211
            addToXml($xml, $req, 'Значение', $statusDateTime->format('Y-m-d H:i:s'));
212
213
            $doc = $root->appendChild($doc);
0 ignored issues
show
Unused Code introduced by
$doc is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
214
        }
215
216
        echo $xml->saveXML();
217
218
        $this->end();
219
    }
220
221
}
222