Completed
Pull Request — master (#72)
by
unknown
02:19
created

Task   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 142
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 4

Test Coverage

Coverage 90%

Importance

Changes 0
Metric Value
wmc 11
lcom 2
cbo 4
dl 0
loc 142
ccs 36
cts 40
cp 0.9
rs 10
c 0
b 0
f 0

4 Methods

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