Completed
Pull Request — master (#72)
by
unknown
04:20
created

Task::apiAdd()   C

Complexity

Conditions 7
Paths 12

Size

Total Lines 33
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 18
CRAP Score 7.2944

Importance

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