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

Note::apiAdd()   B

Complexity

Conditions 7
Paths 12

Size

Total Lines 33

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 18
CRAP Score 7.2944

Importance

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