Test Failed
Push — master ( 055a70...a957de )
by Alexey
05:06
created

Query   A

Complexity

Total Complexity 24

Size/Duplication

Total Lines 214
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 5

Importance

Changes 2
Bugs 2 Features 0
Metric Value
dl 0
loc 214
rs 10
c 2
b 2
f 0
wmc 24
lcom 0
cbo 5

2 Methods

Rating   Name   Duplication   Size   Complexity  
A hp ➔ addToXml() 0 5 1
F process() 0 210 24
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
        if (!empty($_GET["version"])) {
42
            $root = $root->appendChild($xml->createElement('Контейнер'));
43
        }
44
        $carts = \Ecommerce\Cart::getList(['where' => ['cart_status_id', empty(\App::$cur->Exchange1c->config['uploadStatusId']) ? '3' : \App::$cur->Exchange1c->config['uploadStatusId'], 'IN']]);
45
        foreach ($carts as $cart) {
46
            if (!empty($_SESSION['uploadedCarts'][$cart->id])) {
47
                continue;
48
            }
49
            $_SESSION['uploadedCarts'][$cart->id] = true;
50
            $doc = $xml->createElement('Документ');
51
            $statusDateTime = new \DateTime($cart->complete_data);
52
            $items = $cart->cartItems;
53
            if (!$items) {
54
                continue;
55
            }
56
57
            $goodss = $xml->createElement('Товары');
58
            $sum = 0;
59
            foreach ($items as $cartitem) {
60
                $goods = $goodss->appendChild($xml->createElement('Товар'));
61
                if ($cartitem->price && $cartitem->price->offer && $cartitem->price->offer->item_id) {
62
                    $id1c = \Migrations\Id::get([['object_id', $cartitem->price->offer->item_id], ['type', 'Ecommerce\Item']]);
63
                    if ($id1c) {
64
                        addToXml($xml, $goods, 'Ид', $id1c->parse_id);
65
                    }
66
                }
67
                addToXml($xml, $goods, 'Наименование', $cartitem->item->name);
68
                $one = addToXml($xml, $goods, 'БазоваяЕдиница', 'шт');
69
                $one->setAttribute("Код", "796");
70
                $one->setAttribute("НаименованиеПолное", "Штука");
71
                $one->setAttribute("МеждународноеСокращение", "PCE");
72
                addToXml($xml, $goods, 'ЦенаЗаЕдиницу', $cartitem->final_price);
73
                addToXml($xml, $goods, 'Количество', $cartitem->count);
74
                addToXml($xml, $goods, 'Сумма', $cartitem->final_price * $cartitem->count);
75
76
                $sum += $cartitem->final_price * $cartitem->count;
77
78
                $reqs = $goods->appendChild($xml->createElement('ЗначенияРеквизитов'));
79
80
                $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
81
                addToXml($xml, $req, 'Наименование', 'ВидНоменклатуры');
82
                addToXml($xml, $req, 'Значение', 'Товар');
83
84
                $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
85
                addToXml($xml, $req, 'Наименование', 'ТипНоменклатуры');
86
                addToXml($xml, $req, 'Значение', 'Товар');
87
            }
88
            foreach ($cart->extras as $extra) {
89
                $goods = $goodss->appendChild($xml->createElement('Товар'));
90
                addToXml($xml, $goods, 'Наименование', $extra->name);
91
                $one = addToXml($xml, $goods, 'БазоваяЕдиница', 'шт');
92
                $one->setAttribute("Код", "796");
93
                $one->setAttribute("НаименованиеПолное", "Штука");
94
                $one->setAttribute("МеждународноеСокращение", "PCE");
95
                addToXml($xml, $goods, 'ЦенаЗаЕдиницу', $extra->price);
96
                addToXml($xml, $goods, 'Количество', $extra->count);
97
                addToXml($xml, $goods, 'Сумма', $extra->price * $extra->count);
98
                $reqs = $goods->appendChild($xml->createElement('ЗначенияРеквизитов'));
99
100
                $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
101
                addToXml($xml, $req, 'Наименование', 'ВидНоменклатуры');
102
                addToXml($xml, $req, 'Значение', 'Товар');
103
104
                $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
105
                addToXml($xml, $req, 'Наименование', 'ТипНоменклатуры');
106
                addToXml($xml, $req, 'Значение', 'Товар');
107
            }
108
            if ($cart->delivery && $cart->delivery->price && $sum < $cart->delivery->max_cart_price) {
109
                $sum += $cart->delivery->price;
110
111
                $goods = $goodss->appendChild($xml->createElement('Товар'));
112
                addToXml($xml, $goods, 'Наименование', 'Доставка');
113
                $one = addToXml($xml, $goods, 'БазоваяЕдиница', 'шт');
114
                $one->setAttribute("Код", "796");
115
                $one->setAttribute("НаименованиеПолное", "Штука");
116
                $one->setAttribute("МеждународноеСокращение", "PCE");
117
                addToXml($xml, $goods, 'ЦенаЗаЕдиницу', $cart->delivery->price);
118
                addToXml($xml, $goods, 'Количество', 1);
119
                addToXml($xml, $goods, 'Сумма', $cart->delivery->price);
120
                $reqs = $goods->appendChild($xml->createElement('ЗначенияРеквизитов'));
121
122
                $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
123
                addToXml($xml, $req, 'Наименование', 'ВидНоменклатуры');
124
                addToXml($xml, $req, 'Значение', 'Услуга');
125
126
                $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
127
                addToXml($xml, $req, 'Наименование', 'ТипНоменклатуры');
128
                addToXml($xml, $req, 'Значение', 'Услуга');
129
            }
130
131
            addToXml($xml, $doc, 'Ид', $cart->id);
132
            addToXml($xml, $doc, 'Номер', $cart->id);
133
            addToXml($xml, $doc, 'Дата', $statusDateTime->format('Y-m-d'));
134
            addToXml($xml, $doc, 'ХозОперация', 'Заказ товара');
135
            addToXml($xml, $doc, 'Роль', 'Продавец');
136
            addToXml($xml, $doc, 'Валюта', 'руб');
137
            addToXml($xml, $doc, 'Курс', '1');
138
            addToXml($xml, $doc, 'Сумма', $sum);
139
140
            $agents = $doc->appendChild($xml->createElement('Контрагенты'));
141
            $agent = $agents->appendChild($xml->createElement('Контрагент'));
142
            $user = $cart->user;
143
            addToXml($xml, $agent, 'Ид', $user->id);
144
            addToXml($xml, $agent, 'ИдРодителя', $user->parent_id);
145
            addToXml($xml, $agent, 'Наименование', $user->name());
146
            addToXml($xml, $agent, 'Роль', $user->role->name);
147
            addToXml($xml, $agent, 'ПолноеНаименование', $user->name());
148
            $reg = $agent->appendChild($xml->createElement('АдресРегистрации'));
149
            addToXml($xml, $reg, 'Представление', '');
150
151
            $presents = $agent->appendChild($xml->createElement('Представители'));
152
            $present = $presents->appendChild($xml->createElement('Представитель'));
153
            $presentAgent = $present->appendChild($xml->createElement('Контрагент'));
154
155
            addToXml($xml, $presentAgent, 'Отношение', 'Контактное лицо');
156
            addToXml($xml, $presentAgent, 'Ид', $user->id);
157
            addToXml($xml, $presentAgent, 'Наименование', $user->name());
158
159
            addToXml($xml, $doc, 'Время', $statusDateTime->format('H:i:s'));
160
            addToXml($xml, $doc, 'Комментарий', $cart->comment);
161
            $doc->appendChild($goodss);
162
163
            $reqs = $doc->appendChild($xml->createElement('ЗначенияРеквизитов'));
164
            $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
165
            addToXml($xml, $req, 'Наименование', 'Метод оплаты');
166
            if ($cart->payType) {
167
                addToXml($xml, $req, 'Значение', $cart->payType->name);
168
            } else {
169
                addToXml($xml, $req, 'Значение', 'Наличный расчет');
170
            }
171
172
            $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
173
            addToXml($xml, $req, 'Наименование', 'Заказ оплачен');
174
            addToXml($xml, $req, 'Значение', ($cart->payed) ? 'true' : 'false');
175
176
            $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
177
            addToXml($xml, $req, 'Наименование', 'Доставка разрешена');
178
            addToXml($xml, $req, 'Значение', $cart->delivery ? 'true' : 'false');
179
180
            $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
181
            addToXml($xml, $req, 'Наименование', 'Отменен');
182
            addToXml($xml, $req, 'Значение', 'false');
183
184
            if (!empty(\App::$primary->exchange1c->config['queryCartFieldGroups'])) {
185
                $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
186
                foreach (\App::$primary->exchange1c->config['queryCartFieldGroups'] as $group) {
187
                    addToXml($xml, $req, 'Наименование', $group['name']);
188
                    $string = '';
189
                    foreach ($group['parts'] as $part) {
190
                        switch ($part['type']) {
191
                            case 'text':
192
                                $string .= $part['text'];
193
                                break;
194
                            case 'field':
195
                                $value = \Ecommerce\Cart\Info::get([
196
                                    ['useradds_field_id', $part['field']],
197
                                    ['cart_id', $cart->id]
198
                                ]);
199
                                $string .= $value->value;
200
                                break;
201
                        }
202
                    }
203
                    addToXml($xml, $req, 'Значение', $string);
204
                }
205
            }
206
            foreach ($cart->infos as $value) {
207
                $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
208
                addToXml($xml, $req, 'Наименование', $value->name);
209
                addToXml($xml, $req, 'Значение', $value->value);
210
            }
211
212
            $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
213
            addToXml($xml, $req, 'Наименование', 'Статус заказа');
214
            addToXml($xml, $req, 'Значение', $cart->status->name);
215
216
            $req = $reqs->appendChild($xml->createElement('ЗначениеРеквизита'));
217
            addToXml($xml, $req, 'Наименование', 'Дата изменения статуса');
218
            addToXml($xml, $req, 'Значение', $statusDateTime->format('Y-m-d H:i:s'));
219
220
            $root->appendChild($doc);
221
        }
222
223
        echo $xml->saveXML();
224
225
        $this->end();
226
    }
227
228
}
229