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

Lead::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\SetNote;
6
use AmoCRM\Models\Traits\SetTags;
7
use AmoCRM\Models\Traits\SetDateCreate;
8
use AmoCRM\Models\Traits\SetLastModified;
9
10
/**
11
 * Class Lead
12
 *
13
 * Класс модель для работы со Сделками
14
 *
15
 * @package AmoCRM\Models
16
 * @author dotzero <[email protected]>
17
 * @link http://www.dotzero.ru/
18
 * @link https://github.com/dotzero/amocrm-php
19
 *
20
 * For the full copyright and license information, please view the LICENSE
21
 * file that was distributed with this source code.
22
 */
23
class Lead extends AbstractModel
24
{
25
    use SetNote, SetTags, SetDateCreate, SetLastModified;
26
27
    /**
28
     * @var array Список доступный полей для модели (исключая кастомные поля)
29
     */
30
    protected $fields = [
31
        'name',
32
        'date_create',
33
        'last_modified',
34
        'status_id',
35
        'pipeline_id',
36
        'price',
37
        'responsible_user_id',
38
        'created_user_id',
39
        'request_id',
40
        'linked_company_id',
41
        'tags',
42
        'visitor_uid',
43
        'notes',
44
        'modified_user_id',
45
    ];
46
47
    /**
48
     * Список сделок
49
     *
50
     * Метод для получения списка сделок с возможностью фильтрации и постраничной выборки.
51
     * Ограничение по возвращаемым на одной странице (offset) данным - 500 сделок
52
     *
53
     * @link https://developers.amocrm.ru/rest_api/leads_list.php
54
     * @param array $parameters Массив параметров к amoCRM API
55
     * @param null|string $modified Дополнительная фильтрация по (изменено с)
56
     * @return array Ответ amoCRM API
57
     */
58 1
    public function apiList($parameters, $modified = null)
59
    {
60 1
        $response = $this->getRequest('/private/api/v2/json/leads/list', $parameters, $modified);
61
62 1
        return isset($response['leads']) ? $response['leads'] : [];
63
    }
64
65
    /**
66
     * Добавление сделки
67
     *
68
     * Метод позволяет добавлять сделки по одной или пакетно
69
     *
70
     * @link https://developers.amocrm.ru/rest_api/leads_set.php
71
     * @param array $leads Массив сделок для пакетного добавления
72
     * @return int|array Уникальный идентификатор сделки или массив при пакетном добавлении
73
     */
74 1
    public function apiAdd($leads = [])
75
    {
76 1
        if (empty($leads)) {
77 1
            $leads = [$this];
78 1
        }
79
80
        $parameters = [
81
            'leads' => [
82 1
                'add' => [],
83 1
            ],
84 1
        ];
85
86 1
        foreach ($leads AS $lead) {
87 1
            $parameters['leads']['add'][] = $lead->getValues();
88 1
        }
89
90 1
        $response = $this->postRequest('/private/api/v2/json/leads/set', $parameters);
91
92 1
        if (isset($response['leads']['add'])) {
93 1
            $result = array_map(function($item) {
94 1
                return $item['id'];
95 1
            }, $response['leads']['add']);
96 1
        } else {
97
            return [];
98
        }
99
100 1
        return count($leads) == 1 ? array_shift($result) : $result;
101
    }
102
103
    /**
104
     * Обновление сделки
105
     *
106
     * Метод позволяет обновлять данные по уже существующим сделкам
107
     *
108
     * @link https://developers.amocrm.ru/rest_api/leads_set.php
109
     * @param int $id Уникальный идентификатор сделки
110
     * @param string $modified Дата последнего изменения данной сущности
111
     * @return bool Флаг успешности выполнения запроса
112
     * @throws \AmoCRM\Exception
113
     */
114 1
    public function apiUpdate($id, $modified = 'now')
115
    {
116 1
        $this->checkId($id);
117
118
        $parameters = [
119
            'leads' => [
120 1
                'update' => [],
121 1
            ],
122 1
        ];
123
124 1
        $lead = $this->getValues();
125 1
        $lead['id'] = $id;
126 1
        $lead['last_modified'] = strtotime($modified);
127
128 1
        $parameters['leads']['update'][] = $lead;
129
130 1
        $response = $this->postRequest('/private/api/v2/json/leads/set', $parameters);
131
132 1
        return empty($response['leads']['update']['errors']);
133
    }
134
}
135