Completed
Push — master ( 17d754...4ce393 )
by dotzero
01:51
created

Lead::setNotes()   A

Complexity

Conditions 4
Paths 6

Size

Total Lines 18
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 12
CRAP Score 4

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 18
ccs 12
cts 12
cp 1
rs 9.2
cc 4
eloc 9
nc 6
nop 1
crap 4
1
<?php
2
3
namespace AmoCRM\Models;
4
5
/**
6
 * Class Lead
7
 *
8
 * Класс модель для работы со Сделками
9
 *
10
 * @package AmoCRM\Models
11
 * @author dotzero <[email protected]>
12
 * @link http://www.dotzero.ru/
13
 * @link https://github.com/dotzero/amocrm-php
14
 *
15
 * For the full copyright and license information, please view the LICENSE
16
 * file that was distributed with this source code.
17
 */
18
class Lead extends AbstractModel
19
{
20
    /**
21
     * @var array Список доступный полей для модели (исключая кастомные поля)
22
     */
23
    protected $fields = [
24
        'name',
25
        'date_create',
26
        'last_modified',
27
        'status_id',
28
        'pipeline_id',
29
        'price',
30
        'responsible_user_id',
31
        'request_id',
32
        'linked_company_id',
33
        'tags',
34
        'visitor_uid',
35
        'notes',
36
    ];
37
38
    /**
39
     * Сеттер для даты создания сделки
40
     *
41
     * @param string $date Дата в произвольном формате
42
     * @return $this
43
     */
44 1
    public function setDateCreate($date)
45
    {
46 1
        $this->values['date_create'] = strtotime($date);
47
48 1
        return $this;
49
    }
50
51
    /**
52
     * Сеттер для даты последнего изменения сделки
53
     *
54
     * @param string $date Дата в произвольном формате
55
     * @return $this
56
     */
57 1
    public function setLastModified($date)
58
    {
59 1
        $this->values['last_modified'] = strtotime($date);
60
61 1
        return $this;
62
    }
63
64
    /**
65
     * Сеттер для списка тегов сделки
66
     *
67
     * @param int|array $value Название тегов через запятую или массив тегов
68
     * @return $this
69
     */
70 2
    public function setTags($value)
71
    {
72 2
        if (!is_array($value)) {
73 1
            $value = [$value];
74 1
        }
75
76 2
        $this->values['tags'] = implode(',', $value);
77
78 2
        return $this;
79
    }
80
81
    /**
82
     * Сеттер для списка примечаний, которые появятся в сделке
83
     * после принятия неразобранного
84
     *
85
     * @param array|Note $value Примечание или массив примечаний
86
     * @return $this
87
     */
88 1
    public function setNotes($value)
89
    {
90 1
        $this->values['notes'] = [];
91
92 1
        if ($value instanceof Note) {
93 1
            $value = [$value];
94 1
        }
95
96 1
        foreach ($value as $note) {
97 1
            if ($note instanceof Note) {
98 1
                $note = $note->getValues();
99 1
            }
100
101 1
            $this->values['notes'][] = $note;
102 1
        }
103
104 1
        return $this;
105
    }
106
107
    /**
108
     * Список сделок
109
     *
110
     * Метод для получения списка сделок с возможностью фильтрации и постраничной выборки.
111
     * Ограничение по возвращаемым на одной странице (offset) данным - 500 сделок
112
     *
113
     * @link https://developers.amocrm.ru/rest_api/leads_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/leads/list', $parameters, $modified);
121
122 1
        return isset($response['leads']) ? $response['leads'] : [];
123
    }
124
125
    /**
126
     * Добавление сделки
127
     *
128
     * Метод позволяет добавлять сделки по одной или пакетно
129
     *
130
     * @link https://developers.amocrm.ru/rest_api/leads_set.php
131
     * @param array $leads Массив сделок для пакетного добавления
132
     * @return int|array Уникальный идентификатор сделки или массив при пакетном добавлении
133
     */
134 1
    public function apiAdd($leads = [])
135
    {
136 1
        if (empty($leads)) {
137 1
            $leads = [$this];
138 1
        }
139
140
        $parameters = [
141
            'leads' => [
142 1
                'add' => [],
143 1
            ],
144 1
        ];
145
146 1
        foreach ($leads AS $lead) {
147 1
            $parameters['leads']['add'][] = $lead->getValues();
148 1
        }
149
150 1
        $response = $this->postRequest('/private/api/v2/json/leads/set', $parameters);
151
152 1
        if (isset($response['leads']['add'])) {
153 1
            $result = array_map(function($item) {
154 1
                return $item['id'];
155 1
            }, $response['leads']['add']);
156 1
        } else {
157
            return [];
158
        }
159
160 1
        return count($leads) == 1 ? array_shift($result) : $result;
161
    }
162
163
    /**
164
     * Обновление сделки
165
     *
166
     * Метод позволяет обновлять данные по уже существующим сделкам
167
     *
168
     * @link https://developers.amocrm.ru/rest_api/leads_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
            'leads' => [
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['leads']['update'][] = $lead;
189
190 1
        $response = $this->postRequest('/private/api/v2/json/leads/set', $parameters);
191
192 1
        return empty($response['leads']['update']['errors']);
193
    }
194
}
195