Unsorted   A
last analyzed

Complexity

Total Complexity 28

Size/Duplication

Total Lines 278
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 2

Test Coverage

Coverage 91.14%

Importance

Changes 0
Metric Value
wmc 28
lcom 2
cbo 2
dl 0
loc 278
ccs 72
cts 79
cp 0.9114
rs 10
c 0
b 0
f 0

11 Methods

Rating   Name   Duplication   Size   Complexity  
A apiList() 0 6 2
A apiGetAllSummary() 0 6 2
A apiAccept() 0 29 5
A apiDecline() 0 25 4
A apiAdd() 0 27 5
A apiAddSip() 0 4 1
A apiAddMail() 0 4 1
A apiAddForms() 0 4 1
A addData() 0 18 5
A addDataLead() 0 4 1
A addDataContact() 0 4 1
1
<?php
2
3
namespace AmoCRM\Models;
4
5
use AmoCRM\Models\Traits\SetDateCreate;
6
7
/**
8
 * Class Unsorted
9
 *
10
 * Класс модель для работы со Списком неразобранных заявок
11
 *
12
 * @package AmoCRM\Models
13
 * @author dotzero <[email protected]>
14
 * @link http://www.dotzero.ru/
15
 * @link https://github.com/dotzero/amocrm-php
16
 *
17
 * For the full copyright and license information, please view the LICENSE
18
 * file that was distributed with this source code.
19
 */
