Completed
Pull Request — master (#106)
by
unknown
02:20
created

Task::apiListItem()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
cc 2
nc 2
nop 4
dl 0
loc 6
ccs 0
cts 3
cp 0
crap 6
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace AmoCRM\Models;
4
5
use AmoCRM\Exception;
6
use AmoCRM\Models\Traits\SetDateCreate;
7
use AmoCRM\Models\Traits\SetLastModified;
8
use AmoCRM\NetworkException;
9
10
/**
11
 * Class Task
12
 *
13
 * Класс модель для работы с Задачами
14
 *
15
 * @package AmoCRM\Models
16
 * @author dotzero <[email protected]>
17
 * @link http://www.dotzero.ru/
18
 * @link https://github.com/dotzero/amocrm-php
19
 *
20
 * For the full copyright and license information, please view the LICENSE
21
 * file that was distributed with this source code.
22
 */
23
class Task extends AbstractModel
24
{
25
    use SetDateCreate, SetLastModified;
26
    
27
    /**
28
     * @var array Список доступный полей для модели (исключая кастомные поля)
29
     */
30
    protected $fields = [
31
        'created_by',
32
        'updated_by',
33
        'created_at',
34
        'updated_at',
35
        'responsible_user_id',
36
        'group_id',
37
        'entity_id',
38
        'entity_type',
39
        'duration',
40
        'is_completed',
41
        'task_type_id',
42
        'text',
43
        'result',
44
        'complete_till',
45
        'account_id'
46
    ];
47
    
48
    /**
49
     * @const int Типа задачи Контакт
50
     */
51
    const TYPE_CONTACT = 1;
52
    
53
    /**
54
     * @const int Типа задачи Сделка
55
     */
56
    const TYPE_LEAD = 2;
57
    
58
    /**
59
     * Сеттер для дата до которой необходимо завершить задачу
60
     *
61
     * Если указано время 23:59, то в интерфейсах системы
62
     * вместо времени будет отображаться "Весь день"
63
     *
64
     * @param string $date Дата в произвольном формате
65
     * @return $this
66
     */
67 2
    public function setCompleteTill($date)
68
    {
69 2
        $this->values['complete_till'] = strtotime($date);
70
        
71 2
        return $this;
72
    }
73
    
74
    /**
75
     * Список задач
76
     * Метод для получения списка задач с возможностью фильтрации и постраничной выборки.
77
     * Ограничение по возвращаемым на одной странице (offset) данным - 500 задач
78
     * @link https://developers.amocrm.ru/rest_api/tasks_list.php
79
     * @param array       $parameters Массив параметров к amoCRM API
80
     * @param string      $url
81
     * @param null|string $modified   Дополнительная фильтрация по (изменено с)
82
     * @return array Ответ amoCRM API
83
     * @throws Exception
84
     * @throws NetworkException
85
     */
86 1
    public function apiList($parameters, $url = '/private/api/v2/json/tasks/list', $modified = null)
87
    {
88 1
        $response = $this->getRequest($url, $parameters, $modified);
89
        
90 1
        return isset($response['tasks']) ? $response['tasks'] : [];
91
    }
92
    
93
    /**
94
     * Получение одной задачи
95
     * Метод для получения одной задачи по id
96
     * @link https://www.amocrm.ru/developers/content/crm_platform/tasks-api#task-detail
97
     * @param string      $taskId   идентификатор задачи
98
     * @param string      $url
99
     * @param null|string $modified Дополнительная фильтрация по (изменено с)
100
     * @return array Ответ amoCRM API
101
     * @throws Exception
102
     * @throws NetworkException
103
     */
104
    public function apiListItem($taskId, $url = '/api/v4/tasks/', $parameters = [], $modified = null)
105
    {
106
        $response = $this->getRequest($url.$taskId, $parameters, $modified);
107
        
108
        return $response ? : [];
109
    }
110
    
111
    /**
112
     * Добавление задачи
113
     *
114
     * Метод позволяет добавлять задачи по одной или пакетно
115
     *
116
     * @link https://developers.amocrm.ru/rest_api/tasks_set.php
117
     * @param array $tasks Массив задач для пакетного добавления
118
     * @return int|array Уникальный идентификатор задачи или массив при пакетном добавлении
119
     */
120 1
    public function apiAdd($tasks = [])
121
    {
122 1
        if (empty($tasks)) {
123 1
            $tasks = [$this];
124 1
        }
125
        
126
        $parameters = [
127
            'tasks' => [
128 1
                'add' => [],
129 1
            ],
130 1
        ];
131
        
132 1
        foreach ($tasks AS $task) {
133 1
            $parameters['tasks']['add'][] = $task->getValues();
134 1
        }
135
        
136 1
        $response = $this->postRequest('/private/api/v2/json/tasks/set', $parameters);
137
        
138 1
        if (isset($response['tasks']['add'])) {
139 1
            $result = array_map(function($item) {
140 1
                return $item['id'];
141 1
            }, $response['tasks']['add']);
142 1
        } else {
143
            return [];
144
        }
145
        
146 1
        return count($tasks) == 1 ? array_shift($result) : $result;
147
    }
148
    
149
    /**
150
     * Обновление задачи
151
     *
152
     * Метод позволяет обновлять данные по уже существующим задачам
153
     *
154
     * @link https://developers.amocrm.ru/rest_api/tasks_set.php
155
     * @param int $id Уникальный идентификатор задачи
156
     * @param string $text Текст задачи
157
     * @param string $modified Дата последнего изменения данной сущности
158
     * @return bool Флаг успешности выполнения запроса
159
     * @throws Exception
160
     */
161 2
    public function apiUpdate($id, $text, $modified = 'now')
162
    {
163 2
        $this->checkId($id);
164
        
165
        $parameters = [
166
            'tasks' => [
167 1
                'update' => [],
168 1
            ],
169 1
        ];
170
        
171 1
        $task = $this->getValues();
172 1
        $task['id'] = $id;
173 1
        $task['text'] = $text;
174 1
        $task['last_modified'] = strtotime($modified);
175
        
176 1
        $parameters['tasks']['update'][] = $task;
177
        
178 1
        $response = $this->postRequest('/private/api/v2/json/tasks/set', $parameters);
179
        
180 1
        return empty($response['tasks']['update']['errors']);
181
    }
182
}
183