Completed
Pull Request — master (#61)
by Denis
01:45
created

Note::setDateCreate()   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::SMS_IN => 'Входящее смс',
58
        self::SMS_OUT => 'Исходящее смс',
59
    ];
60
61
    const DEAL_CREATED = 1;
62
    const CONTACT_CREATED = 2;
63
    const DEAL_STATUS_CHANGED = 3;
64
    const COMMON = 4;
65
    const ATTACHMENT = 5;
66
    const CALL = 6;
67
    const EMAIL_MESSAGE = 7;
68
    const EMAIL_ATTACHMENT = 8;
69
    const CALL_IN = 10;
70
    const CALL_OUT = 11;
71
    const COMPANY_CREATED = 12;
72
    const TASK_RESULT = 13;
73
    const SMS_IN = 102;
74
    const SMS_OUT = 103;
75
76
    /**
77
     * @const int Типа задачи Контакт
78
     */
79
    const TYPE_CONTACT = 1;
80
81
    /**
82
     * @const int Типа задачи Сделка
83
     */
84
    const TYPE_LEAD = 2;
85
86
    /** @const int Типа задачи Компания */
87
    const TYPE_COMPANY = 3;
88
89
    /** @const int Типа задачи Задача */
90
    const TYPE_TASK = 4;
91
92
    /** @const int Типа задачи Покупатель */
93
    const TYPE_CUSTOMER = 12;
94
95
    /**
96
     * Список примечаний
97
     *
98
     * Метод для получения списка примечаний с возможностью фильтрации и постраничной выборки.
99
     * Ограничение по возвращаемым на одной странице (offset) данным - 500 примечаний.
100
     *
101
     * @link https://developers.amocrm.ru/rest_api/notes_list.php
102
     * @param array $parameters Массив параметров к amoCRM API
103
     * @param null|string $modified Дополнительная фильтрация по (изменено с)
104
     * @return array Ответ amoCRM API
105
     */
106 1
    public function apiList($parameters, $modified = null)
107
    {
108 1
        $response = $this->getRequest('/private/api/v2/json/notes/list', $parameters, $modified);
109
110 1
        return isset($response['notes']) ? $response['notes'] : [];
111
    }
112
113
    /**
114
     * Добавление примечания
115
     *
116
     * Метод позволяет добавлять примечание по одному или пакетно
117
     *
118
     * @link https://developers.amocrm.ru/rest_api/notes_set.php
119
     * @param array $notes Массив примечаний для пакетного добавления
120
     * @return int|array Уникальный идентификатор примечания или массив при пакетном добавлении
121
     */
122 1
    public function apiAdd($notes = [])
123
    {
124 1
        if (empty($notes)) {
125 1
            $notes = [$this];
126 1
        }
127
128
        $parameters = [
129
            'notes' => [
130 1
                'add' => [],
131 1
            ],
132 1
        ];
133
134 1
        foreach ($notes AS $note) {
135 1
            $parameters['notes']['add'][] = $note->getValues();
136 1
        }
137
138 1
        $response = $this->postRequest('/private/api/v2/json/notes/set', $parameters);
139
140 1
        if (isset($response['notes']['add'])) {
141 1
            $result = array_map(function($item) {
142 1
                return $item['id'];
143 1
            }, $response['notes']['add']);
144 1
        } else {
145
            return [];
146
        }
147
148 1
        return count($notes) == 1 ? array_shift($result) : $result;
149
    }
150
151
    /**
152
     * Обновление примечания
153
     *
154
     * Метод позволяет обновлять данные по уже существующим примечаниям
155
     *
156
     * @link https://developers.amocrm.ru/rest_api/notes_set.php
157
     * @param int $id Уникальный идентификатор примечания
158
     * @param string $modified Дата последнего изменения данной сущности
159
     * @return bool Флаг успешности выполнения запроса
160
     * @throws \AmoCRM\Exception
161
     */
162 1
    public function apiUpdate($id, $modified = 'now')
163
    {
164 1
        $this->checkId($id);
165
166
        $parameters = [
167
            'notes' => [
168 1
                'update' => [],
169 1
            ],
170 1
        ];
171
172 1
        $lead = $this->getValues();
173 1
        $lead['id'] = $id;
174 1
        $lead['last_modified'] = strtotime($modified);
175
176 1
        $parameters['notes']['update'][] = $lead;
177
178 1
        $response = $this->postRequest('/private/api/v2/json/notes/set', $parameters);
179
180 1
        return empty($response['notes']['update']['errors']);
181
    }
182
}
183