Completed
Push — master ( dc5034...dd736e )
by dotzero
02:29
created

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