Completed
Push — master ( e5b10a...ef7318 )
by dotzero
02:34 queued 01:01
created

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