Completed
Push — master ( 6a8aa6...5393ba )
by dotzero
03:56
created

Unsorted::addDataLead()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 4
ccs 0
cts 4
cp 0
rs 10
cc 1
eloc 2
nc 1
nop 1
crap 2
1
<?php
2
3
namespace AmoCRM\Models;
4
5
/**
6
 * Class Unsorted
7
 *
8
 * Класс модель для работы со Списоком неразобранных заявок
9
 *
10
 * @package AmoCRM\Models
11
 * @author dotzero <[email protected]>
12
 * @link http://www.dotzero.ru/
13
 * @link https://github.com/dotzero/amocrm-php
14
 *
15
 * For the full copyright and license information, please view the LICENSE
16
 * file that was distributed with this source code.
17
 */
18
class Unsorted extends Base
19
{
20
    /**
21
     * @var bool Использовать устаревшую схему авторизации
22
     */
23
    protected $v1 = true;
24
25
    /**
26
     * @var array Список доступный полей для модели (исключая кастомные поля)
27
     */
28
    protected $fields = [
29
        'source',
30
        'source_uid',
31
        'source_data',
32
        'date_create',
33
        'data',
34
    ];
35
36
    /**
37
     * @const string Источник заявки - sip
38
     */
39
    const TYPE_SIP = 'sip';
40
41
    /**
42
     * @const string Источник заявки - почта
43
     */
44
    const TYPE_MAIL = 'mail';
45
46
    /**
47
     * @const string Источник заявки - web-формы
48
     */
49
    const TYPE_FORMS = 'forms';
50
51
    /**
52
     * Список неразобранных заявок
53
     *
54
     * Метод для получения списка неразобранных заявок с возможностью фильтрации и постраничной выборки.
55
     * Ограничение по возвращаемым на одной странице (offset) данным - 500 заявок.
56
     *
57
     * @link https://developers.amocrm.ru/rest_api/unsorted/list.php
58
     * @param array $parameters Массив параметров к amoCRM API
59
     * @return array Ответ amoCRM API
60
     */
61
    public function apiList($parameters = [])
62
    {
63
        $response = $this->getRequest('/api/unsorted/list', $parameters);
64
65
        return isset($response['unsorted']) ? $response['unsorted'] : [];
66
    }
67
68
    /**
69
     * Аггрегирование неразобранных заявок
70
     *
71
     * Метод для получения аггрегированной информации о неразобранных заявках.
72
     *
73
     * @link https://developers.amocrm.ru/rest_api/unsorted/get_all_summary.php
74
     * @return array Ответ amoCRM API
75
     */
76
    public function apiGetAllSummary()
77
    {
78
        $response = $this->getRequest('/api/unsorted/get_all_summary/');
79
80
        return isset($response['category']) ? $response : [];
81
    }
82
83
    /**
84
     * Принятие неразобранных заявок
85
     *
86
     * Метод для принятия неразобранных заявок.
87
     *
88
     * @link https://developers.amocrm.ru/rest_api/unsorted/accept.php
89
     * @param string|array $uids
90
     * @param string|int $user_id
91
     * @param null|int $status_id
92
     * @return array Ответ amoCRM API
93
     * @throws \AmoCRM\Exception
94
     */
95
    public function apiAccept($uids, $user_id, $status_id = null)
96
    {
97
        $this->checkId($user_id);
98
99
        if (!is_array($uids)) {
100
            $uids = [$uids];
101
        }
102
103
        $parameters = [
104
            'unsorted' => [
105
                'accept' => $uids,
106
                'user_id' => $user_id,
107
            ],
108
        ];
109
110
        if ($status_id) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $status_id of type null|integer is loosely compared to true; this is ambiguous if the integer can be zero. You might want to explicitly use !== null instead.

In PHP, under loose comparison (like ==, or !=, or switch conditions), values of different types might be equal.

For integer values, zero is a special case, in particular the following results might be unexpected:

0   == false // true
0   == null  // true
123 == false // false
123 == null  // false

// It is often better to use strict comparison
0 === false // false
0 === null  // false
Loading history...
111
            $parameters['unsorted']['status_id'] = $status_id;
112
        }
113
114
        $response = $this->postRequest('/api/unsorted/accept/', $parameters);
115
116
        if (isset($response['unsorted']['accept']['data'])) {
117
            $result = array_keys($response['unsorted']['accept']['data']);
118
        } else {
119
            return [];
120
        }
121
122
        return count($uids) == 1 ? array_shift($result) : $result;
123
    }
124
125
    /**
126
     * Отклонение неразобранных заявок
127
     *
128
     * Метод для отклонения неразобранных заявок.
129
     *
130
     * @link https://developers.amocrm.ru/rest_api/unsorted/decline.php
131
     * @param string|array $uids
132
     * @param string|int $user_id
133
     * @return array Ответ amoCRM API
134
     * @throws \AmoCRM\Exception
135
     */
136
    public function apiDecline($uids, $user_id)
