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

Note   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 176
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 1

Test Coverage

Coverage 97.37%

Importance

Changes 4
Bugs 0 Features 2
Metric Value
wmc 11
c 4
b 0
f 2
lcom 2
cbo 1
dl 0
loc 176
ccs 37
cts 38
cp 0.9737
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A setDateCreate() 0 6 1
A setLastModified() 0 6 1
A apiList() 0 6 2
B apiAdd() 0 28 5
A apiUpdate() 0 20 2
1
<?php
2
3
namespace AmoCRM\Models;
4
5
/**
6
 * Class Note
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 Note extends Base
20
{
21
    /**
22
     * @var array Список доступный полей для модели (исключая кастомные поля)
23
     */
24
    protected $fields = [
25
        'element_id',
26
        'element_type',
27
        'note_type',
28
        'date_create',
29
        'last_modified',
30
        'request_id',
31
        'text',
32
        'responsible_user_id',
33
    ];
34
35
    /**
36
     * @link https://developers.amocrm.ru/rest_api/notes_type.php
37
     * @type array Типы примечаний
38
     */
39
    protected $types = [
40
        self::DEAL_CREATED => 'Сделка создана',
41
        self::CONTACT_CREATED => 'Контакт создан',
42
        self::DEAL_STATUS_CHANGED => 'Статус сделки изменен',
43
        self::COMMON => 'Обычное примечание',
44
        self::ATTACHMENT => 'Файл',
45
        self::CALL => 'Звонок приходящий от iPhone-приложений',
46
        self::EMAIL_MESSAGE => 'Письмо',
47
        self::EMAIL_ATTACHMENT => 'Письмо с файлом',
48
        self::CALL_IN => 'Входящий звонок',
49
        self::CALL_OUT => 'Исходящий звонок',
50
        self::COMPANY_CREATED => 'Компания создана',
51
        self::TASK_RESULT => 'Результат по задаче',
52
        self::SMS_IN => 'Входящее смс',
53
        self::SMS_OUT => 'Исходящее смс',
54
    ];
55
56
    const DEAL_CREATED = 1;
57
    const CONTACT_CREATED = 2;
58
    const DEAL_STATUS_CHANGED = 3;
59
    const COMMON = 4;
60
    const ATTACHMENT = 5;
61
    const CALL = 6;
62
    const EMAIL_MESSAGE = 7;
63
    const EMAIL_ATTACHMENT = 8;
64
    const CALL_IN = 10;
65
    const CALL_OUT = 11;
66
    const COMPANY_CREATED = 12;
67
    const TASK_RESULT = 13;
68
    const SMS_IN = 102;
69
    const SMS_OUT = 103;
70
71
    /**
72
     * @const int Типа задачи Контакт
73
     */
74
    const TYPE_CONTACT = 1;
75
76
    /**
77
     * @const int Типа задачи Сделка
78
     */
79
    const TYPE_LEAD = 2;
80
81
    /**
82
     * Сеттер для даты создания примечания
83
     *
84
     * @param string $date Дата в произвольном формате
85
     * @return $this
86
     */
87 1
    public function setDateCreate($date)
88
    {
89 1
        $this->values['date_create'] = strtotime($date);
90
91 1
        return $this;
92
    }
93
94
    /**
95
     * Сеттер для даты последнего изменения примечания
96
     *
97
     * @param string $date Дата в произвольном формате
98
     * @return $this
99
     */
100 1
    public function setLastModified($date)
101
    {
102 1
        $this->values['last_modified'] = strtotime($date);
103
104 1
        return $this;
105
    }
106
107
    /**
108
     * Список примечаний
109
     *
110
     * Метод для получения списка примечаний с возможностью фильтрации и постраничной выборки.
111
     * Ограничение по возвращаемым на одной странице (offset) данным - 500 примечаний.
112
     *
113
     * @link https://developers.amocrm.ru/rest_api/notes_list.php
114
     * @param array $parameters Массив параметров к amoCRM API
115
     * @param null|string $modified Дополнительная фильтрация по (изменено с)
116
     * @return array Ответ amoCRM API
117
     */
118 1
    public function apiList($parameters, $modified = null)
119
    {
120 1
        $response = $this->getRequest('/private/api/v2/json/notes/list', $parameters, $modified);
121
122 1
        return isset($response['notes']) ? $response['notes'] : [];
123
    }
124
125
    /**
126
     * Добавление примечания
127
     *
128
     * Метод позволяет добавлять примечание по одному или пакетно
129
     *
130
     * @link https://developers.amocrm.ru/rest_api/notes_set.php
131
     * @param array $notes Массив примечаний для пакетного добавления
132
     * @return int|array Уникальный идентификатор примечания или массив при пакетном добавлении
133
     */
134 1
    public function apiAdd($notes = [])
135
    {
136 1
        if (empty($notes)) {
137 1
            $notes = [$this];
138 1
        }
139
140
        $parameters = [
141
            'notes' => [
142 1
                'add' => [],
143 1
            ],
144 1
        ];
145
146 1
        foreach ($notes AS $note) {
147 1
            $parameters['notes']['add'][] = $note->getValues();
148 1
        }
149
150 1
        $response = $this->postRequest('/private/api/v2/json/notes/set', $parameters);
151
152 1
        if (isset($response['notes']['add'])) {
153 1
            $result = array_map(function ($item) {
154 1
                return $item['id'];
155 1
            }, $response['notes']['add']);
156 1
        } else {
157
            return [];
158
        }
159
160 1
        return count($notes) == 1 ? array_shift($result) : $result;
161
    }
162
163
    /**
164
     * Обновление примечания
165
     *
166
     * Метод позволяет обновлять данные по уже существующим примечаниям
167
     *
168
     * @link https://developers.amocrm.ru/rest_api/notes_set.php
169
     * @param int $id Уникальный идентификатор примечания
170
     * @param string $modified Дата последнего изменения данной сущности
171
     * @return bool Флаг успешности выполнения запроса
172
     * @throws \AmoCRM\Exception
173
     */
174 1
    public function apiUpdate($id, $modified = 'now')
175
    {
176 1
        $this->checkId($id);
177
178
        $parameters = [
179
            'notes' => [
180 1
                'update' => [],
181 1
            ],
182 1
        ];
183
184 1
        $lead = $this->getValues();
185 1
        $lead['id'] = $id;
186 1
        $lead['last_modified'] = strtotime($modified);
187
188 1
        $parameters['notes']['update'][] = $lead;
189
190 1
        $response = $this->postRequest('/private/api/v2/json/notes/set', $parameters);
191
192 1
        return isset($response['notes']) ? true : false;
193
    }
194
}
195