Completed
Push — master ( 5393ba...e34da3 )
by dotzero
03:18
created

Unsorted::setDateCreate()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 6
ccs 3
cts 3
cp 1
rs 9.4285
cc 1
eloc 3
nc 1
nop 1
crap 1
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
     * @param string $date Дата в произвольном формате
55
     * @return $this
56
     */
57 1
    public function setDateCreate($date)
58
    {
59 1
        $this->values['date_create'] = strtotime($date);
60
61 1
        return $this;
62
    }
63
64
    /**
65
     * Список неразобранных заявок
66
     *
67
     * Метод для получения списка неразобранных заявок с возможностью фильтрации и постраничной выборки.
68
     * Ограничение по возвращаемым на одной странице (offset) данным - 500 заявок.
69
     *
70
     * @link https://developers.amocrm.ru/rest_api/unsorted/list.php
71
     * @param array $parameters Массив параметров к amoCRM API
72
     * @return array Ответ amoCRM API
73
     */
74 1
    public function apiList($parameters = [])
75
    {
76 1
        $response = $this->getRequest('/api/unsorted/list/', $parameters);
77
78 1
        return isset($response['unsorted']) ? $response['unsorted'] : [];
79
    }
80
81
    /**
82
     * Аггрегирование неразобранных заявок
83
     *
84
     * Метод для получения аггрегированной информации о неразобранных заявках.
85
     *
86
     * @link https://developers.amocrm.ru/rest_api/unsorted/get_all_summary.php
87
     * @return array Ответ amoCRM API
88
     */
89 1
    public function apiGetAllSummary()
90
    {
91 1
        $response = $this->getRequest('/api/unsorted/get_all_summary/');
92
93 1
        return isset($response['category']) ? $response : [];
94
    }
95
96
    /**
97
     * Принятие неразобранных заявок
98
     *
99
     * Метод для принятия неразобранных заявок.
100
     *
101
     * @link https://developers.amocrm.ru/rest_api/unsorted/accept.php
102
     * @param string|array $uids
103
     * @param string|int $user_id
104
     * @param null|int $status_id
105
     * @return array Ответ amoCRM API
106
     * @throws \AmoCRM\Exception
107
     */
108 1
    public function apiAccept($uids, $user_id, $status_id = null)
109
    {
110 1
        $this->checkId($user_id);
111
112 1
        if (!is_array($uids)) {
113 1
            $uids = [$uids];
114 1
        }
115
116
        $parameters = [
117
            'unsorted' => [
118 1
                'accept' => $uids,
119 1
                'user_id' => $user_id,
120 1
            ],
121 1
        ];
122
123 1
        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...
124 1
            $parameters['unsorted']['status_id'] = $status_id;
125 1
        }
126
127 1
        $response = $this->postRequest('/api/unsorted/accept/', $parameters);
128
129 1
        if (isset($response['unsorted']['accept']['data'])) {
130
            $result = array_keys($response['unsorted']['accept']['data']);
131
        } else {
132 1
            return [];
133
        }
134
135
        return count($uids) == 1 ? array_shift($result) : $result;
136
    }
137
138
    /**
139
     * Отклонение неразобранных заявок
140
     *
141
     * Метод для отклонения неразобранных заявок.
142
     *
143
     * @link https://developers.amocrm.ru/rest_api/unsorted/decline.php
144
     * @param string|array $uids
145
     * @param string|int $user_id
146
     * @return array Ответ amoCRM API
147
     * @throws \AmoCRM\Exception
148
     */
149 1
    public function apiDecline($uids, $user_id)
150
    {
151 1
        $this->checkId($user_id);
152
153 1
        if (!is_array($uids)) {
154 1
            $uids = [$uids];
155 1
        }
156
157
        $parameters = [
158
            'unsorted' => [
159 1
                'decline' => $uids,
160 1
                'user_id' => $user_id,
161 1
            ],
162 1
        ];
163
164 1
        $response = $this->postRequest('/api/unsorted/decline/', $parameters);
165
166 1
        if (isset($response['unsorted']['decline']['data'])) {
167
            $result = array_keys($response['unsorted']['decline']['data']);
168
        } else {
169 1
            return [];
170
        }
171
172
        return count($uids) == 1 ? array_shift($result) : $result;
173
    }