20
class Unsorted extends AbstractModel
21
{
22
    use SetDateCreate;
23
24
    /**
25
     * @var bool Использовать устаревшую схему авторизации
26
     */
27
    protected $v1 = true;
28
29
    /**
30
     * @var array Список доступный полей для модели (исключая кастомные поля)
31
     */
32
    protected $fields = [
33
        'source',
34
        'source_uid',
35
        'source_data',
36
        'date_create',
37
        'pipeline_id',
38
        'data',
39
    ];
40
41
    /**
42
     * @const string Источник заявки - sip
43
     */
44
    const TYPE_SIP = 'sip';
45
46
    /**
47
     * @const string Источник заявки - почта
48
     */
49
    const TYPE_MAIL = 'mail';
50
51
    /**
52
     * @const string Источник заявки - web-формы
53
     */
54
    const TYPE_FORMS = 'forms';
55
56
    /**
57
     * Список неразобранных заявок
58
     *
59
     * Метод для получения списка неразобранных заявок с возможностью фильтрации и постраничной выборки.
60
     * Ограничение по возвращаемым на одной странице (offset) данным - 500 заявок.
61
     *
62
     * @link https://developers.amocrm.ru/rest_api/unsorted/list.php
63
     * @param array $parameters Массив параметров к amoCRM API
64
     * @return array Ответ amoCRM API
65
     */
66 1
    public function apiList($parameters = [])
67
    {
68 1
        $response = $this->getRequest('/api/unsorted/list/', $parameters);
69
70 1
        return isset($response['unsorted']) ? $response['unsorted'] : [];
71
    }
72
73
    /**
74
     * Агрегирование неразобранных заявок
75
     *
76
     * Метод для получения агрегированной информации о неразобранных заявках.
77
     *
78
     * @link https://developers.amocrm.ru/rest_api/unsorted/get_all_summary.php
79
     * @return array Ответ amoCRM API
80
     */
81 1
    public function apiGetAllSummary()
82
    {
83 1
        $response = $this->getRequest('/api/unsorted/get_all_summary/');
84
85 1
        return isset($response['category']) ? $response : [];
86
    }
87
88
    /**
89
     * Принятие неразобранных заявок
90
     *
91
     * Метод для принятия неразобранных заявок.
92
     *
93
     * @link https://developers.amocrm.ru/rest_api/unsorted/accept.php
94
     * @param string|array $uids
95
     * @param string|int $user_id
96
     * @param null|int $status_id
97
     * @return array Ответ amoCRM API
98
     * @throws \AmoCRM\Exception
99
     */
100 1
    public function apiAccept($uids, $user_id, $status_id = null)
101
    {
102 1
        $this->checkId($user_id);
103
104 1
        if (!is_array($uids)) {
105 1
            $uids = [$uids];
106 1
        }
107
108
        $parameters = [
109
            'unsorted' => [
110 1
                'accept' => $uids,
111 1
                'user_id' => $user_id,
112 1
            ],
113 1
        ];
114
115 1
        if ($status_id !== null) {
116 1
            $parameters['unsorted']['status_id'] = $status_id;
117 1
        }
118
119 1
        $response = $this->postRequest('/api/unsorted/accept/', $parameters);
120
121 1
        if (isset($response['unsorted']['accept']['data'])) {
122
            $result = array_keys($response['unsorted']['accept']['data']);
123
        } else {
124 1
            return [];
125
        }
126
127
        return count($uids) == 1 ? array_shift($result) : $result;
128
    }
129
130
    /**
131
     * Отклонение неразобранных заявок
132
     *
133
     * Метод для отклонения неразобранных заявок.
134
     *
135
     * @link https://developers.amocrm.ru/rest_api/unsorted/decline.php
136
     * @param string|array $uids
137
     * @param string|int $user_id
138
     * @return array Ответ amoCRM API
139
     * @throws \AmoCRM\Exception
140
     */
141 1
    public function apiDecline($uids, $user_id)
142
    {
143 1
        $this->checkId($user_id);
144
145 1
        if (!is_array($uids)) {
146 1
            $uids = [$uids];
147 1
        }
148
149
        $parameters = [
150
            'unsorted' => [
151 1
                'decline' => $uids,
152 1
                'user_id' => $user_id,
153 1
            ],
154 1
        ];
155
156 1
        $response = $this->postRequest('/api/unsorted/decline/', $parameters);
157
158 1
        if (isset($response['unsorted']['decline']['data'])) {
159
            $result = array_keys($response['unsorted']['decline']['data']);
160
        } else {
161 1
            return [];
162
        }
163
164
        return count($uids) == 1 ? array_shift($result) : $result;
165
    }
166
167
    /**
168
     * Добавление неразобранных заявок
169
     *
170
     * Метод позволяет добавлять неразобранные заявки по одной или пакетно
171
     *
172
     * @link https://developers.amocrm.ru/rest_api/unsorted/add.php
173
     * @param string $type Название источника заявки
174
     * @param array $values Массив неразобранных заявок для пакетного добавления
175
     * @return int|array Уникальный идентификатор заявки или массив при пакетном добавлении
176
     */
177 4
    public function apiAdd($type, $values = [])
178
    {
179 4
        if (empty($values)) {
180 4
            $values = [$this];
181 4
        }
182
183
        $parameters = [
184
            'unsorted' => [
185 4
                'category' => $type,
186 4
                'add' => [],
187 4
            ],
188 4
        ];
189
190 4
        foreach ($values AS $value) {
191 4
            $parameters['unsorted']['add'][] = $value->getValues();
192 4
        }
193
194 4
        $response = $this->postRequest('/api/unsorted/add/', $parameters);
195
196 4
        if (isset($response['unsorted']['add']['data'])) {
197 4
            $result = $response['unsorted']['add']['data'];
198 4
        } else {
199
            return [];
200
        }
201
202 4
        return count($values) == 1 ? array_shift($result) : $result;
203
    }
204
205
    /**
206
     * Добавление неразобранных заявок с типом SIP
207
     *
208
     * Метод позволяет добавлять неразобранные заявки по одной или пакетно
209
     *
210
     * @link https://developers.amocrm.ru/rest_api/unsorted/add.php
211
     * @param array $sip Массив неразобранных заявок для пакетного добавления
212
     * @return int|array Уникальный идентификатор заявки или массив при пакетном добавлении
213
     */
214 1
    public function apiAddSip($sip = [])
215
    {
216 1
        return $this->apiAdd(self::TYPE_SIP, $sip);
217
    }
218
219
    /**
220
     * Добавление неразобранных заявок с типом MAIL
221
     *
222
     * Метод позволяет добавлять неразобранные заявки по одной или пакетно
223
     *
224
     * @link https://developers.amocrm.ru/rest_api/unsorted/add.php
225
     * @param array $mails Массив неразобранных заявок для пакетного добавления
226
     * @return int|array Уникальный идентификатор заявки или массив при пакетном добавлении
227
     */
228 1
    public function apiAddMail($mails = [])
229
    {
230 1
        return $this->apiAdd(self::TYPE_MAIL, $mails);
231
    }
232
233
    /**
234
     * Добавление неразобранных заявок с типом FORMS
235
     *
236
     * Метод позволяет добавлять неразобранные заявки по одной или пакетно
237
     *
238
     * @link https://developers.amocrm.ru/rest_api/unsorted/add.php
239
     * @param array $forms Массив неразобранных заявок для пакетного добавления
240
     * @return int|array Уникальный идентификатор заявки или массив при пакетном добавлении
241
     */
242 1
    public function apiAddForms($forms = [])
243
    {
244 1
        return $this->apiAdd(self::TYPE_FORMS, $forms);
245
    }
246
247
    /**
248
     * Добавление сущности которая будет создана после одобрения заявки.
249
     *
250
     * @link https://developers.amocrm.ru/rest_api/unsorted/add.php
251
     * @param string $type Тип сущности
252
     * @param mixed $values Объект или массив сущностей
253
     * @return $this
254
     */
255 2
    public function addData($type, $values)
256
    {
257 2
        if (!isset($this->values['data'][$type])) {
258 2
            $this->values['data'][$type] = [];
259 2
        }
260
261 2
        if (!is_array($values)) {
262 2
            $values = [$values];
263 2
        }
264
265 2
        foreach ($values as $value) {
266 2
            if ($value instanceof AbstractModel) {
267 2
                $this->values['data'][$type][] = $value->getValues();
268 2
            }
269 2
        }
270
271 2
        return $this;
272
    }
273
274
    /**
275
     * Добавление сделки которая будет создана после одобрения заявки.
276
     *
277
     * @link https://developers.amocrm.ru/rest_api/unsorted/add.php
278
     * @param mixed $values Сделка или массив сделок
279
     * @return $this
280
     */
281 1
    public function addDataLead($values)
282
    {
283 1
        return $this->addData('leads', $values);
284
    }
285
286
    /**
287
     * Добавление контакта или компании которая будет создана после одобрения заявки.
288
     *
289
     * @link https://developers.amocrm.ru/rest_api/unsorted/add.php
290
     * @param mixed $values Контакт или массив контактов
291
     * @return $this
292
     */
293 1
    public function addDataContact($values)
294
    {
295 1
        return $this->addData('contacts', $values);
296
    }
297
}
298