137
    {
138
        $this->checkId($user_id);
139
140
        if (!is_array($uids)) {
141
            $uids = [$uids];
142
        }
143
144
        $parameters = [
145
            'unsorted' => [
146
                'decline' => $uids,
147
                'user_id' => $user_id,
148
            ],
149
        ];
150
151
        $response = $this->postRequest('/api/unsorted/decline/', $parameters);
152
        print_r($response);
153
        if (isset($response['unsorted']['decline']['data'])) {
154
            $result = array_keys($response['unsorted']['decline']['data']);
155
        } else {
156
            return [];
157
        }
158
159
        return count($uids) == 1 ? array_shift($result) : $result;
160
    }
161
162
    /**
163
     * Добавление неразобранных заявок
164
     *
165
     * Метод позволяет добавлять неразобранные заявки по одной или пакетно
166
     *
167
     * @link https://developers.amocrm.ru/rest_api/unsorted/add.php
168
     * @param string $type Название источника заявки
169
     * @param array $values Массив неразобранных заявок для пакетного добавления
170
     * @return int|array Уникальный идентификатор заявки или массив при пакетном добавлении
171
     */
172
    public function apiAdd($type, $values)
173
    {
174
        if (empty($values)) {
175
            $values = [$this];
176
        }
177
178
        $parameters = [
179
            'unsorted' => [
180
                'category' => $type,
181
                'add' => [],
182
            ],
183
        ];
184
185
        foreach ($values AS $value) {
186
            $parameters['unsorted']['add'][] = $value->getValues();
187
        }
188
189
        $response = $this->postRequest('/api/unsorted/add/', $parameters);
190
191
        if (isset($response['unsorted']['add']['data'])) {
192
            $result = $response['unsorted']['add']['data'];
193
        } else {
194
            return [];
195
        }
196
197
        return count($values) == 1 ? array_shift($result) : $result;
198
    }
199
200
    /**
201
     * Добавление неразобранных заявок с типом SIP
202
     *
203
     * Метод позволяет добавлять неразобранные заявки по одной или пакетно
204
     *
205
     * @link https://developers.amocrm.ru/rest_api/unsorted/add.php
206
     * @param array $sip Массив неразобранных заявок для пакетного добавления
207
     * @return int|array Уникальный идентификатор заявки или массив при пакетном добавлении
208
     */
209
    public function apiAddSip($sip = [])
210
    {
211
        return $this->apiAdd(self::TYPE_SIP, $sip);
212
    }
213
214
    /**
215
     * Добавление неразобранных заявок с типом MAIL
216
     *
217
     * Метод позволяет добавлять неразобранные заявки по одной или пакетно
218
     *
219
     * @link https://developers.amocrm.ru/rest_api/unsorted/add.php
220
     * @param array $mails Массив неразобранных заявок для пакетного добавления
221
     * @return int|array Уникальный идентификатор заявки или массив при пакетном добавлении
222
     */
223
    public function apiAddMail($mails = [])
224
    {
225
        return $this->apiAdd(self::TYPE_MAIL, $mails);
226
    }
227
228
    /**
229
     * Добавление неразобранных заявок с типом FORMS
230
     *
231
     * Метод позволяет добавлять неразобранные заявки по одной или пакетно
232
     *
233
     * @link https://developers.amocrm.ru/rest_api/unsorted/add.php
234
     * @param array $forms Массив неразобранных заявок для пакетного добавления
235
     * @return int|array Уникальный идентификатор заявки или массив при пакетном добавлении
236
     */
237
    public function apiAddForms($forms = [])
238
    {
239
        return $this->apiAdd(self::TYPE_FORMS, $forms);
240
    }
241
242
    /**
243
     * Добавление сущности которая будет создана после одобрения заявки.
244
     *
245
     * @link https://developers.amocrm.ru/rest_api/unsorted/add.php
246
     * @param string $type Тип сущности
247
     * @param mixed $values Объект или массив сущностей
248
     * @return $this
249
     */
250
    public function addData($type, $values)
251
    {
252
        if (!isset($this->values['data'][$type])) {
253
            $this->values['data'][$type] = [];
254
        }
255
256
        if (!is_array($values)) {
257
            $values = [$values];
258
        }
259
260
        foreach ($values as $value) {
261
            if ($value instanceof Base) {
262
                $this->values['data'][$type][] = $value->getValues();
263
            }
264
        }
265
266
        return $this;
267
    }
268
269
    /**
270
     * Добавление сделки которая будет создана после одобрения заявки.
271
     *
272
     * @link https://developers.amocrm.ru/rest_api/unsorted/add.php
273
     * @param mixed $values Сделка или массив сделок
274
     * @return $this
275
     */
276
    public function addDataLead($values)
277
    {
278
        return $this->addData('leads', $values);
279
    }
280
281
    /**
282
     * Добавление контакта или компании которая будет создана после одобрения заявки.
283
     *
284
     * @link https://developers.amocrm.ru/rest_api/unsorted/add.php
285
     * @param mixed $values Контакт или массив контактов
286
     * @return $this
287
     */
288
    public function addDataContact($values)
289
    {
290
        return $this->addData('contacts', $values);
291
    }
292
}