174
175
    /**
176
     * Добавление неразобранных заявок
177
     *
178
     * Метод позволяет добавлять неразобранные заявки по одной или пакетно
179
     *
180
     * @link https://developers.amocrm.ru/rest_api/unsorted/add.php
181
     * @param string $type Название источника заявки
182
     * @param array $values Массив неразобранных заявок для пакетного добавления
183
     * @return int|array Уникальный идентификатор заявки или массив при пакетном добавлении
184
     */
185 4
    public function apiAdd($type, $values = [])
186
    {
187 4
        if (empty($values)) {
188 4
            $values = [$this];
189 4
        }
190
191
        $parameters = [
192
            'unsorted' => [
193 4
                'category' => $type,
194 4
                'add' => [],
195 4
            ],
196 4
        ];
197
198 4
        foreach ($values AS $value) {
199 4
            $parameters['unsorted']['add'][] = $value->getValues();
200 4
        }
201
202 4
        $response = $this->postRequest('/api/unsorted/add/', $parameters);
203
204 4
        if (isset($response['unsorted']['add']['data'])) {
205 4
            $result = $response['unsorted']['add']['data'];
206 4
        } else {
207
            return [];
208
        }
209
210 4
        return count($values) == 1 ? array_shift($result) : $result;
211
    }
212
213
    /**
214
     * Добавление неразобранных заявок с типом SIP
215
     *
216
     * Метод позволяет добавлять неразобранные заявки по одной или пакетно
217
     *
218
     * @link https://developers.amocrm.ru/rest_api/unsorted/add.php
219
     * @param array $sip Массив неразобранных заявок для пакетного добавления
220
     * @return int|array Уникальный идентификатор заявки или массив при пакетном добавлении
221
     */
222 1
    public function apiAddSip($sip = [])
223
    {
224 1
        return $this->apiAdd(self::TYPE_SIP, $sip);
225
    }
226
227
    /**
228
     * Добавление неразобранных заявок с типом MAIL
229
     *
230
     * Метод позволяет добавлять неразобранные заявки по одной или пакетно
231
     *
232
     * @link https://developers.amocrm.ru/rest_api/unsorted/add.php
233
     * @param array $mails Массив неразобранных заявок для пакетного добавления
234
     * @return int|array Уникальный идентификатор заявки или массив при пакетном добавлении
235
     */
236 1
    public function apiAddMail($mails = [])
237
    {
238 1
        return $this->apiAdd(self::TYPE_MAIL, $mails);
239
    }
240
241
    /**
242
     * Добавление неразобранных заявок с типом FORMS
243
     *
244
     * Метод позволяет добавлять неразобранные заявки по одной или пакетно
245
     *
246
     * @link https://developers.amocrm.ru/rest_api/unsorted/add.php
247
     * @param array $forms Массив неразобранных заявок для пакетного добавления
248
     * @return int|array Уникальный идентификатор заявки или массив при пакетном добавлении
249
     */
250 1
    public function apiAddForms($forms = [])
251
    {
252 1
        return $this->apiAdd(self::TYPE_FORMS, $forms);
253
    }
254
255
    /**
256
     * Добавление сущности которая будет создана после одобрения заявки.
257
     *
258
     * @link https://developers.amocrm.ru/rest_api/unsorted/add.php
259
     * @param string $type Тип сущности
260
     * @param mixed $values Объект или массив сущностей
261
     * @return $this
262
     */
263 2
    public function addData($type, $values)
264
    {
265 2
        if (!isset($this->values['data'][$type])) {
266 2
            $this->values['data'][$type] = [];
267 2
        }
268
269 2
        if (!is_array($values)) {
270 2
            $values = [$values];
271 2
        }
272
273 2
        foreach ($values as $value) {
274 2
            if ($value instanceof Base) {
275 2
                $this->values['data'][$type][] = $value->getValues();
276 2
            }
277 2
        }
278
279 2
        return $this;
280
    }
281
282
    /**
283
     * Добавление сделки которая будет создана после одобрения заявки.
284
     *
285
     * @link https://developers.amocrm.ru/rest_api/unsorted/add.php
286
     * @param mixed $values Сделка или массив сделок
287
     * @return $this
288
     */
289 1
    public function addDataLead($values)
290
    {
291 1
        return $this->addData('leads', $values);
292
    }
293
294
    /**
295
     * Добавление контакта или компании которая будет создана после одобрения заявки.
296
     *
297
     * @link https://developers.amocrm.ru/rest_api/unsorted/add.php
298
     * @param mixed $values Контакт или массив контактов
299
     * @return $this
300
     */
301 1
    public function addDataContact($values)
302
    {
303 1
        return $this->addData('contacts', $values);
304
    }
305
}